From 3e397bc7e2c7570ae1da3b1487df8c9b0f14dea4 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Sat, 6 May 2023 17:57:02 +0200 Subject: [PATCH 01/23] wip --- .github/workflows/deploy.yml | 43 + .github/workflows/md-link-checker.yml | 12 + .github/workflows/test-deploy.yml | 19 + .gitignore | 21 + .markdownlint.json | 12 + .markdownlintignore | 2 + README.md | 41 + babel.config.js | 3 + docs/develop/_category_.json | 5 + docs/develop/advanced-concepts/00-baseapp.md | 509 + .../advanced-concepts/01-transactions.md | 199 + docs/develop/advanced-concepts/02-context.md | 102 + docs/develop/advanced-concepts/03-node.md | 98 + docs/develop/advanced-concepts/04-store.md | 105 + .../advanced-concepts/05-interblock-cache.md | 293 + docs/develop/advanced-concepts/06-encoding.md | 350 + docs/develop/advanced-concepts/07-cli.md | 195 + docs/develop/advanced-concepts/08-events.md | 168 + .../develop/advanced-concepts/09-grpc_rest.md | 100 + docs/develop/advanced-concepts/10-ocap.md | 77 + .../develop/advanced-concepts/11-telemetry.md | 128 + .../advanced-concepts/12-runtx_middleware.md | 67 + .../advanced-concepts/13-simulation.md | 101 + .../advanced-concepts/14-proto-docs.md | 7 + docs/develop/advanced-concepts/15-tips.md | 214 + docs/develop/advanced-concepts/16-upgrade.md | 162 + docs/develop/advanced-concepts/17-config.md | 24 + .../develop/advanced-concepts/_category_.json | 5 + .../baseapp_state-begin_block.png | Bin 0 -> 20565 bytes .../baseapp_state-checktx.png | Bin 0 -> 82308 bytes .../baseapp_state-commit.png | Bin 0 -> 47662 bytes .../baseapp_state-deliver_tx.png | Bin 0 -> 59007 bytes .../baseapp_state-initchain.png | Bin 0 -> 243455 bytes .../baseapp_state-prepareproposal.png | Bin 0 -> 274049 bytes .../baseapp_state-processproposal.png | Bin 0 -> 248588 bytes .../advanced-concepts/baseapp_state.png | Bin 0 -> 338941 bytes docs/develop/glossary.md | 5 + .../high-level-concepts/00-overview-app.md | 264 + .../high-level-concepts/01-tx-lifecycle.md | 264 + .../high-level-concepts/02-query-lifecycle.md | 150 + .../high-level-concepts/03-accounts.md | 282 + .../high-level-concepts/04-gas-fees.md | 100 + .../high-level-concepts/_category_.json | 5 + docs/develop/intro/00-what-is-sdk.md | 32 + docs/develop/intro/01-why-app-specific.md | 80 + docs/develop/intro/02-sdk-app-architecture.md | 94 + docs/develop/intro/03-sdk-design.md | 96 + docs/develop/intro/_category_.json | 5 + docs/integrate/_category_.json | 5 + docs/integrate/architecture/PROCESS.md | 58 + docs/integrate/architecture/README.md | 94 + docs/integrate/architecture/_category_.json | 5 + .../architecture/adr-002-docs-structure.md | 86 + .../adr-003-dynamic-capability-store.md | 344 + .../adr-004-split-denomination-keys.md | 120 + .../adr-006-secret-store-replacement.md | 54 + .../adr-007-specialization-groups.md | 177 + .../architecture/adr-008-dCERT-group.md | 171 + .../architecture/adr-009-evidence-module.md | 182 + .../adr-010-modular-antehandler.md | 290 + .../adr-011-generalize-genesis-accounts.md | 170 + .../architecture/adr-012-state-accessors.md | 155 + .../integrate/architecture/adr-013-metrics.md | 157 + .../adr-014-proportional-slashing.md | 85 + ...dr-016-validator-consensus-key-rotation.md | 125 + .../adr-017-historical-header-module.md | 61 + .../adr-018-extendable-voting-period.md | 66 + .../adr-019-protobuf-state-encoding.md | 379 + .../adr-020-protobuf-transaction-encoding.md | 464 + .../adr-021-protobuf-query-encoding.md | 256 + .../adr-022-custom-panic-handling.md | 218 + .../architecture/adr-023-protobuf-naming.md | 263 + .../architecture/adr-024-coin-metadata.md | 140 + ...27-deterministic-protobuf-serialization.md | 314 + .../adr-028-public-key-addresses.md | 342 + .../architecture/adr-029-fee-grant-module.md | 153 + .../architecture/adr-030-authz-module.md | 258 + .../architecture/adr-031-msg-service.md | 202 + .../architecture/adr-032-typed-events.md | 319 + .../adr-033-protobuf-inter-module-comm.md | 400 + .../architecture/adr-034-account-rekeying.md | 76 + .../adr-035-rosetta-api-support.md | 211 + .../adr-036-arbitrary-signature.md | 132 + .../architecture/adr-037-gov-split-vote.md | 111 + .../architecture/adr-038-state-listening.md | 822 + .../architecture/adr-039-epoched-staking.md | 122 + ...r-040-storage-and-smt-state-commitments.md | 289 + .../adr-041-in-place-store-migrations.md | 167 + .../architecture/adr-042-group-module.md | 279 + .../architecture/adr-043-nft-module.md | 349 + .../adr-044-protobuf-updates-guidelines.md | 129 + .../adr-045-check-delivertx-middlewares.md | 312 + .../architecture/adr-046-module-params.md | 184 + .../adr-047-extend-upgrade-plan.md | 250 + .../architecture/adr-048-consensus-fees.md | 204 + .../architecture/adr-049-state-sync-hooks.md | 174 + .../adr-050-sign-mode-textual-annex1.md | 358 + .../adr-050-sign-mode-textual-annex2.md | 122 + .../architecture/adr-050-sign-mode-textual.md | 369 + .../adr-053-go-module-refactoring.md | 110 + .../adr-054-semver-compatible-modules.md | 728 + docs/integrate/architecture/adr-055-orm.md | 113 + .../architecture/adr-057-app-wiring.md | 340 + .../adr-058-auto-generated-cli.md | 98 + .../architecture/adr-059-test-scopes.md | 254 + .../architecture/adr-060-abci-1.0.md | 238 + .../architecture/adr-061-liquid-staking.md | 82 + .../adr-062-collections-state-layer.md | 117 + .../architecture/adr-063-core-module-api.md | 507 + .../architecture/adr-064-abci-2.0.md | 461 + .../architecture/adr-065-store-v2.md | 290 + docs/integrate/architecture/adr-template.md | 83 + docs/integrate/building-apps/00-app-go.md | 15 + docs/integrate/building-apps/01-app-go-v2.md | 132 + .../integrate/building-apps/02-app-mempool.md | 165 + .../integrate/building-apps/03-app-upgrade.md | 70 + docs/integrate/building-apps/_category_.json | 5 + docs/integrate/building-modules/01-intro.md | 94 + .../building-modules/01-module-manager.md | 273 + .../02-messages-and-queries.md | 126 + .../building-modules/03-msg-services.md | 121 + .../building-modules/04-query-services.md | 59 + .../05-beginblock-endblock.md | 47 + docs/integrate/building-modules/06-keeper.md | 93 + .../building-modules/07-invariants.md | 92 + docs/integrate/building-modules/08-genesis.md | 80 + .../building-modules/09-module-interfaces.md | 161 + .../building-modules/11-structure.md | 95 + docs/integrate/building-modules/12-errors.md | 56 + docs/integrate/building-modules/13-upgrade.md | 65 + .../building-modules/14-simulator.md | 135 + .../building-modules/15-depinject.md | 126 + docs/integrate/building-modules/16-testing.md | 124 + .../building-modules/_category_.json | 5 + docs/integrate/libraries/01-depinject.md | 187 + docs/integrate/libraries/02-collections.md | 1119 ++ docs/integrate/libraries/03-orm.md | 329 + docs/integrate/libraries/README.md | 39 + docs/integrate/libraries/_category_.json | 5 + docs/integrate/migrations/01-intro.md | 15 + docs/integrate/migrations/02-upgrading.md | 612 + docs/integrate/migrations/_category_.json | 5 + docs/integrate/modules/README.md | 42 + docs/integrate/modules/_category_.json | 5 + docs/integrate/modules/auth/1-vesting.md | 618 + docs/integrate/modules/auth/2-tx.md | 266 + docs/integrate/modules/auth/README.md | 705 + docs/integrate/modules/authz/README.md | 355 + docs/integrate/modules/bank/README.md | 950 ++ docs/integrate/modules/circuit/README.md | 115 + docs/integrate/modules/consensus/README.md | 7 + docs/integrate/modules/crisis/README.md | 110 + docs/integrate/modules/distribution/README.md | 1042 ++ docs/integrate/modules/evidence/README.md | 440 + docs/integrate/modules/feegrant/README.md | 388 + docs/integrate/modules/genutil/README.md | 69 + docs/integrate/modules/gov/README.md | 2658 ++++ docs/integrate/modules/group/README.md | 2156 +++ docs/integrate/modules/mint/README.md | 383 + docs/integrate/modules/nft/README.md | 89 + docs/integrate/modules/params/README.md | 79 + docs/integrate/modules/slashing/README.md | 813 + docs/integrate/modules/staking/README.md | 3058 ++++ docs/integrate/modules/upgrade/README.md | 619 + docs/integrate/rfc/PROCESS.md | 62 + docs/integrate/rfc/README.md | 34 + docs/integrate/rfc/_category_.json | 5 + docs/integrate/rfc/rfc-001-tx-validation.md | 25 + docs/integrate/rfc/rfc-template.md | 83 + docs/integrate/spec/SPEC_MODULE.md | 60 + docs/integrate/spec/SPEC_STANDARD.md | 121 + docs/integrate/spec/_category_.json | 5 + docs/integrate/spec/addresses/README.md | 3 + docs/integrate/spec/addresses/bech32.md | 21 + .../spec/fee_distribution/f1_fee_distr.pdf | Bin 0 -> 185175 bytes .../spec/fee_distribution/f1_fee_distr.tex | 245 + docs/integrate/spec/ics/README.md | 3 + .../spec/ics/ics-030-signed-messages.md | 192 + docs/integrate/tooling/00-protobuf.md | 113 + docs/integrate/tooling/01-cosmovisor.md | 366 + docs/integrate/tooling/02-confix.md | 130 + docs/integrate/tooling/03-autocli.md | 157 + docs/integrate/tooling/04-hubl.md | 73 + docs/integrate/tooling/05-depinject.md | 169 + docs/integrate/tooling/_category_.json | 5 + docs/user/run-node/00-keyring.md | 134 + docs/user/run-node/01-run-node.md | 151 + docs/user/run-node/02-interact-node.md | 291 + docs/user/run-node/03-txs.md | 387 + docs/user/run-node/04-rosetta.md | 122 + docs/user/run-node/06-run-production.md | 269 + docs/user/run-node/_category_.json | 5 + docs/validate/05-run-testnet.md | 101 + docusaurus.config.js | 231 + go.mod | 3 + package-lock.json | 13268 ++++++++++++++++ package.json | 51 + sidebars.js | 36 + src/components/HomepageFeatures/index.js | 104 + .../HomepageFeatures/styles.module.css | 12 + src/css/base.css | 32 + src/css/custom.css | 509 + src/css/fonts.css | 64 + src/pages/index.js | 34 + src/pages/index.module.css | 31 + static/.nojekyll | 0 static/fonts/inter/Inter-Black.woff | Bin 0 -> 138764 bytes static/fonts/inter/Inter-Black.woff2 | Bin 0 -> 102868 bytes static/fonts/inter/Inter-BlackItalic.woff | Bin 0 -> 146824 bytes static/fonts/inter/Inter-BlackItalic.woff2 | Bin 0 -> 108752 bytes static/fonts/inter/Inter-Bold.woff | Bin 0 -> 143208 bytes static/fonts/inter/Inter-Bold.woff2 | Bin 0 -> 106140 bytes static/fonts/inter/Inter-BoldItalic.woff | Bin 0 -> 151052 bytes static/fonts/inter/Inter-BoldItalic.woff2 | Bin 0 -> 111808 bytes static/fonts/inter/Inter-ExtraBold.woff | Bin 0 -> 142920 bytes static/fonts/inter/Inter-ExtraBold.woff2 | Bin 0 -> 106108 bytes static/fonts/inter/Inter-ExtraBoldItalic.woff | Bin 0 -> 150628 bytes .../fonts/inter/Inter-ExtraBoldItalic.woff2 | Bin 0 -> 111708 bytes static/fonts/inter/Inter-ExtraLight.woff | Bin 0 -> 140724 bytes static/fonts/inter/Inter-ExtraLight.woff2 | Bin 0 -> 104232 bytes .../fonts/inter/Inter-ExtraLightItalic.woff | Bin 0 -> 149996 bytes .../fonts/inter/Inter-ExtraLightItalic.woff2 | Bin 0 -> 111392 bytes static/fonts/inter/Inter-Italic.woff | Bin 0 -> 144372 bytes static/fonts/inter/Inter-Italic.woff2 | Bin 0 -> 106876 bytes static/fonts/inter/Inter-Light.woff | Bin 0 -> 140632 bytes static/fonts/inter/Inter-Light.woff2 | Bin 0 -> 104332 bytes static/fonts/inter/Inter-LightItalic.woff | Bin 0 -> 150092 bytes static/fonts/inter/Inter-LightItalic.woff2 | Bin 0 -> 111332 bytes static/fonts/inter/Inter-Medium.woff | Bin 0 -> 142552 bytes static/fonts/inter/Inter-Medium.woff2 | Bin 0 -> 105924 bytes static/fonts/inter/Inter-MediumItalic.woff | Bin 0 -> 150988 bytes static/fonts/inter/Inter-MediumItalic.woff2 | Bin 0 -> 112184 bytes static/fonts/inter/Inter-Regular.woff | Bin 0 -> 133844 bytes static/fonts/inter/Inter-Regular.woff2 | Bin 0 -> 98868 bytes static/fonts/inter/Inter-SemiBold.woff | Bin 0 -> 142932 bytes static/fonts/inter/Inter-SemiBold.woff2 | Bin 0 -> 105804 bytes static/fonts/inter/Inter-SemiBoldItalic.woff | Bin 0 -> 151180 bytes static/fonts/inter/Inter-SemiBoldItalic.woff2 | Bin 0 -> 112048 bytes static/fonts/inter/Inter-Thin.woff | Bin 0 -> 135920 bytes static/fonts/inter/Inter-Thin.woff2 | Bin 0 -> 99632 bytes static/fonts/inter/Inter-ThinItalic.woff | Bin 0 -> 145480 bytes static/fonts/inter/Inter-ThinItalic.woff2 | Bin 0 -> 106496 bytes static/fonts/inter/Inter-italic.var.woff2 | Bin 0 -> 245036 bytes static/fonts/inter/Inter-roman.var.woff2 | Bin 0 -> 227180 bytes static/fonts/intervar/Inter.var.woff2 | Bin 0 -> 324864 bytes .../jetbrainsmono/JetBrainsMono-Bold.woff2 | Bin 0 -> 71180 bytes .../JetBrainsMono-BoldItalic.woff2 | Bin 0 -> 73976 bytes .../JetBrainsMono-ExtraBold.woff2 | Bin 0 -> 70124 bytes .../JetBrainsMono-ExtraBoldItalic.woff2 | Bin 0 -> 73264 bytes .../JetBrainsMono-ExtraLight.woff2 | Bin 0 -> 69780 bytes .../JetBrainsMono-ExtraLightItalic.woff2 | Bin 0 -> 72520 bytes .../jetbrainsmono/JetBrainsMono-Italic.woff2 | Bin 0 -> 72268 bytes .../jetbrainsmono/JetBrainsMono-Light.woff2 | Bin 0 -> 70416 bytes .../JetBrainsMono-LightItalic.woff2 | Bin 0 -> 73552 bytes .../jetbrainsmono/JetBrainsMono-Medium.woff2 | Bin 0 -> 70480 bytes .../JetBrainsMono-MediumItalic.woff2 | Bin 0 -> 73704 bytes .../jetbrainsmono/JetBrainsMono-Regular.woff2 | Bin 0 -> 69440 bytes .../JetBrainsMono-SemiBold.woff2 | Bin 0 -> 70820 bytes .../JetBrainsMono-SemiBoldItalic.woff2 | Bin 0 -> 74088 bytes .../jetbrainsmono/JetBrainsMono-Thin.woff2 | Bin 0 -> 68064 bytes .../JetBrainsMono-ThinItalic.woff2 | Bin 0 -> 71180 bytes static/img/acceptance-tests.png | Bin 0 -> 122971 bytes static/img/android-chrome-192x192.png | Bin 0 -> 4110 bytes static/img/android-chrome-256x256.png | Bin 0 -> 5421 bytes static/img/apple-touch-icon.png | Bin 0 -> 3744 bytes static/img/banner.jpg | Bin 0 -> 140262 bytes static/img/cube.svg | 1 + static/img/ecosystem.svg | 1 + static/img/favicon-16x16.png | Bin 0 -> 632 bytes static/img/favicon-32x32.png | Bin 0 -> 942 bytes static/img/favicon-dark.svg | 15 + static/img/favicon.svg | 21 + static/img/group.svg | 1 + static/img/ico-chevron.svg | 3 + static/img/ico-github.svg | 3 + static/img/innovation.svg | 1 + static/img/investigation.svg | 1 + static/img/link.svg | 1 + static/img/logo-bw.svg | 8 + static/img/logo-sdk.svg | 10 + static/img/logo.svg | 18 + static/img/node.svg | 2 + static/img/public-service.svg | 1 + static/img/setting.svg | 1 + .../uml/puml/begin_redelegation_sequence.puml | 50 + static/uml/puml/delegation_sequence.puml | 93 + static/uml/puml/keeper_dependencies.puml | 36 + static/uml/puml/transaction_flow.puml | 20 + static/uml/puml/unbond_sequence.puml | 51 + .../uml/svg/begin_redelegation_sequence.svg | 106 + static/uml/svg/delegation_sequence.svg | 192 + static/uml/svg/keeper_dependencies.svg | 102 + static/uml/svg/transaction_flow.svg | 48 + static/uml/svg/unbond_sequence.svg | 110 + tailwind.config.js | 104 + tsconfig.json | 7 + 296 files changed, 56764 insertions(+) create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/md-link-checker.yml create mode 100644 .github/workflows/test-deploy.yml create mode 100644 .gitignore create mode 100644 .markdownlint.json create mode 100644 .markdownlintignore create mode 100644 babel.config.js create mode 100644 docs/develop/_category_.json create mode 100644 docs/develop/advanced-concepts/00-baseapp.md create mode 100644 docs/develop/advanced-concepts/01-transactions.md create mode 100644 docs/develop/advanced-concepts/02-context.md create mode 100644 docs/develop/advanced-concepts/03-node.md create mode 100644 docs/develop/advanced-concepts/04-store.md create mode 100644 docs/develop/advanced-concepts/05-interblock-cache.md create mode 100644 docs/develop/advanced-concepts/06-encoding.md create mode 100644 docs/develop/advanced-concepts/07-cli.md create mode 100644 docs/develop/advanced-concepts/08-events.md create mode 100644 docs/develop/advanced-concepts/09-grpc_rest.md create mode 100644 docs/develop/advanced-concepts/10-ocap.md create mode 100644 docs/develop/advanced-concepts/11-telemetry.md create mode 100644 docs/develop/advanced-concepts/12-runtx_middleware.md create mode 100644 docs/develop/advanced-concepts/13-simulation.md create mode 100644 docs/develop/advanced-concepts/14-proto-docs.md create mode 100644 docs/develop/advanced-concepts/15-tips.md create mode 100644 docs/develop/advanced-concepts/16-upgrade.md create mode 100644 docs/develop/advanced-concepts/17-config.md create mode 100644 docs/develop/advanced-concepts/_category_.json create mode 100644 docs/develop/advanced-concepts/baseapp_state-begin_block.png create mode 100644 docs/develop/advanced-concepts/baseapp_state-checktx.png create mode 100644 docs/develop/advanced-concepts/baseapp_state-commit.png create mode 100644 docs/develop/advanced-concepts/baseapp_state-deliver_tx.png create mode 100644 docs/develop/advanced-concepts/baseapp_state-initchain.png create mode 100644 docs/develop/advanced-concepts/baseapp_state-prepareproposal.png create mode 100644 docs/develop/advanced-concepts/baseapp_state-processproposal.png create mode 100644 docs/develop/advanced-concepts/baseapp_state.png create mode 100644 docs/develop/glossary.md create mode 100644 docs/develop/high-level-concepts/00-overview-app.md create mode 100644 docs/develop/high-level-concepts/01-tx-lifecycle.md create mode 100644 docs/develop/high-level-concepts/02-query-lifecycle.md create mode 100644 docs/develop/high-level-concepts/03-accounts.md create mode 100644 docs/develop/high-level-concepts/04-gas-fees.md create mode 100644 docs/develop/high-level-concepts/_category_.json create mode 100644 docs/develop/intro/00-what-is-sdk.md create mode 100644 docs/develop/intro/01-why-app-specific.md create mode 100644 docs/develop/intro/02-sdk-app-architecture.md create mode 100644 docs/develop/intro/03-sdk-design.md create mode 100644 docs/develop/intro/_category_.json create mode 100644 docs/integrate/_category_.json create mode 100644 docs/integrate/architecture/PROCESS.md create mode 100644 docs/integrate/architecture/README.md create mode 100644 docs/integrate/architecture/_category_.json create mode 100644 docs/integrate/architecture/adr-002-docs-structure.md create mode 100644 docs/integrate/architecture/adr-003-dynamic-capability-store.md create mode 100644 docs/integrate/architecture/adr-004-split-denomination-keys.md create mode 100644 docs/integrate/architecture/adr-006-secret-store-replacement.md create mode 100644 docs/integrate/architecture/adr-007-specialization-groups.md create mode 100644 docs/integrate/architecture/adr-008-dCERT-group.md create mode 100644 docs/integrate/architecture/adr-009-evidence-module.md create mode 100644 docs/integrate/architecture/adr-010-modular-antehandler.md create mode 100644 docs/integrate/architecture/adr-011-generalize-genesis-accounts.md create mode 100644 docs/integrate/architecture/adr-012-state-accessors.md create mode 100644 docs/integrate/architecture/adr-013-metrics.md create mode 100644 docs/integrate/architecture/adr-014-proportional-slashing.md create mode 100644 docs/integrate/architecture/adr-016-validator-consensus-key-rotation.md create mode 100644 docs/integrate/architecture/adr-017-historical-header-module.md create mode 100644 docs/integrate/architecture/adr-018-extendable-voting-period.md create mode 100644 docs/integrate/architecture/adr-019-protobuf-state-encoding.md create mode 100644 docs/integrate/architecture/adr-020-protobuf-transaction-encoding.md create mode 100644 docs/integrate/architecture/adr-021-protobuf-query-encoding.md create mode 100644 docs/integrate/architecture/adr-022-custom-panic-handling.md create mode 100644 docs/integrate/architecture/adr-023-protobuf-naming.md create mode 100644 docs/integrate/architecture/adr-024-coin-metadata.md create mode 100644 docs/integrate/architecture/adr-027-deterministic-protobuf-serialization.md create mode 100644 docs/integrate/architecture/adr-028-public-key-addresses.md create mode 100644 docs/integrate/architecture/adr-029-fee-grant-module.md create mode 100644 docs/integrate/architecture/adr-030-authz-module.md create mode 100644 docs/integrate/architecture/adr-031-msg-service.md create mode 100644 docs/integrate/architecture/adr-032-typed-events.md create mode 100644 docs/integrate/architecture/adr-033-protobuf-inter-module-comm.md create mode 100644 docs/integrate/architecture/adr-034-account-rekeying.md create mode 100644 docs/integrate/architecture/adr-035-rosetta-api-support.md create mode 100644 docs/integrate/architecture/adr-036-arbitrary-signature.md create mode 100644 docs/integrate/architecture/adr-037-gov-split-vote.md create mode 100644 docs/integrate/architecture/adr-038-state-listening.md create mode 100644 docs/integrate/architecture/adr-039-epoched-staking.md create mode 100644 docs/integrate/architecture/adr-040-storage-and-smt-state-commitments.md create mode 100644 docs/integrate/architecture/adr-041-in-place-store-migrations.md create mode 100644 docs/integrate/architecture/adr-042-group-module.md create mode 100644 docs/integrate/architecture/adr-043-nft-module.md create mode 100644 docs/integrate/architecture/adr-044-protobuf-updates-guidelines.md create mode 100644 docs/integrate/architecture/adr-045-check-delivertx-middlewares.md create mode 100644 docs/integrate/architecture/adr-046-module-params.md create mode 100644 docs/integrate/architecture/adr-047-extend-upgrade-plan.md create mode 100644 docs/integrate/architecture/adr-048-consensus-fees.md create mode 100644 docs/integrate/architecture/adr-049-state-sync-hooks.md create mode 100644 docs/integrate/architecture/adr-050-sign-mode-textual-annex1.md create mode 100644 docs/integrate/architecture/adr-050-sign-mode-textual-annex2.md create mode 100644 docs/integrate/architecture/adr-050-sign-mode-textual.md create mode 100644 docs/integrate/architecture/adr-053-go-module-refactoring.md create mode 100644 docs/integrate/architecture/adr-054-semver-compatible-modules.md create mode 100644 docs/integrate/architecture/adr-055-orm.md create mode 100644 docs/integrate/architecture/adr-057-app-wiring.md create mode 100644 docs/integrate/architecture/adr-058-auto-generated-cli.md create mode 100644 docs/integrate/architecture/adr-059-test-scopes.md create mode 100644 docs/integrate/architecture/adr-060-abci-1.0.md create mode 100644 docs/integrate/architecture/adr-061-liquid-staking.md create mode 100644 docs/integrate/architecture/adr-062-collections-state-layer.md create mode 100644 docs/integrate/architecture/adr-063-core-module-api.md create mode 100644 docs/integrate/architecture/adr-064-abci-2.0.md create mode 100644 docs/integrate/architecture/adr-065-store-v2.md create mode 100644 docs/integrate/architecture/adr-template.md create mode 100644 docs/integrate/building-apps/00-app-go.md create mode 100644 docs/integrate/building-apps/01-app-go-v2.md create mode 100644 docs/integrate/building-apps/02-app-mempool.md create mode 100644 docs/integrate/building-apps/03-app-upgrade.md create mode 100644 docs/integrate/building-apps/_category_.json create mode 100644 docs/integrate/building-modules/01-intro.md create mode 100644 docs/integrate/building-modules/01-module-manager.md create mode 100644 docs/integrate/building-modules/02-messages-and-queries.md create mode 100644 docs/integrate/building-modules/03-msg-services.md create mode 100644 docs/integrate/building-modules/04-query-services.md create mode 100644 docs/integrate/building-modules/05-beginblock-endblock.md create mode 100644 docs/integrate/building-modules/06-keeper.md create mode 100644 docs/integrate/building-modules/07-invariants.md create mode 100644 docs/integrate/building-modules/08-genesis.md create mode 100644 docs/integrate/building-modules/09-module-interfaces.md create mode 100644 docs/integrate/building-modules/11-structure.md create mode 100644 docs/integrate/building-modules/12-errors.md create mode 100644 docs/integrate/building-modules/13-upgrade.md create mode 100644 docs/integrate/building-modules/14-simulator.md create mode 100644 docs/integrate/building-modules/15-depinject.md create mode 100644 docs/integrate/building-modules/16-testing.md create mode 100644 docs/integrate/building-modules/_category_.json create mode 100644 docs/integrate/libraries/01-depinject.md create mode 100644 docs/integrate/libraries/02-collections.md create mode 100644 docs/integrate/libraries/03-orm.md create mode 100644 docs/integrate/libraries/README.md create mode 100644 docs/integrate/libraries/_category_.json create mode 100644 docs/integrate/migrations/01-intro.md create mode 100644 docs/integrate/migrations/02-upgrading.md create mode 100644 docs/integrate/migrations/_category_.json create mode 100644 docs/integrate/modules/README.md create mode 100644 docs/integrate/modules/_category_.json create mode 100644 docs/integrate/modules/auth/1-vesting.md create mode 100644 docs/integrate/modules/auth/2-tx.md create mode 100644 docs/integrate/modules/auth/README.md create mode 100644 docs/integrate/modules/authz/README.md create mode 100644 docs/integrate/modules/bank/README.md create mode 100644 docs/integrate/modules/circuit/README.md create mode 100644 docs/integrate/modules/consensus/README.md create mode 100644 docs/integrate/modules/crisis/README.md create mode 100644 docs/integrate/modules/distribution/README.md create mode 100644 docs/integrate/modules/evidence/README.md create mode 100644 docs/integrate/modules/feegrant/README.md create mode 100644 docs/integrate/modules/genutil/README.md create mode 100644 docs/integrate/modules/gov/README.md create mode 100644 docs/integrate/modules/group/README.md create mode 100644 docs/integrate/modules/mint/README.md create mode 100644 docs/integrate/modules/nft/README.md create mode 100644 docs/integrate/modules/params/README.md create mode 100644 docs/integrate/modules/slashing/README.md create mode 100644 docs/integrate/modules/staking/README.md create mode 100644 docs/integrate/modules/upgrade/README.md create mode 100644 docs/integrate/rfc/PROCESS.md create mode 100644 docs/integrate/rfc/README.md create mode 100644 docs/integrate/rfc/_category_.json create mode 100644 docs/integrate/rfc/rfc-001-tx-validation.md create mode 100644 docs/integrate/rfc/rfc-template.md create mode 100644 docs/integrate/spec/SPEC_MODULE.md create mode 100644 docs/integrate/spec/SPEC_STANDARD.md create mode 100644 docs/integrate/spec/_category_.json create mode 100644 docs/integrate/spec/addresses/README.md create mode 100644 docs/integrate/spec/addresses/bech32.md create mode 100644 docs/integrate/spec/fee_distribution/f1_fee_distr.pdf create mode 100644 docs/integrate/spec/fee_distribution/f1_fee_distr.tex create mode 100644 docs/integrate/spec/ics/README.md create mode 100644 docs/integrate/spec/ics/ics-030-signed-messages.md create mode 100644 docs/integrate/tooling/00-protobuf.md create mode 100644 docs/integrate/tooling/01-cosmovisor.md create mode 100644 docs/integrate/tooling/02-confix.md create mode 100644 docs/integrate/tooling/03-autocli.md create mode 100644 docs/integrate/tooling/04-hubl.md create mode 100644 docs/integrate/tooling/05-depinject.md create mode 100644 docs/integrate/tooling/_category_.json create mode 100644 docs/user/run-node/00-keyring.md create mode 100644 docs/user/run-node/01-run-node.md create mode 100644 docs/user/run-node/02-interact-node.md create mode 100644 docs/user/run-node/03-txs.md create mode 100644 docs/user/run-node/04-rosetta.md create mode 100644 docs/user/run-node/06-run-production.md create mode 100644 docs/user/run-node/_category_.json create mode 100644 docs/validate/05-run-testnet.md create mode 100644 docusaurus.config.js create mode 100644 go.mod create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 sidebars.js create mode 100644 src/components/HomepageFeatures/index.js create mode 100644 src/components/HomepageFeatures/styles.module.css create mode 100644 src/css/base.css create mode 100644 src/css/custom.css create mode 100644 src/css/fonts.css create mode 100644 src/pages/index.js create mode 100644 src/pages/index.module.css create mode 100644 static/.nojekyll create mode 100644 static/fonts/inter/Inter-Black.woff create mode 100644 static/fonts/inter/Inter-Black.woff2 create mode 100644 static/fonts/inter/Inter-BlackItalic.woff create mode 100644 static/fonts/inter/Inter-BlackItalic.woff2 create mode 100644 static/fonts/inter/Inter-Bold.woff create mode 100644 static/fonts/inter/Inter-Bold.woff2 create mode 100644 static/fonts/inter/Inter-BoldItalic.woff create mode 100644 static/fonts/inter/Inter-BoldItalic.woff2 create mode 100644 static/fonts/inter/Inter-ExtraBold.woff create mode 100644 static/fonts/inter/Inter-ExtraBold.woff2 create mode 100644 static/fonts/inter/Inter-ExtraBoldItalic.woff create mode 100644 static/fonts/inter/Inter-ExtraBoldItalic.woff2 create mode 100644 static/fonts/inter/Inter-ExtraLight.woff create mode 100644 static/fonts/inter/Inter-ExtraLight.woff2 create mode 100644 static/fonts/inter/Inter-ExtraLightItalic.woff create mode 100644 static/fonts/inter/Inter-ExtraLightItalic.woff2 create mode 100644 static/fonts/inter/Inter-Italic.woff create mode 100644 static/fonts/inter/Inter-Italic.woff2 create mode 100644 static/fonts/inter/Inter-Light.woff create mode 100644 static/fonts/inter/Inter-Light.woff2 create mode 100644 static/fonts/inter/Inter-LightItalic.woff create mode 100644 static/fonts/inter/Inter-LightItalic.woff2 create mode 100644 static/fonts/inter/Inter-Medium.woff create mode 100644 static/fonts/inter/Inter-Medium.woff2 create mode 100644 static/fonts/inter/Inter-MediumItalic.woff create mode 100644 static/fonts/inter/Inter-MediumItalic.woff2 create mode 100644 static/fonts/inter/Inter-Regular.woff create mode 100644 static/fonts/inter/Inter-Regular.woff2 create mode 100644 static/fonts/inter/Inter-SemiBold.woff create mode 100644 static/fonts/inter/Inter-SemiBold.woff2 create mode 100644 static/fonts/inter/Inter-SemiBoldItalic.woff create mode 100644 static/fonts/inter/Inter-SemiBoldItalic.woff2 create mode 100644 static/fonts/inter/Inter-Thin.woff create mode 100644 static/fonts/inter/Inter-Thin.woff2 create mode 100644 static/fonts/inter/Inter-ThinItalic.woff create mode 100644 static/fonts/inter/Inter-ThinItalic.woff2 create mode 100644 static/fonts/inter/Inter-italic.var.woff2 create mode 100644 static/fonts/inter/Inter-roman.var.woff2 create mode 100644 static/fonts/intervar/Inter.var.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-Bold.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-ExtraBold.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-ExtraBoldItalic.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-ExtraLight.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-ExtraLightItalic.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-Italic.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-Light.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-LightItalic.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-Medium.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-Regular.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-SemiBold.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-SemiBoldItalic.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-Thin.woff2 create mode 100644 static/fonts/jetbrainsmono/JetBrainsMono-ThinItalic.woff2 create mode 100644 static/img/acceptance-tests.png create mode 100644 static/img/android-chrome-192x192.png create mode 100644 static/img/android-chrome-256x256.png create mode 100644 static/img/apple-touch-icon.png create mode 100755 static/img/banner.jpg create mode 100644 static/img/cube.svg create mode 100644 static/img/ecosystem.svg create mode 100644 static/img/favicon-16x16.png create mode 100644 static/img/favicon-32x32.png create mode 100644 static/img/favicon-dark.svg create mode 100644 static/img/favicon.svg create mode 100644 static/img/group.svg create mode 100644 static/img/ico-chevron.svg create mode 100644 static/img/ico-github.svg create mode 100644 static/img/innovation.svg create mode 100644 static/img/investigation.svg create mode 100644 static/img/link.svg create mode 100644 static/img/logo-bw.svg create mode 100644 static/img/logo-sdk.svg create mode 100644 static/img/logo.svg create mode 100644 static/img/node.svg create mode 100644 static/img/public-service.svg create mode 100644 static/img/setting.svg create mode 100644 static/uml/puml/begin_redelegation_sequence.puml create mode 100644 static/uml/puml/delegation_sequence.puml create mode 100644 static/uml/puml/keeper_dependencies.puml create mode 100644 static/uml/puml/transaction_flow.puml create mode 100644 static/uml/puml/unbond_sequence.puml create mode 100644 static/uml/svg/begin_redelegation_sequence.svg create mode 100644 static/uml/svg/delegation_sequence.svg create mode 100644 static/uml/svg/keeper_dependencies.svg create mode 100644 static/uml/svg/transaction_flow.svg create mode 100644 static/uml/svg/unbond_sequence.svg create mode 100644 tailwind.config.js create mode 100644 tsconfig.json diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 000000000..a6f92c596 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,43 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + deploy: + name: Deploy to GitHub Pages + runs-on: ubuntu-latest + env: + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} + permissions: write-all + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16.x + cache: npm + + - run: yarn install --frozen-lockfile + - run: yarn crowdin:sync + - name: Clean Crowdin Front Matter issues + run: bash clean.sh + shell: bash + - run: yarn build + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./build + keep_files: ${{ github.event_name == 'push' }} + # The following lines assign commit authorship to the official + # GH-Actions bot for deploys to `gh-pages` branch: + # https://github.com/actions/checkout/issues/13#issuecomment-724415212 + # The GH actions bot is used by default if you didn't specify the two fields. + # You can swap them out with your own user credentials. + cname: docs.cosmos.network + user_name: samricotta + user_email: sam@binary.builders diff --git a/.github/workflows/md-link-checker.yml b/.github/workflows/md-link-checker.yml new file mode 100644 index 000000000..23749b51c --- /dev/null +++ b/.github/workflows/md-link-checker.yml @@ -0,0 +1,12 @@ +name: Check Markdown links +on: + schedule: + - cron: '* */24 * * *' +jobs: + markdown-link-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: gaurav-nelson/github-action-markdown-link-check@1.0.15 + with: + folder-path: "docs" diff --git a/.github/workflows/test-deploy.yml b/.github/workflows/test-deploy.yml new file mode 100644 index 000000000..0459a13f1 --- /dev/null +++ b/.github/workflows/test-deploy.yml @@ -0,0 +1,19 @@ +name: Test deployment + +on: + push: + branches: + - main + pull_request: + +jobs: + test-deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16.x + cache: npm + - run: yarn install --frozen-lockfile + - run: yarn build diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..447c8506c --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# dependencies +/node_modules + +# production +/build + +# generated files +.docusaurus +.cache-loader + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local +.idea + +npm-debug.log* +yarn-debug.log* +yarn-error.log* \ No newline at end of file diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 000000000..edb9ba823 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,12 @@ +{ + "default": true, + "MD004": {"style": "asterisk"}, + "MD007": { "indent": 4 }, + "MD013": false, + "MD024": { "siblings_only": true }, + "MD025": false, + "MD033": false, + "MD034": false, + "no-hard-tabs": false, + "whitespace": false +} \ No newline at end of file diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 000000000..cf1db6077 --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1,2 @@ +docs/node_modules +/README.md \ No newline at end of file diff --git a/README.md b/README.md index e69de29bb..aaba2fa1e 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,41 @@ +# Website + +This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. + +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +Using SSH: + +``` +$ USE_SSH=true yarn deploy +``` + +Not using SSH: + +``` +$ GIT_USER= yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..e00595dae --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docs/develop/_category_.json b/docs/develop/_category_.json new file mode 100644 index 000000000..f40637f4d --- /dev/null +++ b/docs/develop/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Develop", + "position": 0, + "link": null +} \ No newline at end of file diff --git a/docs/develop/advanced-concepts/00-baseapp.md b/docs/develop/advanced-concepts/00-baseapp.md new file mode 100644 index 000000000..85b08bdde --- /dev/null +++ b/docs/develop/advanced-concepts/00-baseapp.md @@ -0,0 +1,509 @@ +# BaseApp + +:::note Synopsis +This document describes `BaseApp`, the abstraction that implements the core functionalities of a Cosmos SDK application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) +* [Lifecycle of a Cosmos SDK transaction](../high-level-concepts/01-tx-lifecycle.md) + +::: + +## Introduction + +`BaseApp` is a base type that implements the core of a Cosmos SDK application, namely: + +* The [Application Blockchain Interface](#main-abci-10-messages), for the state-machine to communicate with the underlying consensus engine (e.g. CometBFT). +* [Service Routers](#service-routers), to route messages and queries to the appropriate module. +* Different [states](#state-updates), as the state-machine can have different volatile states updated based on the ABCI message received. + +The goal of `BaseApp` is to provide the fundamental layer of a Cosmos SDK application +that developers can easily extend to build their own custom application. Usually, +developers will create a custom type for their application, like so: + +```go +type App struct { + // reference to a BaseApp + *baseapp.BaseApp + + // list of application store keys + + // list of application keepers + + // module manager +} +``` + +Extending the application with `BaseApp` gives the former access to all of `BaseApp`'s methods. +This allows developers to compose their custom application with the modules they want, while not +having to concern themselves with the hard work of implementing the ABCI, the service routers and state +management logic. + +## Type Definition + +The `BaseApp` type holds many important parameters for any Cosmos SDK based application. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L50-L146 +``` + +Let us go through the most important components. + +> **Note**: Not all parameters are described, only the most important ones. Refer to the +> type definition for the full list. + +First, the important parameters that are initialized during the bootstrapping of the application: + +* [`CommitMultiStore`](04-store.md#commitmultistore): This is the main store of the application, + which holds the canonical state that is committed at the [end of each block](#commit). This store + is **not** cached, meaning it is not used to update the application's volatile (un-committed) states. + The `CommitMultiStore` is a multi-store, meaning a store of stores. Each module of the application + uses one or multiple `KVStores` in the multi-store to persist their subset of the state. +* Database: The `db` is used by the `CommitMultiStore` to handle data persistence. +* [`Msg` Service Router](#msg-service-router): The `msgServiceRouter` facilitates the routing of `sdk.Msg` requests to the appropriate + module `Msg` service for processing. Here a `sdk.Msg` refers to the transaction component that needs to be + processed by a service in order to update the application state, and not to ABCI message which implements + the interface between the application and the underlying consensus engine. +* [gRPC Query Router](#grpc-query-router): The `grpcQueryRouter` facilitates the routing of gRPC queries to the + appropriate module for it to be processed. These queries are not ABCI messages themselves, but they + are relayed to the relevant module's gRPC `Query` service. +* [`TxDecoder`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types#TxDecoder): It is used to decode + raw transaction bytes relayed by the underlying CometBFT engine. +* [`AnteHandler`](#antehandler): This handler is used to handle signature verification, fee payment, + and other pre-message execution checks when a transaction is received. It's executed during + [`CheckTx/RecheckTx`](#checktx) and [`DeliverTx`](#delivertx). +* [`InitChainer`](../high-level-concepts/00-overview-app.md#initchainer), + [`BeginBlocker` and `EndBlocker`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblocker): These are + the functions executed when the application receives the `InitChain`, `BeginBlock` and `EndBlock` + ABCI messages from the underlying CometBFT engine. + +Then, parameters used to define [volatile states](#state-updates) (i.e. cached states): + +* `checkState`: This state is updated during [`CheckTx`](#checktx), and reset on [`Commit`](#commit). +* `deliverState`: This state is updated during [`DeliverTx`](#delivertx), and set to `nil` on + [`Commit`](#commit) and gets re-initialized on BeginBlock. +* `processProposalState`: This state is updated during [`ProcessProposal`](#process-proposal). +* `prepareProposalState`: This state is updated during [`PrepareProposal`](#prepare-proposal). + +Finally, a few more important parameters: + +* `voteInfos`: This parameter carries the list of validators whose precommit is missing, either + because they did not vote or because the proposer did not include their vote. This information is + carried by the and can be used by the application for various things like + punishing absent validators. +* `minGasPrices`: This parameter defines the minimum gas prices accepted by the node. This is a + **local** parameter, meaning each full-node can set a different `minGasPrices`. It is used in the + `AnteHandler` during [`CheckTx`](#checktx), mainly as a spam protection mechanism. The transaction + enters the [mempool](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#mempool-methods) + only if the gas prices of the transaction are greater than one of the minimum gas price in + `minGasPrices` (e.g. if `minGasPrices == 1uatom,1photon`, the `gas-price` of the transaction must be + greater than `1uatom` OR `1photon`). +* `appVersion`: Version of the application. It is set in the + [application's constructor function](../high-level-concepts/00-overview-app.md#constructor-function). + +## Constructor + +```go +func NewBaseApp( + name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp), +) *BaseApp { + + // ... +} +``` + +The `BaseApp` constructor function is pretty straightforward. The only thing worth noting is the +possibility to provide additional [`options`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/options.go) +to the `BaseApp`, which will execute them in order. The `options` are generally `setter` functions +for important parameters, like `SetPruning()` to set pruning options or `SetMinGasPrices()` to set +the node's `min-gas-prices`. + +Naturally, developers can add additional `options` based on their application's needs. + +## State Updates + +The `BaseApp` maintains four primary volatile states and a root or main state. The main state +is the canonical state of the application and the volatile states, `checkState`, `deliverState`, `prepareProposalState`, `processPreposalState`, +are used to handle state transitions in-between the main state made during [`Commit`](#commit). + +Internally, there is only a single `CommitMultiStore` which we refer to as the main or root state. +From this root state, we derive four volatile states by using a mechanism called _store branching_ (performed by `CacheWrap` function). +The types can be illustrated as follows: + +![Types](baseapp_state.png) + +### InitChain State Updates + +During `InitChain`, the four volatile states, `checkState`, `prepareProposalState`, `processProposalState` +and `deliverState` are set by branching the root `CommitMultiStore`. Any subsequent reads and writes happen +on branched versions of the `CommitMultiStore`. +To avoid unnecessary roundtrip to the main state, all reads to the branched store are cached. + +![InitChain](baseapp_state-initchain.png) + +### CheckTx State Updates + +During `CheckTx`, the `checkState`, which is based off of the last committed state from the root +store, is used for any reads and writes. Here we only execute the `AnteHandler` and verify a service router +exists for every message in the transaction. Note, when we execute the `AnteHandler`, we branch +the already branched `checkState`. +This has the side effect that if the `AnteHandler` fails, the state transitions won't be reflected in the `checkState` +-- i.e. `checkState` is only updated on success. + +![CheckTx](baseapp_state-checktx.png) + +### PrepareProposal State Updates + +During `PrepareProposal`, the `prepareProposalState` is set by branching the root `CommitMultiStore`. +The `prepareProposalState` is used for any reads and writes that occur during the `PrepareProposal` phase. +The function uses the `Select()` method of the mempool to iterate over the transactions. `runTx` is then called, +which encodes and validates each transaction and from there the `AnteHandler` is executed. +If successful, valid transactions are returned inclusive of the events, tags, and data generated +during the execution of the proposal. +The described behavior is that of the default handler, applications have the flexibility to define their own +[custom mempool handlers](https://docs.cosmos.network/main/building-apps/app-mempool#custom-mempool-handlers). + +![ProcessProposal](baseapp_state-prepareproposal.png) + +### ProcessProposal State Updates + +During `ProcessProposal`, the `processProposalState` is set based off of the last committed state +from the root store and is used to process a signed proposal received from a validator. +In this state, `runTx` is called and the `AnteHandler` is executed and the context used in this state is built with information +from the header and the main state, including the minimum gas prices, which are also set. +Again we want to highlight that the described behavior is that of the default handler and applications have the flexibility to define their own +[custom mempool handlers](https://docs.cosmos.network/main/building-apps/app-mempool#custom-mempool-handlers). + +![ProcessProposal](baseapp_state-processproposal.png) + +### BeginBlock State Updates + +During `BeginBlock`, the `deliverState` is set for use in subsequent `DeliverTx` ABCI messages. The +`deliverState` is based off of the last committed state from the root store and is branched. +Note, the `deliverState` is set to `nil` on [`Commit`](#commit). + +![BeginBlock](baseapp_state-begin_block.png) + +### DeliverTx State Updates + +The state flow for `DeliverTx` is nearly identical to `CheckTx` except state transitions occur on +the `deliverState` and messages in a transaction are executed. Similarly to `CheckTx`, state transitions +occur on a doubly branched state -- `deliverState`. Successful message execution results in +writes being committed to `deliverState`. Note, if message execution fails, state transitions from +the AnteHandler are persisted. + +![DeliverTx](baseapp_state-deliver_tx.png) + +### Commit State Updates + +During `Commit` all the state transitions that occurred in the `deliverState` are finally written to +the root `CommitMultiStore` which in turn is committed to disk and results in a new application +root hash. These state transitions are now considered final. Finally, the `checkState` is set to the +newly committed state and `deliverState` is set to `nil` to be reset on `BeginBlock`. + +![Commit](baseapp_state-commit.png) + +## ParamStore + +During `InitChain`, the `RequestInitChain` provides `ConsensusParams` which contains parameters +related to block execution such as maximum gas and size in addition to evidence parameters. If these +parameters are non-nil, they are set in the BaseApp's `ParamStore`. Behind the scenes, the `ParamStore` +is managed by an `x/consensus_params` module. This allows the parameters to be tweaked via + on-chain governance. + +## Service Routers + +When messages and queries are received by the application, they must be routed to the appropriate module in order to be processed. Routing is done via `BaseApp`, which holds a `msgServiceRouter` for messages, and a `grpcQueryRouter` for queries. + +### `Msg` Service Router + +[`sdk.Msg`s](../../integrate/building-modules/02-messages-and-queries.md#messages) need to be routed after they are extracted from transactions, which are sent from the underlying CometBFT engine via the [`CheckTx`](#checktx) and [`DeliverTx`](#delivertx) ABCI messages. To do so, `BaseApp` holds a `msgServiceRouter` which maps fully-qualified service methods (`string`, defined in each module's Protobuf `Msg` service) to the appropriate module's `MsgServer` implementation. + +The [default `msgServiceRouter` included in `BaseApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/msg_service_router.go) is stateless. However, some applications may want to make use of more stateful routing mechanisms such as allowing governance to disable certain routes or point them to new modules for upgrade purposes. For this reason, the `sdk.Context` is also passed into each [route handler inside `msgServiceRouter`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/msg_service_router.go#L31-L32). For a stateless router that doesn't want to make use of this, you can just ignore the `ctx`. + +The application's `msgServiceRouter` is initialized with all the routes using the application's [module manager](../../integrate/building-modules/01-module-manager.md#manager) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../high-level-concepts/00-overview-app.md#constructor-function). + +### gRPC Query Router + +Similar to `sdk.Msg`s, [`queries`](../../integrate/building-modules/02-messages-and-queries.md#queries) need to be routed to the appropriate module's [`Query` service](../../integrate/building-modules/04-query-services.md). To do so, `BaseApp` holds a `grpcQueryRouter`, which maps modules' fully-qualified service methods (`string`, defined in their Protobuf `Query` gRPC) to their `QueryServer` implementation. The `grpcQueryRouter` is called during the initial stages of query processing, which can be either by directly sending a gRPC query to the gRPC endpoint, or via the [`Query` ABCI message](#query) on the CometBFT RPC endpoint. + +Just like the `msgServiceRouter`, the `grpcQueryRouter` is initialized with all the query routes using the application's [module manager](../../integrate/building-modules/01-module-manager.md) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../high-level-concepts/00-overview-app.md#app-constructor). + +## Main ABCI 1.0 Messages + +The [Application-Blockchain Interface](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md) (ABCI) is a generic interface that connects a state-machine with a consensus engine to form a functional full-node. It can be wrapped in any language, and needs to be implemented by each application-specific blockchain built on top of an ABCI-compatible consensus engine like CometBFT. + +The consensus engine handles two main tasks: + +* The networking logic, which mainly consists in gossiping block parts, transactions and consensus votes. +* The consensus logic, which results in the deterministic ordering of transactions in the form of blocks. + +It is **not** the role of the consensus engine to define the state or the validity of transactions. Generally, transactions are handled by the consensus engine in the form of `[]bytes`, and relayed to the application via the ABCI to be decoded and processed. At keys moments in the networking and consensus processes (e.g. beginning of a block, commit of a block, reception of an unconfirmed transaction, ...), the consensus engine emits ABCI messages for the state-machine to act on. + +Developers building on top of the Cosmos SDK need not implement the ABCI themselves, as `BaseApp` comes with a built-in implementation of the interface. Let us go through the main ABCI messages that `BaseApp` implements: + +* [`Prepare Proposal`](#prepare-proposal) +* [`Process Proposal`](#process-proposal) +* [`CheckTx`](#checktx) +* [`DeliverTx`](#delivertx) + + +### Prepare Proposal + +The `PrepareProposal` function is part of the new methods introduced in Application Blockchain Interface (ABCI++) in CometBFT and is an important part of the application's overall governance system. In the Cosmos SDK, it allows the application to have more fine-grained control over the transactions that are processed, and ensures that only valid transactions are committed to the blockchain. + +Here is how the `PrepareProposal` function can be implemented: + +1. Extract the `sdk.Msg`s from the transaction. +2. Perform _stateful_ checks by calling `Validate()` on each of the `sdk.Msg`'s. This is done after _stateless_ checks as _stateful_ checks are more computationally expensive. If `Validate()` fails, `PrepareProposal` returns before running further checks, which saves resources. +3. Perform any additional checks that are specific to the application, such as checking account balances, or ensuring that certain conditions are met before a transaction is proposed.hey are processed by the consensus engine, if necessary. +4. Return the updated transactions to be processed by the consensus engine + +Note that, unlike `CheckTx()`, `PrepareProposal` process `sdk.Msg`s, so it can directly update the state. However, unlike `DeliverTx()`, it does not commit the state updates. It's important to exercise caution when using `PrepareProposal` as incorrect coding could affect the overall liveness of the network. + +It's important to note that `PrepareProposal` complements the `ProcessProposal` method which is executed after this method. The combination of these two methods means that it is possible to guarantee that no invalid transactions are ever committed. Furthermore, such a setup can give rise to other interesting use cases such as Oracles, threshold decryption and more. + +`PrepareProposal` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#processproposal). The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. + + +### Process Proposal + +The `ProcessProposal` function is called by the BaseApp as part of the ABCI message flow, and is executed during the `BeginBlock` phase of the consensus process. The purpose of this function is to give more control to the application for block validation, allowing it to check all transactions in a proposed block before the validator sends the prevote for the block. It allows a validator to perform application-dependent work in a proposed block, enabling features such as immediate block execution, and allows the Application to reject invalid blocks. + +The `ProcessProposal` function performs several key tasks, including: + +1. Validating the proposed block by checking all transactions in it. +2. Checking the proposed block against the current state of the application, to ensure that it is valid and that it can be executed. +3. Updating the application's state based on the proposal, if it is valid and passes all checks. +4. Returning a response to CometBFT indicating the result of the proposal processing. + +The `ProcessProposal` is an important part of the application's overall governance system. It is used to manage the network's parameters and other key aspects of its operation. It also ensures that the coherence property is adhered to i.e. all honest validators must accept a proposal by an honest proposer. + +It's important to note that `ProcessProposal` complements the `PrepareProposal` method which enables the application to have more fine-grained transaction control by allowing it to reorder, drop, delay, modify, and even add transactions as they see necessary. The combination of these two methods means that it is possible to guarantee that no invalid transactions are ever committed. Furthermore, such a setup can give rise to other interesting use cases such as Oracles, threshold decryption and more. + +CometBFT calls it when it receives a proposal and the CometBFT algorithm has not locked on a value. The Application cannot modify the proposal at this point but can reject it if it is invalid. If that is the case, CometBFT will prevote `nil` on the proposal, which has strong liveness implications for CometBFT. As a general rule, the Application SHOULD accept a prepared proposal passed via `ProcessProposal`, even if a part of the proposal is invalid (e.g., an invalid transaction); the Application can ignore the invalid part of the prepared proposal at block execution time. + +However, developers must exercise greater caution when using these methods. Incorrectly coding these methods could affect liveness as CometBFT is unable to receive 2/3 valid precommits to finalize a block. + +`ProcessProposal` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#processproposal). The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. + + +### CheckTx + +`CheckTx` is sent by the underlying consensus engine when a new unconfirmed (i.e. not yet included in a valid block) +transaction is received by a full-node. The role of `CheckTx` is to guard the full-node's mempool +(where unconfirmed transactions are stored until they are included in a block) from spam transactions. +Unconfirmed transactions are relayed to peers only if they pass `CheckTx`. + +`CheckTx()` can perform both _stateful_ and _stateless_ checks, but developers should strive to +make the checks **lightweight** because gas fees are not charged for the resources (CPU, data load...) used during the `CheckTx`. + +In the Cosmos SDK, after [decoding transactions](06-encoding.md), `CheckTx()` is implemented +to do the following checks: + +1. Extract the `sdk.Msg`s from the transaction. +2. **Optionally** perform _stateless_ checks by calling `ValidateBasic()` on each of the `sdk.Msg`s. This is done + first, as _stateless_ checks are less computationally expensive than _stateful_ checks. If + `ValidateBasic()` fail, `CheckTx` returns before running _stateful_ checks, which saves resources. + This check is still performed for messages that have not yet migrated to the new message validation mechanism defined in [RFC 001](https://docs.cosmos.network/main/rfc/rfc-001-tx-validation) and still have a `ValidateBasic()` method. +3. Perform non-module related _stateful_ checks on the [account](../high-level-concepts/03-accounts.md). This step is mainly about checking + that the `sdk.Msg` signatures are valid, that enough fees are provided and that the sending account + has enough funds to pay for said fees. Note that no precise [`gas`](../high-level-concepts/04-gas-fees.md) counting occurs here, + as `sdk.Msg`s are not processed. Usually, the [`AnteHandler`](../high-level-concepts/04-gas-fees.md#antehandler) will check that the `gas` provided + with the transaction is superior to a minimum reference gas amount based on the raw transaction size, + in order to avoid spam with transactions that provide 0 gas. + +`CheckTx` does **not** process `sdk.Msg`s - they only need to be processed when the canonical state need to be updated, which happens during `DeliverTx`. + +Steps 2. and 3. are performed by the [`AnteHandler`](../high-level-concepts/04-gas-fees.md#antehandler) in the [`RunTx()`](#runtx) +function, which `CheckTx()` calls with the `runTxModeCheck` mode. During each step of `CheckTx()`, a +special [volatile state](#state-updates) called `checkState` is updated. This state is used to keep +track of the temporary changes triggered by the `CheckTx()` calls of each transaction without modifying +the [main canonical state](#state-updates). For example, when a transaction goes through `CheckTx()`, the +transaction's fees are deducted from the sender's account in `checkState`. If a second transaction is +received from the same account before the first is processed, and the account has consumed all its +funds in `checkState` during the first transaction, the second transaction will fail `CheckTx`() and +be rejected. In any case, the sender's account will not actually pay the fees until the transaction +is actually included in a block, because `checkState` never gets committed to the main state. The +`checkState` is reset to the latest state of the main state each time a blocks gets [committed](#commit). + +`CheckTx` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#checktx). +The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. +* `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +* `GasUsed (int64)`: Amount of gas consumed by transaction. During `CheckTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction. Next is an example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/basic.go#L96 +``` + +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](08-events.md) for more. +* `Codespace (string)`: Namespace for the Code. + +#### RecheckTx + +After `Commit`, `CheckTx` is run again on all transactions that remain in the node's local mempool +excluding the transactions that are included in the block. To prevent the mempool from rechecking all transactions +every time a block is committed, the configuration option `mempool.recheck=false` can be set. As of +Tendermint v0.32.1, an additional `Type` parameter is made available to the `CheckTx` function that +indicates whether an incoming transaction is new (`CheckTxType_New`), or a recheck (`CheckTxType_Recheck`). +This allows certain checks like signature verification can be skipped during `CheckTxType_Recheck`. + +### DeliverTx + +When the underlying consensus engine receives a block proposal, each transaction in the block needs to be processed by the application. To that end, the underlying consensus engine sends a `DeliverTx` message to the application for each transaction in a sequential order. + +Before the first transaction of a given block is processed, a [volatile state](#state-updates) called `deliverState` is initialized during [`BeginBlock`](#beginblock). This state is updated each time a transaction is processed via `DeliverTx`, and committed to the [main state](#state-updates) when the block is [committed](#commit), after what it is set to `nil`. + +`DeliverTx` performs the **exact same steps as `CheckTx`**, with a little caveat at step 3 and the addition of a fifth step: + +1. The `AnteHandler` does **not** check that the transaction's `gas-prices` is sufficient. That is because the `min-gas-prices` value `gas-prices` is checked against is local to the node, and therefore what is enough for one full-node might not be for another. This means that the proposer can potentially include transactions for free, although they are not incentivised to do so, as they earn a bonus on the total fee of the block they propose. +2. For each `sdk.Msg` in the transaction, route to the appropriate module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). Additional _stateful_ checks are performed, and the branched multistore held in `deliverState`'s `context` is updated by the module's `keeper`. If the `Msg` service returns successfully, the branched multistore held in `context` is written to `deliverState` `CacheMultiStore`. + +During the additional fifth step outlined in (2), each read/write to the store increases the value of `GasConsumed`. You can find the default cost of each operation: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L230-L241 +``` + +At any point, if `GasConsumed > GasWanted`, the function returns with `Code != 0` and `DeliverTx` fails. + +`DeliverTx` returns a response to the underlying consensus engine of type [`abci.ResponseDeliverTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#delivertx). The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. +* `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +* `GasUsed (int64)`: Amount of gas consumed by transaction. During `DeliverTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction, and by adding gas each time a read/write to the store occurs. +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](08-events.md) for more. +* `Codespace (string)`: Namespace for the Code. + +## RunTx, AnteHandler, RunMsgs, PostHandler + +### RunTx + +`RunTx` is called from `CheckTx`/`DeliverTx` to handle the transaction, with `runTxModeCheck` or `runTxModeDeliver` as parameter to differentiate between the two modes of execution. Note that when `RunTx` receives a transaction, it has already been decoded. + +The first thing `RunTx` does upon being called is to retrieve the `context`'s `CacheMultiStore` by calling the `getContextForTx()` function with the appropriate mode (either `runTxModeCheck` or `runTxModeDeliver`). This `CacheMultiStore` is a branch of the main store, with cache functionality (for query requests), instantiated during `BeginBlock` for `DeliverTx` and during the `Commit` of the previous block for `CheckTx`. After that, two `defer func()` are called for [`gas`](../high-level-concepts/04-gas-fees.md) management. They are executed when `runTx` returns and make sure `gas` is actually consumed, and will throw errors, if any. + +After that, `RunTx()` calls `ValidateBasic()`, when available and for backward compatibility, on each `sdk.Msg`in the `Tx`, which runs preliminary _stateless_ validity checks. If any `sdk.Msg` fails to pass `ValidateBasic()`, `RunTx()` returns with an error. + +Then, the [`anteHandler`](#antehandler) of the application is run (if it exists). In preparation of this step, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L663-L672 +``` + +This allows `RunTx` not to commit the changes made to the state during the execution of `anteHandler` if it ends up failing. It also prevents the module implementing the `anteHandler` from writing to state, which is an important part of the [object-capabilities](10-ocap.md) of the Cosmos SDK. + +Finally, the [`RunMsgs()`](#runmsgs) function is called to process the `sdk.Msg`s in the `Tx`. In preparation of this step, just like with the `anteHandler`, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + +### AnteHandler + +The `AnteHandler` is a special handler that implements the `AnteHandler` interface and is used to authenticate the transaction before the transaction's internal messages are processed. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/handler.go#L6-L8 +``` + +The `AnteHandler` is theoretically optional, but still a very important component of public blockchain networks. It serves 3 primary purposes: + +* Be a primary line of defense against spam and second line of defense (the first one being the mempool) against transaction replay with fees deduction and [`sequence`](01-transactions.md#transaction-generation) checking. +* Perform preliminary _stateful_ validity checks like ensuring signatures are valid or that the sender has enough funds to pay for fees. +* Play a role in the incentivisation of stakeholders via the collection of transaction fees. + +`BaseApp` holds an `anteHandler` as parameter that is initialized in the [application's constructor](../high-level-concepts/00-overview-app.md#application-constructor). The most widely used `anteHandler` is the [`auth` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/ante.go). + +Click [here](../high-level-concepts/04-gas-fees.md#antehandler) for more on the `anteHandler`. + +### RunMsgs + +`RunMsgs` is called from `RunTx` with `runTxModeCheck` as parameter to check the existence of a route for each message the transaction, and with `runTxModeDeliver` to actually process the `sdk.Msg`s. + +First, it retrieves the `sdk.Msg`'s fully-qualified type name, by checking the `type_url` of the Protobuf `Any` representing the `sdk.Msg`. Then, using the application's [`msgServiceRouter`](#msg-service-router), it checks for the existence of `Msg` service method related to that `type_url`. At this point, if `mode == runTxModeCheck`, `RunMsgs` returns. Otherwise, if `mode == runTxModeDeliver`, the [`Msg` service](../../integrate/building-modules/03-msg-services.md) RPC is executed, before `RunMsgs` returns. + +### PostHandler + +`PostHandler` is similar to `AnteHandler`, but it, as the name suggests, executes custom post tx processing logic after [`RunMsgs`](#runmsgs) is called. `PostHandler` receives the `Result` of the the `RunMsgs` in order to enable this customizable behavior. + +Like `AnteHandler`s, `PostHandler`s are theoretically optional, one use case for `PostHandler`s is transaction tips (enabled by default in simapp). +Other use cases like unused gas refund can also be enabled by `PostHandler`s. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/posthandler/post.go#L1-L15 +``` + +Note, when `PostHandler`s fail, the state from `runMsgs` is also reverted, effectively making the transaction fail. + +## Other ABCI Messages + +### InitChain + +The [`InitChain` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when the chain is first started. It is mainly used to **initialize** parameters and state like: + +* [Consensus Parameters](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#consensus-parameters) via `setConsensusParams`. +* [`checkState` and `deliverState`](#state-updates) via `setState`. +* The [block gas meter](../high-level-concepts/04-gas-fees.md#block-gas-meter), with infinite gas to process genesis transactions. + +Finally, the `InitChain(req abci.RequestInitChain)` method of `BaseApp` calls the [`initChainer()`](../high-level-concepts/00-overview-app.md#initchainer) of the application in order to initialize the main state of the application from the `genesis file` and, if defined, call the [`InitGenesis`](../../integrate/building-modules/08-genesis.md#initgenesis) function of each of the application's modules. + +### BeginBlock + +The [`BeginBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when a block proposal created by the correct proposer is received, before [`DeliverTx`](#delivertx) is run for each transaction in the block. It allows developers to have logic be executed at the beginning of each block. In the Cosmos SDK, the `BeginBlock(req abci.RequestBeginBlock)` method does the following: + +* Initialize [`deliverState`](#state-updates) with the latest header using the `req abci.RequestBeginBlock` passed as parameter via the `setState` function. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L406-L433 + ``` + + This function also resets the [main gas meter](../high-level-concepts/04-gas-fees.md#main-gas-meter). + +* Initialize the [block gas meter](../high-level-concepts/04-gas-fees.md#block-gas-meter) with the `maxGas` limit. The `gas` consumed within the block cannot go above `maxGas`. This parameter is defined in the application's consensus parameters. +* Run the application's [`beginBlocker()`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblock), which mainly runs the [`BeginBlocker()`](../../integrate/building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. +* Set the [`VoteInfos`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#voteinfo) of the application, i.e. the list of validators whose _precommit_ for the previous block was included by the proposer of the current block. This information is carried into the [`Context`](02-context.md) so that it can be used during `DeliverTx` and `EndBlock`. + +### EndBlock + +The [`EndBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after [`DeliverTx`](#delivertx) as been run for each transaction in the block. It allows developers to have logic be executed at the end of each block. In the Cosmos SDK, the bulk `EndBlock(req abci.RequestEndBlock)` method is to run the application's [`EndBlocker()`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblock), which mainly runs the [`EndBlocker()`](../../integrate/building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. + +### Commit + +The [`Commit` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after the full-node has received _precommits_ from 2/3+ of validators (weighted by voting power). On the `BaseApp` end, the `Commit(res abci.ResponseCommit)` function is implemented to commit all the valid state transitions that occurred during `BeginBlock`, `DeliverTx` and `EndBlock` and to reset state for the next block. + +To commit state-transitions, the `Commit` function calls the `Write()` function on `deliverState.ms`, where `deliverState.ms` is a branched multistore of the main store `app.cms`. Then, the `Commit` function sets `checkState` to the latest header (obtained from `deliverState.ctx.BlockHeader`) and `deliverState` to `nil`. + +Finally, `Commit` returns the hash of the commitment of `app.cms` back to the underlying consensus engine. This hash is used as a reference in the header of the next block. + +### Info + +The [`Info` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is a simple query from the underlying consensus engine, notably used to sync the latter with the application during a handshake that happens on startup. When called, the `Info(res abci.ResponseInfo)` function from `BaseApp` will return the application's name, version and the hash of the last commit of `app.cms`. + +### Query + +The [`Query` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is used to serve queries received from the underlying consensus engine, including queries received via RPC like CometBFT RPC. It used to be the main entrypoint to build interfaces with the application, but with the introduction of [gRPC queries](../../integrate/building-modules/04-query-services.md) in Cosmos SDK v0.40, its usage is more limited. The application must respect a few rules when implementing the `Query` method, which are outlined [here](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#query). + +Each CometBFT `query` comes with a `path`, which is a `string` which denotes what to query. If the `path` matches a gRPC fully-qualified service method, then `BaseApp` will defer the query to the `grpcQueryRouter` and let it handle it like explained [above](#grpc-query-router). Otherwise, the `path` represents a query that is not (yet) handled by the gRPC router. `BaseApp` splits the `path` string with the `/` delimiter. By convention, the first element of the split string (`split[0]`) contains the category of `query` (`app`, `p2p`, `store` or `custom` ). The `BaseApp` implementation of the `Query(req abci.RequestQuery)` method is a simple dispatcher serving these 4 main categories of queries: + +* Application-related queries like querying the application's version, which are served via the `handleQueryApp` method. +* Direct queries to the multistore, which are served by the `handlerQueryStore` method. These direct queries are different from custom queries which go through `app.queryRouter`, and are mainly used by third-party service provider like block explorers. +* P2P queries, which are served via the `handleQueryP2P` method. These queries return either `app.addrPeerFilter` or `app.ipPeerFilter` that contain the list of peers filtered by address or IP respectively. These lists are first initialized via `options` in `BaseApp`'s [constructor](#constructor). diff --git a/docs/develop/advanced-concepts/01-transactions.md b/docs/develop/advanced-concepts/01-transactions.md new file mode 100644 index 000000000..8b80f69ce --- /dev/null +++ b/docs/develop/advanced-concepts/01-transactions.md @@ -0,0 +1,199 @@ +# Transactions + +:::note Synopsis +`Transactions` are objects created by end-users to trigger state changes in the application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](../high-level-concepts/00-overview-app.md) + +::: + +## Transactions + +Transactions are comprised of metadata held in [contexts](02-context.md) and [`sdk.Msg`s](../../integrate/building-modules/02-messages-and-queries.md) that trigger state changes within a module through the module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). + +When users want to interact with an application and make state changes (e.g. sending coins), they create transactions. Each of a transaction's `sdk.Msg` must be signed using the private key associated with the appropriate account(s), before the transaction is broadcasted to the network. A transaction must then be included in a block, validated, and approved by the network through the consensus process. To read more about the lifecycle of a transaction, click [here](../high-level-concepts/01-tx-lifecycle.md). + +## Type Definition + +Transaction objects are Cosmos SDK types that implement the `Tx` interface + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L42-L50 +``` + +It contains the following methods: + +* **GetMsgs:** unwraps the transaction and returns a list of contained `sdk.Msg`s - one transaction may have one or multiple messages, which are defined by module developers. +* **ValidateBasic:** lightweight, [_stateless_](../high-level-concepts/01-tx-lifecycle.md#types-of-checks) checks used by ABCI messages [`CheckTx`](00-baseapp.md#checktx) and [`DeliverTx`](00-baseapp.md#delivertx) to make sure transactions are not invalid. For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth) module's `ValidateBasic` function checks that its transactions are signed by the correct number of signers and that the fees do not exceed what the user's maximum. When [`runTx`](00-baseapp.md#runtx) is checking a transaction created from the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module, it first runs `ValidateBasic` on each message, then runs the `auth` module AnteHandler which calls `ValidateBasic` for the transaction itself. + + :::note + This function is different from the deprecated `sdk.Msg` [`ValidateBasic`](../high-level-concepts/01-tx-lifecycle.md#ValidateBasic) methods, which was performing basic validity checks on messages only. + ::: + +As a developer, you should rarely manipulate `Tx` directly, as `Tx` is really an intermediate type used for transaction generation. Instead, developers should prefer the `TxBuilder` interface, which you can learn more about [below](#transaction-generation). + +### Signing Transactions + +Every message in a transaction must be signed by the addresses specified by its `GetSigners`. The Cosmos SDK currently allows signing transactions in two different ways. + +#### `SIGN_MODE_DIRECT` (preferred) + +The most used implementation of the `Tx` interface is the Protobuf `Tx` message, which is used in `SIGN_MODE_DIRECT`: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 +``` + +Because Protobuf serialization is not deterministic, the Cosmos SDK uses an additional `TxRaw` type to denote the pinned bytes over which a transaction is signed. Any user can generate a valid `body` and `auth_info` for a transaction, and serialize these two messages using Protobuf. `TxRaw` then pins the user's exact binary representation of `body` and `auth_info`, called respectively `body_bytes` and `auth_info_bytes`. The document that is signed by all signers of the transaction is `SignDoc` (deterministically serialized using [ADR-027](../../integrate/architecture/adr-027-deterministic-protobuf-serialization.md)): + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 +``` + +Once signed by all signers, the `body_bytes`, `auth_info_bytes` and `signatures` are gathered into `TxRaw`, whose serialized bytes are broadcasted over the network. + +#### `SIGN_MODE_LEGACY_AMINO_JSON` + +The legacy implementation of the `Tx` interface is the `StdTx` struct from `x/auth`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx.go#L83-L93 +``` + +The document signed by all signers is `StdSignDoc`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdsign.go#L38-L52 +``` + +which is encoded into bytes using Amino JSON. Once all signatures are gathered into `StdTx`, `StdTx` is serialized using Amino JSON, and these bytes are broadcasted over the network. + +#### Other Sign Modes + +The Cosmos SDK also provides a couple of other sign modes for particular use cases. + +#### `SIGN_MODE_DIRECT_AUX` + +`SIGN_MODE_DIRECT_AUX` is a sign mode released in the Cosmos SDK v0.46 which targets transactions with multiple signers. Whereas `SIGN_MODE_DIRECT` expects each signer to sign over both `TxBody` and `AuthInfo` (which includes all other signers' signer infos, i.e. their account sequence, public key and mode info), `SIGN_MODE_DIRECT_AUX` allows N-1 signers to only sign over `TxBody` and _their own_ signer info. Morever, each auxiliary signer (i.e. a signer using `SIGN_MODE_DIRECT_AUX`) doesn't +need to sign over the fees: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L97 +``` + +The use case is a multi-signer transaction, where one of the signers is appointed to gather all signatures, broadcast the signature and pay for fees, and the others only care about the transaction body. This generally allows for a better multi-signing UX. If Alice, Bob and Charlie are part of a 3-signer transaction, then Alice and Bob can both use `SIGN_MODE_DIRECT_AUX` to sign over the `TxBody` and their own signer info (no need an additional step to gather other signers' ones, like in `SIGN_MODE_DIRECT`), without specifying a fee in their SignDoc. Charlie can then gather both signatures from Alice and Bob, and +create the final transaction by appending a fee. Note that the fee payer of the transaction (in our case Charlie) must sign over the fees, so must use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. + +A concrete use case is implemented in [transaction tips](15-tips.md): the tipper may use `SIGN_MODE_DIRECT_AUX` to specify a tip in the transaction, without signing over the actual transaction fees. Then, the fee payer appends fees inside the tipper's desired `TxBody`, and as an exchange for paying the fees and broadcasting the transaction, receives the tipper's transaction tips as payment. + +#### `SIGN_MODE_TEXTUAL` + +`SIGN_MODE_TEXTUAL` is a new sign mode for delivering a better signing experience on hardware wallets, it is currently still under implementation. If you wish to learn more, please refer to [ADR-050](https://github.com/cosmos/cosmos-sdk/pull/10701). + +#### Custom Sign modes + +There is the the opportunity to add your own custom sign mode to the Cosmos-SDK. While we can not accept the implementation of the sign mode to the repository, we can accept a pull request to add the custom signmode to the SignMode enum located [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/signing/v1beta1/signing.proto#L17) + +## Transaction Process + +The process of an end-user sending a transaction is: + +* decide on the messages to put into the transaction, +* generate the transaction using the Cosmos SDK's `TxBuilder`, +* broadcast the transaction using one of the available interfaces. + +The next paragraphs will describe each of these components, in this order. + +### Messages + +:::tip +Module `sdk.Msg`s are not to be confused with [ABCI Messages](https://docs.cometbft.com/v0.37/spec/abci/) which define interactions between the CometBFT and application layers. +::: + +**Messages** (or `sdk.Msg`s) are module-specific objects that trigger state transitions within the scope of the module they belong to. Module developers define the messages for their module by adding methods to the Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md), and also implement the corresponding `MsgServer`. + +Each `sdk.Msg`s is related to exactly one Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md) RPC, defined inside each module's `tx.proto` file. A SDK app router automatically maps every `sdk.Msg` to a corresponding RPC. Protobuf generates a `MsgServer` interface for each module `Msg` service, and the module developer needs to implement this interface. +This design puts more responsibility on module developers, allowing application developers to reuse common functionalities without having to implement state transition logic repetitively. + +To learn more about Protobuf `Msg` services and how to implement `MsgServer`, click [here](../../integrate/building-modules/03-msg-services.md). + +While messages contain the information for state transition logic, a transaction's other metadata and relevant information are stored in the `TxBuilder` and `Context`. + +### Transaction Generation + +The `TxBuilder` interface contains data closely related with the generation of transactions, which an end-user can freely set to generate the desired transaction: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L50 +``` + +* `Msg`s, the array of [messages](#messages) included in the transaction. +* `GasLimit`, option chosen by the users for how to calculate how much gas they will need to pay. +* `Memo`, a note or comment to send with the transaction. +* `FeeAmount`, the maximum amount the user is willing to pay in fees. +* `TimeoutHeight`, block height until which the transaction is valid. +* `Signatures`, the array of signatures from all signers of the transaction. + +As there are currently two sign modes for signing transactions, there are also two implementations of `TxBuilder`: + +* [wrapper](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/builder.go#L18-L34) for creating transactions for `SIGN_MODE_DIRECT`, +* [StdTxBuilder](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx_builder.go#L15-L21) for `SIGN_MODE_LEGACY_AMINO_JSON`. + +However, the two implementation of `TxBuilder` should be hidden away from end-users, as they should prefer using the overarching `TxConfig` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L22-L31 +``` + +`TxConfig` is an app-wide configuration for managing transactions. Most importantly, it holds the information about whether to sign each transaction with `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. By calling `txBuilder := txConfig.NewTxBuilder()`, a new `TxBuilder` will be created with the appropriate sign mode. + +Once `TxBuilder` is correctly populated with the setters exposed above, `TxConfig` will also take care of correctly encoding the bytes (again, either using `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`). Here's a pseudo-code snippet of how to generate and encode a transaction, using the `TxEncoder()` method: + +```go +txBuilder := txConfig.NewTxBuilder() +txBuilder.SetMsgs(...) // and other setters on txBuilder + +bz, err := txConfig.TxEncoder()(txBuilder.GetTx()) +// bz are bytes to be broadcasted over the network +``` + +### Broadcasting the Transaction + +Once the transaction bytes are generated, there are currently three ways of broadcasting it. + +#### CLI + +Application developers create entry points to the application by creating a [command-line interface](07-cli.md), [gRPC and/or REST interface](09-grpc_rest.md), typically found in the application's `./cmd` folder. These interfaces allow users to interact with the application through command-line. + +For the [command-line interface](../../integrate/building-modules/09-module-interfaces.md#cli), module developers create subcommands to add as children to the application top-level transaction command `TxCmd`. CLI commands actually bundle all the steps of transaction processing into one simple command: creating messages, generating transactions and broadcasting. For concrete examples, see the [Interacting with a Node](../../user/run-node/02-interact-node.md) section. An example transaction made using CLI looks like: + +```bash +simd tx send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake +``` + +#### gRPC + +[gRPC](https://grpc.io) is the main component for the Cosmos SDK's RPC layer. Its principal usage is in the context of modules' [`Query` services](../../integrate/building-modules/04-query-services.md). However, the Cosmos SDK also exposes a few other module-agnostic gRPC services, one of them being the `Tx` service: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/service.proto +``` + +The `Tx` service exposes a handful of utility functions, such as simulating a transaction or querying a transaction, and also one method to broadcast transactions. + +Examples of broadcasting and simulating a transaction are shown [here](../../user/run-node/03-txs.md#programmatically-with-go). + +#### REST + +Each gRPC method has its corresponding REST endpoint, generated using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). Therefore, instead of using gRPC, you can also use HTTP to broadcast the same transaction, on the `POST /cosmos/tx/v1beta1/txs` endpoint. + +An example can be seen [here](../../user/run-node/03-txs.md#using-rest) + +#### CometBFT RPC + +The three methods presented above are actually higher abstractions over the CometBFT RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.cometbft.com/v0.37/core/rpc). This means that you can use the CometBFT RPC endpoints directly to broadcast the transaction, if you wish so. diff --git a/docs/develop/advanced-concepts/02-context.md b/docs/develop/advanced-concepts/02-context.md new file mode 100644 index 000000000..aee982bce --- /dev/null +++ b/docs/develop/advanced-concepts/02-context.md @@ -0,0 +1,102 @@ +--- +sidebar_position: 1 +--- + +# Context + +:::note Synopsis +The `context` is a data structure intended to be passed from function to function that carries information about the current state of the application. It provides access to a branched storage (a safe branch of the entire state) as well as useful objects and information like `gasMeter`, `block height`, `consensus parameters` and more. +::: + +:::note + +### Pre-requisites Readings + +* [Anatomy of a Cosmos SDK Application](../high-level-concepts/00-overview-app.md) +* [Lifecycle of a Transaction](../high-level-concepts/01-tx-lifecycle.md) + +::: + +## Context Definition + +The Cosmos SDK `Context` is a custom data structure that contains Go's stdlib [`context`](https://pkg.go.dev/context) as its base, and has many additional types within its definition that are specific to the Cosmos SDK. The `Context` is integral to transaction processing in that it allows modules to easily access their respective [store](04-store.md#base-layer-kvstores) in the [`multistore`](04-store.md#multistore) and retrieve transactional context such as the block header and gas meter. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/context.go#L17-L44 +``` + +* **Base Context:** The base type is a Go [Context](https://pkg.go.dev/context), which is explained further in the [Go Context Package](#go-context-package) section below. +* **Multistore:** Every application's `BaseApp` contains a [`CommitMultiStore`](04-store.md#multistore) which is provided when a `Context` is created. Calling the `KVStore()` and `TransientStore()` methods allows modules to fetch their respective [`KVStore`](04-store.md#base-layer-kvstores) using their unique `StoreKey`. +* **Header:** The [header](https://docs.cometbft.com/v0.37/spec/core/data_structures#header) is a Blockchain type. It carries important information about the state of the blockchain, such as block height and proposer of the current block. +* **Header Hash:** The current block header hash, obtained during `abci.RequestBeginBlock`. +* **Chain ID:** The unique identification number of the blockchain a block pertains to. +* **Transaction Bytes:** The `[]byte` representation of a transaction being processed using the context. Every transaction is processed by various parts of the Cosmos SDK and consensus engine (e.g. CometBFT) throughout its [lifecycle](../high-level-concepts/01-tx-lifecycle.md), some of which do not have any understanding of transaction types. Thus, transactions are marshaled into the generic `[]byte` type using some kind of [encoding format](06-encoding.md) such as [Amino](06-encoding.md). +* **Logger:** A `logger` from the CometBFT libraries. Learn more about logs [here](https://docs.cometbft.com/v0.37/core/configuration). Modules call this method to create their own unique module-specific logger. +* **VoteInfo:** A list of the ABCI type [`VoteInfo`](https://docs.cometbft.com/master/spec/abci/abci.html#voteinfo), which includes the name of a validator and a boolean indicating whether they have signed the block. +* **Gas Meters:** Specifically, a [`gasMeter`](../high-level-concepts/04-gas-fees.md#main-gas-meter) for the transaction currently being processed using the context and a [`blockGasMeter`](../high-level-concepts/04-gas-fees.md#block-gas-meter) for the entire block it belongs to. Users specify how much in fees they wish to pay for the execution of their transaction; these gas meters keep track of how much [gas](../high-level-concepts/04-gas-fees.md) has been used in the transaction or block so far. If the gas meter runs out, execution halts. +* **CheckTx Mode:** A boolean value indicating whether a transaction should be processed in `CheckTx` or `DeliverTx` mode. +* **Min Gas Price:** The minimum [gas](../high-level-concepts/04-gas-fees.md) price a node is willing to take in order to include a transaction in its block. This price is a local value configured by each node individually, and should therefore **not be used in any functions used in sequences leading to state-transitions**. +* **Consensus Params:** The ABCI type [Consensus Parameters](https://docs.cometbft.com/master/spec/abci/apps.html#consensus-parameters), which specify certain limits for the blockchain, such as maximum gas for a block. +* **Event Manager:** The event manager allows any caller with access to a `Context` to emit [`Events`](08-events.md). Modules may define module specific + `Events` by defining various `Types` and `Attributes` or use the common definitions found in `types/`. Clients can subscribe or query for these `Events`. These `Events` are collected throughout `DeliverTx`, `BeginBlock`, and `EndBlock` and are returned to CometBFT for indexing. For example: +* **Priority:** The transaction priority, only relevant in `CheckTx`. +* **KV `GasConfig`:** Enables applications to set a custom `GasConfig` for the `KVStore`. +* **Transient KV `GasConfig`:** Enables applications to set a custom `GasConfig` for the transiant `KVStore`. + +## Go Context Package + +A basic `Context` is defined in the [Golang Context Package](https://pkg.go.dev/context). A `Context` +is an immutable data structure that carries request-scoped data across APIs and processes. Contexts +are also designed to enable concurrency and to be used in goroutines. + +Contexts are intended to be **immutable**; they should never be edited. Instead, the convention is +to create a child context from its parent using a `With` function. For example: + +```go +childCtx = parentCtx.WithBlockHeader(header) +``` + +The [Golang Context Package](https://pkg.go.dev/context) documentation instructs developers to +explicitly pass a context `ctx` as the first argument of a process. + +## Store branching + +The `Context` contains a `MultiStore`, which allows for branchinig and caching functionality using `CacheMultiStore` +(queries in `CacheMultiStore` are cached to avoid future round trips). +Each `KVStore` is branched in a safe and isolated ephemeral storage. Processes are free to write changes to +the `CacheMultiStore`. If a state-transition sequence is performed without issue, the store branch can +be committed to the underlying store at the end of the sequence or disregard them if something +goes wrong. The pattern of usage for a Context is as follows: + +1. A process receives a Context `ctx` from its parent process, which provides information needed to + perform the process. +2. The `ctx.ms` is a **branched store**, i.e. a branch of the [multistore](04-store.md#multistore) is made so that the process can make changes to the state as it executes, without changing the original`ctx.ms`. This is useful to protect the underlying multistore in case the changes need to be reverted at some point in the execution. +3. The process may read and write from `ctx` as it is executing. It may call a subprocess and pass + `ctx` to it as needed. +4. When a subprocess returns, it checks if the result is a success or failure. If a failure, nothing + needs to be done - the branch `ctx` is simply discarded. If successful, the changes made to + the `CacheMultiStore` can be committed to the original `ctx.ms` via `Write()`. + +For example, here is a snippet from the [`runTx`](00-baseapp.md#runtx-antehandler-runmsgs-posthandler) function in [`baseapp`](00-baseapp.md): + +```go +runMsgCtx, msCache := app.cacheTxContext(ctx, txBytes) +result = app.runMsgs(runMsgCtx, msgs, mode) +result.GasWanted = gasWanted +if mode != runTxModeDeliver { + return result +} +if result.IsOK() { + msCache.Write() +} +``` + +Here is the process: + +1. Prior to calling `runMsgs` on the message(s) in the transaction, it uses `app.cacheTxContext()` + to branch and cache the context and multistore. +2. `runMsgCtx` - the context with branched store, is used in `runMsgs` to return a result. +3. If the process is running in [`checkTxMode`](00-baseapp.md#checktx), there is no need to write the + changes - the result is returned immediately. +4. If the process is running in [`deliverTxMode`](00-baseapp.md#delivertx) and the result indicates + a successful run over all the messages, the branched multistore is written back to the original. diff --git a/docs/develop/advanced-concepts/03-node.md b/docs/develop/advanced-concepts/03-node.md new file mode 100644 index 000000000..45fd1a61e --- /dev/null +++ b/docs/develop/advanced-concepts/03-node.md @@ -0,0 +1,98 @@ +--- +sidebar_position: 1 +--- + +# Node Client (Daemon) + +:::note Synopsis +The main endpoint of a Cosmos SDK application is the daemon client, otherwise known as the full-node client. The full-node runs the state-machine, starting from a genesis file. It connects to peers running the same client in order to receive and relay transactions, block proposals and signatures. The full-node is constituted of the application, defined with the Cosmos SDK, and of a consensus engine connected to the application via the ABCI. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of an SDK application](../high-level-concepts/00-overview-app.md) + +::: + +## `main` function + +The full-node client of any Cosmos SDK application is built by running a `main` function. The client is generally named by appending the `-d` suffix to the application name (e.g. `appd` for an application named `app`), and the `main` function is defined in a `./appd/cmd/main.go` file. Running this function creates an executable `appd` that comes with a set of commands. For an app named `app`, the main command is [`appd start`](#start-command), which starts the full-node. + +In general, developers will implement the `main.go` function with the following structure: + +* First, an [`encodingCodec`](06-encoding.md) is instantiated for the application. +* Then, the `config` is retrieved and config parameters are set. This mainly involves setting the Bech32 prefixes for [addresses](../high-level-concepts/03-accounts.md#addresses). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/config.go#L14-L29 +``` + +* Using [cobra](https://github.com/spf13/cobra), the root command of the full-node client is created. After that, all the custom commands of the application are added using the `AddCommand()` method of `rootCmd`. +* Add default server commands to `rootCmd` using the `server.AddCommands()` method. These commands are separated from the ones added above since they are standard and defined at Cosmos SDK level. They should be shared by all Cosmos SDK-based applications. They include the most important command: the [`start` command](#start-command). +* Prepare and execute the `executor`. + +```go reference +https://github.com/cometbft/cometbft/blob/v0.37.0/libs/cli/setup.go#L74-L78 +``` + +See an example of `main` function from the `simapp` application, the Cosmos SDK's application for demo purposes: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/main.go +``` + +## `start` command + +The `start` command is defined in the `/server` folder of the Cosmos SDK. It is added to the root command of the full-node client in the [`main` function](#main-function) and called by the end-user to start their node: + +```bash +# For an example app named "app", the following command starts the full-node. +appd start + +# Using the Cosmos SDK's own simapp, the following commands start the simapp node. +simd start +``` + +As a reminder, the full-node is composed of three conceptual layers: the networking layer, the consensus layer and the application layer. The first two are generally bundled together in an entity called the consensus engine (CometBFT by default), while the third is the state-machine defined with the help of the Cosmos SDK. Currently, the Cosmos SDK uses CometBFT as the default consensus engine, meaning the start command is implemented to boot up a CometBFT node. + +The flow of the `start` command is pretty straightforward. First, it retrieves the `config` from the `context` in order to open the `db` (a [`leveldb`](https://github.com/syndtr/goleveldb) instance by default). This `db` contains the latest known state of the application (empty if the application is started from the first time. + +With the `db`, the `start` command creates a new instance of the application using an `appCreator` function: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/start.go#L220 +``` + +Note that an `appCreator` is a function that fulfills the `AppCreator` signature: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/types/app.go#L64-L66 +``` + +In practice, the [constructor of the application](../high-level-concepts/00-overview-app.md#constructor-function) is passed as the `appCreator`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L254-L268 +``` + +Then, the instance of `app` is used to instantiate a new CometBFT node: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/start.go#L336-L348 +``` + +The CometBFT node can be created with `app` because the latter satisfies the [`abci.Application` interface](https://github.com/cometbft/cometbft/blob/v0.37.0/abci/types/application.go#L9-L35) (given that `app` extends [`baseapp`](00-baseapp.md)). As part of the `node.New` method, CometBFT makes sure that the height of the application (i.e. number of blocks since genesis) is equal to the height of the CometBFT node. The difference between these two heights should always be negative or null. If it is strictly negative, `node.New` will replay blocks until the height of the application reaches the height of the CometBFT node. Finally, if the height of the application is `0`, the CometBFT node will call [`InitChain`](00-baseapp.md#initchain) on the application to initialize the state from the genesis file. + +Once the CometBFT node is instantiated and in sync with the application, the node can be started: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/start.go#L350-L352 +``` + +Upon starting, the node will bootstrap its RPC and P2P server and start dialing peers. During handshake with its peers, if the node realizes they are ahead, it will query all the blocks sequentially in order to catch up. Then, it will wait for new block proposals and block signatures from validators in order to make progress. + +## Other commands + +To discover how to concretely run a node and interact with it, please refer to our [Running a Node, API and CLI](../../user/run-node/01-run-node.md) guide. diff --git a/docs/develop/advanced-concepts/04-store.md b/docs/develop/advanced-concepts/04-store.md new file mode 100644 index 000000000..1a9602dcc --- /dev/null +++ b/docs/develop/advanced-concepts/04-store.md @@ -0,0 +1,105 @@ +--- +sidebar_position: 1 +--- + +# Store + +:::note Synopsis +A store is a data structure that holds the state of the application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) + +::: + +## Introduction + +The Cosmos SDK store package provides interfaces, types, and abstractions for managing Merkleized state storage and commitment within a Cosmos SDK application. The package supplies various primitives for developers to work with, including state storage, state commitment, and wrapper KVStores. This document highlights the key abstractions and their significance. + +## Multistore + +The main store in Cosmos SDK applications is a multistore, a store of stores, that supports modularity. Developers can add any number of key-value stores to the multistore based on their application needs. Each module can declare and manage its own subset of the state, allowing for a modular approach. Key-value stores within the multistore can only be accessed with a specific capability key, which is typically held in the keeper of the module that declared the store. + +## Store Interfaces + +### KVStore + +The `KVStore` interface defines a key-value store that can be used to store and retrieve data. The default implementation of `KVStore` used in `baseapp` is the `iavl.Store`, which is based on an IAVL Tree. KVStores can be accessed by objects that hold a specific key and can provide an `Iterator` method that returns an `Iterator` object, used to iterate over a range of keys. + +### CommitKVStore + +The `CommitKVStore` interface extends the `KVStore` interface and adds methods for state commitment. The default implementation of `CommitKVStore` used in `baseapp` is also the `iavl.Store`. + +### StoreDB + +The `StoreDB` interface defines a database that can be used to persist key-value stores. The default implementation of `StoreDB` used in `baseapp` is the `dbm.DB`, which is a simple persistent key-value store. + +### DBAdapter + +The `DBAdapter` interface defines an adapter for `dbm.DB` that fulfills the `KVStore` interface. This interface is used to provide compatibility between the `dbm.DB` implementation and the `KVStore` interface. + +### TransientStore + +The `TransientStore` interface defines a base-layer KVStore which is automatically discarded at the end of the block and is useful for persisting information that is only relevant per-block, like storing parameter changes. + +## Store Abstractions + +The store package provides a comprehensive set of abstractions for managing state commitment and storage in an SDK application. These abstractions include CacheWrapping, KVStore, and CommitMultiStore, which offer a range of features such as CRUD functionality, prefix-based iteration, and state commitment management. + +By utilizing these abstractions, developers can create modular applications with independent state management for each module. This approach allows for a more organized and maintainable application structure. + +### CacheWrap + +CacheWrap is a wrapper around a KVStore that provides caching for both read and write operations. The CacheWrap can be used to improve performance by reducing the number of disk reads and writes required for state storage operations. The CacheWrap also includes a Write method that commits the pending writes to the underlying KVStore. + +### HistoryStore + +The HistoryStore is an optional feature that can be used to store historical versions of the state. The HistoryStore can be used to track changes to the state over time, allowing developers to analyze changes in the state and roll back to previous versions if necessary. + +### IndexStore + +The IndexStore is a type of KVStore that is used to maintain indexes of data stored in other KVStores. IndexStores can be used to improve query performance by providing a way to quickly search for data based on specific criteria. + +### Queryable + +The Queryable interface is used to provide a way for applications to query the state stored in a KVStore. The Queryable interface includes methods for retrieving data based on a key or a range of keys, as well as methods for retrieving data based on specific criteria. + +### PrefixIterator + +The PrefixIterator interface is used to iterate over a range of keys in a KVStore that share a common prefix. PrefixIterators can be used to efficiently retrieve subsets of data from a KVStore based on a specific prefix. + +### RootMultiStore + +The RootMultiStore is a Multistore that provides the ability to retrieve a snapshot of the state at a specific height. This is useful for implementing light clients. + +### GasKVStore + +The GasKVStore is a wrapper around a KVStore that provides gas measurement for read and write operations. The GasKVStore is typically used to measure the cost of executing transactions. + +## Implementation Details + +While there are many interfaces that the store package provides, there is typically a core implementation for each main interface that modules and developers interact with that are defined in the Cosmos SDK. + +The `iavl.Store` provides the core implementation for state storage and commitment by implementing the following interfaces: + +- `KVStore` +- `CommitStore` +- `CommitKVStore` +- `Queryable` +- `StoreWithInitialVersion` + +The `iavl.Store` also provides the ability to remove historical state from the state commitment layer. + +An overview of the IAVL implementation can be found [here](https://github.com/cosmos/iavl/blob/master/docs/overview.md). + +Other store abstractions include `cachekv.Store`, `gaskv.Store`, `cachemulti.Store`, and `rootmulti.Store`. Each of these stores provide additional functionality and abstractions for developers to work with. + +Note that concurrent access to the `iavl.Store` tree is not safe, and it is the responsibility of the caller to ensure that concurrent access to the store is not performed. + +## Store Migration + +Store migration is the process of updating the structure of a KVStore to support new features or changes in the data model. Store migration can be a complex process, but it is essential for maintaining the integrity of the state stored in a KVStore. diff --git a/docs/develop/advanced-concepts/05-interblock-cache.md b/docs/develop/advanced-concepts/05-interblock-cache.md new file mode 100644 index 000000000..9914c5b55 --- /dev/null +++ b/docs/develop/advanced-concepts/05-interblock-cache.md @@ -0,0 +1,293 @@ +--- +sidebar_position: 1 +--- + +# Inter-block Cache + +* [Inter-block Cache](#inter-block-cache) + * [Synopsis](#synopsis) + * [Overview and basic concepts](#overview-and-basic-concepts) + * [Motivation](#motivation) + * [Definitions](#definitions) + * [System model and properties](#system-model-and-properties) + * [Assumptions](#assumptions) + * [Properties](#properties) + * [Thread safety](#thread-safety) + * [Crash recovery](#crash-recovery) + * [Iteration](#iteration) + * [Technical specification](#technical-specification) + * [General design](#general-design) + * [API](#api) + * [CommitKVCacheManager](#commitkvcachemanager) + * [CommitKVStoreCache](#commitkvstorecache) + * [Implementation details](#implementation-details) + * [History](#history) + * [Copyright](#copyright) + +## Synopsis + +The inter-block cache is an in-memory cache storing (in-most-cases) immutable state that modules need to read in between blocks. When enabled, all sub-stores of a multi store, e.g., `rootmulti`, are wrapped. + +## Overview and basic concepts + +### Motivation + +The goal of the inter-block cache is to allow SDK modules to have fast access to data that it is typically queried during the execution of every block. This is data that do not change often, e.g. module parameters. The inter-block cache wraps each `CommitKVStore` of a multi store such as `rootmulti` with a fixed size, write-through cache. Caches are not cleared after a block is committed, as opposed to other caching layers such as `cachekv`. + +### Definitions + +* `Store key` uniquely identifies a store. +* `KVCache` is a `CommitKVStore` wrapped with a cache. +* `Cache manager` is a key component of the inter-block cache responsible for maintaining a map from `store keys` to `KVCaches`. + +## System model and properties + +### Assumptions + +This specification assumes that there exists a cache implementation accessible to the inter-block cache feature. + +> The implementation uses adaptive replacement cache (ARC), an enhancement over the standard last-recently-used (LRU) cache in that tracks both frequency and recency of use. + +The inter-block cache requires that the cache implementation to provide methods to create a cache, add a key/value pair, remove a key/value pair and retrieve the value associated to a key. In this specification, we assume that a `Cache` feature offers this functionality through the following methods: + +* `NewCache(size int)` creates a new cache with `size` capacity and returns it. +* `Get(key string)` attempts to retrieve a key/value pair from `Cache.` It returns `(value []byte, success bool)`. If `Cache` contains the key, it `value` contains the associated value and `success=true`. Otherwise, `success=false` and `value` should be ignored. +* `Add(key string, value []byte)` inserts a key/value pair into the `Cache`. +* `Remove(key string)` removes the key/value pair identified by `key` from `Cache`. + +The specification also assumes that `CommitKVStore` offers the following API: + +* `Get(key string)` attempts to retrieve a key/value pair from `CommitKVStore`. +* `Set(key, string, value []byte)` inserts a key/value pair into the `CommitKVStore`. +* `Delete(key string)` removes the key/value pair identified by `key` from `CommitKVStore`. + +> Ideally, both `Cache` and `CommitKVStore` should be specified in a different document and referenced here. + +### Properties + +#### Thread safety + +Accessing the `cache manager` or a `KVCache` is not thread-safe: no method is guarded with a lock. +Note that this is true even if the cache implementation is thread-safe. + +> For instance, assume that two `Set` operations are executed concurrently on the same key, each writing a different value. After both are executed, the cache and the underlying store may be inconsistent, each storing a different value under the same key. + +#### Crash recovery + +The inter-block cache transparently delegates `Commit()` to its aggregate `CommitKVStore`. If the +aggregate `CommitKVStore` supports atomic writes and use them to guarantee that the store is always in a consistent state in disk, the inter-block cache can be transparently moved to a consistent state when a failure occurs. + +> Note that this is the case for `IAVLStore`, the preferred `CommitKVStore`. On commit, it calls `SaveVersion()` on the underlying `MutableTree`. `SaveVersion` writes to disk are atomic via batching. This means that only consistent versions of the store (the tree) are written to the disk. Thus, in case of a failure during a `SaveVersion` call, on recovery from disk, the version of the store will be consistent. + +#### Iteration + +Iteration over each wrapped store is supported via the embedded `CommitKVStore` interface. + +## Technical specification + +### General design + +The inter-block cache feature is composed by two components: `CommitKVCacheManager` and `CommitKVCache`. + +`CommitKVCacheManager` implements the cache manager. It maintains a mapping from a store key to a `KVStore`. + +```go +type CommitKVStoreCacheManager interface{ + cacheSize uint + caches map[string]CommitKVStore +} +``` + +`CommitKVStoreCache` implements a `KVStore`: a write-through cache that wraps a `CommitKVStore`. This means that deletes and writes always happen to both the cache and the underlying `CommitKVStore`. Reads on the other hand first hit the internal cache. During a cache miss, the read is delegated to the underlying `CommitKVStore` and cached. + +```go +type CommitKVStoreCache interface{ + store CommitKVStore + cache Cache +} +``` + +To enable inter-block cache on `rootmulti`, one needs to instantiate a `CommitKVCacheManager` and set it by calling `SetInterBlockCache()` before calling one of `LoadLatestVersion()`, `LoadLatestVersionAndUpgrade(...)`, `LoadVersionAndUpgrade(...)` and `LoadVersion(version)`. + +### API + +#### CommitKVCacheManager + +The method `NewCommitKVStoreCacheManager` creates a new cache manager and returns it. + +| Name | Type | Description | +| ------------- | ---------|------- | +| size | integer | Determines the capacity of each of the KVCache maintained by the manager | + +```go +func NewCommitKVStoreCacheManager(size uint) CommitKVStoreCacheManager { + manager = CommitKVStoreCacheManager{size, make(map[string]CommitKVStore)} + return manager +} +``` + +`GetStoreCache` returns a cache from the CommitStoreCacheManager for a given store key. If no cache exists for the store key, then one is created and set. + +| Name | Type | Description | +| ------------- | ---------|------- | +| manager | `CommitKVStoreCacheManager` | The cache manager | +| storeKey | string | The store key of the store being retrieved | +| store | `CommitKVStore` | The store that it is cached in case the manager does not have any in its map of caches | + +```go +func GetStoreCache( + manager CommitKVStoreCacheManager, + storeKey string, + store CommitKVStore) CommitKVStore { + + if manager.caches.has(storeKey) { + return manager.caches.get(storeKey) + } else { + cache = CommitKVStoreCacheManager{store, manager.cacheSize} + manager.set(storeKey, cache) + return cache + } +} +``` + +`Unwrap` returns the underlying CommitKVStore for a given store key. + +| Name | Type | Description | +| ------------- | ---------|------- | +| manager | `CommitKVStoreCacheManager` | The cache manager | +| storeKey | string | The store key of the store being unwrapped | + +```go +func Unwrap( + manager CommitKVStoreCacheManager, + storeKey string) CommitKVStore { + + if manager.caches.has(storeKey) { + cache = manager.caches.get(storeKey) + return cache.store + } else { + return nil + } +} +``` + +`Reset` resets the manager's map of caches. + +| Name | Type | Description | +| ------------- | ---------|------- | +| manager | `CommitKVStoreCacheManager` | The cache manager | + +```go +function Reset(manager CommitKVStoreCacheManager) { + + for (let storeKey of manager.caches.keys()) { + manager.caches.delete(storeKey) + } +} +``` + +#### CommitKVStoreCache + +`NewCommitKVStoreCache` creates a new `CommitKVStoreCache` and returns it. + +| Name | Type | Description | +| ------------- | ---------|------- | +| store | CommitKVStore | The store to be cached | +| size | string | Determines the capacity of the cache being created | + +```go +func NewCommitKVStoreCache( + store CommitKVStore, + size uint) CommitKVStoreCache { + KVCache = CommitKVStoreCache{store, NewCache(size)} + return KVCache +} +``` + +`Get` retrieves a value by key. It first looks in the cache. If the key is not in the cache, the query is delegated to the underlying `CommitKVStore`. In the latter case, the key/value pair is cached. The method returns the value. + +| Name | Type | Description | +| ------------- | ---------|------- | +| KVCache | `CommitKVStoreCache` | The `CommitKVStoreCache` from which the key/value pair is retrieved | +| key | string | Key of the key/value pair being retrieved | + +```go +func Get( + KVCache CommitKVStoreCache, + key string) []byte { + valueCache, success := KVCache.cache.Get(key) + if success { + // cache hit + return valueCache + } else { + // cache miss + valueStore = KVCache.store.Get(key) + KVCache.cache.Add(key, valueStore) + return valueStore + } +} +``` + +`Set` inserts a key/value pair into both the write-through cache and the underlying `CommitKVStore`. + +| Name | Type | Description | +| ------------- | ---------|------- | +| KVCache | `CommitKVStoreCache` | The `CommitKVStoreCache` to which the key/value pair is inserted | +| key | string | Key of the key/value pair being inserted | +| value | []byte | Value of the key/value pair being inserted | + +```go +func Set( + KVCache CommitKVStoreCache, + key string, + value []byte) { + + KVCache.cache.Add(key, value) + KVCache.store.Set(key, value) +} +``` + +`Delete` removes a key/value pair from both the write-through cache and the underlying `CommitKVStore`. + +| Name | Type | Description | +| ------------- | ---------|------- | +| KVCache | `CommitKVStoreCache` | The `CommitKVStoreCache` from which the key/value pair is deleted | +| key | string | Key of the key/value pair being deleted | + +```go +func Delete( + KVCache CommitKVStoreCache, + key string) { + + KVCache.cache.Remove(key) + KVCache.store.Delete(key) +} +``` + +`CacheWrap` wraps a `CommitKVStoreCache` with another caching layer (`CacheKV`). + +> It is unclear whether there is a use case for `CacheWrap`. + +| Name | Type | Description | +| ------------- | ---------|------- | +| KVCache | `CommitKVStoreCache` | The `CommitKVStoreCache` being wrapped | + +```go +func CacheWrap( + KVCache CommitKVStoreCache) { + + return CacheKV.NewStore(KVCache) +} +``` + +### Implementation details + +The inter-block cache implementation uses a fixed-sized adaptive replacement cache (ARC) as cache. [The ARC implementation](https://github.com/hashicorp/golang-lru/blob/master/arc.go) is thread-safe. ARC is an enhancement over the standard LRU cache in that tracks both frequency and recency of use. This avoids a burst in access to new entries from evicting the frequently used older entries. It adds some additional tracking overhead to a standard LRU cache, computationally it is roughly `2x` the cost, and the extra memory overhead is linear with the size of the cache. The default cache size is `1000`. + +## History + +Dec 20, 2022 - Initial draft finished and submitted as a PR + +## Copyright + +All content herein is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/docs/develop/advanced-concepts/06-encoding.md b/docs/develop/advanced-concepts/06-encoding.md new file mode 100644 index 000000000..d26acde28 --- /dev/null +++ b/docs/develop/advanced-concepts/06-encoding.md @@ -0,0 +1,350 @@ +--- +sidebar_position: 1 +--- + +# Encoding + +:::note Synopsis +While encoding in the Cosmos SDK used to be mainly handled by `go-amino` codec, the Cosmos SDK is moving towards using `gogoprotobuf` for both state and client-side encoding. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) + +::: + +## Encoding + +The Cosmos SDK utilizes two binary wire encoding protocols, [Amino](https://github.com/tendermint/go-amino/) which is an object encoding specification and [Protocol Buffers](https://developers.google.com/protocol-buffers), a subset of Proto3 with an extension for +interface support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) +for more information on Proto3, which Amino is largely compatible with (but not with Proto2). + +Due to Amino having significant performance drawbacks, being reflection-based, and +not having any meaningful cross-language/client support, Protocol Buffers, specifically +[gogoprotobuf](https://github.com/cosmos/gogoproto/), is being used in place of Amino. +Note, this process of using Protocol Buffers over Amino is still an ongoing process. + +Binary wire encoding of types in the Cosmos SDK can be broken down into two main +categories, client encoding and store encoding. Client encoding mainly revolves +around transaction processing and signing, whereas store encoding revolves around +types used in state-machine transitions and what is ultimately stored in the Merkle +tree. + +For store encoding, protobuf definitions can exist for any type and will typically +have an Amino-based "intermediary" type. Specifically, the protobuf-based type +definition is used for serialization and persistence, whereas the Amino-based type +is used for business logic in the state-machine where they may convert back-n-forth. +Note, the Amino-based types may slowly be phased-out in the future, so developers +should take note to use the protobuf message definitions where possible. + +In the `codec` package, there exists two core interfaces, `BinaryCodec` and `JSONCodec`, +where the former encapsulates the current Amino interface except it operates on +types implementing the latter instead of generic `interface{}` types. + +In addition, there exists two implementations of `Codec`. The first being +`AminoCodec`, where both binary and JSON serialization is handled via Amino. The +second being `ProtoCodec`, where both binary and JSON serialization is handled +via Protobuf. + +This means that modules may use Amino or Protobuf encoding, but the types must +implement `ProtoMarshaler`. If modules wish to avoid implementing this interface +for their types, they may use an Amino codec directly. + +### Amino + +Every module uses an Amino codec to serialize types and interfaces. This codec typically +has types and interfaces registered in that module's domain only (e.g. messages), +but there are exceptions like `x/gov`. Each module exposes a `RegisterLegacyAminoCodec` function +that allows a user to provide a codec and have all the types registered. An application +will call this method for each necessary module. + +Where there is no protobuf-based type definition for a module (see below), Amino +is used to encode and decode raw wire bytes to the concrete type or interface: + +```go +bz := keeper.cdc.MustMarshal(typeOrInterface) +keeper.cdc.MustUnmarshal(bz, &typeOrInterface) +``` + +Note, there are length-prefixed variants of the above functionality and this is +typically used for when the data needs to be streamed or grouped together +(e.g. `ResponseDeliverTx.Data`) + +#### Authz authorizations and Gov/Group proposals + +Since authz's `MsgExec` and `MsgGrant` message types, as well as gov's and group's `MsgSubmitProposal`, can contain different messages instances, it is important that developers +add the following code inside the `init` method of their module's `codec.go` file: + +```go +import ( + authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" + govcodec "github.com/cosmos/cosmos-sdk/x/gov/codec" + groupcodec "github.com/cosmos/cosmos-sdk/x/group/codec" +) + +init() { + // Register all Amino interfaces and concrete types on the authz and gov Amino codec so that this can later be + // used to properly serialize MsgGrant, MsgExec and MsgSubmitProposal instances + RegisterLegacyAminoCodec(authzcodec.Amino) + RegisterLegacyAminoCodec(govcodec.Amino) + RegisterLegacyAminoCodec(groupcodec.Amino) +} +``` + +This will allow the `x/authz` module to properly serialize and de-serializes `MsgExec` instances using Amino, +which is required when signing this kind of messages using a Ledger. + +### Gogoproto + +Modules are encouraged to utilize Protobuf encoding for their respective types. In the Cosmos SDK, we use the [Gogoproto](https://github.com/cosmos/gogoproto) specific implementation of the Protobuf spec that offers speed and DX improvements compared to the official [Google protobuf implementation](https://github.com/protocolbuffers/protobuf). + +### Guidelines for protobuf message definitions + +In addition to [following official Protocol Buffer guidelines](https://developers.google.com/protocol-buffers/docs/proto3#simple), we recommend using these annotations in .proto files when dealing with interfaces: + +* use `cosmos_proto.accepts_interface` to annote `Any` fields that accept interfaces + * pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` + * example: `(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"` (and not just `Content`) +* annotate interface implementations with `cosmos_proto.implements_interface` + * pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` + * example: `(cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"` (and not just `Authorization`) + +Code generators can then match the `accepts_interface` and `implements_interface` annotations to know whether some Protobuf messages are allowed to be packed in a given `Any` field or not. + +### Transaction Encoding + +Another important use of Protobuf is the encoding and decoding of +[transactions](01-transactions.md). Transactions are defined by the application or +the Cosmos SDK but are then passed to the underlying consensus engine to be relayed to +other peers. Since the underlying consensus engine is agnostic to the application, +the consensus engine accepts only transactions in the form of raw bytes. + +* The `TxEncoder` object performs the encoding. +* The `TxDecoder` object performs the decoding. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L76-L80 +``` + +A standard implementation of both these objects can be found in the [`auth/tx` module](../../integrate/modules/auth/2-tx.md): + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/decoder.go +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/encoder.go +``` + +See [ADR-020](../../integrate/architecture/adr-020-protobuf-transaction-encoding.md) for details of how a transaction is encoded. + +### Interface Encoding and Usage of `Any` + +The Protobuf DSL is strongly typed, which can make inserting variable-typed fields difficult. Imagine we want to create a `Profile` protobuf message that serves as a wrapper over [an account](../high-level-concepts/03-accounts.md): + +```protobuf +message Profile { + // account is the account associated to a profile. + cosmos.auth.v1beta1.BaseAccount account = 1; + // bio is a short description of the account. + string bio = 4; +} +``` + +In this `Profile` example, we hardcoded `account` as a `BaseAccount`. However, there are several other types of [user accounts related to vesting](../../integrate/modules/auth/1-vesting.md), such as `BaseVestingAccount` or `ContinuousVestingAccount`. All of these accounts are different, but they all implement the `AccountI` interface. How would you create a `Profile` that allows all these types of accounts with an `account` field that accepts an `AccountI` interface? + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/types/account.go#L307-L330 +``` + +In [ADR-019](../../integrate/architecture/adr-019-protobuf-state-encoding.md), it has been decided to use [`Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto)s to encode interfaces in protobuf. An `Any` contains an arbitrary serialized message as bytes, along with a URL that acts as a globally unique identifier for and resolves to that message's type. This strategy allows us to pack arbitrary Go types inside protobuf messages. Our new `Profile` then looks like: + +```protobuf +message Profile { + // account is the account associated to a profile. + google.protobuf.Any account = 1 [ + (cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.AccountI"; // Asserts that this field only accepts Go types implementing `AccountI`. It is purely informational for now. + ]; + // bio is a short description of the account. + string bio = 4; +} +``` + +To add an account inside a profile, we need to "pack" it inside an `Any` first, using `codectypes.NewAnyWithValue`: + +```go +var myAccount AccountI +myAccount = ... // Can be a BaseAccount, a ContinuousVestingAccount or any struct implementing `AccountI` + +// Pack the account into an Any +accAny, err := codectypes.NewAnyWithValue(myAccount) +if err != nil { + return nil, err +} + +// Create a new Profile with the any. +profile := Profile { + Account: accAny, + Bio: "some bio", +} + +// We can then marshal the profile as usual. +bz, err := cdc.Marshal(profile) +jsonBz, err := cdc.MarshalJSON(profile) +``` + +To summarize, to encode an interface, you must 1/ pack the interface into an `Any` and 2/ marshal the `Any`. For convenience, the Cosmos SDK provides a `MarshalInterface` method to bundle these two steps. Have a look at [a real-life example in the x/auth module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/keeper.go#L240-L243). + +The reverse operation of retrieving the concrete Go type from inside an `Any`, called "unpacking", is done with the `GetCachedValue()` on `Any`. + +```go +profileBz := ... // The proto-encoded bytes of a Profile, e.g. retrieved through gRPC. +var myProfile Profile +// Unmarshal the bytes into the myProfile struct. +err := cdc.Unmarshal(profilebz, &myProfile) + +// Let's see the types of the Account field. +fmt.Printf("%T\n", myProfile.Account) // Prints "Any" +fmt.Printf("%T\n", myProfile.Account.GetCachedValue()) // Prints "BaseAccount", "ContinuousVestingAccount" or whatever was initially packed in the Any. + +// Get the address of the accountt. +accAddr := myProfile.Account.GetCachedValue().(AccountI).GetAddress() +``` + +It is important to note that for `GetCachedValue()` to work, `Profile` (and any other structs embedding `Profile`) must implement the `UnpackInterfaces` method: + +```go +func (p *Profile) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + if p.Account != nil { + var account AccountI + return unpacker.UnpackAny(p.Account, &account) + } + + return nil +} +``` + +The `UnpackInterfaces` gets called recursively on all structs implementing this method, to allow all `Any`s to have their `GetCachedValue()` correctly populated. + +For more information about interface encoding, and especially on `UnpackInterfaces` and how the `Any`'s `type_url` gets resolved using the `InterfaceRegistry`, please refer to [ADR-019](../../integrate/architecture/adr-019-protobuf-state-encoding.md). + +#### `Any` Encoding in the Cosmos SDK + +The above `Profile` example is a fictive example used for educational purposes. In the Cosmos SDK, we use `Any` encoding in several places (non-exhaustive list): + +* the `cryptotypes.PubKey` interface for encoding different types of public keys, +* the `sdk.Msg` interface for encoding different `Msg`s in a transaction, +* the `AccountI` interface for encodinig different types of accounts (similar to the above example) in the x/auth query responses, +* the `Evidencei` interface for encoding different types of evidences in the x/evidence module, +* the `AuthorizationI` interface for encoding different types of x/authz authorizations, +* the [`Validator`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/types/staking.pb.go#L340-L377) struct that contains information about a validator. + +A real-life example of encoding the pubkey as `Any` inside the Validator struct in x/staking is shown in the following example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/types/validator.go#L41-L64 +``` + +#### `Any`'s TypeURL + +When packing a protobuf message inside an `Any`, the message's type is uniquely defined by its type URL, which is the message's fully qualified name prefixed by a `/` (slash) character. In some implementations of `Any`, like the gogoproto one, there's generally [a resolvable prefix, e.g. `type.googleapis.com`](https://github.com/gogo/protobuf/blob/b03c65ea87cdc3521ede29f62fe3ce239267c1bc/protobuf/google/protobuf/any.proto#L87-L91). However, in the Cosmos SDK, we made the decision to not include such prefix, to have shorter type URLs. The Cosmos SDK's own `Any` implementation can be found in `github.com/cosmos/cosmos-sdk/codec/types`. + +The Cosmos SDK is also switching away from gogoproto to the official `google.golang.org/protobuf` (known as the Protobuf API v2). Its default `Any` implementation also contains the [`type.googleapis.com`](https://github.com/protocolbuffers/protobuf-go/blob/v1.28.1/types/known/anypb/any.pb.go#L266) prefix. To maintain compatibility with the SDK, the following methods from `"google.golang.org/protobuf/types/known/anypb"` should not be used: + +* `anypb.New` +* `anypb.MarshalFrom` +* `anypb.Any#MarshalFrom` + +Instead, the Cosmos SDK provides helper functions in `"github.com/cosmos/cosmos-proto/anyutil"`, which create an official `anypb.Any` without inserting the prefixes: + +* `anyutil.New` +* `anyutil.MarshalFrom` + +For example, to pack a `sdk.Msg` called `internalMsg`, use: + +```diff +import ( +- "google.golang.org/protobuf/types/known/anypb" ++ "github.com/cosmos/cosmos-proto/anyutil" +) + +- anyMsg, err := anypb.New(internalMsg.Message().Interface()) ++ anyMsg, err := anyutil.New(internalMsg.Message().Interface()) + +- fmt.Println(anyMsg.TypeURL) // type.googleapis.com/cosmos.bank.v1beta1.MsgSend ++ fmt.Println(anyMsg.TypeURL) // /cosmos.bank.v1beta1.MsgSend +``` + +## FAQ + +### How to create modules using protobuf encoding + +#### Defining module types + +Protobuf types can be defined to encode: + +* state +* [`Msg`s](../../integrate/building-modules/02-messages-and-queries.md#messages) +* [Query services](../../integrate/building-modules/04-query-services.md) +* [genesis](../../integrate/building-modules/08-genesis.md) + +#### Naming and conventions + +We encourage developers to follow industry guidelines: [Protocol Buffers style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide), see more details in [ADR 023](../../integrate/architecture/adr-023-protobuf-naming.md) + +### How to update modules to protobuf encoding + +If modules do not contain any interfaces (e.g. `Account` or `Content`), then they +may simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf (see 1. for further guidelines) and accept a `Marshaler` as the codec which is implemented via the `ProtoCodec` +without any further customization. + +However, if a module type composes an interface, it must wrap it in the `sdk.Any` (from `/types` package) type. To do that, a module-level .proto file must use [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto) for respective message type interface types. + +For example, in the `x/evidence` module defines an `Evidence` interface, which is used by the `MsgSubmitEvidence`. The structure definition must use `sdk.Any` to wrap the evidence file. In the proto file we define it as follows: + +```protobuf +// proto/cosmos/evidence/v1beta1/tx.proto + +message MsgSubmitEvidence { + string submitter = 1; + google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "cosmos.evidence.v1beta1.Evidence"]; +} +``` + +The Cosmos SDK `codec.Codec` interface provides support methods `MarshalInterface` and `UnmarshalInterface` to easy encoding of state to `Any`. + +Module should register interfaces using `InterfaceRegistry` which provides a mechanism for registering interfaces: `RegisterInterface(protoName string, iface interface{}, impls ...proto.Message)` and implementations: `RegisterImplementations(iface interface{}, impls ...proto.Message)` that can be safely unpacked from Any, similarly to type registration with Amino: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/types/interface_registry.go#L24-L57 +``` + +In addition, an `UnpackInterfaces` phase should be introduced to deserialization to unpack interfaces before they're needed. Protobuf types that contain a protobuf `Any` either directly or via one of their members should implement the `UnpackInterfacesMessage` interface: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +### Custom Stringer + +Using `option (gogoproto.goproto_stringer) = false;` in a proto message definition leads to unexpected behaviour, like returning wrong output or having missing fields in the output. +For that reason a proto Message's `String()` must not be customized, and the `goproto_stringer` option must be avoided. + +A correct YAML output can be obtained through ProtoJSON, using the `JSONToYAML` function: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/yaml.go#L8-L20 +``` + +For example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/types/account.go#L141-L151 +``` diff --git a/docs/develop/advanced-concepts/07-cli.md b/docs/develop/advanced-concepts/07-cli.md new file mode 100644 index 000000000..89533c1c0 --- /dev/null +++ b/docs/develop/advanced-concepts/07-cli.md @@ -0,0 +1,195 @@ +--- +sidebar_position: 1 +--- + +# Command-Line Interface + +:::note Synopsis +This document describes how command-line interface (CLI) works on a high-level, for an [**application**](../high-level-concepts/00-overview-app.md). A separate document for implementing a CLI for a Cosmos SDK [**module**](../../integrate/building-modules/01-intro.md) can be found [here](../../integrate/building-modules/09-module-interfaces.md#cli). +::: + +## Command-Line Interface + +### Example Command + +There is no set way to create a CLI, but Cosmos SDK modules typically use the [Cobra Library](https://github.com/spf13/cobra). Building a CLI with Cobra entails defining commands, arguments, and flags. [**Commands**](#root-command) understand the actions users wish to take, such as `tx` for creating a transaction and `query` for querying the application. Each command can also have nested subcommands, necessary for naming the specific transaction type. Users also supply **Arguments**, such as account numbers to send coins to, and [**Flags**](#flags) to modify various aspects of the commands, such as gas prices or which node to broadcast to. + +Here is an example of a command a user might enter to interact with the simapp CLI `simd` in order to send some tokens: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --gas auto --gas-prices +``` + +The first four strings specify the command: + +* The root command for the entire application `simd`. +* The subcommand `tx`, which contains all commands that let users create transactions. +* The subcommand `bank` to indicate which module to route the command to ([`x/bank`](../../integrate/modules/bank/README.md) module in this case). +* The type of transaction `send`. + +The next two strings are arguments: the `from_address` the user wishes to send from, the `to_address` of the recipient, and the `amount` they want to send. Finally, the last few strings of the command are optional flags to indicate how much the user is willing to pay in fees (calculated using the amount of gas used to execute the transaction and the gas prices provided by the user). + +The CLI interacts with a [node](03-node.md) to handle this command. The interface itself is defined in a `main.go` file. + +### Building the CLI + +The `main.go` file needs to have a `main()` function that creates a root command, to which all the application commands will be added as subcommands. The root command additionally handles: + +* **setting configurations** by reading in configuration files (e.g. the Cosmos SDK config file). +* **adding any flags** to it, such as `--chain-id`. +* **instantiating the `codec`** by calling the application's `MakeCodec()` function (called `MakeTestEncodingConfig` in `simapp`). The [`codec`](06-encoding.md) is used to encode and decode data structures for the application - stores can only persist `[]byte`s so the developer must define a serialization format for their data structures or use the default, Protobuf. +* **adding subcommand** for all the possible user interactions, including [transaction commands](#transaction-commands) and [query commands](#query-commands). + +The `main()` function finally creates an executor and [execute](https://pkg.go.dev/github.com/spf13/cobra#Command.Execute) the root command. See an example of `main()` function from the `simapp` application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/main.go#L12-L24 +``` + +The rest of the document will detail what needs to be implemented for each step and include smaller portions of code from the `simapp` CLI files. + +## Adding Commands to the CLI + +Every application CLI first constructs a root command, then adds functionality by aggregating subcommands (often with further nested subcommands) using `rootCmd.AddCommand()`. The bulk of an application's unique capabilities lies in its transaction and query commands, called `TxCmd` and `QueryCmd` respectively. + +### Root Command + +The root command (called `rootCmd`) is what the user first types into the command line to indicate which application they wish to interact with. The string used to invoke the command (the "Use" field) is typically the name of the application suffixed with `-d`, e.g. `simd` or `gaiad`. The root command typically includes the following commands to support basic functionality in the application. + +* **Status** command from the Cosmos SDK rpc client tools, which prints information about the status of the connected [`Node`](03-node.md). The Status of a node includes `NodeInfo`,`SyncInfo` and `ValidatorInfo`. +* **Keys** [commands](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/keys) from the Cosmos SDK client tools, which includes a collection of subcommands for using the key functions in the Cosmos SDK crypto tools, including adding a new key and saving it to the keyring, listing all public keys stored in the keyring, and deleting a key. For example, users can type `simd keys add ` to add a new key and save an encrypted copy to the keyring, using the flag `--recover` to recover a private key from a seed phrase or the flag `--multisig` to group multiple keys together to create a multisig key. For full details on the `add` key command, see the code [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/keys/add.go). For more details about usage of `--keyring-backend` for storage of key credentials look at the [keyring docs](../../user/run-node/00-keyring.md). +* **Server** commands from the Cosmos SDK server package. These commands are responsible for providing the mechanisms necessary to start an ABCI CometBFT application and provides the CLI framework (based on [cobra](https://github.com/spf13/cobra)) necessary to fully bootstrap an application. The package exposes two core functions: `StartCmd` and `ExportCmd` which creates commands to start the application and export state respectively. +Learn more [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server). +* [**Transaction**](#transaction-commands) commands. +* [**Query**](#query-commands) commands. + +Next is an example `rootCmd` function from the `simapp` application. It instantiates the root command, adds a [*persistent* flag](#flags) and `PreRun` function to be run before every execution, and adds all of the necessary subcommands. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L38-L92 +``` + +`rootCmd` has a function called `initAppConfig()` which is useful for setting the application's custom configs. +By default app uses CometBFT app config template from Cosmos SDK, which can be over-written via `initAppConfig()`. +Here's an example code to override default `app.toml` template. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L106-L161 +``` + +The `initAppConfig()` also allows overriding the default Cosmos SDK's [server config](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/config/config.go#L235). One example is the `min-gas-prices` config, which defines the minimum gas prices a validator is willing to accept for processing a transaction. By default, the Cosmos SDK sets this parameter to `""` (empty string), which forces all validators to tweak their own `app.toml` and set a non-empty value, or else the node will halt on startup. This might not be the best UX for validators, so the chain developer can set a default `app.toml` value for validators inside this `initAppConfig()` function. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L126-L142 +``` + +The root-level `status` and `keys` subcommands are common across most applications and do not interact with application state. The bulk of an application's functionality - what users can actually *do* with it - is enabled by its `tx` and `query` commands. + +### Transaction Commands + +[Transactions](01-transactions.md) are objects wrapping [`Msg`s](../../integrate/building-modules/02-messages-and-queries.md#messages) that trigger state changes. To enable the creation of transactions using the CLI interface, a function `txCommand` is generally added to the `rootCmd`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L177-L184 +``` + +This `txCommand` function adds all the transaction available to end-users for the application. This typically includes: + +* **Sign command** from the [`auth`](../../integrate/modules/auth/README.md) module that signs messages in a transaction. To enable multisig, add the `auth` module's `MultiSign` command. Since every transaction requires some sort of signature in order to be valid, the signing command is necessary for every application. +* **Broadcast command** from the Cosmos SDK client tools, to broadcast transactions. +* **All [module transaction commands](../../integrate/building-modules/09-module-interfaces.md#transaction-commands)** the application is dependent on, retrieved by using the [basic module manager's](../../integrate/building-modules/01-module-manager.md#basic-manager) `AddTxCommands()` function. + +Here is an example of a `txCommand` aggregating these subcommands from the `simapp` application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L227-L251 +``` + +### Query Commands + +[**Queries**](../../integrate/building-modules/02-messages-and-queries.md#queries) are objects that allow users to retrieve information about the application's state. To enable the creation of queries using the CLI interface, a function `queryCommand` is generally added to the `rootCmd`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L177-L184 +``` + +This `queryCommand` function adds all the queries available to end-users for the application. This typically includes: + +* **QueryTx** and/or other transaction query commands] from the `auth` module which allow the user to search for a transaction by inputting its hash, a list of tags, or a block height. These queries allow users to see if transactions have been included in a block. +* **Account command** from the `auth` module, which displays the state (e.g. account balance) of an account given an address. +* **Validator command** from the Cosmos SDK rpc client tools, which displays the validator set of a given height. +* **Block command** from the Cosmos SDK RPC client tools, which displays the block data for a given height. +* **All [module query commands](../../integrate/building-modules/09-module-interfaces.md#query-commands)** the application is dependent on, retrieved by using the [basic module manager's](../../integrate/building-modules/01-module-manager.md#basic-manager) `AddQueryCommands()` function. + +Here is an example of a `queryCommand` aggregating subcommands from the `simapp` application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L204-L225 +``` + +## Flags + +Flags are used to modify commands; developers can include them in a `flags.go` file with their CLI. Users can explicitly include them in commands or pre-configure them by inside their [`app.toml`](../../user/run-node/02-interact-node.md#configuring-the-node-using-apptoml). Commonly pre-configured flags include the `--node` to connect to and `--chain-id` of the blockchain the user wishes to interact with. + +A *persistent* flag (as opposed to a *local* flag) added to a command transcends all of its children: subcommands will inherit the configured values for these flags. Additionally, all flags have default values when they are added to commands; some toggle an option off but others are empty values that the user needs to override to create valid commands. A flag can be explicitly marked as *required* so that an error is automatically thrown if the user does not provide a value, but it is also acceptable to handle unexpected missing flags differently. + +Flags are added to commands directly (generally in the [module's CLI file](../../integrate/building-modules/09-module-interfaces.md#flags) where module commands are defined) and no flag except for the `rootCmd` persistent flags has to be added at application level. It is common to add a *persistent* flag for `--chain-id`, the unique identifier of the blockchain the application pertains to, to the root command. Adding this flag can be done in the `main()` function. Adding this flag makes sense as the chain ID should not be changing across commands in this application CLI. + +## Environment variables + +Each flag is bound to it's respecteve named environment variable. Then name of the environment variable consist of two parts - capital case `basename` followed by flag name of the flag. `-` must be substituted with `_`. For example flag `--home` for application with basename `GAIA` is bound to `GAIA_HOME`. It allows reducing the amount of flags typed for routine operations. For example instead of: + +```shell +gaia --home=./ --node= --chain-id="testchain-1" --keyring-backend=test tx ... --from= +``` + +this will be more convenient: + +```shell +# define env variables in .env, .envrc etc +GAIA_HOME= +GAIA_NODE= +GAIA_CHAIN_ID="testchain-1" +GAIA_KEYRING_BACKEND="test" + +# and later just use +gaia tx ... --from= +``` + +## Configurations + +It is vital that the root command of an application uses `PersistentPreRun()` cobra command property for executing the command, so all child commands have access to the server and client contexts. These contexts are set as their default values initially and maybe modified, scoped to the command, in their respective `PersistentPreRun()` functions. Note that the `client.Context` is typically pre-populated with "default" values that may be useful for all commands to inherit and override if necessary. + +Here is an example of an `PersistentPreRun()` function from `simapp`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L63-L86 +``` + +The `SetCmdClientContextHandler` call reads persistent flags via `ReadPersistentCommandFlags` which creates a `client.Context` and sets that on the root command's `Context`. + +The `InterceptConfigsPreRunHandler` call creates a viper literal, default `server.Context`, and a logger and sets that on the root command's `Context`. The `server.Context` will be modified and saved to disk. The internal `interceptConfigs` call reads or creates a CometBFT configuration based on the home path provided. In addition, `interceptConfigs` also reads and loads the application configuration, `app.toml`, and binds that to the `server.Context` viper literal. This is vital so the application can get access to not only the CLI flags, but also to the application configuration values provided by this file. + +:::tip +When willing to configure which logger is used, do not to use `InterceptConfigsPreRunHandler`, which sets the default SDK logger, but instead use `InterceptConfigsAndCreateContext` and set the server context and the logger manually: + +```diff +-return server.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, customCMTConfig) + ++serverCtx, err := server.InterceptConfigsAndCreateContext(cmd, customAppTemplate, customAppConfig, customCMTConfig) ++if err != nil { ++ return err ++} + ++// overwrite default server logger ++logger, err := server.CreateSDKLogger(serverCtx, cmd.OutOrStdout()) ++if err != nil { ++ return err ++} ++serverCtx.Logger = logger.With(log.ModuleKey, "server") + ++// set server context ++return server.SetCmdServerContext(cmd, serverCtx) +``` + +::: diff --git a/docs/develop/advanced-concepts/08-events.md b/docs/develop/advanced-concepts/08-events.md new file mode 100644 index 000000000..5011a505e --- /dev/null +++ b/docs/develop/advanced-concepts/08-events.md @@ -0,0 +1,168 @@ +--- +sidebar_position: 1 +--- +# Events + +:::note Synopsis +`Event`s are objects that contain information about the execution of the application. They are mainly used by service providers like block explorers and wallet to track the execution of various messages and index transactions. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) +* [CometBFT Documentation on Events](https://docs.cometbft.com/v0.37/spec/abci/abci++_basic_concepts#events) + +::: + +## Events + +Events are implemented in the Cosmos SDK as an alias of the ABCI `Event` type and +take the form of: `{eventType}.{attributeKey}={attributeValue}`. + +```protobuf reference +https://github.com/cometbft/cometbft/blob/v0.37.0/proto/tendermint/abci/types.proto#L334-L343 +``` + +An Event contains: + +* A `type` to categorize the Event at a high-level; for example, the Cosmos SDK uses the `"message"` type to filter Events by `Msg`s. +* A list of `attributes` are key-value pairs that give more information about the categorized Event. For example, for the `"message"` type, we can filter Events by key-value pairs using `message.action={some_action}`, `message.module={some_module}` or `message.sender={some_sender}`. +* A `msg_index` to identify which messages relate to the same transaction + +:::tip +To parse the attribute values as strings, make sure to add `'` (single quotes) around each attribute value. +::: + +_Typed Events_ are Protobuf-defined [messages](../../integrate/architecture/adr-032-typed-events.md) used by the Cosmos SDK +for emitting and querying Events. They are defined in a `event.proto` file, on a **per-module basis** and are read as `proto.Message`. +_Legacy Events_ are defined on a **per-module basis** in the module's `/types/events.go` file. +They are triggered from the module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md) +by using the [`EventManager`](#eventmanager). + +In addition, each module documents its events under in the `Events` sections of its specs (x/{moduleName}/`README.md`). + +Lastly, Events are returned to the underlying consensus engine in the response of the following ABCI messages: + +* [`BeginBlock`](00-baseapp.md#beginblock) +* [`EndBlock`](00-baseapp.md#endblock) +* [`CheckTx`](00-baseapp.md#checktx) +* [`DeliverTx`](00-baseapp.md#delivertx) + +### Examples + +The following examples show how to query Events using the Cosmos SDK. + +| Event | Description | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tx.height=23` | Query all transactions at height 23 | +| `message.action='/cosmos.bank.v1beta1.Msg/Send'` | Query all transactions containing a x/bank `Send` [Service `Msg`](../../integrate/building-modules/03-msg-services.md). Note the `'`s around the value. | +| `message.module='bank'` | Query all transactions containing messages from the x/bank module. Note the `'`s around the value. | +| `create_validator.validator='cosmosval1...'` | x/staking-specific Event, see [x/staking SPEC](../../integrate/modules/staking/README.md). | + +## EventManager + +In Cosmos SDK applications, Events are managed by an abstraction called the `EventManager`. +Internally, the `EventManager` tracks a list of Events for the entire execution flow of a +transaction or `BeginBlock`/`EndBlock`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/events.go#L24-L27 +``` + +The `EventManager` comes with a set of useful methods to manage Events. The method +that is used most by module and application developers is `EmitTypedEvent` or `EmitEvent` that tracks +an Event in the `EventManager`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/events.go#L53-L62 +``` + +Module developers should handle Event emission via the `EventManager#EmitTypedEvent` or `EventManager#EmitEvent` in each message +`Handler` and in each `BeginBlock`/`EndBlock` handler. The `EventManager` is accessed via +the [`Context`](02-context.md), where Event should be already registered, and emitted like this: + + +**Typed events:** + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/keeper/msg_server.go#L88-L91 +``` + +**Legacy events:** + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent(eventType, sdk.NewAttribute(attributeKey, attributeValue)), +) +``` + +Module's `handler` function should also set a new `EventManager` to the `context` to isolate emitted Events per `message`: + +```go +func NewHandler(keeper Keeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) + switch msg := msg.(type) { +``` + +See the [`Msg` services](../../integrate/building-modules/03-msg-services.md) concept doc for a more detailed +view on how to typically implement Events and use the `EventManager` in modules. + +## Subscribing to Events + +You can use CometBFT's [Websocket](https://docs.cometbft.com/v0.37/core/subscription) to subscribe to Events by calling the `subscribe` RPC method: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='eventCategory' AND eventType.eventAttribute='attributeValue'" + } +} +``` + +The main `eventCategory` you can subscribe to are: + +* `NewBlock`: Contains Events triggered during `BeginBlock` and `EndBlock`. +* `Tx`: Contains Events triggered during `DeliverTx` (i.e. transaction processing). +* `ValidatorSetUpdates`: Contains validator set updates for the block. + +These Events are triggered from the `state` package after a block is committed. You can get the +full list of Event categories [on the CometBFT Go documentation](https://pkg.go.dev/github.com/cometbft/cometbft/types#pkg-constants). + +The `type` and `attribute` value of the `query` allow you to filter the specific Event you are looking for. For example, a `Mint` transaction triggers an Event of type `EventMint` and has an `Id` and an `Owner` as `attributes` (as defined in the [`events.proto` file of the `NFT` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/nft/v1beta1/event.proto#L21-L31)). + +Subscribing to this Event would be done like so: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='Tx' AND mint.owner='ownerAddress'" + } +} +``` + +where `ownerAddress` is an address following the [`AccAddress`](../high-level-concepts/03-accounts.md#addresses) format. + +The same way can be used to subscribe to [legacy events](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/types/events.go). + +## Default Events + +There are a few events that are automatically emitted for all messages, directly from `baseapp`. + +* `message.action`: The name of the message type. +* `message.sender`: The address of the message signer. +* `message.module`: The name of the module that emitted the message. + +:::tip +The module name is assumed by `baseapp` to be the second element of the message route: `"cosmos.bank.v1beta1.MsgSend" -> "bank"`. +In case a module does not follow the standard message path, (e.g. IBC), it is advised to keep emitting the module name event. +`Baseapp` only emits that event if the module have not already done so. +::: diff --git a/docs/develop/advanced-concepts/09-grpc_rest.md b/docs/develop/advanced-concepts/09-grpc_rest.md new file mode 100644 index 000000000..f13b3a135 --- /dev/null +++ b/docs/develop/advanced-concepts/09-grpc_rest.md @@ -0,0 +1,100 @@ +--- +sidebar_position: 1 +--- + +# gRPC, REST, and CometBFT Endpoints + +:::note Synopsis +This document presents an overview of all the endpoints a node exposes: gRPC, REST as well as some other endpoints. +::: + +## An Overview of All Endpoints + +Each node exposes the following endpoints for users to interact with a node, each endpoint is served on a different port. Details on how to configure each endpoint is provided in the endpoint's own section. + +* the gRPC server (default port: `9090`), +* the REST server (default port: `1317`), +* the CometBFT RPC endpoint (default port: `26657`). + +:::tip +The node also exposes some other endpoints, such as the CometBFT P2P endpoint, or the [Prometheus endpoint](https://docs.cometbft.com/v0.37/core/metrics), which are not directly related to the Cosmos SDK. Please refer to the [CometBFT documentation](https://docs.cometbft.com/v0.37/core/configuration) for more information about these endpoints. +::: + +## gRPC Server + +In the Cosmos SDK, Protobuf is the main [encoding](./06-encoding.md) library. This brings a wide range of Protobuf-based tools that can be plugged into the Cosmos SDK. One such tool is [gRPC](https://grpc.io), a modern open-source high performance RPC framework that has decent client support in several languages. + +Each module exposes a [Protobuf `Query` service](../../integrate/building-modules/02-messages-and-queries.md#queries) that defines state queries. The `Query` services and a transaction service used to broadcast transactions are hooked up to the gRPC server via the following function inside the application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/types/app.go#L46-L48 +``` + +Note: It is not possible to expose any [Protobuf `Msg` service](../../integrate/building-modules/02-messages-and-queries.md#messages) endpoints via gRPC. Transactions must be generated and signed using the CLI or programmatically before they can be broadcasted using gRPC. See [Generating, Signing, and Broadcasting Transactions](../../user/run-node/03-txs.md) for more information. + +The `grpc.Server` is a concrete gRPC server, which spawns and serves all gRPC query requests and a broadcast transaction request. This server can be configured inside `~/.simapp/config/app.toml`: + +* `grpc.enable = true|false` field defines if the gRPC server should be enabled. Defaults to `true`. +* `grpc.address = {string}` field defines the `ip:port` the server should bind to. Defaults to `localhost:9090`. + +:::tip +`~/.simapp` is the directory where the node's configuration and databases are stored. By default, it's set to `~/.{app_name}`. +::: + +Once the gRPC server is started, you can send requests to it using a gRPC client. Some examples are given in our [Interact with the Node](../../user/run-node/02-interact-node.md#using-grpc) tutorial. + +An overview of all available gRPC endpoints shipped with the Cosmos SDK is [Protobuf documentation](https://buf.build/cosmos/cosmos-sdk). + +## REST Server + +Cosmos SDK supports REST routes via gRPC-gateway. + +All routes are configured under the following fields in `~/.simapp/config/app.toml`: + +* `api.enable = true|false` field defines if the REST server should be enabled. Defaults to `false`. +* `api.address = {string}` field defines the `ip:port` the server should bind to. Defaults to `tcp://localhost:1317`. +* some additional API configuration options are defined in `~/.simapp/config/app.toml`, along with comments, please refer to that file directly. + +### gRPC-gateway REST Routes + +If, for various reasons, you cannot use gRPC (for example, you are building a web application, and browsers don't support HTTP2 on which gRPC is built), then the Cosmos SDK offers REST routes via gRPC-gateway. + +[gRPC-gateway](https://grpc-ecosystem.github.io/grpc-gateway/) is a tool to expose gRPC endpoints as REST endpoints. For each gRPC endpoint defined in a Protobuf `Query` service, the Cosmos SDK offers a REST equivalent. For instance, querying a balance could be done via the `/cosmos.bank.v1beta1.QueryAllBalances` gRPC endpoint, or alternatively via the gRPC-gateway `"/cosmos/bank/v1beta1/balances/{address}"` REST endpoint: both will return the same result. For each RPC method defined in a Protobuf `Query` service, the corresponding REST endpoint is defined as an option: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/query.proto#L23-L30 +``` + +For application developers, gRPC-gateway REST routes needs to be wired up to the REST server, this is done by calling the `RegisterGRPCGatewayRoutes` function on the ModuleManager. + +### Swagger + +A [Swagger](https://swagger.io/) (or OpenAPIv2) specification file is exposed under the `/swagger` route on the API server. Swagger is an open specification describing the API endpoints a server serves, including description, input arguments, return types and much more about each endpoint. + +Enabling the `/swagger` endpoint is configurable inside `~/.simapp/config/app.toml` via the `api.swagger` field, which is set to true by default. + +For application developers, you may want to generate your own Swagger definitions based on your custom modules. +The Cosmos SDK's [Swagger generation script](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/protoc-swagger-gen.sh) is a good place to start. + +## CometBFT RPC + +Independently from the Cosmos SDK, CometBFT also exposes a RPC server. This RPC server can be configured by tuning parameters under the `rpc` table in the `~/.simapp/config/config.toml`, the default listening address is `tcp://localhost:26657`. An OpenAPI specification of all CometBFT RPC endpoints is available [here](https://docs.cometbft.com/master/rpc/). + +Some CometBFT RPC endpoints are directly related to the Cosmos SDK: + +* `/abci_query`: this endpoint will query the application for state. As the `path` parameter, you can send the following strings: + * any Protobuf fully-qualified service method, such as `/cosmos.bank.v1beta1.Query/AllBalances`. The `data` field should then include the method's request parameter(s) encoded as bytes using Protobuf. + * `/app/simulate`: this will simulate a transaction, and return some information such as gas used. + * `/app/version`: this will return the application's version. + * `/store/{path}`: this will query the store directly. + * `/p2p/filter/addr/{port}`: this will return a filtered list of the node's P2P peers by address port. + * `/p2p/filter/id/{id}`: this will return a filtered list of the node's P2P peers by ID. +* `/broadcast_tx_{aync,async,commit}`: these 3 endpoint will broadcast a transaction to other peers. CLI, gRPC and REST expose [a way to broadcast transations](01-transactions.md#broadcasting-the-transaction), but they all use these 3 CometBFT RPCs under the hood. + +## Comparison Table + +| Name | Advantages | Disadvantages | +| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| gRPC | - can use code-generated stubs in various languages
- supports streaming and bidirectional communication (HTTP2)
- small wire binary sizes, faster transmission | - based on HTTP2, not available in browsers
- learning curve (mostly due to Protobuf) | +| REST | - ubiquitous
- client libraries in all languages, faster implementation
| - only supports unary request-response communication (HTTP1.1)
- bigger over-the-wire message sizes (JSON) | +| CometBFT RPC | - easy to use | - bigger over-the-wire message sizes (JSON) | diff --git a/docs/develop/advanced-concepts/10-ocap.md b/docs/develop/advanced-concepts/10-ocap.md new file mode 100644 index 000000000..078b23e58 --- /dev/null +++ b/docs/develop/advanced-concepts/10-ocap.md @@ -0,0 +1,77 @@ +--- +sidebar_position: 1 +--- + +# Object-Capability Model + +## Intro + +When thinking about security, it is good to start with a specific threat model. Our threat model is the following: + +> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +The Cosmos SDK is designed to address this threat by being the +foundation of an object capability system. + +> The structural properties of object capability systems favor +> modularity in code design and ensure reliable encapsulation in +> code implementation. +> +> These structural properties facilitate the analysis of some +> security properties of an object-capability program or operating +> system. Some of these — in particular, information flow properties +> — can be analyzed at the level of object references and +> connectivity, independent of any knowledge or analysis of the code +> that determines the behavior of the objects. +> +> As a consequence, these security properties can be established +> and maintained in the presence of new objects that contain unknown +> and possibly malicious code. +> +> These structural properties stem from the two rules governing +> access to existing objects: +> +> 1. An object A can send a message to B only if object A holds a +> reference to B. +> 2. An object A can obtain a reference to C only +> if object A receives a message containing a reference to C. As a +> consequence of these two rules, an object can obtain a reference +> to another object only through a preexisting chain of references. +> In short, "Only connectivity begets connectivity." + +For an introduction to object-capabilities, see this [Wikipedia article](https://en.wikipedia.org/wiki/Object-capability_model). + +## Ocaps in practice + +The idea is to only reveal what is necessary to get the work done. + +For example, the following code snippet violates the object capabilities +principle: + +```go +type AppAccount struct {...} +account := &AppAccount{ + Address: pub.Address(), + Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)}, +} +sumValue := externalModule.ComputeSumValue(account) +``` + +The method `ComputeSumValue` implies a pure function, yet the implied +capability of accepting a pointer value is the capability to modify that +value. The preferred method signature should take a copy instead. + +```go +sumValue := externalModule.ComputeSumValue(*account) +``` + +In the Cosmos SDK, you can see the application of this principle in simapp. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L294-L318 +``` + +The following diagram shows the current dependencies between keepers. + +![Keeper dependencies](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/keeper_dependencies.svg) + diff --git a/docs/develop/advanced-concepts/11-telemetry.md b/docs/develop/advanced-concepts/11-telemetry.md new file mode 100644 index 000000000..2be2dc680 --- /dev/null +++ b/docs/develop/advanced-concepts/11-telemetry.md @@ -0,0 +1,128 @@ +--- +sidebar_position: 1 +--- + +# Telemetry + +:::note Synopsis +Gather relevant insights about your application and modules with custom metrics and telemetry. +::: + +The Cosmos SDK enables operators and developers to gain insight into the performance and behavior of +their application through the use of the `telemetry` package. To enable telemetrics, set `telemetry.enabled = true` in the app.toml config file. + +The Cosmos SDK currently supports enabling in-memory and prometheus as telemetry sinks. In-memory sink is always attached (when the telemetry is enabled) with 10 second interval and 1 minute retention. This means that metrics will be aggregated over 10 seconds, and metrics will be kept alive for 1 minute. + +To query active metrics (see retention note above) you have to enable API server (`api.enabled = true` in the app.toml). Single API endpoint is exposed: `http://localhost:1317/metrics?format={text|prometheus}`, the default being `text`. + +## Emitting metrics + +If telemetry is enabled via configuration, a single global metrics collector is registered via the +[go-metrics](https://github.com/armon/go-metrics) library. This allows emitting and collecting +metrics through simple [API](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/telemetry/wrapper.go). Example: + +```go +func EndBlocker(ctx sdk.Context, k keeper.Keeper) { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker) + + // ... +} +``` + +Developers may use the `telemetry` package directly, which provides wrappers around metric APIs +that include adding useful labels, or they must use the `go-metrics` library directly. It is preferable +to add as much context and adequate dimensionality to metrics as possible, so the `telemetry` package +is advised. Regardless of the package or method used, the Cosmos SDK supports the following metrics +types: + +* gauges +* summaries +* counters + +## Labels + +Certain components of modules will have their name automatically added as a label (e.g. `BeginBlock`). +Operators may also supply the application with a global set of labels that will be applied to all +metrics emitted using the `telemetry` package (e.g. chain-id). Global labels are supplied as a list +of [name, value] tuples. + +Example: + +```toml +global-labels = [ + ["chain_id", "chain-OfXo4V"], +] +``` + +## Cardinality + +Cardinality is key, specifically label and key cardinality. Cardinality is how many unique values of +something there are. So there is naturally a tradeoff between granularity and how much stress is put +on the telemetry sink in terms of indexing, scrape, and query performance. + +Developers should take care to support metrics with enough dimensionality and granularity to be +useful, but not increase the cardinality beyond the sink's limits. A general rule of thumb is to not +exceed a cardinality of 10. + +Consider the following examples with enough granularity and adequate cardinality: + +* begin/end blocker time +* tx gas used +* block gas used +* amount of tokens minted +* amount of accounts created + +The following examples expose too much cardinality and may not even prove to be useful: + +* transfers between accounts with amount +* voting/deposit amount from unique addresses + +## Supported Metrics + +| Metric | Description | Unit | Type | +|:--------------------------------|:------------------------------------------------------------------------------------------|:----------------|:--------| +| `tx_count` | Total number of txs processed via `DeliverTx` | tx | counter | +| `tx_successful` | Total number of successful txs processed via `DeliverTx` | tx | counter | +| `tx_failed` | Total number of failed txs processed via `DeliverTx` | tx | counter | +| `tx_gas_used` | The total amount of gas used by a tx | gas | gauge | +| `tx_gas_wanted` | The total amount of gas requested by a tx | gas | gauge | +| `tx_msg_send` | The total amount of tokens sent in a `MsgSend` (per denom) | token | gauge | +| `tx_msg_withdraw_reward` | The total amount of tokens withdrawn in a `MsgWithdrawDelegatorReward` (per denom) | token | gauge | +| `tx_msg_withdraw_commission` | The total amount of tokens withdrawn in a `MsgWithdrawValidatorCommission` (per denom) | token | gauge | +| `tx_msg_delegate` | The total amount of tokens delegated in a `MsgDelegate` | token | gauge | +| `tx_msg_begin_unbonding` | The total amount of tokens undelegated in a `MsgUndelegate` | token | gauge | +| `tx_msg_begin_begin_redelegate` | The total amount of tokens redelegated in a `MsgBeginRedelegate` | token | gauge | +| `tx_msg_ibc_transfer` | The total amount of tokens transferred via IBC in a `MsgTransfer` (source or sink chain) | token | gauge | +| `ibc_transfer_packet_receive` | The total amount of tokens received in a `FungibleTokenPacketData` (source or sink chain) | token | gauge | +| `new_account` | Total number of new accounts created | account | counter | +| `gov_proposal` | Total number of governance proposals | proposal | counter | +| `gov_vote` | Total number of governance votes for a proposal | vote | counter | +| `gov_deposit` | Total number of governance deposits for a proposal | deposit | counter | +| `staking_delegate` | Total number of delegations | delegation | counter | +| `staking_undelegate` | Total number of undelegations | undelegation | counter | +| `staking_redelegate` | Total number of redelegations | redelegation | counter | +| `ibc_transfer_send` | Total number of IBC transfers sent from a chain (source or sink) | transfer | counter | +| `ibc_transfer_receive` | Total number of IBC transfers received to a chain (source or sink) | transfer | counter | +| `ibc_client_create` | Total number of clients created | create | counter | +| `ibc_client_update` | Total number of client updates | update | counter | +| `ibc_client_upgrade` | Total number of client upgrades | upgrade | counter | +| `ibc_client_misbehaviour` | Total number of client misbehaviours | misbehaviour | counter | +| `ibc_connection_open-init` | Total number of connection `OpenInit` handshakes | handshake | counter | +| `ibc_connection_open-try` | Total number of connection `OpenTry` handshakes | handshake | counter | +| `ibc_connection_open-ack` | Total number of connection `OpenAck` handshakes | handshake | counter | +| `ibc_connection_open-confirm` | Total number of connection `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_open-init` | Total number of channel `OpenInit` handshakes | handshake | counter | +| `ibc_channel_open-try` | Total number of channel `OpenTry` handshakes | handshake | counter | +| `ibc_channel_open-ack` | Total number of channel `OpenAck` handshakes | handshake | counter | +| `ibc_channel_open-confirm` | Total number of channel `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_close-init` | Total number of channel `CloseInit` handshakes | handshake | counter | +| `ibc_channel_close-confirm` | Total number of channel `CloseConfirm` handshakes | handshake | counter | +| `tx_msg_ibc_recv_packet` | Total number of IBC packets received | packet | counter | +| `tx_msg_ibc_acknowledge_packet` | Total number of IBC packets acknowledged | acknowledgement | counter | +| `ibc_timeout_packet` | Total number of IBC timeout packets | timeout | counter | +| `store_iavl_get` | Duration of an IAVL `Store#Get` call | ms | summary | +| `store_iavl_set` | Duration of an IAVL `Store#Set` call | ms | summary | +| `store_iavl_has` | Duration of an IAVL `Store#Has` call | ms | summary | +| `store_iavl_delete` | Duration of an IAVL `Store#Delete` call | ms | summary | +| `store_iavl_commit` | Duration of an IAVL `Store#Commit` call | ms | summary | +| `store_iavl_query` | Duration of an IAVL `Store#Query` call | ms | summary | diff --git a/docs/develop/advanced-concepts/12-runtx_middleware.md b/docs/develop/advanced-concepts/12-runtx_middleware.md new file mode 100644 index 000000000..94f5bf19b --- /dev/null +++ b/docs/develop/advanced-concepts/12-runtx_middleware.md @@ -0,0 +1,67 @@ +--- +sidebar_position: 1 +--- + +# RunTx recovery middleware + +`BaseApp.runTx()` function handles Go panics that might occur during transactions execution, for example, keeper has faced an invalid state and paniced. +Depending on the panic type different handler is used, for instance the default one prints an error log message. +Recovery middleware is used to add custom panic recovery for Cosmos SDK application developers. + +More context can found in the corresponding [ADR-022](../../integrate/architecture/adr-022-custom-panic-handling.md) and the implementation in [recovery.go](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/recovery.go). + +## Interface + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/recovery.go#L11-L14 +``` + +`recoveryObj` is a return value for `recover()` function from the `buildin` Go package. + +**Contract:** + +* RecoveryHandler returns `nil` if `recoveryObj` wasn't handled and should be passed to the next recovery middleware; +* RecoveryHandler returns a non-nil `error` if `recoveryObj` was handled; + +## Custom RecoveryHandler register + +`BaseApp.AddRunTxRecoveryHandler(handlers ...RecoveryHandler)` + +BaseApp method adds recovery middleware to the default recovery chain. + +## Example + +Lets assume we want to emit the "Consensus failure" chain state if some particular error occurred. + +We have a module keeper that panics: + +```go +func (k FooKeeper) Do(obj interface{}) { + if obj == nil { + // that shouldn't happen, we need to crash the app + err := errorsmod.Wrap(fooTypes.InternalError, "obj is nil") + panic(err) + } +} +``` + +By default that panic would be recovered and an error message will be printed to log. To override that behaviour we should register a custom RecoveryHandler: + +```go +// Cosmos SDK application constructor +customHandler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { + return nil + } + + if fooTypes.InternalError.Is(err) { + panic(fmt.Errorf("FooKeeper did panic with error: %w", err)) + } + + return nil +} + +baseApp := baseapp.NewBaseApp(...) +baseApp.AddRunTxRecoveryHandler(customHandler) +``` diff --git a/docs/develop/advanced-concepts/13-simulation.md b/docs/develop/advanced-concepts/13-simulation.md new file mode 100644 index 000000000..960bcdbbc --- /dev/null +++ b/docs/develop/advanced-concepts/13-simulation.md @@ -0,0 +1,101 @@ +--- +sidebar_position: 1 +--- + +# Cosmos Blockchain Simulator + +The Cosmos SDK offers a full fledged simulation framework to fuzz test every +message defined by a module. + +On the Cosmos SDK, this functionality is provided by [`SimApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go), which is a +`Baseapp` application that is used for running the [`simulation`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/simulation) module. +This module defines all the simulation logic as well as the operations for +randomized parameters like accounts, balances etc. + +## Goals + +The blockchain simulator tests how the blockchain application would behave under +real life circumstances by generating and sending randomized messages. +The goal of this is to detect and debug failures that could halt a live chain, +by providing logs and statistics about the operations run by the simulator as +well as exporting the latest application state when a failure was found. + +Its main difference with integration testing is that the simulator app allows +you to pass parameters to customize the chain that's being simulated. +This comes in handy when trying to reproduce bugs that were generated in the +provided operations (randomized or not). + +## Simulation commands + +The simulation app has different commands, each of which tests a different +failure type: + +* `AppImportExport`: The simulator exports the initial app state and then it + creates a new app with the exported `genesis.json` as an input, checking for + inconsistencies between the stores. +* `AppSimulationAfterImport`: Queues two simulations together. The first one provides the app state (_i.e_ genesis) to the second. Useful to test software upgrades or hard-forks from a live chain. +* `AppStateDeterminism`: Checks that all the nodes return the same values, in the same order. +* `BenchmarkInvariants`: Analysis of the performance of running all modules' invariants (_i.e_ sequentially runs a [benchmark](https://pkg.go.dev/testing/#hdr-Benchmarks) test). An invariant checks for + differences between the values that are on the store and the passive tracker. Eg: total coins held by accounts vs total supply tracker. +* `FullAppSimulation`: General simulation mode. Runs the chain and the specified operations for a given number of blocks. Tests that there're no `panics` on the simulation. It does also run invariant checks on every `Period` but they are not benchmarked. + +Each simulation must receive a set of inputs (_i.e_ flags) such as the number of +blocks that the simulation is run, seed, block size, etc. +Check the full list of flags [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/simulation/client/cli/flags.go#L33-L57). + +## Simulator Modes + +In addition to the various inputs and commands, the simulator runs in three modes: + +1. Completely random where the initial state, module parameters and simulation + parameters are **pseudo-randomly generated**. +2. From a `genesis.json` file where the initial state and the module parameters are defined. + This mode is helpful for running simulations on a known state such as a live network export where a new (mostly likely breaking) version of the application needs to be tested. +3. From a `params.json` file where the initial state is pseudo-randomly generated but the module and simulation parameters can be provided manually. + This allows for a more controlled and deterministic simulation setup while allowing the state space to still be pseudo-randomly simulated. + The list of available parameters are listed [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/simulation/client/cli/flags.go#L59-L78). + +:::tip +These modes are not mutually exclusive. So you can for example run a randomly +generated genesis state (`1`) with manually generated simulation params (`3`). +::: + +## Usage + +This is a general example of how simulations are run. For more specific examples +check the Cosmos SDK [Makefile](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/Makefile#L282-L318). + +```bash + $ go test -mod=readonly github.com/cosmos/cosmos-sdk/simapp \ + -run=TestApp \ + ... + -v -timeout 24h +``` + +## Debugging Tips + +Here are some suggestions when encountering a simulation failure: + +* Export the app state at the height where the failure was found. You can do this + by passing the `-ExportStatePath` flag to the simulator. +* Use `-Verbose` logs. They could give you a better hint on all the operations + involved. +* Reduce the simulation `-Period`. This will run the invariants checks more + frequently. +* Print all the failed invariants at once with `-PrintAllInvariants`. +* Try using another `-Seed`. If it can reproduce the same error and if it fails + sooner, you will spend less time running the simulations. +* Reduce the `-NumBlocks` . How's the app state at the height previous to the + failure? +* Run invariants on every operation with `-SimulateEveryOperation`. _Note_: this + will slow down your simulation **a lot**. +* Try adding logs to operations that are not logged. You will have to define a + [Logger](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/keeper.go#L65-L68) on your `Keeper`. + +## Use simulation in your Cosmos SDK-based application + +Learn how you can integrate the simulation into your Cosmos SDK-based application: + +* Application Simulation Manager +* [Building modules: Simulator](../../integrate/building-modules/14-simulator.md) +* Simulator tests diff --git a/docs/develop/advanced-concepts/14-proto-docs.md b/docs/develop/advanced-concepts/14-proto-docs.md new file mode 100644 index 000000000..6c8574465 --- /dev/null +++ b/docs/develop/advanced-concepts/14-proto-docs.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 1 +--- + +# Protobuf Documentation + +See [Cosmos SDK Buf Proto-docs](https://buf.build/cosmos/cosmos-sdk/docs/main) diff --git a/docs/develop/advanced-concepts/15-tips.md b/docs/develop/advanced-concepts/15-tips.md new file mode 100644 index 000000000..7a3261233 --- /dev/null +++ b/docs/develop/advanced-concepts/15-tips.md @@ -0,0 +1,214 @@ +--- +sidebar_position: 1 +--- + +# Transaction Tips + +:::note Synopsis +Transaction tips are a mechanism to pay for transaction fees using another denom than the native fee denom of the chain. They are still in beta, and are not included by default in the SDK. +::: + +## Context + +In a Cosmos ecosystem where more and more chains are connected via [IBC](https://ibc.cosmos.network/), it happens that users want to perform actions on chains where they don't have native tokens yet. An example would be an Osmosis user who wants to vote on a proposal on the Cosmos Hub, but they don't have ATOMs in their wallet. A solution would be to swap OSMO for ATOM just for voting on this proposal, but that is cumbersome. Cross-chain DeFi project [Emeris](https://emeris.com/) is another use case. + +Transaction tips is a new solution for cross-chain transaction fees payment, whereby the transaction initiator signs a transaction without specifying fees, but uses a new `Tip` field. They send this signed transaction to a fee relayer who will choose the transaction fees and broadcast the final transaction, and the SDK provides a mechanism that will transfer the pre-defined `Tip` to the fee payer, to cover for fees. + +Assuming we have two chains, A and B, we define the following terms: + +* **the tipper**: this is the initiator of the transaction, who wants to execute a `Msg` on chain A, but doesn't have any native chain A tokens, only chain B tokens. In our example above, the tipper is the Osmosis (chain B) user wanting to vote on a Cosmos Hub (chain A) proposal. +* **the fee payer**: this is the party that will relay and broadcast the final transaction on chain A, and has chain A tokens. The tipper doesn't need to trust the feepayer. +* **the target chain**: the chain where the `Msg` is executed, chain A in this case. + +## Transaction Tips Flow + +The transaction tips flow happens in multiple steps. + +1. The tipper sends via IBC some chain B tokens to chain A. These tokens will cover for fees on the target chain A. This means that chain A's bank module holds some IBC tokens under the tipper's address. + +2. The tipper drafts a transaction to be executed on the chain A. It can include chain A `Msg`s. However, instead of creating a normal transaction, they create the following `AuxSignerData` document: + + ```protobuf reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L237-L256 + ``` + + where we have defined `SignDocDirectAux` as: + + ```protobuf reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L97 + ``` + + where `Tip` is defined as + + ```protobuf reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L226-L235 + ``` + + Notice that this document doesn't sign over the final chain A fees. Instead, it includes a `Tip` field. It also doesn't include the whole `AuthInfo` object as in `SIGN_MODE_DIRECT`, only the minimum information needed by the tipper + +3. The tipper signs the `SignDocDirectAux` document and attaches the signature to the `AuxSignerData`, then sends the signed `AuxSignerData` to the fee payer. + +4. From the signed `AuxSignerData` document, the fee payer constructs a transaction, using the following algorithm: + +* use as `TxBody` the exact `AuxSignerData.SignDocDirectAux.body_bytes`, to not alter the original intent of the tipper, +* create an `AuthInfo` with: + * `AuthInfo.Tip` copied from `AuxSignerData.SignDocDirectAux.Tip`, + * `AuthInfo.Fee` chosen by the fee payer, which should cover for the transaction gas, but also be small enough so that the tip/fee exchange rate is economically interesting for the fee payer, + * `AuthInfo.SignerInfos` has two signers: the first signer is the tipper, using the public key, sequence and sign mode specified in `AuxSignerData`; and the second signer is the fee payer, using their favorite sign mode, +* a `Signatures` array with two items: the tipper's signature from `AuxSignerData.Sig`, and the final fee payer's signature. + +5. Broadcast the final transaction signed by the two parties to the target chain. Once included, the Cosmos SDK will trigger a transfer of the `Tip` specified in the transaction from the tipper address to the fee payer address. + +### Fee Payers Market + +The benefit of transaction tips for the tipper is clear: there is no need to swap tokens before executing a cross-chain message. + +For the fee payer, the benefit is in the tip v.s. fee exchange. Put simply, the fee payer pays the fees of an unknown tipper's transaction, and gets in exchange the tip that the tipper chose. There is an economic incentive for the fee payer to do so only when the tip is greater than the transaction fees, given the exchange rates between the two tokens. + +In the future, we imagine a market where fee payers will compete to include transactions from tippers, who on their side will optimize by specifying the lowest tip possible. A number of automated services might spin up to perform transaction gas simulation and exchange rate monitoring to optimize both the tip and fee values in real-time. + +### Tipper and Fee Payer Sign Modes + +As we mentioned in the flow above, the tipper signs over the `SignDocDirectAux`, and the fee payer signs over the whole final transaction. As such, both parties might use different sign modes. + +* The tipper MUST use `SIGN_MODE_DIRECT_AUX` or `SIGN_MODE_LEGACY_AMINO_JSON`. That is because the tipper needs to sign over the body, the tip, but not the other signers' information and not over the fee (which is unknown to the tipper). +* The fee payer MUST use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. The fee payer signs over the whole transaction. + +For example, if the fee payer signs the whole transaction with `SIGN_MODE_DIRECT_AUX`, it will be rejected by the node, as that would introduce malleability issues (`SIGN_MODE_DIRECT_AUX` doesn't sign over fees). + +In both cases, using `SIGN_MODE_LEGACY_AMINO_JSON` is recommended only if hardware wallet signing is needed. + +## Enabling Tips on your Chain + +The transaction tips functionality is introduced in Cosmos SDK v0.46, so earlier versions do not have support for tips. It is however not included by default in a v0.46 app. Sending a transaction with tips to a chain which didn't enable tips will result in a no-op, i.e. the `tip` field in the transaction will be ignored. + +Enabling tips on a chain is done by adding the `TipDecorator` in the posthandler chain: + +```go +// HandlerOptions are the options required for constructing a SDK PostHandler which supports tips. +type HandlerOptions struct { + BankKeeper types.BankKeeper +} + +// MyPostHandler returns a posthandler chain with the TipDecorator. +func MyPostHandler(options HandlerOptions) (sdk.AnteHandler, error) { + if options.BankKeeper == nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "bank keeper is required for posthandler") + } + + postDecorators := []sdk.AnteDecorator{ + posthandler.NewTipDecorator(options.bankKeeper), + } + + return sdk.ChainAnteDecorators(postDecorators...), nil +} + +func (app *SimApp) setPostHandler() { + postHandler, err := MyPostHandler( + HandlerOptions{ + BankKeeper: app.BankKeeper, + }, + ) + if err != nil { + panic(err) + } + + app.SetPostHandler(postHandler) +} +``` + +Notice that `NewTipDecorator` needs a reference to the BankKeeper, for transferring the tip to the fee payer. + +## CLI Usage + +The Cosmos SDK also provides some CLI tooling for the transaction tips flow, both for the tipper and for the feepayer. + +For the tipper, the CLI `tx` subcommand has two new flags: `--aux` and `--tip`. The `--aux` flag is used to denote that we are creating an `AuxSignerData` instead of a `Tx`, and the `--tip` is used to populate its `Tip` field. + +```bash +$ simd tx gov vote 16 yes --from --aux --tip 50ibcdenom + + +### Prints the AuxSignerData as JSON: +### {"address":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2","sign_doc":{"body_bytes":"CosBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmsKLWNvc21vczFxMGF5ZjV2cTZmZDJ4eHJ3aDMwdXBnMDVoeGRueXcyaDUyNDlhMhItY29zbW9zMXdlNWoyZXI2MHV5OXF3YzBta3ptdGdtdHA5Z3F5NXY2bjhnZGdlGgsKBXN0YWtlEgIxMA==","public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AojOF/1luQ5H/nZDSrE1w3CyzGJhJdQuS7hFX5wAA6uJ"},"chain_id":"","account_number":"0","sequence":"1","tip":{"amount":[{"denom":"ibcdenom","amount":"50"}],"tipper":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2"}},"mode":"SIGN_MODE_DIRECT_AUX","sig":"v/d/bGq9FGdecs6faMG2t//nRirFTiqwFtUB65M6kh0QdUeM6jg3r8oJX1o17xkoDxJ09EyJiSyvo6fbU7vUxg=="} +``` + +It is useful to pipe the JSON output to a file, `> aux_signed_tx.json` + +For the fee payer, the Cosmos SDK added a `tx aux-to-fee` subcommand to include an `AuxSignerData` into a transaction, add fees to it, and broadcast it. + +```bash +$ simd tx aux-to-fee aux_signed_tx.json --from --fees 30atom + +### Prints the broadcasted tx response: +### code: 0 +### codespace: sdk +### data: "" +### events: [] +### gas_used: "0" +### gas_wanted: "0" +### height: "0" +### info: "" +### logs: [] +### timestamp: "" +### tx: null +``` + +Upon completion of the second command, the fee payer's balance will be down the `30atom` fees, and up the `50ibcdenom` tip. + +For both commands, the flag `--sign-mode=amino-json` is still available for hardware wallet signing. + +## Programmatic Usage + +For the tipper, the SDK exposes a new transaction builder, the `AuxTxBuilder`, for generating an `AuxSignerData`. The API of `AuxTxBuilder` is defined [in `client/tx`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx/aux_builder.go#L16), and can be used as follows: + +```go +// Note: there's no need to use clientCtx.TxConfig anymore. + +bldr := clienttx.NewAuxTxBuilder() +err := bldr.SetMsgs(msgs...) +bldr.SetAddress("cosmos1...") +bldr.SetMemo(...) +bldr.SetTip(...) +bldr.SetPubKey(...) +err := bldr.SetSignMode(...) // DIRECT_AUX or AMINO, or else error +// ... other setters are also available + +// Get the bytes to sign. +signBz, err := bldr.GetSignBytes() + +// Sign the bz using your favorite method. +sig, err := privKey.sign(signBz) + +// Set the signature +bldr.SetSig(sig) + +// Get the final auxSignerData to be sent to the fee payer +auxSignerData, err:= bldr.GetAuxSignerData() +``` + +For the fee payer, the SDK added a new method on the existing `TxBuilder` to import data from an `AuxSignerData`: + +```go +// get `auxSignerData` from tipper, see code snippet above. + +txBuilder := clientCtx.TxConfig.NewTxBuilder() +err := txBuilder.AddAuxSignerData(auxSignerData) +if err != nil { + return err +} + +// A lot of fields will be populated in txBuilder, such as its Msgs, tip +// memo, etc... + +// The fee payer choses the fee to set on the transaction. +txBuilder.SetFeePayer() +txBuilder.SetFeeAmount(...) +txBuilder.SetGasLimit(...) + +// Usual signing code +err = authclient.SignTx(...) +if err != nil { + return err +} +``` diff --git a/docs/develop/advanced-concepts/16-upgrade.md b/docs/develop/advanced-concepts/16-upgrade.md new file mode 100644 index 000000000..25b57ff86 --- /dev/null +++ b/docs/develop/advanced-concepts/16-upgrade.md @@ -0,0 +1,162 @@ +--- +sidebar_position: 1 +--- + +# In-Place Store Migrations + +:::warning +Read and understand all the in-place store migration documentation before you run a migration on a live chain. +::: + +:::note Synopsis +Upgrade your app modules smoothly with custom in-place store migration logic. +::: + +The Cosmos SDK uses two methods to perform upgrades: + +* Exporting the entire application state to a JSON file using the `export` CLI command, making changes, and then starting a new binary with the changed JSON file as the genesis file. + +* Perform upgrades in place, which significantly decrease the upgrade time for chains with a larger state. Use the [Module Upgrade Guide](../../integrate/building-modules/13-upgrade.md) to set up your application modules to take advantage of in-place upgrades. + +This document provides steps to use the In-Place Store Migrations upgrade method. + +## Tracking Module Versions + +Each module gets assigned a consensus version by the module developer. The consensus version serves as the breaking change version of the module. The Cosmos SDK keeps track of all module consensus versions in the x/upgrade `VersionMap` store. During an upgrade, the difference between the old `VersionMap` stored in state and the new `VersionMap` is calculated by the Cosmos SDK. For each identified difference, the module-specific migrations are run and the respective consensus version of each upgraded module is incremented. + +### Consensus Version + +The consensus version is defined on each app module by the module developer and serves as the breaking change version of the module. The consensus version informs the Cosmos SDK on which modules need to be upgraded. For example, if the bank module was version 2 and an upgrade introduces bank module 3, the Cosmos SDK upgrades the bank module and runs the "version 2 to 3" migration script. + +### Version Map + +The version map is a mapping of module names to consensus versions. The map is persisted to x/upgrade's state for use during in-place migrations. When migrations finish, the updated version map is persisted in the state. + +## Upgrade Handlers + +Upgrades use an `UpgradeHandler` to facilitate migrations. The `UpgradeHandler` functions implemented by the app developer must conform to the following function signature. These functions retrieve the `VersionMap` from x/upgrade's state and return the new `VersionMap` to be stored in x/upgrade after the upgrade. The diff between the two `VersionMap`s determines which modules need upgrading. + +```go +type UpgradeHandler func(ctx sdk.Context, plan Plan, fromVM VersionMap) (VersionMap, error) +``` + +Inside these functions, you must perform any upgrade logic to include in the provided `plan`. All upgrade handler functions must end with the following line of code: + +```go + return app.mm.RunMigrations(ctx, cfg, fromVM) +``` + +## Running Migrations + +Migrations are run inside of an `UpgradeHandler` using `app.mm.RunMigrations(ctx, cfg, vm)`. The `UpgradeHandler` functions describe the functionality to occur during an upgrade. The `RunMigration` function loops through the `VersionMap` argument and runs the migration scripts for all versions that are less than the versions of the new binary app module. After the migrations are finished, a new `VersionMap` is returned to persist the upgraded module versions to state. + +```go +cfg := module.NewConfigurator(...) +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // ... + // additional upgrade logic + // ... + + // returns a VersionMap with the updated module ConsensusVersions + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +To learn more about configuring migration scripts for your modules, see the [Module Upgrade Guide](../../integrate/building-modules/13-upgrade.md). + +### Order Of Migrations + +By default, all migrations are run in module name alphabetical ascending order, except `x/auth` which is run last. The reason is state dependencies between x/auth and other modules (you can read more in [issue #10606](https://github.com/cosmos/cosmos-sdk/issues/10606)). + +If you want to change the order of migration, then you should call `app.mm.SetOrderMigrations(module1, module2, ...)` in your app.go file. The function will panic if you forget to include a module in the argument list. + +## Adding New Modules During Upgrades + +You can introduce entirely new modules to the application during an upgrade. New modules are recognized because they have not yet been registered in `x/upgrade`'s `VersionMap` store. In this case, `RunMigrations` calls the `InitGenesis` function from the corresponding module to set up its initial state. + +### Add StoreUpgrades for New Modules + +All chains preparing to run in-place store migrations will need to manually add store upgrades for new modules and then configure the store loader to apply those upgrades. This ensures that the new module's stores are added to the multistore before the migrations begin. + +```go +upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() +if err != nil { + panic(err) +} + +if upgradeInfo.Name == "my-plan" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + storeUpgrades := storetypes.StoreUpgrades{ + // add store upgrades for new modules + // Example: + // Added: []string{"foo", "bar"}, + // ... + } + + // configure store loader that checks if version == upgradeHeight and applies store upgrades + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) +} +``` + +## Genesis State + +When starting a new chain, the consensus version of each module MUST be saved to state during the application's genesis. To save the consensus version, add the following line to the `InitChainer` method in `app.go`: + +```diff +func (app *MyApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { + ... ++ app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) + ... +} +``` + +This information is used by the Cosmos SDK to detect when modules with newer versions are introduced to the app. + +For a new module `foo`, `InitGenesis` is called by `RunMigration` only when `foo` is registered in the module manager but it's not set in the `fromVM`. Therefore, if you want to skip `InitGenesis` when a new module is added to the app, then you should set its module version in `fromVM` to the module consensus version: + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // ... + + // Set foo's version to the latest ConsensusVersion in the VersionMap. + // This will skip running InitGenesis on Foo + fromVM[foo.ModuleName] = foo.AppModule{}.ConsensusVersion() + + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +### Overwriting Genesis Functions + +The Cosmos SDK offers modules that the application developer can import in their app. These modules often have an `InitGenesis` function already defined. + +You can write your own `InitGenesis` function for an imported module. To do this, manually trigger your custom genesis function in the upgrade handler. + +:::warning +You MUST manually set the consensus version in the version map passed to the `UpgradeHandler` function. Without this, the SDK will run the Module's existing `InitGenesis` code even if you triggered your custom function in the `UpgradeHandler`. +::: + +```go +import foo "github.com/my/module/foo" + +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // Register the consensus version in the version map + // to avoid the SDK from triggering the default + // InitGenesis function. + fromVM["foo"] = foo.AppModule{}.ConsensusVersion() + + // Run custom InitGenesis for foo + app.mm["foo"].InitGenesis(ctx, app.appCodec, myCustomGenesisState) + + return app.mm.RunMigrations(ctx, cfg, fromVM) +}) +``` + +## Syncing a Full Node to an Upgraded Blockchain + +You can sync a full node to an existing blockchain which has been upgraded using Cosmovisor + +To successfully sync, you must start with the initial binary that the blockchain started with at genesis. If all Software Upgrade Plans contain binary instruction, then you can run Cosmovisor with auto-download option to automatically handle downloading and switching to the binaries associated with each sequential upgrade. Otherwise, you need to manually provide all binaries to Cosmovisor. + +To learn more about Cosmovisor, see the [Cosmovisor Quick Start](../../integrate/tooling/01-cosmovisor.md). diff --git a/docs/develop/advanced-concepts/17-config.md b/docs/develop/advanced-concepts/17-config.md new file mode 100644 index 000000000..03aa55a21 --- /dev/null +++ b/docs/develop/advanced-concepts/17-config.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 1 +--- + +# Configuration + +This documentation refers to the app.toml, if you'd like to read about the config.toml please visit [CometBFT docs](https://docs.cometbft.com/v0.37/). + + +```python reference +https://github.com/cosmos/cosmos-sdk/blob/main/tools/confix/data/v0.47-app.toml +``` + +## inter-block-cache + +This feature will consume more ram than a normal node, if enabled. + +## iavl-cache-size + +Using this feature will increase ram consumption + +## iavl-lazy-loading + +This feature is to be used for archive nodes, allowing them to have a faster start up time. diff --git a/docs/develop/advanced-concepts/_category_.json b/docs/develop/advanced-concepts/_category_.json new file mode 100644 index 000000000..b2ac426fb --- /dev/null +++ b/docs/develop/advanced-concepts/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Advanced Concepts", + "position": 2, + "link": null +} \ No newline at end of file diff --git a/docs/develop/advanced-concepts/baseapp_state-begin_block.png b/docs/develop/advanced-concepts/baseapp_state-begin_block.png new file mode 100644 index 0000000000000000000000000000000000000000..745d4a5a971292bb0346c35893b42ebfbcdc206e GIT binary patch literal 20565 zcmd@6WmHw)_s5SOT1t>oKnbP0kwyXOls^@mAbnmtInrrSg=X%fAB3eUDo)C`;4+H`cDk{iofk5bB;P(%Y zuz|Kwc!>%Gq5~<)zR~tI+0VxLLe@?3iQ7OH`t2Lbw>%a+5;={2I?Zq>qb)4UzcMqTUgc(sw|^lU@i-m}r2F)d?D!dQ|5HQrK_9|8 z>_gzDV-qon_vBIbSY!wbf6Q+?*LdJo{Ibf;rcZ_+E`Xc-DzbBm@w#f!@xZ(i=%b!@ zpzty=NpF!JT}xKT)oXYEMs?t-D~8-0I9}I}e^;@EoEnQKnxTeY9Qv}qLGLuc1CRR5 z|4Bht02~cOMc@>}Ml1(B?i-6fM8e2?@FMB`;QzO;OWyEFkIRI3q3c2_QHz98?fDh1 zB#qntVH<M47WREX5ZenxMVdFUDUgRj&DsTh$mM_lddu3jm2Z!9%eH&|<=JDG|I;}qYaCW>J zNo{?U=LY35?_jChyd05IYzxk|?m4yAloVEadc3kS0|Ez}?{R(@7*xg5;6 zGiIBJqtz5b(GXtL>$W$YyPr&mZ=+O7zn*V=C2Z9dL-ew2dH%E7;j~W9K!&Q)tN))c>V zFpv{pYJFHJIA;FKQ^aT2=gp0LZlIE+QI*1Q&aG+*mKR@0jinQ+c&xT;!ft#rkR|)- zZu<9$xN|cOPI=mOPQL0zRK7xr;pdQxI{R3um>`_C#0wpJGVwl31)@hY=t>TgT+IAM z+{qKg;{!vP!q(FVMAkjOaI4quh!~vaaK6Kzcs;*9=I>9ENM%r5%W()R#wC^S+fc;+ zC0K6U!gjKyp1j^0@?~cnHV`>4GyrAv_|^7Zly$UXI6HF?+D-j^pWd5Uo33-JKsj}z zFX`1-z9OmpY;^%97FIVI#F*@fq|5A{kKN_FF2FZ}Z<#44;DvF^NIhqxHk;7sr@bc) zrb%F7=Yg*+V%F{>=QhbgXBY51=Qw63e!|OJK>*;)hBg-L{yGQb9@0=G~83pG( zlWz{%Oj|`Ri%-knYhI6-a&kZA;J~2L6Xu?__1O4){}nL z5mq}d2`Ju~H7dMW-HN9^K0hHET;mRg-MlY!FD)wS)%>~D?Xhv`BVV9+XukEGPITaN zVgX;FCI60~WigtYnbqJ}Lp5YgA-!=wFF%;Y_)BJ$#~I(x5~FhG_X#6+`!f&ua(~64 zw_#uSu0CKu&sXJ#8uaJqU;#scEAe=<^aj=2oA7qV?M)dimCT*S9jaFR=%ift)rp(eBB$fS?shskDT84gbnHK znp74|3wym)!d2s>)g6xD229JT@49||^_C+FQtta$7}y9Zfk5z7#p0{}|`5 zFDxl~LQXTxJL6JZZTHtTaa0l-2&ZKRK}Uf^8`XKmj1ZNIOyEl}e|4>pBYwrGesBwY z?M70paqpBa=2FrOZmKeB4OHCXPU9MpdiZv_H)&FtF_hM-o#S_HFk9`F%@GjN`YR0~ z;7NSGzsxA}>6|aG_v|ug?n}4(!2+d6b{TkjFqXTOwaBS8p4!>Y=2} z!9x3vOYjyWq^~3y!g;xsGr1@ZM#f5$ha%;+wzPJ66E2N!*3sI)L-QPvyq#81xkiizguFHSXS#0__Gj*($6O|vhXrtAl zs&~?{JHO&|wRz*RQHIT#@7-%MhJd`;5p`=7Pv#8xBQcn|QH|Saz0lKQWAU&%o?va1 z3UmLvU{Jg$sXs7f&sOie^eBQ8{-|lX0@{&MLK&+ad;fjtDXTTA`l`oWqt=};^=zTl z@BLQ%9pP|h z8n5k6DK8$Av|Gq7p9>Si6-G;5u8w~7OaJ*yl>wU&0kqmH16g+XyH{+pJ~ucq)>eIx zNdB?n(U%B553@?EK|N^`_V=UPsezz&*m6z+_xWC8zr=ih0LptXJPCuLliwf?L8dp- zhuSRZyL2wY)acJ(&ppklGvdk>WB2%UCNzRiyj*+usQ-3tkgwcPBW)eZp!iamIgV$F z9By~kbSAu_LOEI(rtPpGdirXmNhY`dhj;uhi7w={-Mp%6NLjjsVoor9Q}c9jLltI9 z`J{%fDy{87r>;zoa=(L@5n^6)-usBNZvr)EiU$j3Kg}^a4zBRP_iHi$TPlh+`=qKo za(0^g>)$Xi_M_L#GU)rBVg1{82q&xiMfkFUUyTjMY>j!!^E=N9zaCf|HCshW8N-_o zy-G1(idCBs6-FGEO|=4T^^`(C#i=O}KZ?d@436JjHQlrZ-^~W^=YNe)~G#?5A7Ymsf%!l^+j}<<}ReQ~f_rFJe{Nh(%H5fd)9R1U2 zqao`mU;C`F&^h$5{WB+tfE|2fz?)CHub~7kEHR9 zinelv0=Dja-Jwrf@R>|Lr#bzr^@LbaSwGjA!eC=gTm*#(+_Tk<_%P0&QYg_VumD4DrTQw2sXB9 zSLmwmHqSGV_4FiUzdGC1gJv}xD}M0jj0%PM#+@XKZ%ng+c5*v6L`M7T_0>x-OFcD1cs?LsQHB%jAw}7nL7)W7f zGLJ3HqIhy+?>B^I{C&(b%WH8u-rFtc@3$`Nqv_4TtpXvtQPGodCj-7*?H|iVfXz){ zpJ|<2&#!;^n@TPr4Pk1}oH?{qNTx(nx>qe8?q(9k>gF=}>`_HqjB^c2ZaYGLVd5F| z-w7Ob^pv#AUXfE{MdZX@<#@*t%yI>x^k5z2B~(w->z<*hb?G2Wagb;rFu^lUtffHZ zw>D~tDesp_+gas*zU^_hY5Nj#w}V4D{xni;hn4>p+d`iBb-kR3~5wd*A=# zTs7aK69yH$U^oBlF-_E(WgpOL;XqPmRo@c;alpzm3DlVIT(9|m(icr=JQNqXqyNQ3gv8* zpq(1PQ+ei_aTWXne`b*%N@xC-aOE4h=LfHH@R@>gz5>CK+Si}UmImmqIE=y! z2cP%>8_9eIaap(wWLc%?r4kDsm%KU|!%7`NjJJfWg)A$&4!LhFd2VY-UGys2YpnR~ z2zVEc+U)Q3yWgMEj{R++tPVk8Q;vN@5EvoVc)HAuDVu#;j9v%yEChIop1~F(l%7?h zgQ~iYM{9idG)~am?*W(oVZiC3HYYzuEnPw}Vc-onv4Ou2>;uUo1+T!Uuj@krX0n-| z`22^|PQ-#LA6i^a3^Bmjy~8jskD_OK7H3n&o0%gQ)b%!-g-!$;1a{g(AIX|^5!K>J zjHTk&vhPkHCZax5p>T=A%X-uF^U<~mB1tQb>+a=p&PhWr7;BJde-D<=&x5mLosClU zbL5`hR;oMI;PVUZPqsON)8>$XR`44p$P#z|d-0W>TFO;7%{nG*0tlMSh{VlXJB|Hm zQ(72vP9Mw3c6ky;?!I8TB!_A=DKkt;Ef=cgvX$)R=-rRR?abHiKi2x@Yw+sV^%=YM z);Gzz|n0`+8Bo za(B{+%gNA3kmr+isYj9ISfLY!L5oAtg3of$mLvTS9b;DG#+SJk)j_>B7@ra!gqNT5 zo>8zGX;BII%g0c#GU7 z;r^{16sGz>m`jqZfej{)NOHH)K4?N2RBc+1qms<3SJ*$Ns(%RQ?yG$fsS6F)hX@DQ-s&y7u?Go(Vu4jeKR=w^k)%wb!`#^^n)%caNtXg{Y>V z$H}b6y`RC2R(Ff2@W4nf1-$8}lS;tc<6Nt}tCa&MC@Ox<-E5vIb>z{}QlknQWt~H2 z^x04U%*}$Vtz|o@ANHyq4;VP-NPJs$YK@F4R8&>9;e~pNjnh!ec#FTi<%@2I2(Ps5 z@gC>9%gI!1q$#WBJ5gOWHhxJ_2q;?dy!~_8)_wJbVbhaj)i`LWZ6<1NEl_RoCk1cD za?n*n70Gg=n+zh7BW1r7))$K9Xr&U#gf49uO9+$PrN8Z72zcl+vv~1M3Ir}1=#I-I z^O3afzchD08<867C9f28{b_jewdW=xg7Zy*2{6rieLxT=gorGY|8hC~d369nVE;0; zggdsAma7P$6FU*iZqo*_WKs!18bAYNVz*Ey*#nhSxL@S+?CavG z+>Fb935!9Yfp5+ag?I#mcA>wy)q`>FVO+CT7WJ1cTHU+VUMNvYe*brNx09h^i*eL{ ze}5feFl`M#_D(T0&#*(SCWKn57}Wi;k}&(k0iKld4<~uq3O>Ai1iok_TIB?vV*9*= zl{o@m16TCUT@#hw3oJdkN!@H;F1UdlvqbIB)hkvNz!yi!T~0DS6M0dYwCAFrb=@xzYt-iM-e;ScF7Bo zWfq$SsJDATJZWP+%(i+HFiW}QLW=iVRjj>ux{*Xs1I`a?_JI)`Vp5~hECOSMB3IUZ zr~Xqn+!u2-ohl^@>*YC5q(j{h`1Dx^0#rXG9zz&g4qJb(b7f08nz0A|e9`7Q0kVwP z6LrhEqWrxbOxX4)oOi>rH=N+$)e5LI>BQufWWP?+xcI5-pUvnt$b&9@YL&qa0-oB- zC&8H@m13Z)5}@w;*{NTzIj-t6qT=Ws%X85i+006kIXc%I&Vz0fewgC4k5YtzMyH=X z$^n57TcNVH9*E5C&-&W3xj7v>@QO0$3-024-_a&G-*VFeUG`HXCtOzM!|tcxAF~0$ z({r0&LpMKiTJ*cVB4G=g-c2CwjaQ!jC<<9%*Y5?@jMY)4B|OJ(s~x|({Y5!9DE^_D z*@%;@`mUq;ljE4ZM6K()kSrQB^;`+PUfzT%9-LTzS(s9Qb9)B`A*M}^|1PEC#qZAQ z!0xx{qSi^cIc;7jSm4RN9`vpti)5lPrxtIQL&S90@w(Q$lg)s#dP53U_M?3&o?1BH ze`sv1{^F5{->xtQIGzf#KT7j%H&HDoKmI8<`1(z& zsDB@l?1SNSib##FQW4kC=H_$1f}p05yQx+JPwf$%nPUZBTa}n>*|*ES_ffNJKN-yU z4URXMq=OuC)!vHZ@jlL^7)iQ6d8-1M+y~ch^nN#0nlh^B+gT1y`nzaI?ejgN?1&eP z#Pwa}Gk6l1Dd;1~3hV=z$Nb_kCoxx1Q>5wzo#Xpm`7OZNZLVT#;&VV4NQk5{2r_k$yw z4OxCb_H~WT6>7(<@cOVWa!l&rc-Fg|xHd8Ltkz|in`xg3}q~LPHp{KmBb-HSB4hkW(ehgoTW9+fDCUm$1yLcOrD`njK07Z zrP#F>YvqA?ajYeXCutr7!8n3lCl$tc{4qF9#GF*shVa0CNnXeXe~_ZGTmI=t)npX! zdiJ>gpN~9Y8zHyXHMOia8CQ8%kX{N8lk~axe8)+xF*@J8s+aGB?++YzrjN2U24NAL z)HhotrpP$l5YWpqYxY~Qj_&AmGiKq{$Mp@A?z{o2mwKQgXts+6XPNk04 zJJHN`PY!T=hIaBSzh0lmNDCcmsv>dJ61)GC7wzDJ-+Mr(e8K0u2N4N4sBOMei~gNf zmQgqOsqqOAj}9b_zI>NgP5y{WGVr3|6}ui6Oov`sMSN--M~b)fN!6DWwrusDR^h>k zkd<~5`-R#@h*6s!kkAZCFW>r=ZdRRA=6lU!L&c`qwaSgildsLU;x0DlUD}{jbprz( zSg4I|h{!GPlxB&H`QWPteJ8JFsnRD8cktV7Z9pO@&5erqBjuCApq8P%75~Rp*W$07 zQ|o!Ev%p_4lF)`|hjCo$T1)NWI@TaZ5^|->Z*JyQJeD8doVcyi5PVnie5SR#nFWV? z*33jJ4TZb3c}Yf;&sW-7Zq#T;SE8DZ{!j(s4I{2xC~{_8pR0A|QQt*FxDFjbH{?_k z`Bu6Hzu>ZkL|5A!qh}qbayYh=TxiZkj%T*jkiea0r}NE^=t#xZ#UH2Umj)B3M#N%V zsC~sdlzjxoC1r9iWv|>Uc|lH9%VT;wYZ}yvsjzO?O%-;wf3kH3e9ZSwM$3gpMOvFrZ+UiRg z)M%-X(sdD^qHDbSvFj&h)hJM<^`V~`YM%S?GrN0VO9i`tOJd9)_RJaqS8IL-yneNA z-N$aofV+X;C%P&xUYYLAaY+<%!t(o}{q0PG1Ps+b&`^Ab@5~;*Gpnm94dxxL&6Xqc zKBK421U=&!M*jxvF9u3oba~cSIod^HaYM~J#In}06KQU)qrSjRrrX(^=So9N{`z9s zNw>pF#li5oS7teR-U9}vIf5hKrV!sLs_oKJ#Dr zlQf>MUo~d4VzB?(|CjU$`14)^;TPk^Kwg!cGR0*1{w+>N>#ORr4!ra~993wDxmx>I z1~oSE{h%wYm(|^i$V&{wrNg04(KlSKBH}2~y*tjWhio^FE&&2V zqJ{;sJH#^^B=!k=`S)jE-HRq2O_@~E2PV5{{|D+pE{CTE!Xg91+cT z<#SB(M0@xWpDXnB?#vkJO^2m|g1VYN8XF)WQueuG#zcqn`-m4RGb%iYcy-B49lSQ3 zA^leilk&s#bDO`WKh|NcoXCI9{kKsTr(MWBd3P#UI>@raZ^OrKSmlhyVC^96c@;-o z6A^)RL5g;OYy~~VoBBTD9ZbhME^fymy-~ULnuEFR_9#9K5BvzitySE3rC!9Ca`F0N zb&p=+A;`IqGl@Nw>!Y7;R_SkeLCg#j2e>@PDF@6HLIEcJZlw$6%A}>L>FIvdx-Ek> z$fH|AQ#U|aPgh_w@61H}+>GH*kS_|`-R#EZg!;Fv#%)eKz4Jgf|d zR+V-x2l&E-{^|;OhKv6Gx}HXPtY2u0iJv5qupLXpm02-TE*?au!SVFd6k# z{SCvz<;e(pcx(ca3w@InhbWlsqDbKhlTEDU?&O&`?dPKDZDiZSJ($b1fq^LBcSY*w zL09@;x`H@592M>I%@IpW42ay+vYmnhl{x7x8rTSw%5Pd_^D>0TI8Dc)ISmLITWCFCQ_&7Pe+bEBRd z&Q|Pb;#wrk6El7V={-XoZ*Rsz`Ml;HtU7)4a!;-i@gC)5?TrI8`JRVHS@wdnAN>Lr=;H=&Q5V# zj~u9G%#3f+9BlhnOAQvj#76|WL{EjHr~OsGJt~_(4O~aGvzHde^T%6UHAyKMec%kS zTXTGYteXGAY6q8b5q3HB@PBMN|9$&L9xaYWzg|hV!dB8qF~a=mYqR)U*Q>XzI^To8 zkfw}_b};pAdb>^wt?$;cI=^)EgGX|TUT&u5W~-X)F}DMiZ(`q>F{F z1k{v6sXhlxKLbkQbwFNiEK~L~0H`iEPpge+V_6si|DQ$^X4lvXl*Hcx<0=0-wbBCI zzvNhCTY}D820TM0L0Z7r6ex**1#08d8jeQ*5y5#_H_opUmZmFh&R!@_mr-5;l*E7k zGsO=NJPO@FJk}j0G1x~$GyD$by;H#?R<~F9wj-voDa7d2iY1C|A z`T&&vrOGeXeo-&KV9DBOXcjw^TQn^4!8^KTgZLF0!$p+M*{29ngtY%-GeTHg;Q zNOlt*_wg-2`JycS1nWicXL=MKoYQn zA{BrJr#n|wYv#Bp!!Y$fKIA_V1oSwmLl^WoMk+JEa#LNfj_W_T1pOa60($=PUqcom zq-Z{v>)>Gg9}t4s4A>a$wd}u!65O13V&Miu7Y6Te6OLu+*Cj{bWoUL}n(t;1Hd zneu?CeA8eF!^?hxS?{G9d`z?M!ME4FrM!>Z>3=i*Z-~ag5am+GG?8k7wZ4DipG8p1 z{%?My$)j}e{ycvg+F9^#Am3E~8}~nmM_fBEKZ@gNlF&;&Jy{OOBxzFBOD$Ddgs*-o zjduc>#!RDpheO@}fjA}70<5k&vd%Gm%P*m7vcpk*K`)`&vQWAA)Tew;Sn?_h>LdS~ zSm1i%Ch|W_FYoTd*yocSA8wr#_6`ge>{>c>7oN%QNBr+9>04b;Da8~AGeqP;EVz`k zvqf(vW)X}wp*b$1BPL47J=TwM+1Vjj zzs>C4|K|t)gOe(!INjMD;4q@M*EiaLE3lWG{b#2RsN+059aM`F&{ogl{B6* zC3oQC2)gn9b_fKlGTYoBZ`F>ExGsw~?7QSZbuviuO*m$+^HQ^)>-pYn8}hxZx$+_T z|8Y=lti)tw6JXgnMnx#Y=z4-wFsdNcMCs;Y*|)wHz@XH_Hu{qXlU~UWKb+6IL_04a z-Le;KNSW21KWi-l;2xK~I{E(wEZc+*l=(*z85E&JC)*>r<(@lZM7+56npkVe=z-dh z1?1mf_jfny#trTTU0EW4EPl@p=`Ip`b5ruqTiYcx^5hd})Q#JM@5Y%_GsM&AWj@JX ztdJNMun{|wy$-&;97^Z6%~8yH?RIb8`RPuj6TpOqj_hT0{vlnDRIoAx9le8QD$Rj$ zD3YWRPUse+kHXvQ9H$vxzrNi4!umcgTF;z414o+sKUz%MNGs0^HO0Qcd|99 zjp1f*R>v*LUK#Rm&rVNIPu&|&t*2@}Xe&~O{-3qhiqPY!1ldxhLhkbwgTuJ-^nFCxjKt?T|Nr{7 zPzlp5Gc?{C{Voq^iCW$I)TbRK(sb;uJ7bKLuU%KHBg&*{7@aczw@|^Q0gpM1qvU4_ z1^-Zek7Z#JcD_H4a_CB<#ddm=$DUZ&sd7#^{td4y4gKjmVZ6Qo4RiJ$XWSN74lQ8$ zqacI{32u=ojJr)`EBWOnG+_TpS+7H<$7xN%|4xOS|MaanyUB8fxoF7!tzU!3_U9EX zwXD}wcJ+P%bd zdm?BzU2d$^=xGm-QSuwf>XJ#3w81l|a}SHV>$7<5C25RGLFa|nv$gi`KUSs)yO^X4 zyX1(U{+8*W2_BI;q;(7`Qp=7zXm^SsV+AzjJFV70zput}u@vN?QOn00{iI*t<-2ISAX=71M8^|;yX#Cv+HG$c0jq@}+=NIaPz1M_es2HNA zD~KY(0i*Z#(uP2o27i9QQBGmgu>zJGsHm3%hE*&DC!a29o(=FAY}bybX6&Y|fn#}Z zKK#!0zc_FLnf=at<9>B)O(_|OjH8h-)GAbAJ#4winfRgE`Mk-p_p!$kZOARXn&Y#? z*PeegC=g;GeN_W3dylhQXc$T5d{yn_KnV z(E?!Ed6xjJXdgQ`U<`U0=Cjq65jv0CgKq!!s#1?;dM`Hnjn_VvFbTf0PCcu{Qq7eN z0`{sFh06elmO51irbd}0y_9=9-@lw2c&vDJe{-n%K-mT?5CiYkB{tnT{uG@cpPB}a zey_?E@hGg~vgwC*@9T?pf4_?ZR+_t^79QK-=ili=iVnMDp9)+4bD%*eqjLV+2t0Ji zC@n?!DQa5X=2x0|9!bkH_I62tfqT*_4&(_ZizQ`vJpa-Li1eC)#~L1FR&fv)jI;wi zW~u^upsMT`82=`R&;Jw6Y%rBuxV*<Rn9V<4j9=?S4r&lDa#6j{#D-rxt?nz<5J@8w)Cbf#{5AW3g8vZuUpzX$777 zvqWlcPsi1J{5$g@Wi$vWz>r^nHBVuGu5NQkcv*n-wNuBUJXD#pLc>|s=dn*Bt_Xw?^V zix)eqzVo_p(3**{<#yUH_W@E9zoN{XO?fCM;1LPu|}PKHFJiP}?M$v?i@Ev+Cxnib#t`JNCbhsRF35Z)^7DTp#tkQr;BpkxvF1rP>U-=scj5 zym|BH7?`6>B=g*dlqY=w>+!-y4(bxpxKs4_EupV|Kl-z(RnUAqz>fVkjCc+ol2_bR z1v1%l0~8iPuK>Pt5Z~Y6ov{Lb(Fj`Qo)HQTf9{r3XqaQ>$JDCZqfVlsJDJ?DH=yhr zI=ynEYTv&W7;)_s8raR|UUE36b1eb&(H~+tY}CyMr4HYgb@O8#_QslyZ`LyL7GCB1N|!7S?@p{AKcD>Px%Lj%Y_b4*uzThe*q+f%{5XV z$7Mjuln~g0MHOv#`D3l|LC~1J*KG4RUW3e$tCcX2T(em4?O%C}7poXe#y=^zUcwdh z9YRxqRDhEGY1Mm`&t0yXBS4N6*B#qf?yFPAvXWXM;B* ztu6yxPdcuSV^$v-CD6G`u~dx(Nm^_+`x%byZ7_K?Ynz*XzcrG(TyQ?@4|;wbX-$-f z_1NjFDiUp!7P)39P3Gh+NTD`kVYFZ@bvpx|>CoDA;K-(nMUkPlS34tRFm}tV9RZ5- zU1XnGYy?&@R>`q~ZKmFM_KB_dSpD=Nz!K0{3pLiiI0{2n7oV>VRhJbyXpzTPG1U9nr6PhqG z9YngI51Io)7$F1bJ&^Amqbk}m^4!6fhub*;!|jwX4!9xa5{9aNeAL~VFO!`aHai{# z-CDLQCyB6C*;`O-ydZ`ZsOgAQ^g!Dvp?wAjMXIz&ij`e8{_9md1d_|ypgn3vXdyb3 z)2nf8$$%&nla7Q#y_pOYRT#=;DfP<^BxOeex~BuLH~s=(Q8NqcBn9UqSt0e zOon4%6Y$tSezXGUu}xQ$&lGdS8`8DiaM9fL3m|BsZKXfMD~BWN)lz3hLRB1m_! zVOczVA*35>zh9T0_f1;iJF_skEx-`O0a)U5Z$qjuMJ&TZ6^84|Rmvj)Z(Ov;CYu!p z|Jj*%UQea_!pPFQn^BkUzYmN3DD-Xk>Hh0cZw_Dh<#!kF0{RS${PG_3JO*7NVXj`Z zgq%2u&`;$^{4iQQ%bjL!IQx@qmfDDiC*R3w5O5PvZ3}Z*3TY|(ewQFhQFG>4mQkX| z^q*d&tXS5|j#X}a2L@2@fjyRJ3(Zd`Bs$oHFe3`>kuJ4G%Q1pjzFXEF)n08yADQ;b z3`_3?1qm1swVkyXR=7OxCB6yquv$jE3Xbzm9_t7v(R~I7k4WCY`#r4JvpS~bOYpSR zU5BEsRqjrI;yNO@LhRldYZgaZhVh>IuY}=rc;W|9$|%WNu8MP&OmF-8Snfaw*k8Me zRHKhAK9d#b(Ps|xTOo73$Oq!fHz>_IH`YA{SX@8Q>o}slk9r?fKY%j!vE zc}wNcTbJH@=JlpJ*qhiXzwDiv;-B17f$aYWu_INteD3CSaLYAyTOW>3c#i961$FTB z;7r2hrpb@VV-Qd27EDGO{Q;?5Rh-(O~92-=3n)v8Mx z|DnlxzHE-7QScur=@MP%5)*TlfwL?zaJASHPQ`rB53L(Be^XPcBvA|;v>;76eHOw> zjEy+TC6)R4^!d+{F4d!#76k;R!NVkkm0p^%mwOg9%U@T;o`cO$T@S6v{VigB?O2Yl zjAQot^X>s`AJD*rj{}`A3Xe-e?pU)+$Wj}#Zxptkn!>>K&I460tO<(AH-WegAUe5H0rQ(7L-h<{G;oQB4U(d z(JVJcnGbC8?*Bh&Tn7%_?fciPC-SGME#N7oA;jY5Lh*9`UXyBEsnf-^&arMM?09o2 zVdJu1esk;0kX?I68fuYK;~u_a@nR>ws=%2`Cxl}}CZtIeSdLaU2L@~@R%_ouAs zQ}s1uAw`G{&g;VYdw9Bp0Zo6RCW0%I*$*!@@i`X0GQh;~dChPCn4icxwg)se*!f+OaZNpX>!`J6ulJ?oBlf;vyJx=06z^cn{fqHG6aeZM7rAC*sHDI z3UpGWigCW&xo2? z0MOG`0ClL<;-%OBK0m+eaSB{l9ypI-yYSIP(2iBzdWfmsW$_EQ_hBM{HV**DAsFRK zCcajt@C|(!tL+;cbLjKMkdEykfF3>$Vj>mVPgbvYg3)t247Nw0K1u`yOt5i(cv_Ll z-}b;ZJtJEWVO+-!tkd?xu#Fz=xbU9wAf~j*A)8 zpt7!i1v#Pb{YQ+Lz_4E_0y{KGhWj5>ryn0K0$>hUc{=*UN?&79gPmx*mh&RR?Pf8T zFNFZVgxPW`nBm_klWxn%k3BB?v&1jwWnfB0Rs03-H!ZMZXhu%sim6fL6!|}6rv^z4 za_}R{ESG6gWCFa?E;;d>2e!IT`a-Wtt!KNQ93MN%#p`^oeq~iGo+uiR#>t_*{qUNx zVTpz5tnr+`9doZ?cjQv_ChiP1%FK_uA~#!W2U}=%lNp$9$~=YMRGN1BBnpH#ZHx*R_FRMsCCt|zvRV4{Izd~pqFV_qxEHi67C-tgC8#>r|n|p#PpNJo~|#9BE>BZ zzVzo-qP0WU(*Ztxt%sJ1cFb{Rjlwx@CZ==IgCj%B0q&C zieW*V^k2*P59u>G4N`n5C*2<8pFO~C$Ka1$rhX|E95mDZtj&i?Oj&m%i$w&FjBko3 z#>w>L{<~G+G~JGn{e4LIp9_eQ6NdvChdq+Zo|#v_{F)!&hWTvmxc!*Gk6FP*(e{G? z{>BJi(i;ky=ldGq*nfJf{1rseM^pmH_1`TohHGZ0B#NW8u{VO&IunR-%sy4(WO^+m zi+0eiLvYwB3^o<~FXsx@k}^0R1Zp9?ElInAH#_`Dn`EQrx@h*_ za_Sy%fHlK7Jv&L>?P(tx94a@3a9HDbLy`dLN3kwX?VX{cA4=G#K!w1W-K*(Tkmuc% z#f7&bRG>IZ;;bp~sObb}(eZ^P)^-DXpQI4bEE(Uq_Jo3Q#4$+HqfK6jIJ zwfYXf?Rbw!p}!G1;)TrcB;$c%pG3=5AxOvj3j0(}^}W;f`h(=q)k&}_fJ|3UhRm$MpyKc z?g@lCLGzM{^xQMd3toK?v!_fuQruGP@%L$**^f|glGf65kAE`vW=w1Q-CB`)u8=*) zB{kh3LZ+QIVxyv+t`SNd?>Huj5AO2h`&^srE&BDdRpsjZ;4{~RB$v2asz1>Mu`?zD zSoeEu-sg53b7aHxqnz7KjZ#^e0n4ZxJ#&-^JN!)SU$hjTfQxS6$LtLTrvH`F-K{MC zQ6q~1siI246obDbh=9*L0(U{o>CqJsWkwu>%n5v49sBH02TOL=t!9qPple~;d<}X5 z4emSNaAjTekFZDw<#?_D>U+pdvkJ2M4!%@UgZ7+`D%B#_KV@_AbBl^fnsNLiBSMJb z`*-k5>6~BCN&QA4jx^_moKjoWFGNeGbgy)S?W8LWMzfeAx@Q5rX%l}t9xG-UcevNT zF5pfn^=?PfFAQ)G(jEu7>qi#T;n)fM+~>e4$aL~AWuM}bf#Y0{FN?G}!9I~uT?G(6 z!WFX}Gc9Y!=Nw`TFR@xf(V4u=!U*%yAy+Q29Wi4KhW%fF6jC`&GhdM?m(?wb?5h+< zd&9uDnJxPQghPxGn)DE}oW6nf3L1_c&M;+lYzwt*qIHZge`RSa2Erprf@-9Y&jM~H z7=%XbX4+ViOPKA1wg(cB)V&JP+D>#1KT+&bbk{^Ye<>zvu;kZU{Y2QWHB{+(MeXU* z;OPe;G=32KK4UBFzFIzSu^uY>qn)H(PB*}lE$lmqZ3E=nQ_Zu_ndp{PPuPKz;wv~M$Am92Ak4@t#T<2cO4?%T7 zWuYs!)adt0V1&Y1OjnWXxx{ZHd|{i1D|#p^D%Kr1!U~)<`yYG&-ehvhS1VeowzX9F zhQ?oTPZMa31Mf&LQF+*%OjPVyRJM$V8k=4tqM1lVsEF-ap}l!+0iR{!@~e zRwtsY>3cXM)(CC@e&%_R>h#k17R_ zkhg8FQ3s=$nH;#F+p7 zE`Tfd^`8+@a>PMNzZDVYlLb}tvEJ+OOgv#&4Nt?`fF(8E{ZmPs*pCDH1Fp8S=)Wsd zh%>dosZZJOvq*z{?beOp79fx=n-4YVyu_^?4iG?wO3DHrJCaqBw`#OuJ-W%Pkz|I< z-Vt3TZnpN;;Sy-MN~}rd6AhnaPvg_}skw>2iMdnqGn%)O@1Eu-!}b3eci$r~tu_M215>eJm!Bfj*o;i|GiM%Sv*RXiJZ7upGRN)Q4MWAWI{|8gd_y>AxlE!s zjDy3Zi+VQbI26YsT0DXiU*20v0UwN{?HBx061>)w)lE9{@*aQs`QOS@d!QhN{i$*Z zO{ScV%=agGZ)?&iQ5k2u!3?@dqxU|QLplc3b>5<(gRSqGKKm6P$;8O z{i?8=_q0h*3>LnAUnK;1`dn;X{N1xET`eR9ez_}7Q^MWFsZ&IE`YS^2L{#}hVl z`>vVX?1LjTnkuoA4_$i(H(P=L4dedv4Poq)u=R;vud3^n&t01U)@Pm$e0(ou1ND7p zI#M3ZAWI&A<0ec52*6C&fV>(v|9QnV6h9G@1x?wa*l5SX65(2WEQWSj+uQRmat&1* zTq*E~PDx9XDOgpF1E*dHw4ZFB0reQF?5O<`gPKB0VT&KGb;rUB(Zd=fKKoeJuO(m3 zbbRZh5aqyInF9$Qs9zHtH8e?eR3Mx64lyIj0t(<$C?&K*1=MoJf!8ih{dbCKphh;` z4&W51gG-)Oa4FUUA>HbdMaSMu)%SD=t3I#(o6FxaM3kjZ%lVlc?w#@9Y=u&@Z?Ry4 zE$t~q-1EbjG96=5Jdj*y6zC&pc)EXP!zVElD-SrN(M$C%*C04Nktx4AC}7kpM0uUZ z8zuKgXJ{_S12~uj+1`kG`xT>HfJ3E=*TDG4hZT>7zyr^!O6v-FQxFWO&}K}gA+n`O z>8$acdR1}BYSKW{<(h+HaZbui>h)UZITVgQOs zDSQWGRsq?u7P{`%v_cT6jkA_n)RMnZX5WV<*1_A=1c^o$cfxtYD-UW@M;u;KjvS5#7$AaFw)6}DB2;y6();e_MVpV0z{j@R* zcI2|RK2d&6E=2@=YEqt17@;AJB1>~(JQHQIjvG{Nm~QBVtEZn&(o^=8R)LSWTrVvS z3k}1%FUKzh$CP&qz58en6*PZ;Ss`4(+ZGN2Xzl`0_^jT%3O)^$M__h(Y#FS!Y8+iU z+wCzBgnlr;Pc*g=;T!X0_zLgf3p|`1(TrCik^?2S}a)k3ErJItJv!r8| zz`5bYUTfyuvT%|p1X2P8BY8F9XX<9msg#qh_EPB;Ppl2av^x%{eSIEU`mnfbYs_P( zYi01;zvMrziz@_najCBBX|IE}9I6KH!!yjKprCvdeBXihbsvGSDm z7uIezdm10ZlgNKXurYYWZ$kn9_DRf^=5pP#ha`pq4`Dkc6d9+-$Ktp!$`}_+d|c(^ z{-XFJrN5Xja8`FgzV5(Z{y2yd=}wNJDr5D~`nbJL+s9!!|H8k9d_OCfQ)}=I-kNmJ z%ZaxuX7yziMJ_5=9Jehx{isjgEInb48(mBeo9FMrFn*+#-x=k}5_6k1y7tM5xguwW zWBM0g!dO7JKnU+EgX^|fnpaoNV=i#+)w)t zmZbGayeWEx*LBK28FLuyj$<*_^$*m4)t}j8p)(r9Aq5*WqnnF^#K9sxA$@&+s$4uu zWXasdf>?n}3lP#`EAirpw}9Gt(gJ!LPJC=Av3{Oa03=2%pGa73!y zwIiX(dC8Yki$HYIhRrL{ADmSi>psqCx-+Uu=~acTcZHH@HzAo#$p4!<8jHb3)DHcd z?h#!PrqbpLq9QO8`oTO`CUMC@%bx6TobKutKU&*ykJ%mTSNA4gRl$T3Llfxb7^xmV zFUV|T-(KsIyu;AR(1)_On?tdfk?u=;Vr(k)-ym#x@I;|um7CTe>L+AXB5YPZynNjd zn_hKms?THg&Ur_NC){1S$DMfL|ip*0Q~SKZ?DjR32n0Gy<^TmZr@tF zDPt{wt%?=|bHF}S35*n@!R^e<;-I)remxP*>Q0&Y(!YZ+<;uC_q=&N7=tr!mOB=>d z2QTwVV+LwF9 zm16(ufJ;?wwBUM5E!mc#yj%~ous)b83f4JdpM(^Mc^TyqOPz1mCx^BS@2kw?Zq3|N zwD$XxB!OurWm&>xzKpRZ>I4L!$YtcI{y%KhV8~PVF_99rR4T5Y#K1^bR6~;?3IZY* z^lHzz->M^@Cs-E9yS&m<_Z}=cESk!kfj_RW7>l;&8NHfZM_V*qx1C~rE1=FjvkN2b znk_m}2s{LtOOJ%&-Pkhl(pH>5M35?2{q|RwJlB&QxV@V$dRP5smq>@R1*UE*QKowc z{cZumfU_I{XJW%5tv2niPhaNd=5~-;pr;#=_796<6YKX^H08m`XtOtO znhPf?{l%b|@`d8hWZek;4WuUcgWGkDIp`@~y!0cGhYj80&4+SNoW>|a1hAg<4+G$p z7O4ls*&g#t=z2xdRuK3L59P9y)t~KGGY+Tn*+%Nk#A^6WY)Wd%IEeYcp=I;J!*bD! z!YYpL8nn(NvsA5SLB)d!gC6 z5gUxd&m>7y_&}q#BDVlOm!&yiLP9WGTBDjGemxF)>)hF9Pm5B*J_3gl>)lzh6?j7= z!KdDlF{o1+7O6sycL}A7p^;?O@|ffp2&RX`jO*YIRw0@aBZIqBrA?ea6YAwASt*6- zivdpl39Sz_OIh0g5j+#9|K&uZjQaV^y}qD*DB+QAg~RHvI6>Ldx`G`Pf%e7@l$L8= znPo4_B(M_?Jz)zXxP7XMWj^fl>PP&?s(aec*=9b?Mrw`+`7l}+Iy?J>T-r8Lnr-=q zC8l0CB=AMD$yIC$SQ{xL;AnpICZ=T`FWd!&T;x1^s!NotjYJ&!Y|&lTeu7i~@AHv) zw4f9Igictmz;-d@F64kspTY;q*cppGu4VK5Q+u#apj2ZX35vUe2-}d*3{{5QMd7MJ znnZu{m8O&fDx!e6eOB$K<=^Fqa|I^6u$5{_bf&of%=!fDjb7)=$m4xkPpETA-eJkR z(>>CfikoYzJk`f%`PT`T+BIX$r|g1mJbGK51rrdOh{KFi69$lZi5OYhSCz`~$fmSV z3CsIc+gKPGL4*~NVis*%7pL*(jle7E)tvpd7bk1fe`{Csjy^S@+`KmQrTf^|LW!AX zh~-2^nMdGA@E7$jvd7>K6~7rIx9Q_oi;3rcP3vCzw{*hp`nd+S50162iFgeMJoqK- z^fkExq!a#1Q?0ro;F?^iQ3D>kJ#M0iy3E;-3FPge zn_K6h*diDQ-wUDCU%p#)WXE0XR!VasS|A&JJb zCi8c&VI*qmJ{v$0Z2&I~RT#zZ<9u0aXl)0d0r6lhzM%?8vdcTgWqJPQ>W$LA=4EJUVW_{IppNZ!w>h%8gvamqh=%Yz;$wI|Elm!3P61+XAZ zn;%fh(nwnukUoDN0q>Rs0H$gXwd+Oyyez1XGmio+$65TSyV+6CVL~oy@Sc4Xh634o z8MZ#ZHUf;A-2m8r!RY6W-Pk37j!{3qFM>@y{p}wB4Tej(b>2NPDfY4nB~ZXc&ECNz zYT4S?J~aU3L;{fI?esw6?m{3~$ZM>cwL+b8bUx@+x8K-m?` zhu0zPrBqRL2ctXulKRA%_ISBE;M-6#1&UUrkYHz7(=CHCVFPj>MPv!o1wzb?t&Auq HU84U7#M|-t literal 0 HcmV?d00001 diff --git a/docs/develop/advanced-concepts/baseapp_state-checktx.png b/docs/develop/advanced-concepts/baseapp_state-checktx.png new file mode 100644 index 0000000000000000000000000000000000000000..38b217acdd04fb2430a2332946864de04474ae5a GIT binary patch literal 82308 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 N1zA-Y;BI{L{{e+~Yq9_U literal 0 HcmV?d00001 diff --git a/docs/develop/advanced-concepts/baseapp_state-deliver_tx.png b/docs/develop/advanced-concepts/baseapp_state-deliver_tx.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a54b4ec34bbe282ed6eff81369428d02dec095 GIT binary patch literal 59007 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 E2iU8KRR910 literal 0 HcmV?d00001 diff --git a/docs/develop/advanced-concepts/baseapp_state-initchain.png b/docs/develop/advanced-concepts/baseapp_state-initchain.png new file mode 100644 index 0000000000000000000000000000000000000000..167b4fad9ed05c2fc28884d7ab6bb1c9762eb87a GIT binary patch literal 243455 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%0DHjVx%9IiQ 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 z zg~VdpwVv0gk#BQgEM3|^7tVM6hw4CM3`tm&HSajYZ)qjCL5h(HgY)+n?Q6wU-l+zDd91k$Ybk|1$-!XbK1y`Mkr{{voLDJc&X6ds#pIJe?j}ft}t`nzD=R zyHwiK>*{3(2Y$HQC3^aj_xNGCK#NFX*&$bEcp%Q+EA|--6%AL@pPc#175{L*4A$?G z#>9cx!`c>!>9=r(XQ$ak*xiC4p6lEDXz@yNFEmv@a-gsgt*RQEHnA(2cBk?0%;{_X6N?LGVZ>{cdj3oCX&z}Vg`hp`YhC=H!eNY zRz*E~eSP;c6|nC!qNXotjC{pn>*3%wT>Dd#689WZFM5%NTLS+=&q#g9$e4NxWpS{4 z48q4wduI7HRKWY~vKxTD4>R~BhkAB}#rA~((HdFey}_5TFsb_}s)X1PX1koYMj0np zJN(|s5qKYvWbiZTSqa9&l~U}GP6r|z!I-AU&+TMB5M_YHJwn!q5`{3GI#`fwQHuAz3r1llMLHKU+b$?j? z1LXCGAVH>ZOt6s;W^(rm)b7O3IRa~p8%HrK#iit0&x5#|GMz}c=N0im(kik$k*#f9 zlmw;()ST`K7bD&h;R&BX*bB3c*pKdGpJ;Ec7PHIpDZG9DP@oS;ERwzF4?htSA>haN zNBgGy7$Q~x8zt$$O_RcR>2<$X#^~62*0_IgrP0oSk3uY+RU_8+&iUhPkas!aGsN-- z#BeRg4Qy@|DJAn&lpmgD7T^oon2(n4-dK??_1-g?fgHb+vQ$6Rh(CS*^cefc4N6k2 zgIPHtVphC^vT zW&L%}IjmoyHnD&Ec+pqx_!Q!2w2I?BNMxIb`HQ4!1c(fh*Uq1ts*#5;k7(8N z6BV`(aNwMfeYzo4{);w@!NfPJNc`@XR=~7Dcz1Bz<&gxUO#8I?n+sOn`)52o9b1Yy z2aj@-mREfVqw6`|UKnIYD0|~Ap+RqsLZQ}HhAXTSB~dEt`97j2)#QG7FsZ9x6MlVK z7gcm;m3U)cAXTnjClTK&1^jtqqgiNgQzE;MUV^tl`*^N~7-;m%0g;+)+I7@Knc?{g zE(2BDf85J;m@PLQ2fByhHSPIya5sTJ6UtJu9!RV6tazJ%XcWE*kLKCX?PR+A-Rco9 zx!_)3O04ft1dG(ucU8UcBG8mc>2*v=*Bv74hwMEIg~eZC$)O>g3m|l|(HJ0yF44lc znk8%_Y=!wmv<;TL=0S`vD!}=2T8qZ>4Y|5~awR-*SWg{dh)>6+GR})|$EJ?;9&Z;}RpQIRl7||CMhE69{E)oM zM16Ncq~Y4?ioH>!U~bpTphE#@yY-c3*yemNUnk}C2J~5-wy(kI_qZ`Gh!pbi3iPY{ zowx0|Qo^J@-^MNil7e;AnWj^r1_=EK8;R#*;&ZrMmv>BCwl;+Cta{ABw-=<}L)>Tg z^l=HEhUyiqYQjpFDF6o4)OmCJamy<6DTek<^5)kEDt{~2xMp+B=XV?56L7W$dYacL zbA|aOj12j@ix2PZ{O$o4mvK>~8M$s$}b#sSmG#2y-@8ESI`}Oq|-glgveREgxFz zoP)Z-?{0ds|Uw43>-Zvcql~M&;3NNtw6d#M?tA0X=XS>lqLF0h227nIei}n@ph2QJ1^DHDj z-#_=N%r50<(#BJ?$%DSv0J z;A8W`NLn)GUqOGRWvUF->>|A^`J>VmJ`?1p%o5@!H$QdPt}D^;^CD zSXX&(6T^aY!9f{u{ zBvaiyShh6LqmQu`e9 z`5g9@;y%o7$36*)F#!1KEe|O(!hV~Tu!1HtK{L|wY&SVVG|mveDBoYI&g zODx=yh;+!qi|jA#XELF8*%#bH;}QVGW%*B-E;e<#L}SATCboMWL}EUa2;%eI-@QLp zYi|}A)853#0lR_~g-xFN6UVX)1z7cdzHae8_J7LNKaPLVg%G@z1dK4R$}Ogkq3b&0 zre2}eMy!;(62Td-Uv!_Y@M9&`^IhI$03hNYJJE^jvU{+CG$z=^q!_`Z5HA4P?;dCP zrIHPr>;CKBU~32S90+J8jBXRL_YR8rJm~z>)zp09DITGk--Crf$0skb20?J@gSg;f zr-$;J2Ix`YV?Qb5eLBeROtkP5nS8LFv?`M6Gw-<-h5e@M#C*b}bMlo0UmXwjYcJH_ zj6Z5u_5I)moHarDeH6j&CeBmZqEzH!o2vLkrMo+0eRzP zRyibU!+yuIj(zA!>p2r(K4#$H#)I!t@u0ri`T1}tXX{SydxRUf{0h?H85pguZJIy8 zP)L7w1?%0TieDNqknD9UMb`5Dkr!^Tgowp#2)<#?aB!Y{o3K56w&Ts^Pf!0gf9}P~ z9rAqRMPQBC;};SX!A?~PFp6`3 zqucV#ddW~Z2bB;k6l|THLk! zyc~NUCsw84$5LhX3c^y5Zr=T_j}*C3d!5l%uYF~kt^i$JpNk{gXBAHpJnc2yA89he z*iU}wk#ddsyWh^I!*NZZ=}RY>;98}mxP3~!El{^Q@^9~Vl9(xl$eVw(9b8mwmd-!( zV?JKCy2P|hv?2W80)zNvao;so-FNh|{Sy5x)0jBvKAu(XtysxA9`ex6u==kfq8Lae4y+&W6x;TAQdCMi{u1pnO$qFjz@Z#K-7+aU1V0fefSx}#^e5bt zNf40h+mdBq)ZY&(!n&*OVEo|7jI~G|r<1$Ch_B#@WO z%04~psgH{&k_r?f+JM9PxZUPW4j~D9!>sE_CYcnPga_f zds)!wi(Zb@XSH7CltEd$a^fv9(E!zTLWTDjkJ0x#mtAm*rKG;DP7l;Sn{4TF3Epr1 zMOhd3FzgC6_>egKUArKj+|J{z{z7~muuI{cAMqZfEr0WsW>JEF11t4nJAHiS^S(MlID?T}I|bx+#5&WKa#GrT{Sff|D`hfXiO0jif_h}nGnBz z-`2jab~G#oHT4IO4I)F9#%h&u1F zUjoK<`4_JhbTAx+z3sDR1Qd6N>I?Ef_-GeBdRQBHar9e;?Jxim^7ytM8{kw@A6}gn) zpI4Q#&Ew@oT;OMz!+7Lrtc^+b;TeRC5c67fC|n95bE-qDBag2wEB{L&Y7e~V%zDC> z?)m(foKbMic~_hh@0W88H0CqGSoUqQd3X(W9aX-cFwd-2-z0Kh>8Nqw)8Z)9E3I-U ze;(TjBwwd&xD#X>#f}Jc$P&4D<&v54H*{6zmkV}d$a~sHc$Nc%Qo#inbt=_-jJdh9 zH;ts>{eG)2urHQN z_-(Es_RJXL|t66^u!$-Y&WOq#i zU}W%R%YPh*?7AKAR#u&jbt{lJ?(==B&f@9@+Fjg&+DhN<=tH4-NS_CF<<eKg1;{Gb40s|T*T(2(QhgmP2w$M$wNxT+4K|$0)Bk^#=2g$zQh{ce< zl1n$;e*qFI@hFo^sVRxnu!KKiHB-sfk+%Jv$}hApH-~E0{Ik;Cx0%W`Ks5_aL@=Yr z0lIotV66FOl=>>1s`Djhj+4vW{A=}a$M4V70@kYQ+$C`EAy6iq8?d9NKF-~KVaAxJ z9V>oF&9y&O$#Zg&BC}viJ;wEGI)Vr&x`oDa+n%Hv_308Xo(`K5h<_zIfS|gsy6 z8WaX2ruk6S75!e@8zWr>UECvZIF`ONsog>unF3G;W_D*_Q!_*E0rqB&J*~f~y zk2gHG7c)pDxEsUiygWHzGYILM%)$Jc=DzjTCzd(*!$V|!r~x#tg|+6u(L#RQI%?rG zAcN4gcP(}DV&}oO^1bbAo)tY0?2Y^7=`?Pt>Ln{0mCaa2*N5{IzOD^scRuPziR0j9 zSC#Kng{7piUTJh?dwyN{U{Z#cJ|!|?Mwp_8*`!-*qad{x2DO%Z?q^?j z^>b$(MP^(%w?rTH+PbB28b!SaKx1~;{4Aa+{e3zQ(9-gVIn&kDf~8|{K}IjaEdow+ zpOez6AuZ`ZIIn6XD{?viGg>MrVG- zK>=L4>ohJoUze;np z`Ch6R{e_anb}+fYs=Y;pj6F>TH_`uigyjp{6OlH&RFL38sS%gbN~bReo{M#dgN3CJ z>1>Lf!J@MGUywBh1rk{4{bSySBN0Vp`_`ITgl zCSbjSv?nS_#(1`jf`Y0Z>JoOucx36bu4}yw^sz}6Qk#EK3{q>t`*2IcW~6K z0``-(TKR=CkM_N2sU7$?1=Ks^x1S{^}=@sm__P0$^>3%?wr->ts2R8@@r z5ex^m_E1NFmMozlxmBxWKGL`RN?QCHJ}_Zm(m3mn=%Kyo`e+y0erv>i;kk90n=lBO z^3M;uSafJu8M;?IOwSXWe67nFZUvQbh4=uam&h<{QAwIMly%)NtB<*dr>Ux-$9!_$ zDrf`ToplJ;tEBZf=WF!4zkCH8(Kigy3r}{DTZ$*?AvWPauni2sKht`nAmbhD{k&%w zDD7>L4<=?t-)@&UJR@xM;L+P`Tq2!Y|5+c5>zMq8K@PoPD&X|Xp`}3Gz00}=jh`++ z4<^79>}PT`gFY($B8op%Eo~bZ75Pl{;P&H8Pe70LekeUwBdUvdh`tx<_8AQMZQs6t zMtminP3Mqa(jwX{*xR44!-*LTI)7JB5dM}W*2wcIZ4m8ZYf>*|N|45?!ZK2isgivV zp7~Do?3PJ(F@YTqi^vdubblhXckz1rI(dj#?D4v7UV=C19}T-WP;6+_^5;h;V3`Ld zRxF~GBpZ?6-JI!{EI?|&WND&@U=d_8++sfIMXi2jE2-u$caRME@)=LgD)#`BQnuZ8 zky@|M04lw(>2tn4U*$1$r6KL3o=cf)h%We+A6lQnYW7kuheQ^Sk^#v?HRFH{b~4%e z08D%6wMw#`Og0iRXgkIjISfFQl#72lrFzAN6o!VEHdkI@=ZV#B9^U^A=>~a&>XMKc5(^E?TWp*y7MZ1mTH7O8iTzRG z7{oB(DB^8Q=IJHjn+m=TtL-@=o>*c*fF)0Gi!PZkUwC**!;rFodSS23AKsDw4pYHA z-_^vRX>NW;)ydw${m>1H&F*XY@}9UO{UORXx)!ziU0tzJ*&lz}&+I|wGS5S)|5N14 zd37}4BYI%cxzvlySG#jCZ%;m&d7>uGe95klq7ctX$1|f+0#hm~FyA|3?w#&touv9( zW`D8l9+BvXiz)i;dhO)CIK|HC5bc8k#-yi*v0w1LDW^Zjq;bcSNbJukw6Ri+=LDWCi0 z3n%EJqOQf@>ZnbaXWg-Rpw4b7>7k5&2k5_e(mO*P+Rx*VvFiPPj!});^1Um;X}30h zn)3N*(;P!jP(2`;S2x&adG?6!Hk>UuzTBJV*SdCBAL_LUz7&LJCOVPGn=AYz#fF-_ zk-8t&s(|<7$l~kBuOP7A1Uk)oX@WP)bIr9S0LIx75coYJ6Ad!*=6S&V6;mBtXJHxk zL@C$NqnABs_*%9UGY$RxJeqU-h3!p_@SmjPIit$-q#YJMgoMWVOqwfk4vc5(7uLQb z(PQg@l+k~<@Ch1xf9{6LT@e};n@gO4o6=uDXa@PgunMPR3sk;%yC~tMK~5>=@*xgi zkMG#E(4xq=f&Vn0P0fBr0HdDOh6u9P(P(mFqr>o3Nzez+LdZ;y(}vyzH1GFKi$ByJ?V&1;zj*ipvdt>4n$g@O z-6uZWx7_EC@N2Jh#5={2UHCLxuM8lRh6ztFZst*sf;;p)7ikzM8EGW2tH`pNfW z&YQ1G!BfYuEeR=F9sw86gSZ!nqf7;T!DqjB?JQK#OC0v7@qeH$XUs!RtDK=2NoHTb%XlV5GcB`S#N6e1BfN^8r2?SI{zYCU8*|3tKS?PqThQX zqUSol-pETIflB)O8qpJwm^$tv!Bs?D;pXKw6aSmjrrD!<)t=b>ezDu|k}tQtUvW?2 z(u_27e*IKM(HHG=o3M=JZ_|5j=^l03+fHH?+5Nw;f>(N=hy7kI;|>~Mey2id1?vifp9-FWm<9VN~+%@6?*` z)(nKH`;%7zH^#u%QO$V3|BGtNy`R9tcM*RX09Zp_zMjfqrbyrnxD3q9_E$o^!%+5N zlrQ^KF`ljxyA06Ix)Vjls4{i@jQO^OFwKa8F7eP66p)$W*$uX zNAG8R}#UBhyIPz4= z+x|W(<`kXB=P~Yjyx5fF)17`z&2>-<73xjLeL2a?d)FkNKW-C8@x?xuA63 z&r`n%b27T-kzzr-3eMbMQYL@O@&r&!1}9rD#-F?69*I<>jE|{aHxJk*{IX@*Q#)ms zZ5X)a*6^@Y3R^;`qYhGj4^&V!sATu+Y>Sk0_%k&x3BmI#XimBS8lQjYO}vEz-l>`L ztg;+gyq#1yc@OX?iy8Nhj%Db6-R0&&%iv3)-rSCFmu8JQd-sQy{T&H3>C;ahi@LyK(OZ(BV5sX z*V==-KSJseN;O$m%S_L~b;k7K8-b_DXb4x(fqa2MMP9b9MAq#^p7rYiYLL_wP6YW? z$8doLt_BmCJ@Bu`YYNO*N?C4yAsw0d@dqWcjhEh(vuxS5t`KH>G&3^Cf&-#8{wE=9 z-j3emYXv!Gj`%%otbFhs@?pMvA02^vl5io+(jAk~bvAnD&Lp|f14G>gf?#!tbXLSK zE4(9mn3Fi(qanz;jAxfGP!$ji6gzF@N-tn0<;9IibFK`=ua)F?;|(#QrGHk_o}J)(|>~}G3;6JNK*pTr~3!o;lZ36Zu|V>UX1jk z4=+Fr6eFYV;pqY^T0U)vUKMZ<&+ifpJ4rXD#Xwf9`AKH*x5HaPcF&{rIOl+v zZZuz-7@?wbf4?XW-d&{I;nk_7^ZIR(K^;1%Ccl1g5}D^%?>?;t4;bA}ZIyz^H4cBS z4LzL>x!|v2@}0E`2w!yBs*a%_IZz4q$_W;;vv*Z~Si^=-``4Laq)RH_{d|syB+pV} zSm@WMkco=hSHr=$tH+52?lB;5F;W|K%uxKkbsT*$D!}cAmi{5@nwg&x_O3y9tMYqA z46C_U*u&&3*H$te*sua}iu?T>{K_YTtVN#3`}eLxTRuiaoqOYTQJ?)MA)*>h;wUtR zJIZ$A)5|`e!wp)8sCw347w@ zDh-;4KyOf*<&F`V*+1{YpN);%@AS6~U*3e1K$K~GE%i@_b@c#)NA|dX^VicmG?0Q? zz0X&d;AgJvlleGbG=_S|rc(XLeav9zFiMwc%GJ2~*F;t0flJQsxw}s+cG)~y z|Fop6E8QLHPhnfF`p%@I^*u?>{rvpS3*J+&y1AHuQ9@-kDVxxI=hMC_^mBY}=yG37Z&&W>#~hs5zS(+taf?gP0P}pk&o7HXUcW;c7%%jc`P|B! za?*vK%;7`N*O<`!caNoR?ILuohBpgZ{B+Rv#)RWWmVMp`M~2h zv2p?3$cIyrKLJ&{zbQj&SaSHP#fc)jFx!KS3tx6Q$?Q?Ua2%flqDbr|Q^#v?bGsdG zGwdTYvvJwCx)9UBCF8ilU=nG4K;?6+pQtrW*8_jhBKhY%&S`p|k0>)8_XZgslet}O zpXZGxlUkc46(PQju=Gzc=VX+hd_S@A^R*me7+rezHa7rq_GZ8il@$Jn$=CD|^sRp36N9=3gXua1xBIQWwmE6t@8lNywS969w z8Ub@Aq|QW0|Ke~6ejf5`pP26=+4iva<`;uEF+tmnLn(IYmuxg64?V8}@%S=Q;s9zg*aoz2WKSeaVl^Anqge5QAE#g9$`6 zpmbhJ-s&nynp{vEqNb@3$u{A0GTS!+vt(B|T$c=t)P|XTOc4Kkc8;Y*E_2vEWVP|f zo4Ak2LgTp`415?TKPu8`K4mk(t;f+%A}1c%UWOP^5f0LtfY7ej+D4r>amsw!FKjw)2{9UKgvfW7_42T zf}|CNY-{`WANY6~{vEP|8Xzg4TCivwRfWJ5*%CFn)WV=p%i=iH7L(wf5ZlUtNz(TbKrCSgPS?j2Ketn+u z8-HVQeb2Ri;2#V+#IMVji?PZK#bds&9s?Z!bkdW=iXmY%a2FH}Q!`XQ^_%n~U;qHN zC|6ymNC2vF_Qb6BkO2Vcc$j72=5G5k`<`5s6`$cgh}GkD>Ewtu&gukfgddbQ`?u5P z(*3)AY-c&_J8r4)B^Hx?)Zr(2eUdJKt<0M^xfxpyaCxYWgIRmyIR#TtR?pL0wRy!g zk`u?(>8nopeXt{BVN3`9)Q5X>cIUtGwxG+Kw&B+&E@bPXciO67iQZ!-{RU^q5GNGz z)S7ah^2)4lQyL`skabHd?_jRJjG+-BeHlVFbGJTeNBZiGd?mBY&O}#xZ1)&nb12f# zi*u_R$p3deIw0g01JdthPSTA%1TnMoj~syX%Uz(Q&f1-RlbZWFC<81`E?Kge@#KF& zVIzDIYHkBtWaz8jPsa&2FL&J>GA)(`wA#;#@4=(kw7%D^EIwUcnJvcIYny)rsPJKp zND4?<;SQIMGsF{33b+C>`;_<)nG&f_<>9Z5!kC?Lnx10~g(v<6;|9A)3!PTFbG{i* zF@t>22X6K+Uat79ew3#${)y!68n9xH0@X~&;AnVW&{nhxHRWOfj9Kx#ufmik=Nl{| z@C$JIwZn<_Irr<`Q$x_2k~mU}b}B~*`aKzOfC>GK>h!|jj&86*KI;q-yHjE9+te!S z7xf68G&ze@`vjd(=rKY7tZ!>=v7q{nC0Wg>=as7x$Z63PB{y})`vud~>!GC%PLJ(b zJiVlSJx?9{4}Z4jekwYND1&rgiHUc1K3?-i#+I)>$)W=q-+%uVLhZN#tHHJ-LJA5n z^|9`#`cWf-2e1%KSLzncuF%G+$rvouaF_%bN?9_TF72&BON%)THn zSIpiU1`4izF!D}y?k28W&QL$R`P>+=WE>U0@KVWFI+ekB%T}+}#q+s7W{%Yza?*xa}QCmaV z>puI31bgl%#zJhl?za)mZ?AlKQfTH$6j|nNGMC|p?n@mj9!qwD^JyEjp#-VDM%|1S z>%(LoD|B}0{P5|(e zi6xe#3oAs$0ANW)S}jWAQtX4F(~747uQN?+Zc<;-kz7mnOTz%ce>=$Em<5O^CO=M~e)5=HgaS zgh?M^hz5`4;sp~8Xud1w4$a6V3rT%L66&tO+E2hS0b?^oqZkQIT2Ya#zEBiZjTIkb zgZAMBO#F|x`TIfNG7F}RYsekXll2>}zT!ixvYuD1Fihq|ykN@W`0)|@wpyI6FaBBA zI>qL6`U&~^z9PmAGEkJ$0IZX@g(5C1YS=^wvq#H#5$uBuP0|V7wV+m8U zr074lx_Kd)B4ixv2UWdEe&rR$^D}Quyz^ASbhplfZ_PdiEf|nEuxKiqK&! z0G!l;zQYvca6bLM({%+2hb{U7jzln?_WSCr_8&*5?)KBxD5R{a7$*e&u?qEfg>NQ4 zw|pI%zb@EQ2EirV2U+y^QvSyA-NDeJJ+%gx3Q@zA@Gj zPTHKMDl`d96Z9|rxdRFs@8JM^HLISb{^z~J%=MLRr)Kp4!PRj z0omW~?X6hfh*Hq<>bwd3w$BLDNRj2zynOpd=k+*nPl;5{K%nJ4FhcN$?OxEs!8zWv z{;hSrGO|WdFxACFw$gFzs}r0C?b0H3x~`}F0?e3XD%%VGPdQ06ey>7EFT#BCM@I+z znZ{rCKtuAAN7ApNI2MMp|Ko)VY=&+?KRH+P^AqQ=Lht-A6)>?8D`CcBs5S-MNQhia zLh#Lo^%Q~J2_0!q{>X0H!?1kwcGeY`I_z~O56mtFhwVMTVobUpu*^jWM=mf*Y%Z(e zYUyL;wm1mx_2WwYnv>ELXEXT~=mtJ|M}-*&2%(yFijEpV^0(8k-=~ttUA`+l({>iJgpB-Z zm4ic0BkDj1L!0Tfdze>ZJ}zHT`6ITP&{)Py0bl1#vIwEpZH#)@!lc zEblyBAW4QZaP>FQAhyfUd?5v_RD|?QLigd+g;;FWClpihL5sMiXp$hafRfn*1U>N- ztP#m4`liiKMD`@Mh^~A}RF50Ce{%GW5@6ky9iJp>mtO|`k&K|Qecn?YB*~2X?3euU zc+f60Ac5O%!@h1J0}wl2Ck@)&W0f2Qe0MYX8^C({51x``=!05vyVfH`Ou~a%-jMUJ z3y>REBP`r8hZ&N(zU0ZW2WiPKyplOmj$*NX_N&uskORWSTb>-{@OFcGpL=-8N~33c zEJOgCCDeG=J5>6Q6=)avF%Ch*i&&VmXAMs@F`(68W3!=%g=;+fg07yHQIoe9T zC$&b^0xm@+7l=oE7D9>-6!SV{Qmv$)EA$9;co>Otvw~b1=$OaSr3+t}UZ8~F)SjO6m8K@8!# zdk3IQ+vm(T?kH?PX$r>mjgjUm_3vMk_U8KWJ6(8`LkNa7q^gHa9i82-{=VYCDPE29 zehc4St_+8T{An+X-EYs$froq~vJXr`l@DDXo!*ii$}9$pnPkTk+HerK$A}gC1dGEL z%y?#Qn5K!-(c86OBwSljANMxvbTTd!)eOsIw$od8)N0S|Mj&w2{977n6=fkET_vZ1 zDPpz>tcs~-8Q~6*7R#F|-XILp9AA%Tscyy59rZuIH`on}A4C1_p$2{LiI#^iK;#m9 zOdOcJxuxq5m_58jCI&)Ykh*gDWFQBkiFklVU7PXXq7l~~0xW6R&u*Cl>@H{Xh@cvM4!AA9yt1X00AngDY

v$N=pCa=dvkBF_0HaHgVKN9U2`&ip=Ph6w{$%(hn3UqG~s?) z;^48L=db54`4$%-po)So4t?CJ)+}z;zVH3SvZ>k<@ z-rSGqr8aep>YJ!3TX0-%;}#XjjZb!?-hWb#=I-0n=;vVehUzzSN9{So${NjOZ-4Z} zU|W&({{0KR^^$+*D8ia_<-79qQIx4o`|sKHvulzKm)DWbJ$uHge{zwq!|?VIzrb^D zj2b2oD-v{kFOOi^Hp6MvgqK;`Mj!I0({EH+>&wAwyYFZ z-eYjCS^FJPZ0R}sgK>WMq3iP+p1*ze^x!+j@>i$P!DsB~ryq-U_nON$4i3-o6&Q|t zqTegmH6B&K&J(sjosr*ZMWaJg|Jj^A)Zf20eu*xtP5)`z?`%`-V20Rmu%p5+7@?*-Et^hn{YJa#)XA@X}_~rn@g1i z_Ubk-?yZ^Kkrbg{ST@ud{0TSl6`Aeo+-`J^_1@OWKj!YsW-M=;yg2F3-p*3*_EEdm za?nL{3T)TAEkZjp&n-KwDUMVvy*@YD*<e$eo8A+M&zL$2%^~ zMApa-+@_1>i_3EZFRny+us}Kw9pCTWqvESi8uwzwP460heOtbcB&eQ>-mvJ2%sx<5 z?`8jt^+nOIl<}+;^yNeLZ_s7dcdX*z92fnvRPKzA*)n4aF8<)1AP5Zdc1%X{Zs^1)u^q^zg?Y68L z@%`uSt;PWZq4ZoJYqAoC8tu>nDAG7b?WJzCp!`_ND6J^%x>cpe3 zIlsI0O&OeL9XIgoiJ>m`3U%L)184<=l%+{emh8?c3id61gh^+8$+%xxy?HIS>-oR3 z;tsVUjtv2T;1j_Y|Zx z=rmyWuTHwV1xDwsBX1`C8e4j4R6*qQtBb0X(chNzQx9MkeeH2*ebSnxq_Gs+_2k5! zS>@SJ&bHk+f5_O+v=%3Y-P7+Le%-U=#*N<}U+7!wSp&wOrXLL4-QVEHw_2#8(9fBT zI}-&*@-RwHJK~tFKi+e-KlkNF%kucs<(c8vgSPd4(5t`ZMqXySU1!#Dk8roDylbi7 zM|}(G{RLAS;aMLosI~sGr@qQ-s7}--KU$1DkTob05%%E4_jpOzIzJ<>Tje;M9q&`4 zwvXDj{>OOlz7yj|jsN!jwjB1;?i~*^*xCTj8G39R@`_+0UBZ=~FW9+eh!s zNbSv*vh5@1CNi7yZ~dM-l(lJEeEOHS$9A;y^c}u;t0Qal&21;+B?Hq9>9-Ep@>dY^ zte36`GoN)S+}`_qub-9j`LZFml0wH%PWt#Vzr*L3Wlc`wy5F8q3)T77-c{!Y`{+lo z+uS`HwC=O}+8Y$>cM~#w{?|)4J{4%Ic3)iYxVwIGL3)KPnpVAccjqDMBlmZYX|t(( z)0`h8_D`AV+@d2HzJ8sK)(=zW`qqwJGh#qgHbCC1JOA74`Az&A&Q9q+{YT{+$qVId z-sk~Q+UiqTeLo#cue><@$gjCGH&v8w#1%e1S>|cg zOum^BzhtI&%%>GZuc{as%sTpf@qY4}Gm?$NP@6^^*gI-(;MSmWRpXzNDSL?p5Z_Kx@RiB!(LNuxz#T!{LTF%%0(x-4FA>n(w_2zLH|J1 zy~AVowd$u59iP(R13i6a>%KkqxyrAYn^77s@2}Z?DR`>)w5|TWsO6-UOGXR`$_8Y8 z%3b)b<(Zv%!S3Rj^T+E3jjL`qBe!eLh2Zs%4b}-3jBoL-uoP|g2>Fv4sBYV&;pKCQ zGva?sPIf5*P{4}Ar%Mj=bgJAEM3;~T+Xj1eNG>rx9{;w(W)OM zm(8CWj@*@2@k9M$kazoy*FA5y?R=*4MMdwDs`u&k&-4B^=v`F}_V0=BGH5?@F@8rv z5hia_Ou}Q_U%$H^M z~StPvt3%C<#u~n^2_bz&fB=`E|RtL8BK=2{A*P7 z!@7CJjR>bto<5N@{t)fTI{(meL*r`Yj(fw}6Kp4Bwt?g4AHwCvZWS1>?9@`DU*E6e zcxSiA1(taqot%-ox^Nq+>i)_C#)J-^I?tXK4^S%uhX}n!?DMDwf*V5{tINARaYy&%?4J@xQa!X zo~55UD2)#$pl&yn>{x=`lAzq4#;HBMbWWFnT?7>mUlaawI*So!cjOsIRI=Nzdx4>{aK7zTV!6 zq-lJ5>5iT2an*|sON_W^<;OnfR4ayWqBDD!ZQQf{{<53f_DuQNanByvv ze|8^!O!uqXp_`?R;vS48Y`1lK9-i}p+gj`|Kmn@320XR9WhYT@aP+PeT9nlk>|#~Ix@3u(uvHQI1} zSY{&qn;>!BmmxR$ENQc~c=nHxtr~P0GAS+cd(^%3$d0mlvRa$(FE9G_{SC9cdE?&O z^Yy2$?m2z4Ya`tu_r*8wpPuiVd&~2%=$-Os#i?evKABBU@h&n;%Bt=aCN^l<{f0Nb zZjR~hc%Zw*T<<{jHW?-&QTdmd;bu zt$zJd+2_3W$k&e_>g7y1spG#}Q@AfFH0k8~>%Y64H>D`=P7jS96z%t}MbCMuzkf%K z&T%($+xNaF*Mx4wbS2;K7yY%db|HUg)FXVhj@K666=&9N z-!in3(dX0ZtKpCR#$459yvvZUDBzA*6|WnyMekNV&${{z(jDz%c;3J7sm|P^`r^p% zU&~tH9mIF=gJ zfPbZFsOyIa<0`UO6)QR-X-CWIt#kf1#S{J~|K|=@w9*$|e#fZS9C9c%x^4Lx9wUunYs^V?P;xyw$qs=EGhP~uasO|9_XJuJ#BANN;z;qO-Z>g7W}FaP%!kI1Q! zShAhicht3>%C;3n# z)`U+yXuq$pjEf3Yw+p=aCCw}!`|IY|f1kdG4jCuq($*=JEsJjs?%6>%qNL}#v7zOM zLt|@gnKLT;Sz_hEpG0Dfe?r!>1h_`a4!k|H9FEn0d%9!ri{+id`J<{|UscAcy}z%; z%wt|lh-)y5jZ6MHoX$v6cvZ`n$tPCF7oO$iuQ*12uw_Tl`;7B9Crxhhvim<7yNTJ| zhoPFXZ#!OMkW5&sdywFIb$-{y{C~2h`&&S6w(t3AZ9h-dy_!1jLc(`A)eqW#roU^= zvaWE1v!icskAf>5sw8>hR>gln{omd&6LQ-BoL~!2JNW7aiyFRpRloS=z-PEuI)~&*-=(SH7S|NF4<7z30w4JD=`XpT!p#D+ahb3^>KD zC4ebItVm;I1=aia3VJhAe=#p{j^p0WlES~vU!HrkZHq5^B34q`n2T+19KQp}{H;*% z*qhgCN24~iz?D9BhEqNTzLVc$X88{tjP$+v_#a=y?#8YA%pceKZSsPIw-<;0W<9^O z%30a0_-2n0hZfc;T3Dm_%dEJ9NhxrT{Av+9R8|gC2RHPsbbEuF-AW3>Z}J$k+n-*? zUGVs3zP=XeTwebrd-!#u<=;NNObS+Bn~Swx>AE9WQg{8&4roKh-NLZ2WOkzi{ImCt zq^F!+kg~w{e{I}pfXsEjsDI0zg1~|Ci^IKOAr*Kl80>jHW?vt- zE`IpznQiAzpw<^4+`#Iu;|}{HKD80|_phIy?w_8UG|zT@GyD8vobl31GFo@C{*1OM%Ngx< znJ*?!uGcINXTQOET$;1acs8$nZ(K^s=%V?_BM+8NYto@RBQyTWdVYsZ@-2CdJK%Yv z4#$#e|CM%|^yN|UtSg72e)R$0x~}hMj{W@R{*JiHA>+QW4hCL4KDP*iwq5IWdMRmF zzmW%JpR3AWmMx9`ZrXWJuML7_bL+=-vkZnT{{qNZJzv;maIDpspBo*oZsw!Yf2BpM ztCk_j=&uhkr&|oY`YsRl_0O;GY#7IQ9RI5F`j(z8d+;s|xPK_R=ELM7sXtZkks-tL^tCM+SzgN>5C0_URxjr(w6X}!F9DsRP*k%ARNw$+*} zyVHZec%y|}+4XMrGq_i_l#*vAY)k+3b;HarxA)kSl-o!AdRp5_xp}$Sh%$&T)cLxp zhsJ$Z)NS{E@@{>`gY6>=>%1tc+o+A~)-Ba+L1i+)zScirKKEG+Q03vTD@ zrxy()j{mX${oXyJA0D6jfja3~iu3mFZ}00mA57(*ncq9uI6m=dy_8{Z9go^)9+qwp z%K0g&v;J(kN$EWAvY~jzZ)U(G^YV0zd-z?T-^sUph*0fse6Gtje&DmkkO^1X_?ukLs z_Zc}ehZh*wx&2v<42{-7#NTIE^UiCA6@fk4+AY(P(D3%Gc+_e}(&fLpEzc&=1aYX6 z0TNcy>IJM-^u6^?Hn?ot-2hec&6+VUiW07yCUf83%}$|WTeoOBai8or7>F&CX1se^ znnOJ`2cM9i_oaAd>$5vLtlxBPf3y3wmG%2Htn4k@n0=vUw@ul`t&^vHArFfyuG^u0 z>bIJt>8ZLy8S5w2-ahrqBMog{!qSbkuQY2{as<`0q*1-nH%m!=q#7~)!*p5XT+1Tm zDoWi=s{GY^>&{@-4A&==jIkf#l_@6I>-Ib{YWbk(>Xf0)Kb=~-avbeP!tY+$rp!(L zXBQq-R3yT}%Xxlz&C5@bzxLHwr~exZ&<@q~w6N1&dab=sD8F+dGfaef`^|}|>RfJ| zXLsp`jhP1y%Q`;wBS)VZSsV);coECq+ z(dvsuMMdLBPm54f6CSZ@GbT1ChuS2M*q9@u#V2gZPN0z!hGkPeOtSPkxf6DXKHi$G z{itb{c1ySkbvqQy&e*>0+p!us*Xgs`Z0fGqF>2)07Gf{=NAsFE&M;lt^GgX|A5QP` zaqc3F**5>80JSC=wDf7~T3b zA~EX3$Bo`P2RA!Dv2w;n^kcmH-XTp-T9X$?*5{1adX+AV&mnIuq)(i0D$OQeU3@1B<%m8Vxc1;yyB4X5 zV|K(R2IJ$%G*6RTQ#OwI+2ck$bz}3^j6T~EN^Tan*G&#?Vx<>P<7ZTE*X-fcjel`T zHOsN~H6<&@*XS#y6YG0%HJ=OV9IPhud5_i8hW`GsYi9e$@sqMX9se?b*31c;ri|Xg zJ~zRy8r{fyLNkJ9sNGV3_1B^|9A^gVn|;&x-BW`{Fs5_aZ;HMPzSll|@>BfiVLx~m z%Zh<8_e{faKVcWc<=$?tcNnJ5_inud-?e#t;|h9>QN4yu>EEE&mxt?W;ZN1-`Ia*D zT|w=3O;faxSWFzg&vpIW#0e+kUtLb`S9e%?bM17jH1q3aR;}$w zSa|zG#k<36;>Z4IHTHFl+AY;vnJ50j-R%C?kq3$ATp(v9B=l;|+*(cRgSwHB*f6tx(v=18f@$eDwyOK2 zWXnpMG#sCtaHn~ftF=%k+bdX|8r~*%$`GuMx85sRtV(OrE$gFp&9J$*_d2)yoG?Po zS%-h!rQ5crar(8MM4NTfcv|oLU-8x2AI&AS;)H^{FN=m6Sk#h*`O7E2ChmeMi1z{wt#kelt-|4ez>2t8{-rxI@ct#ui#y7(JToH9jUk=n{ocg(%? zAMcpyAL>oL zO+H|px3RM`*L1z!A;r_&h%acm_3N>xq>>w=N4V|}h~QqI$~W*s5K7;vIeXv!x)YDm z+8pVq-yqeOcl|YsRWGYkzN}Y?3-$Wd+Pa7r5p8|*N5f4;C4ytkTWxjIWgnKfi}Fi5 zULH*I$Gw|!>0xL6yxwWeF3U3dXEmTSOvYy(|0d?vjpJ_JK<`wdsaV;g<3Ls7>KSXs z?R;6Vr+9bz#B%+n@mpun3oTaz`u^99{f9bc8aG{x)U0v21SNSe>2r2LXVtMmkBl{* zHmPn`x0*5}U)^TNvr9v-%|1YGkIg!9e6jwjZbq}!<;~?=_4x8(XP1v(bZ_#rdKc?| z%XmKE+Y~c;=d)(jiT)a8tA~E>_>hU(`?=?|vYZL}`Wxd1uJ3b$QtNY^s-R%UIKunn z79MS_i8K0LY5tB&k`To^hcrFXQD+{Gtf%Ai&Tp^Fe!x9REIkvg*&xyj?(yk@e$$^6 z)G7MbY{xOxzW`tzIY-;)(7V@sag9}easbgmq@qI4u{+Uik=Q+F#u&ognXn&iTR&^r zry4N#%@)#{POQT^`l)`Mq!QKiX=`}RaieyQnOJqQy{f_HA!Uh2JLeqz4gSMdZ1#lL z;N$JZRCMb8HVJ+kO_@_Y7eG=I>LQ1X*PdQJxUfn!Gb2BLVzc6fbLJsHl(CiPd?Svr zAq-d=P!k%Y2_QeR;SZQ*(!^n7AZaw*^Q%{AG_K*}_`)JhpUn7rC%WgKX%10bQ`EJI z_$lX0&xP;q-C(}?sa*%*qRt--!oi1ndf>Q+By?|H00)t9cFDG!8Vw>1kY&Tn8c~#X ztIG_;hF7g?rB8_tJLFi{N*}kBoVnsVxZ^i*--&tkneh*ACfXa}Kb`P$o}9_OI{eY8 zIVq}=iMuAh?tfF>iom>Mcw1K}T?k=1e2>WmN0*S(hz+<6ctZR$9D zxM!>Q{o~Vh2R^JIu1jgHr!DmcT6~-IVO9TJh*m1UUTS_TrPIF4e`T#Wjtcjdtlb&< z;!5vSeDn2&?AjhAGeTIB8d?CCY;b*|#?Wcxim@U?%HXLJ3TM7s!<@60yCAuJC;qYl zdp^Fn%Dl3U+Y^GN%e@@yIJtqDo@-z(?#N;U*WHcc^WfHUiqgKW1%E!4m7kD-xW;pn zxRvY2LSjB=pZh*%lVqI%cKQ~HjLaHurZ>;)KU{H9T(SoOD+Re^NL@?M^j|;Fo(D%S zUQm|o`TqI!)uI&5Zr1mE2mEIB;n<$eab>Hh^)@NCEzUZ&_#4D%N#N)&fa7}U`bMnX zKDcy1kTW$1G27h!!}0muOEMPL3ycHvzPk%}d-GcNRg^-cWPE*l&*JT~>jx*+s$1t- zpNg&304w1_sdpVr=b3gDM{&f@O^p!bv|m?pIEgbq8ywYHJ9g|C{;QWbv)p(4rj>vI zsVYwE%OKDnv0%a)`VF{5$)wNcS~l3fCcXlDc2eC&wzYeLFK-l#t#(bkc5lCz3c+EI zw#g&1bNebQ1LR@;Cufqt@6Oq6y~;V2)hWsU^c<2C=M$#wZm$~z5hr_Y_Zg!(A0V(w zvR+x+{`%}T{WTM+tDj${N_W1i*P`j=62a%2J8C%RbRY;u9U0%h1K#nr`pYW_uFfn- zNdb>C_wE6|ePBk{>dNcfsqMaZyn7^l^rd?C%7MPe8CC0>^`4gb?A#)$WF2SSlKNFQ z^QqtK#ZBG1gqeA2PM00LS_g|p9~lpcQk8KED&c1bv9&(2WMh8%miUn_lhDem*FWk}W{`uS!Ua$*aT z{^fWjH_GbtfmN%jS4qYs%CEQgp(4yt{wuVuv~LwZQA z++IN4CIFtV#0{v6K2O~ji(-`02j%&38bm&k*C+;lhfz{Dno){tA{gsfr|6k%-XMT9 z#+}Wgs*1rkpyv~Kcec#w=YyzkM^eMau1uexrz|`#S^*fjP+B#(jR6@4K6N$&kg=Wz zODVE6Z^KpZ)n=*^`70%Om>1M&yzyR1cvL}bvb_SURbMI;IUq;B>!88Lg40SnJhN3}IoIa?|n6i&>^K$7Mx>^^yRdqHZu#Y%lv#F-3Els8hD~ zVOqp4C{BfzXlzClIrVFb6e|TSy8fm?R=VQ8|2ah3E-Yc=G=Zmvb_m@Yk`r*HC(0wQ z@VYA&deuGwxjm)m23dF*@Ye;KbBCjl^VjxC@FTcKrye5b7Y1<4vWoEos?k?^|Ecs= zs^=%*F|6~^=Jxqe7X5Ie1&zO+NWL*_7ByOlM=X00!j(jHBBO_&b>BwTnCELDc=?Cl z+>C(GnZHHu!CEeI%~2J44Rczks$@^_pieOph;+!=dZJM@!fcZqK@QE9Txi`vJ2k&T zbJVD1X|1BIcyxxm0>f7$L}SskWKzS^tOs{1lxpaPOd9WfBYQ>~P&ya}rl+cT$`GaI zIWE!;Y23{<1G!JcjRo7GT-@iyQhU!sgPE~9F?!={PP>0_Vl^i>w^mp-54aH=z$!#3 z^X0bb9!KDDD*Of2H|;N>kh}X>#T|-+%;57`fhJ1{eo%XZ z;b>%k(<_qoZ|LXA+e!?)26c&`k}%p(N~AK+1m$y7k@+uJvz1R>WtBgTpJGPgSIvwF zP#eXRl?-a3qTHM3gZn>y`vAbAbmQnmYghO!x>7>oRi6VI7;S7=6jFluP`OyK1$FSs zt{t+_dFI$9KHNTZJO8z7RF#CkZRH><=^iF>4QBHG6F$jJDN{+_d?p3!4LxHj<#>5^ zcv*=5^&#T6McxVc^XTzzEhrLJ2YPf(P{Z$JZ~m$zY`Z-qG5|*xYLH4%cF}p{he7gm z8(KizYY;j4y3_o8w>``-;lA3iZ!CG#=sKv^Umqz$n`kzis`wz};1zU4@GuL+xUJp# zcOTov8~p1J3A_PxG3fLcfz?AtN$eFxA zYUTso1qc64N@jFDi9poR-}oDvQNn+8JyD42nJWIIDF&-3KMyMqtUR-&j7g9HtfLlea@Eln7xI)&4U)XlaTTt?S`?bX_oMSiXtUV zoKLx5ti8q`)sstN*4Zx>3E#i(A|d1W!LX7zy!XAO83Uz;|C4 z9doVT;(bf9S#|tkRteh}WKNq&BLlLSqp`u!+= z{14m*8DUoEES3JzefX`NR@LNQLbA2t+63--D<u3P#tS((=jRSOhMzcrsdMpjl_Ax7!^bZWo<(Nm}if0u2=I_=nHn z)_EM(9^RrH0q2OQ>V3j1@kbFe_Ck7_T;Mva00HDX_Im08trI1JUrzsUibZK@G|6u7 z&!L?`)vgcuUuA3!=11{&IOA1|OQk(NsAs$Zyv!n^O%@l-r!)V}mxmZ`$21)5nO}2= zoTv~x+3wNVIC5b(I>ao*K2Z$#+E6-;F$_q#zZB=ggkezCdz^9-j1g<1f~jEK>{t~bqd8h%TbbVi->;*f z$IvGCf?$BexYB&H?I+VQ(XB%|N&+wwd;+H5ZrA|yy)!D~CIMhHQq^yP#rX;h@@;Cpv5jtU@!67J>FL15 ztCD$Lp4BSEFdE6dCFTXX>evtJIVymWS_GQpJ;0Bwwy->kSk&};Y4s)sjOEEh^-J=< z9$;jg03@+rWKNRf zyZ>7Q)nwl$Zb*(Ni%q)V<8Isio27Gcxhw-HqjR7W4>Fjs##u<=<~Wam?#H4x{ZYh~ zz5+R$%84F3C%RnJX_E}x>st!`C|VZ%nK}mpBhS7+Mqn6bh3Dvb@k1zsG`MwoOD=Ec zYju;y_p?W`swHbRM?v8E=~fb~^YJ*djegvs<#Vy$m14RJ)eQ0#!p(=v)wlxyMe}uW zwCXuneA!RF3EB2pSFsPe%_9J;uruSj$Vy6&lim25E$d}}T>Bh*iqGMOW?1k|fsF$^ z>{yFAJ=evtG6@0ut{dTGEMd`+=9^?Ay|Tb`P)~=Y5LKlr?D2ki%G@(Us`DVld=nB~ z3M8WQ6hS@+v}!W_WPxpxiUQECnBoRKicIOLT43++L{mmoQ8jwuV|aZWLhvISqs1&B z(O;hWV+!3oOVUIc1w>EClfR)$T5-#O#^7&v<|g-y@|7tO zJE@M*@i_E=5ZlzvF6|cq3u@ZSd*mlrm+21UbRR#pL+m0qgi2u`*f~pafcdY-3IYSs zz4?U@JkI<&o6Pw2^q9w4EnLSPX}+mF;xJ;$i5B_&r-S(ZJP&+eu9$A5h(R)?bl@wV z^#k``x4=o$J))Cw=rPnVn2Zi-aMJU7@9#$7q^XwU40)g0#lSvY?fsp09QS*6Tp%4O zhM#2V!S(7g%Ft~+e>+llFt@5xWG75 za&CFD{M~7}Cb$YAW|;cb;OHIzxFnXj*ZXR*hn{HS=%gkdlV(F;oM8X`{q5(5 z=);Y1)%DS0OvUqJjzW_f)O|{Tvx9=2BpGZ1s(Ff0o687?9EMf|NbIUzSDvOxc$Rm( z+{%L4b^f+C2B35jApBHnZGYxFOxFom4bV@v1hnKoNfY?Nr-3TVf*UJ=-4yH|sU#tS zU=s)~REHC%lU3ZqQlj{K7cTAf_nlU`p&sBt9jM!Ynq3vt)k~nnA!mO||8b)$OX9QJ z>JQnak)J)FW-I`x9#<#KxG@$}_$Hfn&A=Hxvv}#UppOPpYF!ttjjaYUHpZVso6S*FWxxW9b+l*Xj5OQee&cS7w$sj3IPl?_tO`3{8Fw^uqRAs-T1~P>Nxk zs*}1D$kuaZ{Nl1iP|1)_nsK+1QTlbg;wB(EizMOKs~ezh#Lm2Jw?ZiQ;9pjC;O2z+ z!0-ok*#2^V0$2@z)K<$6xV~}$m~B)^@Nstn`=wXV2-xnIzyQ*Aqnp4NFiJXPfz`yt zNvJ8s(7hS= zh_N3omhdoExd><$CZ83u8+$TVZuD`eU%%ECIC4CN%V>r{Amf{?Gz$iaJYERl+*=N( z={hxHda--T1)%5|#-l0MDvoDvYniUG$QD5iIo$zo9%O9r4f*ML;P&f?ylGdx#azB-5-|v`c=2 znb_>jGYkuy?)cTT6+6lP!1r+dXZ(FNT8z%@VdXty^iX^2yag3E!S$DJs?RapbpF)BYp$*so;@!2gTeFmVz>=IFb}9_b$mL%K1lM@J2+7Ok>I~yX42)`y%DOo)|%Sq!>sF z9o7Z>Yru2I^app=vP2xxG4y=%)tTLw*QeD4oCVmF1KUZC|V*mtyQ$fClE-ru7-?PLlVE&3Rz;?VH& z?)X9sv8IEd z$X!4V3OyhsCN*CuAgreR`{pKnlodId5njVCGnRQHP@nt3gWsf(>$XH$jSmZ=e4j)@ z(NtVoKR9ICr2(KO>;D>T`3miXAVQ{)iW7?nlRe(xqt%n9Psc`?JepGvQlgbcpLg z!927x*EFJv_OLDaV^pT*dFdIV9JiQ(N9JI=-?~LNTr6jnR=1JZe>^oBdy}sa5}9Z_ z{1r&2SKJdThtFpAia>Gf)Y^@++Kv{{+Q=UeYe*w;HA92R5lG=&KP1EegUmpS zVxRA0?+RZxe1XVYKsz~NVO_HT&t05$YWZ0q`4ZPpcQXnSV~Zr!a8e?H&&Q&gPTpHS9CN`Zz@@Myo$o`4;bNk-L*g z^FzkjFKp^evm+1EiRf99*IWFSa-RT`REEOHgorgMeHNQ+pgI|?!~V~ zLj@imr2jmh*J-M-iqee#V1di2bvi<4p~DLZiv_X5O`DOP2($03j(w?Dh1~pbG^|b+ z@s>#2P!IKerLTBne`>r4`fGhGNtrCze{vz*e5OesU)<9x=Vcz{$H`|N<%T>)_xqDL z;O5un-#t0hm(#${ zUw-*0NLlU%+2k~k$Ed&+$aBL|UMgEE9#CyaKow&xk-87fXMmtG||k#HD5Wd#_2>tfs#yaggg}j5*MSq%2?+a!tUTA8gmqfC-4{4K9EQ4%8|lw zNTFfvPy&?CUq1y+&&`SVoIjOw6kigxL&!7~;>o0x^gcUgRr{U%H3NE2JdP_N>mLs* zIwSG&jaXdn!0QT36y3&6&3nFUO00gi2@?8K5IPi)uPvY5+B+;6LO|7{j=Grv%U8&V zglBWI*b>2sDej|8YNp~L3p7A(l<6@|ifA;%+oTa;Vi913!0XQQP@*6cpOE|Zvjal5 zP!_qOJgZ5?hRDW_7uX*pXCL|?M0*kQ74ZcdV^Gm7*RaDlVM|j5^zUXj7PJ8sKn##I zpZ)w;G&CF19gtX+mHs%6tG2)}PefD3lXkb;M1df&f{*({OcKWsq9pK-57K^!mPo6R zZdr|8b@12tfzpMXSitCwEfUQJnZ|4GZ)ebb-iQmH-2^`v#*Vo0Qtj@6W#5@PIny&Z zHNr61M3Rgxr~VMhLo1;R40N#IyAH9!%?XPKK}MRN{M5y(d^3)0PD9_4-?tY_o2`hv z!rok8i={-wxiCodlw?Uq@6(|eoZbV6S=lbhG9V5h;F zkytYQ#3hB}1M?kc#zu>T&FMt#w(M0 zTLM2VU5BGGm)lBhrGofEq>` z=TH28y21TpGly=SeVR)f;q81=`L5kRH;UVIKcm#zQFt67#N+Z4WZsIl@Ua8)J9S5d z?)rbsiW&I%c@?jRnEGy_GXM|g$H&uub2zRn4OU6O2SsSV-W< zNO&$w3vU+p?a!qNg13)XQw0}$K4>I?#;O|)b8BA*l}mAQ#sq&390d!liE84GgB!ko z^~?OPS5v@r^=Y;FIt1gWB`AY7BC(zHBn@ocH_KY`L4tE)dDq;wR3{8lks+wPOy9t2 z;&)lATN3c?qE-`T#g*oJP@)ihSDtaEnG<+rEA>$D^5#RXuB~3`#kF8xfwj+h^ROia4PZ4CY z#?tnw?J#|zE?1P15ekl8#U<$almc^aH2WT+A?s++)X;%f%^p$Z%_Z#r@~akCZkz$0 zb1yVUlNgFVb~H|aIR804AF>m4DQSNitJ~rA?Tvf<(aOx;_7+`nJYP_=*mRXkT)7%! zqgTSLr_VK?_v;;!F9913nNl@6VZeXda@ASeJKXr{MOxKyCJ#jTVRPhNqjmT5L~`+Z z8=_06f@KEm%h#b0^+{*BKlh1Wdrr)sZQ^bF80n#)_OW*r7M|U+iern7l(CMBKtp9 zw#IAt9Bmfs@h;8EXl_Gs52 z5wcJcE^}1W;NQIwp`o-1OQO>k05EdXK`1WK)x^nPFIh=S~U3p9$n^EOk zQpd?$3=_tky)@mWktjX(n{l>I_IU!KPBE{{%fCZ4=KI4n*Bp-%nG13tqP(e(wtv;H z?^ORKYe{M_I`3Uiqp;koL*)E4<3h(ixo8tN|4H0LZ2o#>oelK2YPg!#yd-r~c!@fT ztJVen-;5531El34b&1x9`d?`GcY~iJCLs%~PnZkVg(>U@f?d3(6={Bz$NjP^m0x%6 zgyp~##|Vp;XX+R(%;|Kiv{6R53aLNd7g%IVrpq}RH_D>m%d@q;J;i{NbFlqFo?Rt6 zH)kNhNZ7B@P|{g9#aws)be(H3KJWZ@53o}IDT3xJE1@77c`0L*3P`BM#Jin}mMcvg zp}B+`CceO@*B(K&@rmo^SEfm>30Yd)Aszam;MM%y+Q75hyJ4@Ho5ma8F_CKJubP|S zAbHP#M-$yte|sxeZRBcUpQ7{`^;n0wD{sCbT_=<5EGnu2)$olPg%Tb>kCSOA(bY2v zpqg>Dc@BFoq@Od6)dl;TH;LsBHC6=m2TSc!jfy#3HcJgw);c^xm9ceffFj_6?3E?F z+4nL+hgz0Sb|73noVSC-KzL5qxd2qlN*b~2wm!E_? ze;^2DRU6Cn-$Wm=8bLAC7E`R})T*A!U`|={KnLl;*^QR{> zKDy+r*BW_$3{v`bBT2ukBLUtSJ5{d$af^IBfT7=Kn0#gor5mi8;9 z3;yEr9um-uo=|>&R3nTwVt*1FbKQa#tE9AD@IGuu!p9C@^rq^{WW{wqUYEHx zZ;cz|xjh25bt>Kzk}sraWZKx5YCMhOOHh3Jiicd}NG=2i*W@iF`^A+~nrLp$Hu<#8 zh5c^#^~XYn=xMiS0> z>1AGO<{HjQpjxFENC)veuFYLYIjdGGnD#rW!H zZt95Llr0s9K3)%kj_8ldK?=6!rX4h$!p=JD*ZoLmMd#4_4wl~=*V3`xu%x0r?767b z88Jp%<(TyXY{^bYj-P|#6QXCRDnTLX9JHs+`>%_6rYUCw3oFX2m1dR}8MhjOrKDkh z%_~<9I^voAUU~x{4%6J@lf$!0iGYb$zYhe5(+72Qu3n$UH*26;LKs2Mr~lB2G6w8e zpVytKLkD6X0#!^8St5dk9P+*BIAfAM3hEAJ z<2T&ZQBkLDgGB{{T)xYr7mPd=-&XE=Y>M)p(E9+FrN6Q1DN^Gv&H4NoQTSbn^0`Qn z1wd~$Kgb;{fALl{9Da2jDqN-;K&Oejq3YaDd4=OCYk(C+B=LfdE*aO8iC$YqZ!R+@4*a$Ij+Mi!DF|Pz!#2p7g}{eH>9fhkbYg)oS_ zC^TPR`F?cjwfIQ@r6 zc(g`ac`q=)ct*^N>7)7w<%od=VPF8D^gr{;?0EqMpURynZtvin51Agh?#~e2h zh^VUlgvNxQnK0nQbQIKPoYVk6I|3-+|56baaG>dG!oa_AwN7)!0v28G;s$AjZMy*c za`41d!PNQb&i{}EQd7mii=EDYrKU{3c6i@a?O6QV)$Jm?={kog z;;U#pPEep4WVS}ih<&I78ZRGuiUFbRAMb-P+PMN}pq-E92|#+ zh5%&=0kCtqPqg5`O-2#>)Xm9H?B9^iK;dz~V|nle+^{CV4$J8NyiK`HYLXcv`D*@Q z_+8%gmd-m?>whFI6r6_Mo*(aQXgo!(7OLkM0|!oi=ff7o)xqiT)`AV+8>p5$}U6a1Ltuce+$6Yhd57tU0$jY=)(9l>>1$7CJ zO%Bo{z#VMlXccQd2Ee8T5ON7v_E3rgKTf8!pZ-*h4NI&;B2X5UK){R1I>dl}BA!Q2 zpjhuy;cTP_PdI!LREb)4NO}wU;-4~?2MH=nIIn=YYVYjO4#NnvRHYR%lh6n#(7cnW zr(OU^VRJK2AZxHZ;KM8~PIkF^y<|<1@Q{(=`WNMf#dGparqQQ2dc|Frl`$-l<)e+U zGGQOWFKF+6QmdNDdS}F?6X0l;0D2cxsA;e+V@wZO0xU!iML;s25f@U-z{l|~GmZet z2czS*nQi%jK7;HK07$!~gN`$zn&}pYJxm z^J2Mplr$5#H{_WWkne_m`5dm>Sdfz6CKDLL7Im1?vMdE84aOfB6(KhYgl>F9v_j8l zgm_~|>BU{FeF1AYj>pq{3qAmpegsSy@o9~kf&%x8(pC1E6UN++q}DZbi4ac!8oqx0 z8Z;%~CYSPY1NV!%*z1Me1vrW0!A%%8@TlYt*(mcf{{c$EpHUBnRsd7i11L7_mr>?? zXy4=Q!vw3pt%SEdrfcq=+=ik*p0QkNU9*uSLmi4DtRmw)8hpcqWB+?UjgmThA zze$DYqd5x}@H=zEO8EvH5T-ZRuYuU}qW^<8m;1v(BID$Fwj0?Djam=&fH*qh9FQ&y zmwB|NVAx1o`xKSGVFWQ!PEUW?D1c$JA~fGz-2?P&boub_L+5?ow=9;SBBXzT*yWeP z`j7YWnx&vAJC@?&SR>FGE57#g6BfR^kx1tJD3N-+Gn}GxZYfNX**tue2Zw0rITFs? zK*~Wmir=bOvIP{eOY^P4{)hAW3XX9v9JtWPy`$Bk?;vAUrW3)rLx+M2&uF$!c+mu+ zW0{G=!`kKU_Y-O+gT=XaZ0QPDG{P7RcUatMG#tCQS*H#0)W#t|N2=C|yY?sxB13Q$ zo#>*l5!YjHOe(GvLJuPgBW5U>Qk|hvm^E zDFUha1_xiL1EQf#smwA~#;i?K9q!&8`wK|&tRre|yaD4}&V<%CFFnr!8!+{76gL;I?(zU5OIeay~(^IHS6y{ z?szD}0ViJlA}gUt&=mI|s>Uw=FCxoZnKHsz`PoZ4*7+bnB{PZ@I|{J^QN(?q-VjSJ z4abo*LRGz>ic?YW@Asq@X`dja?}BTlLEU5Fr8#AQhA$@yyNCG2KWq^tWU{ap1YzkR zgobgvXHW=-)*%Pd8OJS<@byO#B4g6>E};Ka0l7DzOPgTeapEeC)m2Cx3Io#A+=%|B z*oLU{s%`3c+sCM?Tab-1=1_UZb%Bf5-T*!-0j8la1x1l&< zHI(&J`OOaIbXibcyko!9ccxG~i0@^?FkTx>$l zN3wHq`cX$uRG*onjB=_BgmcT02f6pwQ9jUX@O|BBdmBS!^_wU%wobxZc=y*sz0%9q z(7iYCIL1^LEZ>l|c3v=RI(>xDU5YXY8b{yrz46rxA@!+XWqGML|nVcCJdd-H*%0Qj59|i8Y{et+IQV5L5ao%Vxkknoy4EO@&Vw;*uYxwB#p)YaR<~< z5ZNngxMB?rXKTyV*+)mm4ms>{1u&E0~lbhI!cGQS>hnX7cx!h`$K-EZgEc7 zhyy_E%CTctMa-k?0`<~&-E&b&jH?9rh_6c8eRcpPyPnonuKQ|JE0loh;Pu)(ABfcV z`_6!w;UDcBP=&&oh`@y_VH{LSyFdr+gBFPPsy?=6qc5hE@qdkBS}X=K^#;|@r!5Q; z9*H0YR*j(K+}tqapRq*lg2;IYVWpoAaSe5r7B(i<_2qfN@78agM7jW^2&%wWAKauD z;ath`^5(zyPs)#x8r}Klq*Aa!zovZ~YKe~Dv7xze4W1gsu~L-WAuZLL6q z9rfVVOrpjeI9S}U9*hgw3W{-L0BMh{@MqBQpa=MP7C}1gaAb^$=H04HqCn*A?B!0$zUnkZE=S{hRpleCo-ZbhEXCQY2gjHzWl6Js;l91 zu=?IgZyfXkFyT5mJF}I#dFxIr@bItB@jBnJZ~j5Nd;@m(8OcBcF=#yjR{k!2>jTWJ zV?>i3;88Go{boXn{1pW@6pALT2I(tC0aXBu9>77U-Q@`UI|r}L@kYQc=D+&g7B6V^ zl#0EJ)4~bZXD~+bpv3-ExcsX^c)J&nWayKGNC30YFfhSS0_Qo<-8_nBlHmioDxIK5 zMqqYyG(tw-GvEmh$cL3W%rzTzTwGnAb9u*_8J+{ZkqQv&2$y{UIuC!r2uf=_CLDTm zqSFv-=CXRjFD_hjt1P)Kq`sp>r*C7^3mNFl8*P7bC7CLi4Sg1InCb%aw+Qy97p|D* z4}Iyvs-g6-+kb~|yv`7^VV0Jbj_20lW4L`5nL>>8$|JH{=^$MI?F=~N`#Qjeg|Ywi zcmoCK7210NO=L;f+Bx$M_OnF$IVYNs81I2Gt0^()A$cEUDSWD0z;=u}VR-KZXi~jpy&8vcp?mzGXIX_-VK7>ia;|Zwe3fl;WWZfvpOn|W_ zOnKzds0a{K(5eBqeWO2#CQ2rj3n@&Xzz>8{T)M!Itbe-o8FX(10-5|=N*2XCN%y-9 z+mU42fzYS*ch`DWNd^?d3_&)w!Xp39naP3ym&`<&DYvo^7yB1b`bW_o@64Hm(%N)z z0K54R9zSz6SnnFUUtj%xW0L=~s1w97AF`iert;BI)C6O%`0j6;T zPYNQ7+BH$wzCPcP@v91=rb=Z}rHB5;>Ze}5J7h5$1piIb+M5J={sLPp98;QOKC_r+ z*+ifE;PDUtQs8mI%MHI&&)wIKO$HMiAW{$HTD?H)CDd>NbU;bQhJ-^PhuI^*m#2~O zZ&aisbIyL?UZRq(@rtO~QGp9u!2t$VW7q#^Gfjn(6(R?GC0*7)RVUmK!I5th^eV%t z5|~bao@u1UCLbpcl3@$=A)1swk5$|^N5XUGA>1k;yJUTm%75mG>ehEGx(OpkNk3$6 zC8CFRAz2r8ARC~>zigkFI)lSV5u=2y;O(-&{d*aP0~cXnH-380#RR13O=zSTi#DS< zikeZ`Oi4C`G0wb^qpBVLqEr`afLe1L{<1NU-xzhT2S^jI28rwb6Cpq!AlX3ki2_cO z|7rm?$w$6DjSZZpcoha=!KG=d_rLU6dMjLnRA$Bwchg5wT!D)Zp%4hgvj>Jlt=wn# z26dlD6gdDLAWrdDU7ZL#3qWTJyAbS#u>SU^1U3F;J#jor=L>OJ@CrpiKO#Q~xM?x@05iEH2_Ov72qU#gfM3)*h z>a0q?YltIc0vvHe)>oij)*g)`3%qj!7##wHoNxRaFiaUhOmxrmq5?X~d7Mlr8hK#; z8PvASt+8xKB28bYFsZqM1es-fbQ`H^7nkM-ol@QR84hMdoSLasj#PFjRmN1Ed!`Ir z%=M(43hzKNSssc+Ab3j=iVXGCer@R{_RAr7tYhou<2DD~@eqXTM~stE3gbpU!nOH5 z(cWtaQQN??-Y@&sK0z*O{|1-L5YVL2G-OtI%(>r@ZxAeeT|T2l8ix<;6~dIc7e}>F zH$O5RP60;XZk`PAj|WB7&H`cU3-~RaF3I7>xTz@NLC~J^bJx)DYuROJpYn*vGS*PQ zXumM};sB$^$9!O*9o5mB$IGOT@8RHugg{uxBb6&`9teoMl%u4;-LM6@<*&@Dt9nqg zo(Usan8RZw@r1_k<*_v?yQ#`Uapd&Leus9+xx~FR0*D5covJws31jV7ZV6S8{ZVCe zcYtj6lT}Pzur*I^yt1)+M=2h->$~Dw%eWTz8&kK^zVJ3vIjq-w2fkGM|C` z!MexaTroFqkQ-VvbB)-M{FcepEaH!YwZ>4OgH^yWEK8}7uM=mS%%`lh))aX#n=*?l zixtPEnU6mV{*~btwB!ADXE}$cdt2@3{+DjQ6>qP=%_hN>ivj!i<7`1e-Q#r7Wq{ub z3v|9QNIC;ASK3NtMLsD_=$IpY27)&62rmxrwrnzGo0j_brxT$|gpg@*~X7;bU?xC#eip*bkZpPubkrv7L7e9l1y%ic& z_RKbFA$!7@J@8XF0)(99ObbC5IYowzXpP~hCoYvj1Pi9&te5{udhvh{AB}#CYMbyX z+|-c43cz0&eBhCkCivlT=0w#YT`xBXi}pBIet#dXi(2zIH7bxv0~g4@S-3j>GYDNw z#{V1~#?q;*oS+DL?s{CJ_f)|3(t#w9xCf=@%83$Z|L+Q6!r?$geRyhSFZukaC?~Kb zWH;aBMQ_tYRlalHt+S}5B(Q&oU_bvb80+P{pb2q(`rk9k;DIx$XZ_C^UB}BGcm0Ut z`7p-BW&9W%Rf2kuU)7f?9om+<|KHa)T*wB3L)O8q3R=dT;h(5NzPJ5W4TuMLj_Sr3 z?;%|u<~}VBCU$K-w~ibPoGu&mk>w>@mOjnr51&|4K(~$F@ya=WY%%U|&(9 zD=F-v_9?kIgzdCkJME2Cv6I>O16r9Uo2)9HkS0~Bh1j%Cx zH27Q7Reqjfc-IAvKpN-l~R@r?nHEvP_DRf@Xhpmhy0W^LKQSC+h zy&F5E^-_snWqscA__ARPN?^$umhqt~OeA5Q*Rw34y;=m++j9n@-NW5^7IVo_>kY>) z)UmJ@M|N)+ZqAd*N)I)Qu>lJ7ZH_Kqp-BE)%NJ!+kH5$IR3la##a)k3l3suLyVgde z$nkO>f+kt4MpJI_GA4|iMkV?Aj}y*n>3BFX3%u=%Ja!oQGo~;~beMpp6)Wi`X6?jO z{tVqMKWyn4_0O^#F7)I3E$w}vTwCC2k51W&cxg;S`Hjel7!X{oAL)zA1S)qL)q*`Q`XBK=&g#Lxa)ADcp3a3FyVmt z4ZeqTYrO`4xn#Pj4@!K+ZzgT^z$>#fIo{tXOdky^!Lsua3L)+7VJ_ zS*I}vd&}oIp;e-5)lTGprLhPQJA%u2ckh7(6m)Oo5jlSQ&X$uG^z1x&likwiY7L5X+zY zig#j_NUoBeF1#$R?X;urPX?)YbKQp9_qH9?0(2Rx!}76x8-%$*HENg~W@f%7Z5gBx zPODwDty>#nF{m@~;=$!klZ4C4nRa*TrTp_gvH%)cvrX6@eF_c=3dZw}(vi6{xY)Zn zH{5b?B=60un_(p6oWL2=LpumwK7z5|l;7?W(uDYuS}@I3`!3MZ{3|Py((C?Cm7hj(o}X0H1q9&C|zFjn0g&$Sn8~2y(KPoM;{f8 zZrP64IiM{MHP;PvDwL=99YMi#lZcG1Rc4fou2 zNz_j%9?>lkadMLA^g7#$ig+v--hT@H(fr*MRCtyNW^MfSxg(J!Nk9aykj z$^WMCJ5JRUgBLew6+THbzj@OcW0g;N*T;<75}m82ZcqRHf*L&^c=%n+A3ts8FRk>T zbItS831?QDo>9l^_<1}Ii-H^}KW5HhE6t6RvRMvPne@%ofOiz{_=$hu+0xlQnLYU2 znDwBH59Vmx#6v{bw6Zs~#J*F1G1=m|(-p$FWzpMXS!d_sr)j89!pI&z>#sC^5>5U4 z`@!*2WP$P**w2?t+jU*DJKJ8rjnvKTS=EjnVUOLLhnZ!vson*wofo7Fz)Mu6;vPTy z?xDO56NLR?*psRR3lF0i9oVtR2o`Q+;b!A4P!HzxX3>o&b$*Cpe6|s;STa#^FCB)i0W6dK~T{lOy;bYreG zy@?W3B2mdUXDjeHcZ}!Ib16=i`Z8)i^2pLTN6MS$r@njQACoanzpNAAm?uo5Mts?4 zO44Wf^+M|+&;HzhVzGa;*y=ajY_5@3yTKHm!x8S|hn~-NS=f8D#%~_+@D7Q?w6efb z7h9T47t1f(q@-Ot&&NG?cBan6JpUAxrcrabOB}_o4k5bY!@n<$d%w3;dp;Cl@;HlF zO529YqlQQCQxH#%$kWMi;U{b*;|Y$nJ>9Jg2CPP7_QRe>ED)sV}RC8@%A<*R;+SC^rjU-54JqwvOIpDwS{oiz%}l@NDdi_V550jI@x!jzH`kw6X+`Ye7QpKlc zwCCf8L1+QCjF16peyclK1fwn#<7c$#C=rX`WaZR+(OonP#brds4UY^@1cw z7Cx)$|0VpY#hejU=kc2-O~$8^e5{hXf`=p zc2X>ghl^0c?U&?l$^jy-ymQF_$ONr=7!Sc-GBy~Y6CX$e z3X*d%F4EAlTQNy(mRzAUG;DpYVTTD(y>}-(;!8*ClUSdmKk-i&*%sC)DT8O%|Asxz z776B(M^_QB1WYo60H!&K=oIle^mv?c`g7T!Jfvz27VY>Wyl`pQ`WaNbkcfz0mh1#^fYtX?%Z6mBxa?P;W^rUsShX9SiMy; z_@%2?)MG#E@|#E_M0WF{?qd+;EeJx1P^Mm_pQ9;XJC%!7f=fykecRwHS!OV5rY!#(cil zy0DweWm<@N-4CBSW4gYIyH55*8R0Kby{E94MPhM%iWI~*+gM|{UEuH~M!VZJ2-Y)+ zlx+ucOWpAQN7`G5Rkd~P!vb4jBSAd z^TsN5Hs5%Diuh||WZ(j29VD+xf27OAAdw8%a~(^+G`3oPBl@m~1M5a|b8=>c?Ip{J z5wBNbk$#Z@666G@kU;)Y{J+Uz8Nm#aAO_xZW@`xx_gcAE?0pv<9moT%`^=x}5G=yuM1?s%V{O{p=zRyMnq8}aGoRh;xU z{;`)ACk*J{g?d$Sk{t4Xb4p1jBsNtmPnpno^p$!*^=h_3LEhk+yx)OZ{Xa5a^Mu+n z%p!Y&HjKL7Nh>7ST~Y1o9=XEqxlhJk)Src(;RVfS+4bsYEu96or@o^N=AsiEY#%TW z=r9aFA5?w*KEqsl=~#15VoxJkTjl$)tW7Za_C!pEfO^7n-Nn4qDTPez&Y@Lj+q?Ah zQ%tKrb*EV#CxNAb#y45&FX1+`Dj8k%{Iq$NGYbn2{Wh)8{W*zC&t?1hUCCFmtkm98 z0k4HCGK4BJ8vGv((0yI}ot%14&bki0cf>Nh|9r%Sm1FPN$1+X2S>K=eNA4%){FP7k z-CV@9;!iLVEH9Q=xzLJi|2sb|mSD+;6S-<-yjH-E=BmN8r2UeV##Lpre-3Rz?jLK( z*%6C8tB&%^>CVx+jit};@N&-eKb12!7lDSDhvqo|AA;7Y4g@!ra9{6fW?e;(W}Q?h zxx087v;ET2WSJ{^vk{_Vy{B@Qnpi&F{)j2Z85}NpZ8x-MdDAcH)p7a2%J8+P4Vx)n zAzFU025-lar6pmnoZ54|F<0Pu9H}n|bhYFJQLQt6{l7VukR7!2Z6R zoX$ujH-rvY{beX}rk+w({H0_~M{4~v{yZ9BfJHH-@y^6cxJs)Fn-R^%g4`DK#JES4 z?ZlU2;$_1KHF{~j)J`$%vjsh2{U0Cz?8xl?wo}*EC^*q&iR)$0b*>hONn{6~sPbJ5 zZ;j5@r5_0uuNb!CwJtTvbol95#W+v-TrE@SXlcCz8kQ}z?O zeSVwGCbJZSBrW)I#F;T|53&`_AM%}-z-S(L-yU-&+q4b{xG;2YaULT3@%4_v!|VLw zgRW)qib4=$NXS3@4-Rq#lY4&;`Xqj;@zOjzwSnL@)Nnu|Xi5miW53z%S^_dv@htqv$nhB-al)o)|jl9EXH74*V2l zv-k>|x`|Bt-jo}Xo)}*9cyC^CDEC>qJ|0Q`pLNx%HP)csR7gEjXYGn-edope(F4-< z|6)z7O>vb8fyg=O#u4&`0ksp(b7_qVUK;`N^Hpr5W+?f^;bgmkrgQrDW^8a@X4NR! z5ZW+$%->Sd_&eIO?Mi#6ZS^X-u>3SWHCni*C^{!zK02tmUENeyDntH;GDzQ!S08hY z_xrEGYp4TuY~5_E$^LB7fPFO4@_HzIGv|O02{6U1ICafCkov7px1E0Q^VUnXC**!d z2h}2SP}Lc$RcA%>wm{4k3?Egt>o=NIR1ds6!CSi3J*t5B%%nK_H|CykZ_ux$-6IwBLaoLTq5v zz(bjcx)Q9Z)`1D*DY+3URI&1b6pwi6I~ZgekccwHM9)`BK&0C)5|2lZwgmC5wi7-7IPBv+z8U{3x=5`N1gU_MQ6KE@S zH`5%1hep)(KsCRAdNB(1)E>A!5w~$!uihAX8C&3YL~PoL9KY3+gN^$YfPr&Db-)|Z zcCs;OeQ89L8ybQkrGHRv&&f67I#l!s@kjuNcV6&7j58^-udZdx`v|@U=OT9y8wrr= zp}aSNqtnm7>{xcrh8QZOff3GWM-0Ca#|D^Ob}*huCXwG!wBx2=*I)w@^2*_qmu(tk z+OJ(I-C_>Sp>i8$>v`!%xBA`uQrdt<#34TsFee`WsokifOVKoWBEMo8$aBsodnd~^fztn2P=CIGMZs=f(U`e*kRkiFehmiL*#x-do5q3=Zmjn9)D_X}w0 zqv*88l;Zk5jhZ_vMP?r7@O>NH74|x$z%9X`0&aMSUC`kO8m+#cmF*7|p3C&BCCx@S zdJqr3JP198St6vM*x$uH7O<@61NVg3FHJz-FuK5O(FLO7A7TSTfAXztjrxyG(5ZdyAZKM-{@h@T9PEr$Ka>%cd zrd3(+=6QP^L*aU%NEE3&sRmax(k`rK``ev~@)1HMbiWxuUXBAV;t_5;dI+#E_IvT> zUqXM(X9oy?Y|<#0e72f&AB>C)iyeDQ6bMQ{FWBjj?U(^Gk#`-IiOLv2i!N7h8 zo;Sm%jLI~H%sp#0?PMg>Orh={;JGcf=t%RyOm!Dkj^BGfCmHHfYTLyIUMinT?KB++ z3)4Y^+Quy?bbIat=uOS~D6}w8!zz5acJ4#ApxUj*Enw$)Cz$U8&Tn1TTc1R84kuD@ z&JtW#&dIdWAC6XnJHJM2xY>CD_Bezo(VTp@z;xKe1Sp=G_a!QGBi zr-ne}Rp|K@$@(i>YPhbXRpz2DhM%IZ$<>RoSQkE+2GyrJ(5@}mT(k{AKM}P^XN}il z^SSm;Pp4)SE}1eo1HIIU;|Hr4^j8o%7(w%Z+))13k~$%8Z-qT>-6w(F&s4!T>cK67 zYnQBvTIe+kn4f_+`Rn`5cb1WHeDTB`{Q~Ea=*_y7MXi9D%btL^r+5!q0{d6x|si`5bDjnDXo6|T({~aZ}Hfx!K zOA@9tG&D3kUw-@--_;5mZ-&Ufqi_U3?bDD%u}i?v$baX zn|%k+UQjW#dAKBrrkQes$i%W0Z>_C`bia3!E^Li4;D8x?EUx-bTjLIz=UVR1@c^st zrQbX}lBFV!7go~YCOudi&(fOVE?GA8HF>nBKj-E@kg0m78n+IqU_Q9$u}`1AdlKyv z6!?y=15|&6%Vmp}WbE~+2xc&%`)~|X>e@|w& zPdxR-YQ7APufGUv2-uT2b930}SXSWVzk0o|L}}-Iy{q8c<)QXzi%6Fw4?(jkT|1-x z`rSENaFCr7ENvw1>x`LZc%x)brA&L+q9ZG%DD4A=KFLDiK8&LFSX0TH6H7ywvD2z% zvHoBQk}J^hA#NnRu4p-8SO=4PmCj@s zP|gD1enF8(rtQP&4P0MT9fd?%N$+;z<}$7Zc0%QO2v33P?k_lqAvxxj5$WQ}QQhC2 z&t?ai%)^k1-IO}3)(o42{#N=y4wW<(42bw9;{R#^e0oTdtXnLS)SRcy_W3=|wr{O@v185K)G6Bg=IFvoj<&@uc8^hohWWIS zK@M14VW+q0C<`R)^5=jl`3-!K5;bF-ZJ8xp$)&FNH(Y# z4QTbGDcWDqwYXp5a`yh3Y)aAo13$0j2mXjtp>tc!cd%UIwsxLa+V|+e%rFp0Cvk%j z)PzPY%likH3wUuJ-gdP8R$?Iq$n^q)ZE%S?C2VoA9Z=6MOeup!(g2NX5+&Fv8Qb?| zaf9sOD*G_$cTSzhNzhXReLa}yb;{k25JEGOrZYi=_K_56J}lVyFL&BbFJDxa+XQIY*@vXcw!2r2cP8z>}&PQlC>92hvs(c!huwHEQf{sRgvP2sbTgzef(dZ zd245oxG$Uh-_SM99HXM^G-A=qYrC|XVW<%;a_xXIyOQhV(f33h)S|r{SvzTvv5vE) z#3w^3g8#vd05*_JMFq(lTS`rL^?01~4WvSoE@{+EF679^ocyrub9T z=LxgT1LCI1(-!z1k#1i@dW1#VkX8{o3WrzGE`_m!QrA0f+WIsR^21L{!Ij6WSk#*6 zomIr(Tm6McGIulpULAN3yNA!=h>2pw>G5zj)DTgbc*wGS?EXaN&>{MQmAu_5W@l8= z$X%IRVNe{>kpPmJWH!=|s6r0x>p3??9c>y$W{4pP$g2Ht!b-+EeL{jzkS(*$(4fe? zudAxRsic*t3ib(6Y}HeivLKvoe}mJ(AuVBR#!UH$zS<^$zqD9t0bk~33zZRn?Ge)r zX5Eq^stF|~7ZBiK{u!>qpSgZ{>8McL1vmV*`>&G?Z>lMGoMcp0E<4kDjYJKDwZ~ZN zv#s+|)hsa-mIlBy?qVS2x(SV{E_|Rj;4mlfQAk z^HHNIzv|icx$MNZx(W~u9~SVGPtotfVgoM7Do6{JyQJJ1Hab+%t%Ul{j3^ zJa?#Dl%+89YmQlSPy+7u(98yjWn*XMI z=vqR_{{iT`V5Z=WN7;dQZ?b_hr9{2rg;(!v4o zd0ydyeXi}hHB#E0^-~8^;Hz`(bwFRLVD=FG+sc;iW*=bskh-2R;p?g)&xIs1UYy*s zNiW(BaVf_D`4XW0N%;^KY_sf>Z{E4EwLNx^*@fM*+Zzk)$pv9Thuh=y1zWv$2*Icub`~0qbMJ;zLe^87V+S)=W!w(fQSLaz~ zT*i?k!ye?NjDEl3&o@xbkAtF4AOX)rPl z)iW=T5%UyCT$rJWuC4>VPMVMsgRIXJiS^(gUVM+j7=d9ma3E@-{2Fz1%lpmXq(W)c z8wv-Er1Kyj5&jOgej8d?8H1~t?sDOBOu(pd)zJ8vNR?kvHqnhF5|^{2^xDWf*raEi z7|+seT&-|1*#YVN)0OnWc+X)?L zLxy(NX1P#q0s2v2iw!eP#2bb9}dq;p~`GQF6?M#WA1INr~bW6cIP*cfq4bq)tg0}Putqd`} z>-e~Y^J~h+Q|Aecvsjmg-?)B0Iv?4|WAIW9ip#$Ekm`VI(^VNAl~n`qP#lSDU>?5Z zFWky(3JEGwV$|(TH#-15(7p_jC>$`s{xG;+4|K4`ucrglTlpHv8jw6QlZN`xQyUSy zg~U}AeIIK*vFZ`YMR3b3HUhM(;t9|rZcJdT+T%IWz7(YF9AIN!{Y)!!upNhl5D}in zq&R`z7m9F{&_i;*Tb)3ad+p*27l{+d`N}Z0GEaV#WZ(!?S5u2DrK*scc{ubIik(=! z+J!NS7g{2qPKb-r=cC?pZTd}9$WP6-o=a+T`GNMfWPz4Wc;)GZ2TvKEB5Gpv6y#t$ zhH06QukJAwAGV^%QUUAjC3PqD(8)OxgSiZ=b+qQHQ9XG zoG?7PtTE)s2ZYqQxg)nrT8S*P^cn)c^+G zq|J=Dbzu{EZe{lYr-FI^0iP@b&66e_ z+e^ar4986WEN9wqi^F=NX4Krg{kpSY0GLiuHoG z?TqJa_c?ZKd`UEz+?G<{QU;{*8fhbq+d}1N=9n3pq3EEST|rjp77zgw^{-py4r<+J z!ZR|{PFscgTraW`c%meh4OOe>y%yLY4KeV*Cy~1)$8bZ)hE8pzh~v!{C%YOB#eXW$ z*m#JM@X%@D2%nPk#;JYhK%wK=VI()Y#*C@HZ|m)j1MkT#6CZqz+{^1bwQDaS=L-UE*u?0<`U_JvGaZM|Z~c?8-@% zARs3a6$s@;<@jw}#W)`|RY1&&?)EPazwK$;RNiyr!cmUc*LujK2xMe`D5^M$Fo--k zJABS)e@NWA7W!ed(XIu4$f&ELB;i@*EOif7Ys14KxFWVZb&BDJRSdJ{wfxJ}o1&3^ zvSNV>MLT{wQxV!>!VFifj-Dt$-B5Mhc`v6-p?c7(-wO;mH5I)iS30v(xn+gQ`vwEa z6O!27=k8_2sYDy|zxrTa@a-{6ZBr`}cafY4TjRCHCd>`0wDUINWq#35w|Jd&Z#}8(&&{>DX-i?o7Jb zFOvS~^7b1$lA%3NqHwi=wEPBXJ5Y3GXe%vDZW8s7V(3$5)`PVU#xaq^&I>GMk?SV+ zFDZ5jhw4JZzMFZUq5MwI`N34wpXrC3ODmZ;SB&lw4>M~_p^V7LWI;zmWT^09h;zD| z7KT-zsEXyvYjOU3uGk3kqEKNTLKa$10-Gca=d}Tm{m!?Q&=*sVPf?ZnCV+hl%)}xG zMLSBh=ig&&EM}C>FkqQjqwnI3Lq7XBl>;j*z<_I=j>AwtX^l6?C~D(Ue&@y>?XSOS z!bcseC>b@74Wgb1QJRQ5yyVM1Z@AZIQ6w?tWI1((`^xi@j^>>P2OS{nbiNf%=O4(P@;BCQVXfBiTfEBUI2 z0ng$qXvabmRc}o5Ic0)ia%F?qTdf%;NxcH#S~wC?&s0=WO-WNaL;7Wy=<<7l>8TUl z5$+@+ZN?$k=*Rimj~4WS(V%mFT@pT2FU^}b7%I$g-pXtk<-JO>7*lc=Bl7Fs0g`un zOZ}tq8f{~1Z|?p@f+d9HUYKyGjqMD|8tdOkN5Zb#ABnLV588*ynlG{!!l_2CCmGG$ zGddvEbZEwmcw8l)#5vRbvV?<{b*Mx4bJ;Qs? zUds5P%A&WX)t!~oCFgK-IBvt2p=dYbx5pUmSluxQExn3>SpU~`c zAXI&8y{h}uQ}YH-rSpE9VP9)+tJ^({r`Jwp&(yS*b(%FSPb?p#(<~@CEq?SQ^t@~H z1(Ah!bGJQL1gOjIW%6apnu1h-Z6f-NL1ng_x3Os|H=Dwt$FZDT~kGiOYA7O z%$bo^lgi)dOqrp(UPxBqMyhXGAfiz+<$UADjWpKGHzO1pZ{xk%R1LT2K2lwvlDHFm zb27Z}KC}Sx+K>3;xNq-2pi=MI}l!;+TRgt~8tBE1{;+!4G;U#{Bl4%<6g`dEJ|H zChBtDEO_Xg*wPz!XhNk>)Gi@HSeMVv5oBh|H={2H_}mI|5n#wr?0M=*OIzzmoY$X* z_d=)<@6^6e)q4^WC*As(+rCMv6VQZsleS;>(n-9ci&yS8KMY;@L|$p zxwpl@!d4``9=d9p(j&-fcpw0b=w=-=2ZpS9r|(TTgUP!6z>9U4jx(|U^#0}AE^Xht zO)(ff4g}@0eUBK5)kc)4U8LC8BV~N_j`qUbqBVy_`6r;|s zlGFTyE!HZj;GY`4Z#R@pZG&=v@^1a5#p2ninGSL}Q!%BIqB>-7KhGM5$bo*?+s%xX zx-5W6ve+!eWw)6@Va7M=K=Qh+NV}BB*Uz~h@AG31FTs9IJ~3Eiga2bSW<%uFat0)` z_OYbPtU&|>e_m$0ykwV=VTh*;Pf^TkTpu#dB6(nLZZ2Ls|I2lBpx8RC{(4x}yW4H{ zcqkFmx>7qk^>#v$vWq*5&kmhr@kyLO$Dl-Sah~csybwcV8$AVg(8gMrYrPYb*-e96 zA7Q`fHJV;-GUh~F!7m43wGBgU~QTzm=?YVYMX6W#r0`&1$Z&fDzkFL;+bk4em2 z=PoBp8i{xgW07O0s@k?@<>J$9;?Q+L6j@SlX6C&Xxs_|-A*oUie5d~ojZMwWK%SNu zU8Q`?eAcukeT-$3y_rO81QPtXZk&nf@4_Eta z|MM+@S>@CRnJ?~~eZKASa>I4k+*(>xToesUuD1=v*nJv{s4Oa*|52qP!4P`AMr2f)iRWZslwbzPbCXLsc>5O@5gpHS-{-%k?@1?4WzX6WlW<`uF#yj zR(^VoSnEkZG(J2(6~onBq5)PdhL;u|9sKuOZSN%lPT>l%xWw!kfhPzrR z6i&R85W2zSUeDFHf_<^;YqapM7%-y?>wbak`-eL9Mkja@9?582on9J^mEThXvyt3B zrH<;i{~`pUpWNB#Bz9Y6FeqR z^Hj0)GKQd$<$=b&34q6UBU#F=|2QU(`95aUA zZb1vyR!}UQBnM+)>LP5~~%EP~;qXnPwK9iIK!;;xYw8L8!u%FY`qM zr?eToXYb%br1Fn4EK5wM1>sC2!P@*dn-v5qO(@}rIy6%!Q>*v#C_9iYsnAY}M;Mhu z82`K46=_Gu{;88lg>LFzmILkF1sV01Y-pUoZCx}HK}^IPY+38W3=S%~mp>}F^d+!I-QVbyT)


kV~nocoZJ@&Isg-y|s8A&T_; zLE7%t+MWJrd92cCWM9gCS`8AjSs*P_AOd=YPq2#TK-JO#K`gpHTRIB5W*t5c6`i{P zHHrf&#IjN*pz<~g>wYJu>0ct`PH z9>a>=`aX0TM-1ta?h=UOG-ByxDwtGGTNi%ABa6zT1#2GN zbgkD(G}GsXMo!xlE?#7WzJf+3riIDCq5xEF*gg%Sm)g1_>hryKx7(;_=ItXV8@AOU{dK-b}g3dH7(V`Y%$LEAfn}Wb% zfFlxsF@hnIUtvpPG$;o^=GbfXowP72wPX9s-P*E+fkNRsgMFOg7y-Sfp_BWVR{mBI z2A9d8pt2oin==y-UU*NpqQw=EPVx*7r8a0yZUu;e3PqRXiLeRa-c~062lqx>!+Y+C z?bf^eMUTdovc+gwaNnk%*r;^kY$!7O=Sn3g0(cP0lUifHyl`}}vz|CMnH}c*~X$#I!>aG9sDt9%Ye~`70SR|oYbJ1%{!+(e-&so@7GG{E)?kF0o z1U?0*M+3T8G3_if&RM>wv~KePe)1bpRqEC* z@rs|d$UiDEeT0Om2g3Z(3J%KI7E&!hCz9Yi)3w7bsh}dBK2xlusN9+3Ni||GCfAH% z?=&48)WfJeaSSG3ykBC88_Iow{lYzPwD=;mBe_&==@B)w940*2HBB#qeu=?1}w z&gPJJkSy0N>FSu|*DDSFes-dzZNRx3;xd|O-CPzL>=>0yI$7!TMFYJ4pGj=rX2&++ zRao#OYSpFer6?&&g8b=1L{6 zOjC;m#)itZ@NRgOR+>Hdu zY%wLdq867_IH*`irn}OG220;d$)DL)4zx~nPBOE3{TfgN5wj!%6*KGm1Wqm)VVf1C z&q%vW7oiY?JU@nb@vb#(D7(Z1<#5ViD<ng2rzYm&I;QytyLbeY;)z$hdL|P`*U& zNY|u?&WFrpnSh`Ygb9}}be7hv-6?3@w>>^b7||BWnmyPldv5NF7KY zlGg5MKNT-zZ`->6^yp6BpohgFGUAWtdd<9tUV=+7Je9kJDk*qaZ#a+}Gg`iCi)%ErQ(<`G=$m_<=1Ast{g!=%Xlr;Iw+k;l~`*NfwC}Ix4g=N|*M?XnjC0b6a)Q zmHZ9YZ(Z*mG0l5gLA|Ses{bv>i3{8YX@PGnzb{9SA}cAi_19b9F=)q6YPY|4GTdk3~Upt$5ZMr>AXe*H3jTz_jUrI02exaZA5wY9Jf3*O3h{)kYym_2r94Xv} z{GH{DP$K%S+Y3zTr#)LLQCF$G)NIm){Rlz9*zX}mE|e1ZCA8$rfw*_Y8_6<+8@zVm z1_^p6R?#+8xR9a#7iTr2T+Lh8Z=V9RZ`qO)DB|XJ#H3ca&uHvdyynK@3Hi&5rrXuX zt1Pc6{>}$Fu7pWu#KGBv4pB~2Yt%up@M5hc25IKGuj)DtzL?__l;T69D1&xSQ+E9$ z=WDk&@SyvaYyCOnwT*)Ev&`~sy-l8^lSKpPnbr~lp;C)ZDCcPo+oTt+D!~lxofY+t zkLd{#S5zH`U*Oy+*t$0$rTBzgarf7+kLkC!mhMuER5h@vCxkXj>4yB|eFws^iy1Re zGi4kPBRZF>ovq#|jl&A!d(rNfsW-oIoa;_aJh;1|wny}nJ3)GlPv^w-onHl?OKpZ+ zq2+LN60ebJvd);KJ(gcV%M9<0X}T+u_Q`fG(p=R{^~rOv75h+dzD5VeHyhVAymjIv zR$1tZdGv0!XGC;;vPq?x14onM|ElHn8`?vfhd*5j?ZZF+=VA1E^1*o24GJvMHjwt& znaw^O6}>31{FyujUm|I>rcW+J`zPvguGm%e#Ue$ed^%gIxIvd2X{l|X>gX}q+iyq# z^r4cRV!JIcnRs^p50g0!q&`yS8Y0*HOOO;c3chmEfi3IB$m~WB<5W}?uQ=x=A=mL5Pb8cEO$E1g=cwG4n1VrSREP zngzs=E%PBVJzS-&fs3z_f8Oiv%H9@MJ$m+`**rl#=*k+O$Hj zy3u>5P?{WF1&Y9)>Zybia0)0$7gDnNy9*s>Jq!DD!G96jM ziDw~PX-dEy!V6r=x|eQ?=ON7h`Hf zuWs-+;;C(f1cPK&H?&_y`_1Jc8MEl6FHXYKRQRk8B>T{i5pF@~G>(6LIy?E>mTtJ< zYq~>%`}3J%oDm}gw~U<1E{1OXxets|;6yd{NvFIT({1=1Ylq;AmAOn$-H6n_zlKxQ0a@JI)Ss^t@WgrELs^-<;jdJ2BurWz9;@+=ULuOcdo zS92%jXNJOkIA0p1(hz3;_d4Nh!-Vwu+1G}kuyFpni1jlq#JYj~Ll2XC7|46nnSMgM zNmwyO4DLZ+8;H)2;Ot*I#-t76)n66e{j68H#6aW(&-=QPe=q%Tt4 zaw^BHMTNwdMfm+$h_tX13KKo#=uvAsxS(N-KdOF1DY+5f2qA0 zvypnay?>q+Hd3hk5_UkLcR@PKNOuv@6$jw98q=Jhz=WRUl?JiMnZ>3RUcX8!Xe z@56-5$%~FF;i|&^kjS_}y4fN5lZntiuBsX2H*9g9z>^}&MTFx&KOM@1a||Eb3Lv`d zj5F~}ibuGDYP| z?%QE&)l>bT9qte26V|e27thJ1uG5eUWhox6X@)fq-zr>+L-DD@E=;g~{<%rH(Mcx_ z9^E%RW_y6e!AZ)U5j1}~%zd&AOPLsG0&|clF7h@Cj5FT+u75e7e?pKMrvVwIF9F|8 zn995soq6>}U6}gtX`-S&M5E;MAC1z-d&uKTA%>JkETlTlv ztV=7ktOdeKxSJJOf!;=5I2SQLLk<3*j+U?bocHLBQ4oMbQ!9&@J)L_iHq+&oA$G;-J9(-MyWXx5dU+5#xbfR(uU87t^f& zpt(phlt~3}VWPl32aYpLQH5dcxAhde8rP}y_ieue8q0iYeD1raA(!pHnTmP$o*SnUnSxU1= zRzF`mQD_U%{#352wo{q7ztyA9)cka|;F;l=>%wu#bbE5;^)~OHi_>c@-}^S5KRp}T zzCHWZ@u%_T>GWDh%c^Z3R9|l<7xo*f{XM)@%|HS?_x+Zf^tg|TpS2Y$P8kwF**`!n zGX))!0Tv|>RkfFYe%5ofY~Z-aYmj&)Vq3GN2oGfTNw=q0UnNQrItPWd}FyYM?VV{#_MHT4$e{lO459O&sKY>4Gx{sk`*dVhqmHf-1dZp>?_sJM&(c>)fQ^vO% z%nHpOtU<1ZC{$AS9_^`xZ+moOo8)HyI$dn0%e=kG+Lgqbx-{}uqUSKAzKHeiL%*E8 zJ1#%Q(*4|2qd4earNn(Ir|l}`wt2SrtU7_kT-D3>I3F7RjS_u&Gp4v1VEY1J>=irX z*}bcFF>dB{EGnj9YP}MV*d3a5p3Ox#+D--=blbmW@Z#y@oPEV(c{l=5lzO&JBGRf@ z=uD9h%>r?mNBFd@19F~`CLtjFSQ0-Ub(tU2uDl?tCTDDdjqjbVstIq6tR3{T|54Yw zH_{TYqQ3GmZ+!!cE@kly<~bei^H}nBT+is;X1n|T*MzR*lPqy;)-SRMOTUpQeXa98nS57Z^`dmYcZik4pW=O&OWO7%Z3)SD9O}M{tQ9iwFK56tUAW&OA%QIRjY}kk zxRlLR$6vGAF9orz|7dE^2dRv>|9=aC7d@UI)LSOxY2=EukS<$p)905Cl6G+!s5%ci zq@8_bW}cO-pDle)mz-mNBE!M9~nU7&4 zd-J9Ahwt(56I9t@ONc?)^A~*5-Tj9nwanN}0+TxV#dEdyia*N;6oZr3-|2ub6nF#( z1xt9vy9@e3y~G2Zy{;b5Eq-s@ootwhLeb~H@1Zm}Sg)^gA5q?w_N*ncTzf}zyt{Fn zL>ek&4h(x?miVstJJsTGfuX+aa`cRX|E^wmg(I8CR#r+CntZhAQrBk2uITrT;sv!t zo!e^frV`nY=j{eQ#IIeHmJoSC+D;*Pz~1%QURU8&ns5;Iz%Ghsb`W}IeCA7Hmyw7Z z)i0-c>DBOqb4`ZZMR`13$lE}JSooiw`n(Re1BF=n1Rk3dz%B%&N*y9RiwyNOuD;^s z$B)+ARz$fOpSKJb7_(Zm>8LRfdFpq?4eKSN1G+3!@Ixes4NL4Zj{cp2 zPHP6JGm#SPh}zWJ&FWK+<(2cO$B>J^{95mApiF45*Nl--UOBX>BTB1WPrh-qlAa~! ze_^~gU31HI+=`+d6qHF7v+{=QOz~0_@(#sT=ULe-f0c&nXCp4#BYNyQ$)kC?=er#SZwEb@1mXO^OS`NQ05ktR&$ap zB_i4`Pm{9u4-Ny=CsZv9J~BR$YYprK*vd)>+^JQjpC1 z8oRrxqaMdrFwmQ*hv*LBkw+|-J{7xrZI=BIzOME^YKV8e#y#x<{!`~`W#nW;ZDX{R z{CcRB-x`Zgtnk+Lg~p2x@0;Ok@YIkmH-PA2cO5qnFaaJX*0??%n_l@FBhLKe^% z?>=-7uF(?P3o08w`epHajLZV!$w??vw5g0YnLkypevNbRR}vEH$+Ckn3sI&XVYF8> z`06CYzBe>=_Tp~-oym#StYTyB}!V9T;- zsk#J`Gb>WS+n_rvvEzHD;JW5J>%?ce1rOH^D(;}{emIIYJU0uJTbbv7AtAZp;K7as zT_i73Y^M@&rVFw3ffk)LJp&ux=10q&$;ruCz?m~1%Jjp=iXR_+3>shblx~VbW(28v zBa?9c+A8Vj+?s9yUH_0odgls8r6*^pQt?6QLeCUP#Wizd%g}>^EEHJp?Lp$r^D!I` zDOtmN4GJ&$Lnt&_V&aS#dyPpJb&VB#s`r)n(g`{~7q&3`P2XiHQiMrSUO zAgbqto#pQpLoClY`J^Ivw2?Yl83lmB>;E=(BZ z4t(n@)K;y7xDqKh1IEQr$7msAwSHd~dMhC91AsOp$3mqWJ#-hA4=Zu4sf|PRAj$IA zwY67Xe4jUY{mnx}|0vdf472#DkO-ci8kC-YEwUE^}=TW{D%~wr(VR2ObD1#y6 zhHp8yg{j}!M~q?@M?ODaz}f^zYGIDI#@sYWS!E6;oA5GCs07SDKH`soLeCmcb(m<* zO1BAM>hDZS%R|)^yr-z1lxmW%p2M-<{EHk_vHaeFMdnhRGLnTU?;W%?!(F8FZsa*t zxCrOk^98BMR2I1Gt~K1zte>{Cc>j`CCZm3w39E4EP<^nsSPX*7L?KCb?JQ&YgVh$H zVrlz5`s3Kkw=Q&u(@Wh_ygk=bAY%jOkt4TmHj)JF&ZZJ{e7O{A1bLs222975+qJQ% z%Lt-^QhI`BvvNnIK9n79cek0b&#APTz{~g^|FtaW!Hgy*_S3p`o}zx#+4BC{#ZcTY z=GL{qr4roavaG)!I%6t7j8eq4K=N0+#-OiqNCqa?-gzMWH0(dH(A?Gs|L8SnqVBR7 zrKe3VXdw$2X#UlgSJf*i?lDNcktZ{W3rOYV6XxCPuR7VXjVzJSZNN&{z` zHeo6X$@jXNFzE`aZ{z-?vbP8@{JNW4&$nwDnbkGbnO2cB$)e}Jz3{{{zwiva{~|Gg zf&CMHzu=SSDVUz3*+}0a38=)|_&Zp)Pw@_&VD$d`iqPFS;@?mHpKHGN^a~%I0i)d5 z{x#JgckVyQvNe8q0keIJ~YAckKzKSVD!Y7y3eRLB5ruDtTX@mwv(ozc4lRS zW>jB=WS)w+IcrHGrsSoaj|!wZ&&6Mc|is zRZK1Ys@8cQ8_f?e^@ZwzB(krm@7%lT4~Uf=45#_;0Jnx!>eYR*F-ViwKdTWJ=n9|7 zqdh0chEohXc#CGVaRrLV8e^H|{@eomDTKgr8y%69r{FI$ld-~b$PGILO@OHGzt7B#4-|z_Wl;&Bg~}Scl>S0+@WtZ@ zkmuJ<7ldMgi_noVAN?`H3`7MZ>vjsDKh=-O`A`%0DFVAV+b53IwY`&lO&HTqci91GMyF57J4f5_vE(Z=KlwAo=se8HT^eAWSU*f<~T0 zSPdmWaHJwbXibLFOd|P|#&!OCgJb|1#iWrHGvT-);E{y&*1x~xU~a^J%z;MrGT|Vu zuUX`5lL7GmqgWjN-wO+?mrXjE>XvOa$ArXGN3J!|Sjm5PF^w#}NExYY$umx5CQiWW z_1=Xx*=&syS|06Th9*()pp;K9r&Qig{0kN_;e4i;#MAj45qZiq3GU8BY}Iq@D(o6K z_dKXuBpp54LI(eC$rET4Cm?f#eN~@cH6jaRytZCY-ov+ZRucbT4`U$GU{6M!dhD7B z89+%vvy#oHAS74zf45WJOh(u4%J;Z;FnBoR?l24|tbdrBRWSgYNJ^1$PjM0_`?mzHm@{UMp zE1J!G+lH%s2X}H-^WABU=R7CBN@Z&Z0Ks-`Yay zGw3RK8~2R-yRj*m8wDpQ(PH0-q+rNIRdM~3Ot5!dN}o(e$48?I)h0jXX-?J9_phkF zIi|Z6{H;TA`vZ~i!yk1ami4SGt=Wlz0R-^0DtwjZK@Y>ekr=tJ>xNDB&g|jIK)}~k z)rYd{P<9~{B6T#;9~|i)v&dQ#u0ZlW3u~D@fApA@taoNT`K1OJS9=`?TgV1z15}l} ze-FZQd-gXrWAz1WjFA6k~s4Yp*rN(rjGqQp=gwZ>X6_1p&J7a`d z?<)vhV#84&M?6lzLreGsT?Q&R36``A7sPs{fgkCzVNJHs_GidLVNZn!z3}8#hUq6` znLY_~%7FaxM24hWj?fl|`PNNC_!Z)VA|iuxC(J#&D>2XLbH4qZsI7R#|Dd3?$N@xq zm9?KU%$;p=Z7>ipXSz2zxl{felSM-QtU3&Lt26hFccfkDj0bvS!h^^39HJx9$=7$m&l&_je{ZR67kEWM0npf z58HYmf8gXu%fkV^MA1XXMu4v3#hPf)hbA@#3+Q343H|U)N8LwaNc^~O)WKi~ZCWc~ zjKmq5Y(FE4kxzphpqRCF?eE-;aKe^_HJbaqP|6l29ZHYdPJo8Tz6eF!fzgz`#RUz1|_dvog^ z{RPEnvE>ScLfJ)*WMY`2@h3D75cW(bak^Z)*z6tmkn2~d3!B#LzLQY5wZY1%{l3iMSUvw&L9*qPxLL&F zBlG?5Kd(q{eHal^@Lih@a~Z3%)XqB3S#YJEHEhG5NqFL+b=C~dR|?T~96DM0{8!uM zse)c+U7BCnVY_%&27vV@;&rS=rvE{Dapjx&2VhlFB#F%ENh>d$(n@27njq6bL zax!kUN9R_yO3N_1>A<^BaKJg>NJM2lAW6JzW>&6fRNuQf`#}z$%{8l-ozC@NEr9XMiT{tSuYiiW>-rT$ zC8Pxhq!Ey2=i%hcE68dq{KbJGG^WhmMyiDV`Te*%Eh) zP^F8OVj|ypCu{nJ*Ee?xT9pR=(anikgod@g3&um$j+$`QIZXkiNlq&Qw4n=%ZY{<; zk(~`b>r&jV-{ag?cb9%`=SOyadn9aDH;^dJm8Y6{k^p~S_e?Fj{iE#02M%@}E0S{Q zt7FaMgSb00>wM{T%2k~{`Ohy3xh*c)^lJm7^Hr0KhOCwXs8SO8~3is?Ar}Z2J~&(k(pyoh4HZ{O}h0=zHGh` zXWRCRd%MaL)}PsYGs}&z7ubDE%{ZtzmB^y|H0;QZNwsa8Gw(crRiC>sDUOx@-Ijp! z*B?tMPk~r>FsJj&0LF+e`>uoY_ z$Y1*U?KZD7MBSx?aUtv?*TPTU^Askn9hJ;F2+U~Xo8!HydY>mVH>d){7~HrxCA-Dk zD#gZ-fcT%P@gn$KtoE@P8-Wj<3Ls$34IvF z?B_n+WOz0`eN6Q)Io9tbTdXM@jE&XS8t<3uRPFjB#JA;G3$l3Xvf&xrrswz5%aEAG zCMIhf#^s@|A)BjrV4fpsLM7SC&nuM&j0%!IY=5&31sRy1Vm6jE4EW0mD-2J1)tEI} z-xw|2q>Fl=PBX%(MSUMrUc~6W|GDG%h&dgpTr7eQ$-@vqmg_Vo615-WlfIqV5%G^= z)4NVrAs^GR(`8|Z4m5eh(KXTd^&_`uqLtS9yeWIRFvAqB1pxsAy-cQCSE_{s7|H#r_{SmH>fXgJX_4OHQIZ@Qb?X zjWVA7O9}SV_yPaiocZ(Z42FD-Atj}j-0Zl6fG4GEa9xSYi4P%crU%VN^UVfH)&Rwn zO`?_%t<|xF({hJlYK(diQ=)5l<8Za(`aOmTgu2p6WXVwz*a~ z(-@*EQFsi~*b|6gdFG=|A)Z!i0+3zh0+f~(1gpa}Dc$PV-M?uNkDA zT4HE4^x9GUc_NYEdRwIUk9B!c$)wU1@r)IwxrI=3t?fq>`|qwFSj?{duKbUJ94y}O zeHFlWe%Aa{1|oAvHy(9YL$Ah-nIUa+n>Vu`5OXc#HZC?I0{Z_)j_Pq`Jv;xI#c{f`Svhndx62&UY`#PTw^o-N zHz2dsWwn;CM*{$mi2J`GXZ;&JRH@KoIwN9_Ax{5A9P~F;sK~$y7MD3Pjd_VFCfgaL z$oyN|n$y(T(+nO{{|W8kKw_0o^7l_Bf?7FBN)52*YY_%du)H zK8CTk(Bpb8`8EEanR6E9%aws6x2-*SA(z8!u1<(2U0xYwPUz9VlSWSkNKmR+&Cgev zMYYHZM7d5qEw}qVXC>B3(MXnD-!~12c}VrDJ%4{@UixFD#OIIv%Z=*ghBMk9FY$WU z%FmX8S|4Q~Ly;p{^HJBRKIaa$InX?uq(~tc(2>AM9U(FSNhS2a?2&vo449b5{^1W>HcqD4#S)Ntk znRcAS^_{zN`Wv=o@ANGkdpNB_l`h$PSRzloou0A$$&K1El_;q^+6>MadJs|!TIcYIm(xJel$59;Mq>MRnCe%67d-^ zsaD#o-6@8w4rJ+UenwJp$bfQLgz%boRio2WM{S8iK|4v#O?bK@T0u8A4C{>PJN)iI z1d)@?T6&@rVy&3DuPdGGuUNW#O&%+>QXTayxEAtwJ$RlIH{rBo%);kn>nUJs`WBe% zg=id6*uHT3O0&F&jb-``5FSSoeM|IVGS%3LFVqSMQmW0tbc`N&Hfrf+Y4&*QTt zM<&+FO40BDf+1mIRr$H&vy&y^YN-m7pjrednAK#P$ugE_Z2mGJol3@XyiTmL92$1Y zu322=uy9mANHzXkEknFAHvRP{x$%K^fh$3MN76#96-riXr8c7(hvsK11`alF%+nDg zdTdj8Wl8t&sTI#JNh~f#ayB6)mZbtpN%BjICBOO;1;d6!o)0CqP+KL;fsDiG;gHFS zaf6HYzNI%Sj_1bUl$g&p2CgT$CQb?zlt9@JDjH zQ@q>ag~~5}*XdwlVX3{N?MV&ys^WIG7xj-0cbOqCJ*OTdiynN>ZGcp4=c9cXNg0^{H3A>4(P`pOJ9nUOt*QmwqPR>j&(jQ#gCFkTZe#Bknf-joZ*M#sh?s)(&!R%e$A?NrVV zv{%e@y+W-TS1CJV5kzD@^oF_zc@tduq158O=sxc2vOiv*QDhb>R3GJeMXRO;7y1)S#>3^a zq3IGGR(|JB_y^CeVVgzk)UDTABVm#%9=y5cxr7i%A|u_6Q7ih|_IYh-Ulx;d+WDV} zp+!2x{>U@eyPVf^G{uZi&%2gKwCJ|T*7_rp#|BiGgzwZ`7!JjQHdN^nSpciB^8e@-v81o>Bhp<6|b%nu-d>%+Cn!7F-=P@(u5vF7Tdg zltb-F8ieUhLC~HMmIeBPARVG*sLjryq^Dds$7ktB1UzM1YiocrGEo-3ZhE#02bDl9hqv@$Y*5d|@%${=jx&tMh+*qAn>f(GTpApB zc~)s6cAr9!OG+vk(hQ{~AK(TTBrCo_-{(e;je-{SlhwKT zm;-7LLq3kShz;nJ$Hc9x_8hfW!jKpCszJofwQc2Y*F%38ymMhBHHpFnD|6?T3{9>l zuOi^^j$EuR)r`7=i3cleUKYx{6{|cM~f-k_7+T1arqn;q#n>*$p((-E2g#B|7m z^|;@05+fPi!86J&n~_NnWq9l6E1ge)3X(A7S|VtLMhNP>NI!c<019`;N`>5Apz9kZ zHOCH5!)$mhIk-WowxtV0@+NNfjbP@>!u9!vX9}4}EA=Ab`b4IU77U?@Q@yO(XgBSy zb5o`JR+YzkRl5|&+tYU4ry-_l?^nB<`2$0+j15vPM~{_@nfq9m(qik|m+V2OmR|(I zVmBCzXFqNQE*!TKuJmRHTqiTv?6Oqy3cxbb_KOa8g3E;5awj`R3zw=W)6;HhAFddK zN}}Xb0@NG`>)qj=W(f+(rr=vO67LU8K3_dE%CILL=`C^|QSoeSNOJ4f^Ou9CaGJ)F zuO5IvspnIWR4WtkrBB|p9+VQ}+8<}c-%C)!M@--|&M;TU8(%&(3i049=V5^pt=H{W z-ein{e;nsU>jG--Iv+cD&0X6tt$6u*wb39zWOUnL;z5h1IM4Bz8=VX zv_$4b68xLbFy`ff*q5KUyhlCv$?T@}Pv>!KcUwEC7Y7RTiaJ?fa~pz2jr-pXorR1A zA0up4s-4OzNXqN2XFVkp>&}-CNbwYx!w%%f|~VAG5fs` z^{?fOa0MsT2nY#Zz2~t;ta+`efMcZS09jN{te|hdP1%U(+8E!XTRs3>Y^wqdipQlE zHv)5yZCYr?dB^|LAb>m9L+ z*O1-0dVEj|ST0BU&HWs!p)^`iQ3_CKG^cy|&Ir8e0h$-lTS!s7r&0>7 zD(1p2ry6U1n;h6$4Ex@*3aYt{gSgLq;X1R^_x@39QCrMU%WNsPU8s|gi$@8f-Q$`f zjJGs~IQ%3Xs;uLWM!PYdck=m8eM>J8z^8VF3GLLfafOP%4+QJ-4WS(J83M{`@=Qxv!d|BMu5s!ZWn)%u#Yqeh;&rP@Z z@PK|&Oi(p;mjxztQd%0Qr#l@IAGCpi8A5*^vTq_WBvC?+L&IgV+G7}OuMe13gSoO06=jPA7%y$tHXC5BJL1|7%c z^~DPW8QsUi-Lx@s4?C8&siUwNb0@fNb0c%i;t10>-Ia`OIn(5QsBQ{q;NV3A6z3tV zr|IQ1mlp^2T7QDY$1Kv7g=Vjno`KDLN?Hm+P1U`g}T-x5tD${1)$wZK1jpT4Sz#KTcCwe0Ko>~mN{ql4_ zK`xqcE`_NF)iP_kJxF40BugMcdWVh%-Ifm6Uc};phs-aO z!T|M#CRZFi01~&T&u_iq{9g9fA7G_X8Xh4*Jaxsly|OcRvZ^RlE5fndrOn?)r!-k6 zWZ3k8VYbe8<6CWUV?=lfqwbG@-#Otfd&^%8n{aV)@0?IDeRsH5%SfWEXCSE{7gLO z^STEoCnrZ-6k@J;8#1r=m&NWlHQ)T2k#OA@kSM&F7pi8QySb)kieHI+_N(9L;<|1r zP$JT3rUr3DOi3A1-h8sMM{TX~BuFjMuMCshDk6X{rCuPis^0or>%PdvNxolR{jm*^ zx&6Ar=z>zm!)`%7p(IFASlSLD+6gg=uN!MpFn#kNoW@6#2FK}6Pe}(;h>M0zcum!R zpRhF5e|#_BDLJe;#8s_e?qR3N*Aq}acg|B%M{c$w(tc%ZfivWbJKv;M18UV*60^q3V$)@tkrHc66rNcoY5;tGkFt@G&wPuDkN~Y0 zumz>{YBFo9D*So*T&%A#;|J%t6s}KNVt~G=f{f1|IdkZ}**_3RjP;8>Yqu*CEUXh! zhA)vVk;K@G5kI_J+TK&@B@m<*0}Q66&ql<2 zm0yX!*yUB;X`lZ5sCG66@!Ldov`Ce*rSKq_6CHEz$;SV5Df@nTFmHV#r$-W**w|1tL%VSIAqjl7^}H1hqOc(S)zC{{>h zxZC6Qd%O-0cz0%{kd(kfsb77hQR?gWBcffA8F72p>*+3kkaG7owU@L3ly@wio0|vC z^)q)j_Lj{r7HnT^CCuVD!gL^6+3QPBy*w^jOJh+_>8KX)%W)m)|9ArvYSAvZ&%#Rv z#|bj-87VEI;i92&8XT>8{^3Oyg%z`B9294ed$))x2(qiXVHxWCCF*5rqXlkkrfA$d zx!sUO1io**@_+{PGNgk8+n1X7+0u^L6-ta+h z`_ojI_|8Mt7m!E6%BC+N!K*|1Dy!mgUp!;6*GR@}cyc;R+;hc#maK4iIRl%^VcH8-W|wqxu6IibZEhE!^5o2st~ zQa`84nHYHr%kcGV8o$CIA~rV!O#n<4YzkHS?-mwJ^wW)@Byceekid6%FAOuTu(H8& zwskQ*%eBI95y^Q(KIt#4_-;X=HKsaF%mU-B<9Y7nZ$8f)efi6a{TlDnHyo+L`MART zfuooHhh?jJpWSZb`SXoqGBNlL&B+XoIDD;-b4tC3&B)qBJ%S7;9}zPP6hB%R8MU4l zY4{XC=y~Zoed)hGpja3sVk@cq+51fB5}e^s`o0sHEuM|O!&Apz;HeE~F5FMioZE#K zK0ATb-olYEc-Xu8su|~la*dshaXYv4>kubHCF9@4-@VTx6;zJi$NU-Dtu1?wMSM}u z1skmM+UBjXSkT2)ci8a?WxR=to)Et#TA6rvFmjP`*rCQv-+6X6PiFN>eV zx2_*YmqF+RhEJ-tGM;(5O=O;ua|BMGg2^+{7Px5=t!TdZ}ebK+NtDAkiO!|o;cm)W3F&kWMrwb7jM>;fM3yWyUvYkgqOt(}cSJbdJpUeLop z)p&26)8tE8fqe{QPOVnFIuH-Eetl^uv5&v>({|W$^N0`D;=gTG!=&QL}qq+Kk$ z`IEoD0etuSAF^K}kxL1IVVwONh4SzobqrC(WzD>wwp5FgBrCl4Qls!5BZ`9y4P`s} zfu*2!H|_gQiz?h_c_OOT5bm%xk}2kNURT0Vn$DNaYN-}fXUd|QlQ*pa7r1VCn3Rs+ z6-5@HQ971Th)*TiQ?gsHEWdc%#OMcI)3n|Bx^OU)?n=~j^37E%erL3VKXBTeMh%X$ zHe|~(FG>-8;pKQT9SvP~KO2y6{aQD5vxoDfX#WJl#DK_5*Of{Bi96IkUbk6+dp{+S z)1>hSKQuO?#dgQc(%)g%YRye|hKIzjr=`$tVEMc2MY<6GqZC^vzLP<+@uDMFmBT+Wwc}zX1+FDYod{Z6fGLK4Tii>Y-NlV5MY{yVFC3e?sKd@Z&(%L6SSXx+weUx zsF8k!A$$1s|{ZKnV*ppbK+?P_4res!8*-fYW9W| zmR?^3G{Vz{OyE9tyy}I4_A1s7{Ps9LQ}PnGQ=HOEL9I;Fy>@yZ;)MMizHD?7@-LNZ zw_SUw$`e-06CQR4BfqPOy*>5XAv|h^Wz{exPC)1I`GrbPm}C3T8lR9oV6_d2I|O=n zWJ{PJ+vd8bb%)d(b}IZoGaxGROWWi+T!EJF)!$HB0ygk*rjZ>Z-3tbEq7`1Nt{G(v zV2?!ZUSzhvA6U&XFIutDXN7 z#4AI0Z{$nStC=h{z|*={FSSFVPfTLIL%SwEJGtf6O&Qwb$J|Oigp8&;A#GBHJMI!u zeXpgxd(~|H{+&RZv-_cqK2EQ?X~zM3So+kHDpv_E{DW$pn#PfO<#D^h>WdA5xo0=E z0)ye`3R5F|z&ahfwO}~WT~HddQaiPtu2tk1b6_Rs|1+3$ZI3NhW3ym!?e=S#r9o*I z7Xp(FVZymUj-E%z|H%aqhIqvVBrOCw%-vBO5{rrRd{?gwH&&cFIrlu?Ra~M^JSS6x zYmKOR`Emj?{bWroJ~}uF7;NLIl-9dg`|?mmX(|@i&3UDBV%r3SJ&=}I z2QCdL+x5qWo}D)cnvdnYm-rQ+=4XtigZw%CjzBx z??aeWWMN2*h|SI|RQQ0y5?c?WC^9#Z~Y!vwx_RoY5pf-tMVTTmFz5d1V zdnuImv+fWyqq8Mk0f8z{X^c&23{7>EAS`auhh?xhG${gKi464saXOTz^gnO?*FWr@ z0si4#I5FcpU1(svmNAoT4hPD&GRZuGK1STQj_>v-O2{Em)dQ9|wHZN!0&4a+~6WPl;x*7dN{U(#@so&^Z#J@)i(R}M1 zm;XpIAUG7t&}2Jk!HR`*ZP4Km?cIf{DOqSm@e1v$?yNIYs!v7#XIQ?71@U0zHV;pu zhtuYKEko#XHCx0N8oQ^9#ykb99Nzbd*Y1lHqPqmUS{%vJ(Wv0e@C7QEM5)}A-R&KyIQJ#KSI`Zx! zn5!|nng0=ZxNI@UwFzB_07WNA8sw+Upztdded(3J^U--`Jzg`x*>-Wl$+SAx^X2h#PwC<)&Sk_=&|dGWRvSK- z&*QzHl*0FWrWw1PIgF#yM@PMzWU*S(2myXtdl0W5^JW)e)|VtZF4V zU~eakkMB#Q4T=BB6ir&24^fblqotv_1*!)k)`rqYK}B}|tD~upMvc|o(=7O@KM7uG z696L)J&n~l9@6}-!uf<9pj(%|2guK|-(JonK$ZrM``WUr{MTef^>QEZmtEeXR8T`i z2|2^|T26-Ev~SOc>EKx9E)B|^y3I%%iTd4LSG#@%Ag!LO9;FX+-7^jJ3LMYiI1;B^ zZmXP_1JJqm60sk;+!`e=U~zXgw;G(GMuIS}}oLUW0D*)rY0u<5mldre6;SH&Ea5^#4iy`E>qm5K?E zT5?2Sy?F=i&x?`&i3*jfK6n5#WX<5D24!TEY&;I8{3Gie4Vrk*!I`OahHb@KusG(R zQ5+^NZqLb5P#mZ%$Ha_4@>H$$d2?ib5`KtA_>IcERO~j`Ov`S+pYaes^@>Y&&B&@P zZVqT$(smnlJxsEzCg$xtpy$sO zAWH5<9W1iT`C6#UH_x|*-+Q$-P#*rsb35*h`Ms5^Y;`*GH8#Do@AoOreTw2YtnJ$1 zMRpT%HJT@6uETB${A>^&%#le)_-wgINYd&>lz0>q>+`POgTkL3JJisF((Q)8Z5H`j z`%o$OrLHrrUR4MBhe1*Ir~)X;2P9rQ5nKHj{X?QsX4rmtU+co7+pqaXQu4)zEh;+v zBP0$?#RD90l1yM!B_Jb<1Wmk(4B$R1pUk>M6LE1_(di`7OCW|wAz&7=(V75#G#&kJ z)jG$Hxps?)1FEJ6U-xguIooY|DAIl*tO&hc4Ud6bTpNt{|BR$}`7wc|l~VvYdEZ8W z(|cbk&*^H&ZF7-REIeh_laB-zwNIQ>k~=is^UY}*L%U=OV~WF6T6P-OqA!swvs5&a zK_o7K$G?9Cg(j)H^w{^niYhG61S8|?kK#y0Ec20C}xzHkA{{VzWor!HWu+Ql9 zEVuF0;R{j_dc8Go>p>Zo%HAEs-GvxDU9Ws#VPr?8OpddwI zid2-WDV-a6;iCaRjkNtYk_182?pFe2;-he(|8;A;{*L|{t&w9GoG;wtCArug_2-q* za?UNWwaQEUuok~@VdUk`qrn1Y*+$Y1^FLiTUhB4-qcV@$uP$EMyZ-E|SG|HMU9%oRvSM&F=m&2!^*%^TYM{4v zLZLoQs;QB549e!?>(pjF$o{oSHFcdJtfk6p4EL#B{;&CdAa5bsT0Px+hePvz$Qrwh zO&t<4_BlEJ*TYBk+`pcTHw#pBbu{k!1m|ystEj;fqB^i)8Jg1PVyT+2CKHT#bznOO zt|`VoLD_aKPe6*wLx!&-(vuRH#wmN<-KP_02Oqz+iEZkXguY@oq~mo*w&`4~MZ+>6 z8_Exd$=ZC(qTj>iD~+-Mu(~01-X)h>B0=HVXj1E6~ovE8W7Dz zqR8r4@INKNpPFYNALb>NdI`*^D!|WSw&tD`8rtv0e5|`Y#1=uo-m+Xi&eAW~`6Epx zdis0C`*eS7Ewjf<>=4uBkpO)^7c4h#wDJp%&1g`*Pvw5|O1K&Fp8e2N+w@~ZTdK~G zB1TI(%Bnd__z%fj@Jy~l5#t@v%69v8R1~G~vacQl#Jr?hs~=hb6YJeuNr82Bs@`Mg zsh@*Yc@6b8u0WY~Xh$d5i)N;gSham;^4k$zOVVna1usd{9|CSZ%I|uaprvBnYdPYL!UuY>2ReKukDIZWfASL@iSZ8x`z^5W^0g?V~Uw>ye$ zehr?RN{m7~j%7wquN-)>*Hpr}@iFK^4(cm~E<=^zl=1~QVv;nqKYO1sj8$PNM}%}w z-^Q;A^T0*}NlQg46BWc27|)2&2tRS4d@VO~Iq3C^1J%#j#AZ)P`r`45ZlbPw#G70( zg`cYi+UmJQ;MBIh%E5g-x^tFzQfub?U=xlbAae;7px^29DE*eaK^=Bglnbra;4&#C zHDp#S5gXgSJNq0H9cnrFpz{vAsm zL9jfw1Wj#QV`K~>jl7dNp10HfGu41#m}sSuQhHD6?B-Y6JY=MnsxMh6v$(sim?E?$1@>tt<;i>sCuLYW z(Q9se1V_x8+eZ9X`n{nMji=NZc$`Uiyg$hvU{13j)aR*R{Ji||ysW!g^^%u}wNC!W zuO7&uA9G(f&syG7S-IOXo4vZOUC!t)5pT?%wh|<=65TTF5fmj#tvfGlEOgty)pB6q z`#FO!Hbv>)`)N}OvM`BC#EZF8IOb==FJfkvkFhP{jH4Eu6)|Enjm z-P@ZYB{;f2bc>-uzSBV9ndLo)F51k55t;1@E8pHj%E;e}_c!(ic`zVIFTR$!$adgj z95yiuNPZ{aK%ul)x-VJK>E7N&x#%74J>|MYE38xIF3&F>xsrU#U$Za$;8{s%aeSa= zKoZHcgWr7_Tb1r)IC5V=b8vO4tTXoFG0{*KZs#FCEig^)pPeb(j=4W__NS0=BjJGO z^_*)-3|<#!P&Xugjc66D-Ds000b?y@B(eFi$nRE6iuakLnB0cN;sW3HifP~mgk;a5 zPU7qo^N(8c4a+3mGcL<3(

Ca5F$kg?&u`bYMrO4@tVd8s38KN3l9cMxc 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 iD`WgSz-V#2OJd4~i?gpLjs7^`pN5K-av|J2_ 1000uatom --from --gas auto --gas-adjustment 1.5 --gas-prices 0.025uatom +``` + +#### Other Transaction Creation Methods + +The command-line is an easy way to interact with an application, but `Tx` can also be created using a [gRPC or REST interface](../advanced-concepts/09-grpc_rest.md) or some other entry point defined by the application developer. From the user's perspective, the interaction depends on the web interface or wallet they are using (e.g. creating `Tx` using [Lunie.io](https://lunie.io/#/) and signing it with a Ledger Nano S). + +## Addition to Mempool + +Each full-node (running CometBFT) that receives a `Tx` sends an [ABCI message](https://docs.cometbft.com/v0.37/spec/p2p/messages/), +`CheckTx`, to the application layer to check for validity, and receives an `abci.ResponseCheckTx`. If the `Tx` passes the checks, it is held in the node's +[**Mempool**](https://docs.cometbft.com/v0.37/spec/p2p/messages/mempool/), an in-memory pool of transactions unique to each node, pending inclusion in a block - honest nodes discard a `Tx` if it is found to be invalid. Prior to consensus, nodes continuously check incoming transactions and gossip them to their peers. + +### Types of Checks + +The full-nodes perform stateless, then stateful checks on `Tx` during `CheckTx`, with the goal to +identify and reject an invalid transaction as early on as possible to avoid wasted computation. + +**_Stateless_** checks do not require nodes to access state - light clients or offline nodes can do +them - and are thus less computationally expensive. Stateless checks include making sure addresses +are not empty, enforcing nonnegative numbers, and other logic specified in the definitions. + +**_Stateful_** checks validate transactions and messages based on a committed state. Examples +include checking that the relevant values exist and can be transacted with, the address +has sufficient funds, and the sender is authorized or has the correct ownership to transact. +At any given moment, full-nodes typically have [multiple versions](../advanced-concepts/00-baseapp.md#state-updates) +of the application's internal state for different purposes. For example, nodes execute state +changes while in the process of verifying transactions, but still need a copy of the last committed +state in order to answer queries - they should not respond using state with uncommitted changes. + +In order to verify a `Tx`, full-nodes call `CheckTx`, which includes both _stateless_ and _stateful_ +checks. Further validation happens later in the [`DeliverTx`](#delivertx) stage. `CheckTx` goes +through several steps, beginning with decoding `Tx`. + +### Decoding + +When `Tx` is received by the application from the underlying consensus engine (e.g. CometBFT ), it is still in its [encoded](../advanced-concepts/06-encoding.md) `[]byte` form and needs to be unmarshaled in order to be processed. Then, the [`runTx`](../advanced-concepts/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) function is called to run in `runTxModeCheck` mode, meaning the function runs all checks but exits before executing messages and writing state changes. + +### ValidateBasic (deprecated) + +Messages ([`sdk.Msg`](../advanced-concepts/01-transactions.md#messages)) are extracted from transactions (`Tx`). The `ValidateBasic` method of the `sdk.Msg` interface implemented by the module developer is run for each transaction. +To discard obviously invalid messages, the `BaseApp` type calls the `ValidateBasic` method very early in the processing of the message in the [`CheckTx`](../advanced-concepts/00-baseapp.md#checktx) and [`DeliverTx`](../advanced-concepts/00-baseapp.md#delivertx) transactions. +`ValidateBasic` can include only **stateless** checks (the checks that do not require access to the state). + +:::warning +The `ValidateBasic` method on messages has been deprecated in favor of validating messages directly in their respective [`Msg` services](../../integrate/building-modules/03-msg-services.md#Validation). + +Read [RFC 001](https://docs.cosmos.network/main/rfc/rfc-001-tx-validation) for more details. +::: + +:::note +`BaseApp` still calls `ValidateBasic` on messages that implements that method for backwards compatibility. +::: + +#### Guideline + +`ValidateBasic` should not be used anymore. Message validation should be performed in the `Msg` service when [handling a message](../../integrate/building-modules/03-msg-services#Validation) in a module Msg Server. + +### AnteHandler + +`AnteHandler`s even though optional, are in practice very often used to perform signature verification, gas calculation, fee deduction, and other core operations related to blockchain transactions. + +A copy of the cached context is provided to the `AnteHandler`, which performs limited checks specified for the transaction type. Using a copy allows the `AnteHandler` to do stateful checks for `Tx` without modifying the last committed state, and revert back to the original if the execution fails. + +For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module `AnteHandler` checks and increments sequence numbers, checks signatures and account numbers, and deducts fees from the first signer of the transaction - all state changes are made using the `checkState`. + +### Gas + +The [`Context`](../advanced-concepts/02-context.md), which keeps a `GasMeter` that tracks how much gas is used during the execution of `Tx`, is initialized. The user-provided amount of gas for `Tx` is known as `GasWanted`. If `GasConsumed`, the amount of gas consumed during execution, ever exceeds `GasWanted`, the execution stops and the changes made to the cached copy of the state are not committed. Otherwise, `CheckTx` sets `GasUsed` equal to `GasConsumed` and returns it in the result. After calculating the gas and fee values, validator-nodes check that the user-specified `gas-prices` is greater than their locally defined `min-gas-prices`. + +### Discard or Addition to Mempool + +If at any point during `CheckTx` the `Tx` fails, it is discarded and the transaction lifecycle ends +there. Otherwise, if it passes `CheckTx` successfully, the default protocol is to relay it to peer +nodes and add it to the Mempool so that the `Tx` becomes a candidate to be included in the next block. + +The **mempool** serves the purpose of keeping track of transactions seen by all full-nodes. +Full-nodes keep a **mempool cache** of the last `mempool.cache_size` transactions they have seen, as a first line of +defense to prevent replay attacks. Ideally, `mempool.cache_size` is large enough to encompass all +of the transactions in the full mempool. If the mempool cache is too small to keep track of all +the transactions, `CheckTx` is responsible for identifying and rejecting replayed transactions. + +Currently existing preventative measures include fees and a `sequence` (nonce) counter to distinguish +replayed transactions from identical but valid ones. If an attacker tries to spam nodes with many +copies of a `Tx`, full-nodes keeping a mempool cache reject all identical copies instead of running +`CheckTx` on them. Even if the copies have incremented `sequence` numbers, attackers are +disincentivized by the need to pay fees. + +Validator nodes keep a mempool to prevent replay attacks, just as full-nodes do, but also use it as +a pool of unconfirmed transactions in preparation of block inclusion. Note that even if a `Tx` +passes all checks at this stage, it is still possible to be found invalid later on, because +`CheckTx` does not fully validate the transaction (that is, it does not actually execute the messages). + +## Inclusion in a Block + +Consensus, the process through which validator nodes come to agreement on which transactions to +accept, happens in **rounds**. Each round begins with a proposer creating a block of the most +recent transactions and ends with **validators**, special full-nodes with voting power responsible +for consensus, agreeing to accept the block or go with a `nil` block instead. Validator nodes +execute the consensus algorithm, such as [CometBFT](https://docs.cometbft.com/v0.37/spec/consensus/), +confirming the transactions using ABCI requests to the application, in order to come to this agreement. + +The first step of consensus is the **block proposal**. One proposer amongst the validators is chosen +by the consensus algorithm to create and propose a block - in order for a `Tx` to be included, it +must be in this proposer's mempool. + +## State Changes + +The next step of consensus is to execute the transactions to fully validate them. All full-nodes +that receive a block proposal from the correct proposer execute the transactions by calling the ABCI functions +[`BeginBlock`](00-overview-app.md#beginblocker-and-endblocker), `DeliverTx` for each transaction, +and [`EndBlock`](00-overview-app.md#beginblocker-and-endblocker). While each full-node runs everything +locally, this process yields a single, unambiguous result, since the messages' state transitions are deterministic and transactions are +explicitly ordered in the block proposal. + +```text + ----------------------- + |Receive Block Proposal| + ----------------------- + | + v + ----------------------- + | BeginBlock | + ----------------------- + | + v + ----------------------- + | DeliverTx(tx0) | + | DeliverTx(tx1) | + | DeliverTx(tx2) | + | DeliverTx(tx3) | + | . | + | . | + | . | + ----------------------- + | + v + ----------------------- + | EndBlock | + ----------------------- + | + v + ----------------------- + | Consensus | + ----------------------- + | + v + ----------------------- + | Commit | + ----------------------- +``` + +### DeliverTx + +The `DeliverTx` ABCI function defined in [`BaseApp`](../advanced-concepts/00-baseapp.md) does the bulk of the +state transitions: it is run for each transaction in the block in sequential order as committed +to during consensus. Under the hood, `DeliverTx` is almost identical to `CheckTx` but calls the +[`runTx`](../advanced-concepts/00-baseapp.md#runtx) function in deliver mode instead of check mode. +Instead of using their `checkState`, full-nodes use `deliverState`: + +* **Decoding:** Since `DeliverTx` is an ABCI call, `Tx` is received in the encoded `[]byte` form. + Nodes first unmarshal the transaction, using the [`TxConfig`](00-overview-app#register-codec) defined in the app, then call `runTx` in `runTxModeDeliver`, which is very similar to `CheckTx` but also executes and writes state changes. + +* **Checks and `AnteHandler`:** Full-nodes call `validateBasicMsgs` and `AnteHandler` again. This second check + happens because they may not have seen the same transactions during the addition to Mempool stage + and a malicious proposer may have included invalid ones. One difference here is that the + `AnteHandler` does not compare `gas-prices` to the node's `min-gas-prices` since that value is local + to each node - differing values across nodes yield nondeterministic results. + +* **`MsgServiceRouter`:** After `CheckTx` exits, `DeliverTx` continues to run + [`runMsgs`](../advanced-concepts/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) to fully execute each `Msg` within the transaction. + Since the transaction may have messages from different modules, `BaseApp` needs to know which module + to find the appropriate handler. This is achieved using `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). + For `LegacyMsg` routing, the `Route` function is called via the [module manager](../../integrate/building-modules/01-module-manager.md) to retrieve the route name and find the legacy [`Handler`](../../integrate/building-modules/03-msg-services.md#handler-type) within the module. + +* **`Msg` service:** Protobuf `Msg` service is responsible for executing each message in the `Tx` and causes state transitions to persist in `deliverTxState`. + +* **PostHandlers:** [`PostHandler`](../advanced-concepts/00-baseapp.md#posthandler)s run after the execution of the message. If they fail, the state change of `runMsgs`, as well of `PostHandlers`, are both reverted. + +* **Gas:** While a `Tx` is being delivered, a `GasMeter` is used to keep track of how much + gas is being used; if execution completes, `GasUsed` is set and returned in the + `abci.ResponseDeliverTx`. If execution halts because `BlockGasMeter` or `GasMeter` has run out or something else goes + wrong, a deferred function at the end appropriately errors or panics. + +If there are any failed state changes resulting from a `Tx` being invalid or `GasMeter` running out, +the transaction processing terminates and any state changes are reverted. Invalid transactions in a +block proposal cause validator nodes to reject the block and vote for a `nil` block instead. + +### Commit + +The final step is for nodes to commit the block and state changes. Validator nodes +perform the previous step of executing state transitions in order to validate the transactions, +then sign the block to confirm it. Full nodes that are not validators do not +participate in consensus - i.e. they cannot vote - but listen for votes to understand whether or +not they should commit the state changes. + +When they receive enough validator votes (2/3+ _precommits_ weighted by voting power), full nodes commit to a new block to be added to the blockchain and +finalize the state transitions in the application layer. A new state root is generated to serve as +a merkle proof for the state transitions. Applications use the [`Commit`](../advanced-concepts/00-baseapp.md#commit) +ABCI method inherited from [Baseapp](../advanced-concepts/00-baseapp.md); it syncs all the state transitions by +writing the `deliverState` into the application's internal state. As soon as the state changes are +committed, `checkState` starts afresh from the most recently committed state and `deliverState` +resets to `nil` in order to be consistent and reflect the changes. + +Note that not all blocks have the same number of transactions and it is possible for consensus to +result in a `nil` block or one with none at all. In a public blockchain network, it is also possible +for validators to be **byzantine**, or malicious, which may prevent a `Tx` from being committed in +the blockchain. Possible malicious behaviors include the proposer deciding to censor a `Tx` by +excluding it from the block or a validator voting against the block. + +At this point, the transaction lifecycle of a `Tx` is over: nodes have verified its validity, +delivered it by executing its state changes, and committed those changes. The `Tx` itself, +in `[]byte` form, is stored in a block and appended to the blockchain. diff --git a/docs/develop/high-level-concepts/02-query-lifecycle.md b/docs/develop/high-level-concepts/02-query-lifecycle.md new file mode 100644 index 000000000..6a3a43998 --- /dev/null +++ b/docs/develop/high-level-concepts/02-query-lifecycle.md @@ -0,0 +1,150 @@ +--- +sidebar_position: 1 +dislayed_sidebar: developSidebar +--- + +# Query Lifecycle + +:::note Synopsis +This document describes the lifecycle of a query in a Cosmos SDK application, from the user interface to application stores and back. The query is referred to as `MyQuery`. +::: + +:::note + +### Pre-requisite Readings + +* [Transaction Lifecycle](01-tx-lifecycle.md) +::: + +## Query Creation + +A [**query**](../../integrate/building-modules/02-messages-and-queries.md#queries) is a request for information made by end-users of applications through an interface and processed by a full-node. Users can query information about the network, the application itself, and application state directly from the application's stores or modules. Note that queries are different from [transactions](../advanced-concepts/01-transactions.md) (view the lifecycle [here](01-tx-lifecycle.md)), particularly in that they do not require consensus to be processed (as they do not trigger state-transitions); they can be fully handled by one full-node. + +For the purpose of explaining the query lifecycle, let's say the query, `MyQuery`, is requesting a list of delegations made by a certain delegator address in the application called `simapp`. As is to be expected, the [`staking`](../../integrate/modules/staking/README.md) module handles this query. But first, there are a few ways `MyQuery` can be created by users. + +### CLI + +The main interface for an application is the command-line interface. Users connect to a full-node and run the CLI directly from their machines - the CLI interacts directly with the full-node. To create `MyQuery` from their terminal, users type the following command: + +```bash +simd query staking delegations +``` + +This query command was defined by the [`staking`](../../integrate/modules/staking/README.md) module developer and added to the list of subcommands by the application developer when creating the CLI. + +Note that the general format is as follows: + +```bash +simd query [moduleName] [command] --flag +``` + +To provide values such as `--node` (the full-node the CLI connects to), the user can use the [`app.toml`](../../user/run-node/02-interact-node.md#configuring-the-node-using-apptoml) config file to set them or provide them as flags. + +The CLI understands a specific set of commands, defined in a hierarchical structure by the application developer: from the [root command](../advanced-concepts/07-cli.md#root-command) (`simd`), the type of command (`Myquery`), the module that contains the command (`staking`), and command itself (`delegations`). Thus, the CLI knows exactly which module handles this command and directly passes the call there. + +### gRPC + +Another interface through which users can make queries is [gRPC](https://grpc.io) requests to a [gRPC server](../advanced-concepts/09-grpc_rest.md#grpc-server). The endpoints are defined as [Protocol Buffers](https://developers.google.com/protocol-buffers) service methods inside `.proto` files, written in Protobuf's own language-agnostic interface definition language (IDL). The Protobuf ecosystem developed tools for code-generation from `*.proto` files into various languages. These tools allow to build gRPC clients easily. + +One such tool is [grpcurl](https://github.com/fullstorydev/grpcurl), and a gRPC request for `MyQuery` using this client looks like: + +```bash +grpcurl \ + -plaintext # We want results in plain test + -import-path ./proto \ # Import these .proto files + -proto ./proto/cosmos/staking/v1beta1/query.proto \ # Look into this .proto file for the Query protobuf service + -d '{"address":"$MY_DELEGATOR"}' \ # Query arguments + localhost:9090 \ # gRPC server endpoint + cosmos.staking.v1beta1.Query/Delegations # Fully-qualified service method name +``` + +### REST + +Another interface through which users can make queries is through HTTP Requests to a [REST server](../advanced-concepts/09-grpc_rest.md#rest-server). The REST server is fully auto-generated from Protobuf services, using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). + +An example HTTP request for `MyQuery` looks like: + +```bash +GET http://localhost:1317/cosmos/staking/v1beta1/delegators/{delegatorAddr}/delegations +``` + +## How Queries are Handled by the CLI + +The preceding examples show how an external user can interact with a node by querying its state. To understand in more detail the exact lifecycle of a query, let's dig into how the CLI prepares the query, and how the node handles it. The interactions from the users' perspective are a bit different, but the underlying functions are almost identical because they are implementations of the same command defined by the module developer. This step of processing happens within the CLI, gRPC, or REST server, and heavily involves a `client.Context`. + +### Context + +The first thing that is created in the execution of a CLI command is a `client.Context`. A `client.Context` is an object that stores all the data needed to process a request on the user side. In particular, a `client.Context` stores the following: + +* **Codec**: The [encoder/decoder](../advanced-concepts/06-encoding.md) used by the application, used to marshal the parameters and query before making the CometBFT RPC request and unmarshal the returned response into a JSON object. The default codec used by the CLI is Protobuf. +* **Account Decoder**: The account decoder from the [`auth`](../../integrate/modules/auth/README.md) module, which translates `[]byte`s into accounts. +* **RPC Client**: The CometBFT RPC Client, or node, to which requests are relayed. +* **Keyring**: A [Key Manager](03-accounts.md#keyring) used to sign transactions and handle other operations with keys. +* **Output Writer**: A [Writer](https://pkg.go.dev/io/#Writer) used to output the response. +* **Configurations**: The flags configured by the user for this command, including `--height`, specifying the height of the blockchain to query, and `--indent`, which indicates to add an indent to the JSON response. + +The `client.Context` also contains various functions such as `Query()`, which retrieves the RPC Client and makes an ABCI call to relay a query to a full-node. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/context.go#L24-L64 +``` + +The `client.Context`'s primary role is to store data used during interactions with the end-user and provide methods to interact with this data - it is used before and after the query is processed by the full-node. Specifically, in handling `MyQuery`, the `client.Context` is utilized to encode the query parameters, retrieve the full-node, and write the output. Prior to being relayed to a full-node, the query needs to be encoded into a `[]byte` form, as full-nodes are application-agnostic and do not understand specific types. The full-node (RPC Client) itself is retrieved using the `client.Context`, which knows which node the user CLI is connected to. The query is relayed to this full-node to be processed. Finally, the `client.Context` contains a `Writer` to write output when the response is returned. These steps are further described in later sections. + +### Arguments and Route Creation + +At this point in the lifecycle, the user has created a CLI command with all of the data they wish to include in their query. A `client.Context` exists to assist in the rest of the `MyQuery`'s journey. Now, the next step is to parse the command or request, extract the arguments, and encode everything. These steps all happen on the user side within the interface they are interacting with. + +#### Encoding + +In our case (querying an address's delegations), `MyQuery` contains an [address](03-accounts.md#addresses) `delegatorAddress` as its only argument. However, the request can only contain `[]byte`s, as it is ultimately relayed to a consensus engine (e.g. CometBFT) of a full-node that has no inherent knowledge of the application types. Thus, the `codec` of `client.Context` is used to marshal the address. + +Here is what the code looks like for the CLI command: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/client/cli/query.go#L323-L326 +``` + +#### gRPC Query Client Creation + +The Cosmos SDK leverages code generated from Protobuf services to make queries. The `staking` module's `MyQuery` service generates a `queryClient`, which the CLI uses to make queries. Here is the relevant code: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/client/cli/query.go#L317-L343 +``` + +Under the hood, the `client.Context` has a `Query()` function used to retrieve the pre-configured node and relay a query to it; the function takes the query fully-qualified service method name as path (in our case: `/cosmos.staking.v1beta1.Query/Delegations`), and arguments as parameters. It first retrieves the RPC Client (called the [**node**](../advanced-concepts/03-node.md)) configured by the user to relay this query to, and creates the `ABCIQueryOptions` (parameters formatted for the ABCI call). The node is then used to make the ABCI call, `ABCIQueryWithOptions()`. + +Here is what the code looks like: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/query.go#L79-L113 +``` + +## RPC + +With a call to `ABCIQueryWithOptions()`, `MyQuery` is received by a [full-node](../advanced-concepts/06-encoding.md) which then processes the request. Note that, while the RPC is made to the consensus engine (e.g. CometBFT) of a full-node, queries are not part of consensus and so are not broadcasted to the rest of the network, as they do not require anything the network needs to agree upon. + +Read more about ABCI Clients and CometBFT RPC in the [CometBFT documentation](https://docs.cometbft.com/v0.37/spec/rpc/). + +## Application Query Handling + +When a query is received by the full-node after it has been relayed from the underlying consensus engine, it is at that point being handled within an environment that understands application-specific types and has a copy of the state. [`baseapp`](../advanced-concepts/00-baseapp.md) implements the ABCI [`Query()`](../advanced-concepts/00-baseapp.md#query) function and handles gRPC queries. The query route is parsed, and it matches the fully-qualified service method name of an existing service method (most likely in one of the modules), then `baseapp` relays the request to the relevant module. + +Since `MyQuery` has a Protobuf fully-qualified service method name from the `staking` module (recall `/cosmos.staking.v1beta1.Query/Delegations`), `baseapp` first parses the path, then uses its own internal `GRPCQueryRouter` to retrieve the corresponding gRPC handler, and routes the query to the module. The gRPC handler is responsible for recognizing this query, retrieving the appropriate values from the application's stores, and returning a response. Read more about query services [here](../../integrate/building-modules/04-query-services.md). + +Once a result is received from the querier, `baseapp` begins the process of returning a response to the user. + +## Response + +Since `Query()` is an ABCI function, `baseapp` returns the response as an [`abci.ResponseQuery`](https://docs.cometbft.com/master/spec/abci/abci.html#query-2) type. The `client.Context` `Query()` routine receives the response and. + +### CLI Response + +The application [`codec`](../advanced-concepts/06-encoding.md) is used to unmarshal the response to a JSON and the `client.Context` prints the output to the command line, applying any configurations such as the output type (text, JSON or YAML). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/context.go#L330-L358 +``` + +And that's a wrap! The result of the query is outputted to the console by the CLI. diff --git a/docs/develop/high-level-concepts/03-accounts.md b/docs/develop/high-level-concepts/03-accounts.md new file mode 100644 index 000000000..0d6f3624e --- /dev/null +++ b/docs/develop/high-level-concepts/03-accounts.md @@ -0,0 +1,282 @@ +--- +sidebar_position: 1 +dislayed_sidebar: developSidebar +--- + +# Accounts + +:::note Synopsis +This document describes the in-built account and public key system of the Cosmos SDK. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](00-overview-app.md) + +::: + +## Account Definition + +In the Cosmos SDK, an _account_ designates a pair of _public key_ `PubKey` and _private key_ `PrivKey`. The `PubKey` can be derived to generate various `Addresses`, which are used to identify users (among other parties) in the application. `Addresses` are also associated with [`message`s](../../integrate/building-modules/02-messages-and-queries.md#messages) to identify the sender of the `message`. The `PrivKey` is used to generate [digital signatures](#keys-accounts-addresses-and-signatures) to prove that an `Address` associated with the `PrivKey` approved of a given `message`. + +For HD key derivation the Cosmos SDK uses a standard called [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). The BIP32 allows users to create an HD wallet (as specified in [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)) - a set of accounts derived from an initial secret seed. A seed is usually created from a 12- or 24-word mnemonic. A single seed can derive any number of `PrivKey`s using a one-way cryptographic function. Then, a `PubKey` can be derived from the `PrivKey`. Naturally, the mnemonic is the most sensitive information, as private keys can always be re-generated if the mnemonic is preserved. + +```text + Account 0 Account 1 Account 2 + ++------------------+ +------------------+ +------------------+ +| | | | | | +| Address 0 | | Address 1 | | Address 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Public key 0 | | Public key 1 | | Public key 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Private key 0 | | Private key 1 | | Private key 2 | +| ^ | | ^ | | ^ | ++------------------+ +------------------+ +------------------+ + | | | + | | | + | | | + +--------------------------------------------------------------------+ + | + | + +---------+---------+ + | | + | Master PrivKey | + | | + +-------------------+ + | + | + +---------+---------+ + | | + | Mnemonic (Seed) | + | | + +-------------------+ +``` + +In the Cosmos SDK, keys are stored and managed by using an object called a [`Keyring`](#keyring). + +## Keys, accounts, addresses, and signatures + +The principal way of authenticating a user is done using [digital signatures](https://en.wikipedia.org/wiki/Digital_signature). Users sign transactions using their own private key. Signature verification is done with the associated public key. For on-chain signature verification purposes, we store the public key in an `Account` object (alongside other data required for a proper transaction validation). + +In the node, all data is stored using Protocol Buffers serialization. + +The Cosmos SDK supports the following digital key schemes for creating digital signatures: + +* `secp256k1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256k1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256k1/secp256k1.go). +* `secp256r1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256r1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256r1/pubkey.go), +* `tm-ed25519`, as implemented in the [Cosmos SDK `crypto/keys/ed25519` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/ed25519/ed25519.go). This scheme is supported only for the consensus validation. + +| | Address length in bytes | Public key length in bytes | Used for transaction authentication | Used for consensus (cometbft) | +| :----------: | :---------------------: | :------------------------: | :---------------------------------: | :-----------------------------: | +| `secp256k1` | 20 | 33 | yes | no | +| `secp256r1` | 32 | 33 | yes | no | +| `tm-ed25519` | -- not used -- | 32 | no | yes | + +## Addresses + +`Addresses` and `PubKey`s are both public information that identifies actors in the application. `Account` is used to store authentication information. The basic account implementation is provided by a `BaseAccount` object. + +Each account is identified using `Address` which is a sequence of bytes derived from a public key. In the Cosmos SDK, we define 3 types of addresses that specify a context where an account is used: + +* `AccAddress` identifies users (the sender of a `message`). +* `ValAddress` identifies validator operators. +* `ConsAddress` identifies validator nodes that are participating in consensus. Validator nodes are derived using the **`ed25519`** curve. + +These types implement the `Address` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L108-L124 +``` + +Address construction algorithm is defined in [ADR-28](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-028-public-key-addresses.md). +Here is the standard way to obtain an account address from a `pub` public key: + +```go +sdk.AccAddress(pub.Address().Bytes()) +``` + +Of note, the `Marshal()` and `Bytes()` method both return the same raw `[]byte` form of the address. `Marshal()` is required for Protobuf compatibility. + +For user interaction, addresses are formatted using [Bech32](https://en.bitcoin.it/wiki/Bech32) and implemented by the `String` method. The Bech32 method is the only supported format to use when interacting with a blockchain. The Bech32 human-readable part (Bech32 prefix) is used to denote an address type. Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L281-L295 +``` + +| | Address Bech32 Prefix | +| ------------------ | --------------------- | +| Accounts | cosmos | +| Validator Operator | cosmosvaloper | +| Consensus Nodes | cosmosvalcons | + +### Public Keys + +Public keys in Cosmos SDK are defined by `cryptotypes.PubKey` interface. Since public keys are saved in a store, `cryptotypes.PubKey` extends the `proto.Message` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/types/types.go#L8-L17 +``` + +A compressed format is used for `secp256k1` and `secp256r1` serialization. + +* The first byte is a `0x02` byte if the `y`-coordinate is the lexicographically largest of the two associated with the `x`-coordinate. +* Otherwise the first byte is a `0x03`. + +This prefix is followed by the `x`-coordinate. + +Public Keys are not used to reference accounts (or users) and in general are not used when composing transaction messages (with few exceptions: `MsgCreateValidator`, `Validator` and `Multisig` messages). +For user interactions, `PubKey` is formatted using Protobufs JSON ([ProtoMarshalJSON](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/json.go#L14-L34) function). Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/output.go#L23-L39 +``` + +## Keyring + +A `Keyring` is an object that stores and manages accounts. In the Cosmos SDK, a `Keyring` implementation follows the `Keyring` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L54-L101 +``` + +The default implementation of `Keyring` comes from the third-party [`99designs/keyring`](https://github.com/99designs/keyring) library. + +A few notes on the `Keyring` methods: + +* `Sign(uid string, msg []byte) ([]byte, types.PubKey, error)` strictly deals with the signature of the `msg` bytes. You must prepare and encode the transaction into a canonical `[]byte` form. Because protobuf is not deterministic, it has been decided in [ADR-020](../../integrate/architecture/adr-020-protobuf-transaction-encoding.md) that the canonical `payload` to sign is the `SignDoc` struct, deterministically encoded using [ADR-027](../../integrate/architecture/adr-027-deterministic-protobuf-serialization.md). Note that signature verification is not implemented in the Cosmos SDK by default, it is deferred to the [`anteHandler`](../advanced-concepts/00-baseapp.md#antehandler). + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 +``` + +* `NewAccount(uid, mnemonic, bip39Passphrase, hdPath string, algo SignatureAlgo) (*Record, error)` creates a new account based on the [`bip44 path`](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) and persists it on disk. The `PrivKey` is **never stored unencrypted**, instead it is [encrypted with a passphrase](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/armor.go) before being persisted. In the context of this method, the key type and sequence number refer to the segment of the BIP44 derivation path (for example, `0`, `1`, `2`, ...) that is used to derive a private and a public key from the mnemonic. Using the same mnemonic and derivation path, the same `PrivKey`, `PubKey` and `Address` is generated. The following keys are supported by the keyring: + +* `secp256k1` +* `ed25519` + +* `ExportPrivKeyArmor(uid, encryptPassphrase string) (armor string, err error)` exports a private key in ASCII-armored encrypted format using the given passphrase. You can then either import the private key again into the keyring using the `ImportPrivKey(uid, armor, passphrase string)` function or decrypt it into a raw private key using the `UnarmorDecryptPrivKey(armorStr string, passphrase string)` function. + +### Create New Key Type + +To create a new key type for using in keyring, `keyring.SignatureAlgo` interface must be fulfilled. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/signing_algorithms.go#L10-L15 +``` + +The interface consists in three methods where `Name()` returns the name of the algorithm as a `hd.PubKeyType` and `Derive()` and `Generate()` must return the following functions respectively: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/hd/algo.go#L28-L31 +``` +Once the `keyring.SignatureAlgo` has been implemented it must be added to the [list of supported algos](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L217) of the keyring. + +For simplicity the implementation of a new key type should be done inside the `crypto/hd` package. +There is an example of a working `secp256k1` implementation in [algo.go](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/hd/algo.go#L38). + + +#### Implementing secp256r1 algo + +Here is an example of how secp256r1 could be implemented. + +First a new function to create a private key from a secret number is needed in the secp256r1 package. This function could look like this: + +```go +// cosmos-sdk/crypto/keys/secp256r1/privkey.go + +// NewPrivKeyFromSecret creates a private key derived for the secret number +// represented in big-endian. The `secret` must be a valid ECDSA field element. +func NewPrivKeyFromSecret(secret []byte) (*PrivKey, error) { + var d = new(big.Int).SetBytes(secret) + if d.Cmp(secp256r1.Params().N) >= 1 { + return nil, errorsmod.Wrap(errors.ErrInvalidRequest, "secret not in the curve base field") + } + sk := new(ecdsa.PrivKey) + return &PrivKey{&ecdsaSK{*sk}}, nil +} +``` + +After that `secp256r1Algo` can be implemented. + +```go +// cosmos-sdk/crypto/hd/secp256r1Algo.go + +package hd + +import ( + "github.com/cosmos/go-bip39" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" + "github.com/cosmos/cosmos-sdk/crypto/types" +) + +// Secp256r1Type uses the secp256r1 ECDSA parameters. +const Secp256r1Type = PubKeyType("secp256r1") + +var Secp256r1 = secp256r1Algo{} + +type secp256r1Algo struct{} + +func (s secp256r1Algo) Name() PubKeyType { + return Secp256r1Type +} + +// Derive derives and returns the secp256r1 private key for the given seed and HD path. +func (s secp256r1Algo) Derive() DeriveFn { + return func(mnemonic string, bip39Passphrase, hdPath string) ([]byte, error) { + seed, err := bip39.NewSeedWithErrorChecking(mnemonic, bip39Passphrase) + if err != nil { + return nil, err + } + + masterPriv, ch := ComputeMastersFromSeed(seed) + if len(hdPath) == 0 { + return masterPriv[:], nil + } + derivedKey, err := DerivePrivateKeyForPath(masterPriv, ch, hdPath) + + return derivedKey, err + } +} + +// Generate generates a secp256r1 private key from the given bytes. +func (s secp256r1Algo) Generate() GenerateFn { + return func(bz []byte) types.PrivKey { + key, err := secp256r1.NewPrivKeyFromSecret(bz) + if err != nil { + panic(err) + } + return key + } +} +``` + +Finally, the algo must be added to the list of [supported algos](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L217) by the keyring. + +```go +// cosmos-sdk/crypto/keyring/keyring.go + +func newKeystore(kr keyring.Keyring, cdc codec.Codec, backend string, opts ...Option) keystore { + // Default options for keybase, these can be overwritten using the + // Option function + options := Options{ + SupportedAlgos: SigningAlgoList{hd.Secp256k1, hd.Secp256r1}, // added here + SupportedAlgosLedger: SigningAlgoList{hd.Secp256k1}, + } +... +``` + +Hereafter to create new keys using your algo, you must specify it with the flag `--algo` : + +`simd keys add myKey --algo secp256r1` \ No newline at end of file diff --git a/docs/develop/high-level-concepts/04-gas-fees.md b/docs/develop/high-level-concepts/04-gas-fees.md new file mode 100644 index 000000000..f63775b11 --- /dev/null +++ b/docs/develop/high-level-concepts/04-gas-fees.md @@ -0,0 +1,100 @@ +--- +sidebar_position: 1 +dislayed_sidebar: developSidebar +--- + +# Gas and Fees + +:::note Synopsis +This document describes the default strategies to handle gas and fees within a Cosmos SDK application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](00-overview-app.md) + +::: + +## Introduction to `Gas` and `Fees` + +In the Cosmos SDK, `gas` is a special unit that is used to track the consumption of resources during execution. `gas` is typically consumed whenever read and writes are made to the store, but it can also be consumed if expensive computation needs to be done. It serves two main purposes: + +* Make sure blocks are not consuming too many resources and are finalized. This is implemented by default in the Cosmos SDK via the [block gas meter](#block-gas-meter). +* Prevent spam and abuse from end-user. To this end, `gas` consumed during [`message`](../../integrate/building-modules/02-messages-and-queries.md#messages) execution is typically priced, resulting in a `fee` (`fees = gas * gas-prices`). `fees` generally have to be paid by the sender of the `message`. Note that the Cosmos SDK does not enforce `gas` pricing by default, as there may be other ways to prevent spam (e.g. bandwidth schemes). Still, most applications implement `fee` mechanisms to prevent spam by using the [`AnteHandler`](#antehandler). + +## Gas Meter + +In the Cosmos SDK, `gas` is a simple alias for `uint64`, and is managed by an object called a _gas meter_. Gas meters implement the `GasMeter` interface + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L40-L51 +``` + +where: + +* `GasConsumed()` returns the amount of gas that was consumed by the gas meter instance. +* `GasConsumedToLimit()` returns the amount of gas that was consumed by gas meter instance, or the limit if it is reached. +* `GasRemaining()` returns the gas left in the GasMeter. +* `Limit()` returns the limit of the gas meter instance. `0` if the gas meter is infinite. +* `ConsumeGas(amount Gas, descriptor string)` consumes the amount of `gas` provided. If the `gas` overflows, it panics with the `descriptor` message. If the gas meter is not infinite, it panics if `gas` consumed goes above the limit. +* `RefundGas()` deducts the given amount from the gas consumed. This functionality enables refunding gas to the transaction or block gas pools so that EVM-compatible chains can fully support the go-ethereum StateDB interface. +* `IsPastLimit()` returns `true` if the amount of gas consumed by the gas meter instance is strictly above the limit, `false` otherwise. +* `IsOutOfGas()` returns `true` if the amount of gas consumed by the gas meter instance is above or equal to the limit, `false` otherwise. + +The gas meter is generally held in [`ctx`](../advanced-concepts/02-context.md), and consuming gas is done with the following pattern: + +```go +ctx.GasMeter().ConsumeGas(amount, "description") +``` + +By default, the Cosmos SDK makes use of two different gas meters, the [main gas meter](#main-gas-meter) and the [block gas meter](#block-gas-meter). + +### Main Gas Meter + +`ctx.GasMeter()` is the main gas meter of the application. The main gas meter is initialized in `BeginBlock` via `setDeliverState`, and then tracks gas consumption during execution sequences that lead to state-transitions, i.e. those originally triggered by [`BeginBlock`](../advanced-concepts/00-baseapp.md#beginblock), [`DeliverTx`](../advanced-concepts/00-baseapp.md#delivertx) and [`EndBlock`](../advanced-concepts/00-baseapp.md#endblock). At the beginning of each `DeliverTx`, the main gas meter **must be set to 0** in the [`AnteHandler`](#antehandler), so that it can track gas consumption per-transaction. + +Gas consumption can be done manually, generally by the module developer in the [`BeginBlocker`, `EndBlocker`](../../integrate/building-modules/05-beginblock-endblock.md) or [`Msg` service](../../integrate/building-modules/03-msg-services.md), but most of the time it is done automatically whenever there is a read or write to the store. This automatic gas consumption logic is implemented in a special store called [`GasKv`](../advanced-concepts/04-store.md#gaskv-store). + +### Block Gas Meter + +`ctx.BlockGasMeter()` is the gas meter used to track gas consumption per block and make sure it does not go above a certain limit. A new instance of the `BlockGasMeter` is created each time [`BeginBlock`](../advanced-concepts/00-baseapp.md#beginblock) is called. The `BlockGasMeter` is finite, and the limit of gas per block is defined in the application's consensus parameters. By default, Cosmos SDK applications use the default consensus parameters provided by CometBFT: + +```go reference +https://github.com/cometbft/cometbft/blob/v0.37.0/types/params.go#L66-L105 +``` + +When a new [transaction](../advanced-concepts/01-transactions.md) is being processed via `DeliverTx`, the current value of `BlockGasMeter` is checked to see if it is above the limit. If it is, `DeliverTx` returns immediately. This can happen even with the first transaction in a block, as `BeginBlock` itself can consume gas. If not, the transaction is processed normally. At the end of `DeliverTx`, the gas tracked by `ctx.BlockGasMeter()` is increased by the amount consumed to process the transaction: + +```go +ctx.BlockGasMeter().ConsumeGas( + ctx.GasMeter().GasConsumedToLimit(), + "block gas meter", +) +``` + +## AnteHandler + +The `AnteHandler` is run for every transaction during `CheckTx` and `DeliverTx`, before a Protobuf `Msg` service method for each `sdk.Msg` in the transaction. + +The anteHandler is not implemented in the core Cosmos SDK but in a module. That said, most applications today use the default implementation defined in the [`auth` module](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth). Here is what the `anteHandler` is intended to do in a normal Cosmos SDK application: + +* Verify that the transactions are of the correct type. Transaction types are defined in the module that implements the `anteHandler`, and they follow the transaction interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L42-L50 +``` + + This enables developers to play with various types for the transaction of their application. In the default `auth` module, the default transaction type is `Tx`: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 +``` + +* Verify signatures for each [`message`](../../integrate/building-modules/02-messages-and-queries.md#messages) contained in the transaction. Each `message` should be signed by one or multiple sender(s), and these signatures must be verified in the `anteHandler`. +* During `CheckTx`, verify that the gas prices provided with the transaction is greater than the local `min-gas-prices` (as a reminder, gas-prices can be deducted from the following equation: `fees = gas * gas-prices`). `min-gas-prices` is a parameter local to each full-node and used during `CheckTx` to discard transactions that do not provide a minimum amount of fees. This ensures that the mempool cannot be spammed with garbage transactions. +* Verify that the sender of the transaction has enough funds to cover for the `fees`. When the end-user generates a transaction, they must indicate 2 of the 3 following parameters (the third one being implicit): `fees`, `gas` and `gas-prices`. This signals how much they are willing to pay for nodes to execute their transaction. The provided `gas` value is stored in a parameter called `GasWanted` for later use. +* Set `newCtx.GasMeter` to 0, with a limit of `GasWanted`. **This step is crucial**, as it not only makes sure the transaction cannot consume infinite gas, but also that `ctx.GasMeter` is reset in-between each `DeliverTx` (`ctx` is set to `newCtx` after `anteHandler` is run, and the `anteHandler` is run each time `DeliverTx` is called). + +As explained above, the `anteHandler` returns a maximum limit of `gas` the transaction can consume during execution called `GasWanted`. The actual amount consumed in the end is denominated `GasUsed`, and we must therefore have `GasUsed =< GasWanted`. Both `GasWanted` and `GasUsed` are relayed to the underlying consensus engine when [`DeliverTx`](../advanced-concepts/00-baseapp.md#delivertx) returns. diff --git a/docs/develop/high-level-concepts/_category_.json b/docs/develop/high-level-concepts/_category_.json new file mode 100644 index 000000000..2c4105ee6 --- /dev/null +++ b/docs/develop/high-level-concepts/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "High Level Concepts", + "position": 1, + "link": null +} \ No newline at end of file diff --git a/docs/develop/intro/00-what-is-sdk.md b/docs/develop/intro/00-what-is-sdk.md new file mode 100644 index 000000000..644a2ce0d --- /dev/null +++ b/docs/develop/intro/00-what-is-sdk.md @@ -0,0 +1,32 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- + +# What is the Cosmos SDK + +The [Cosmos SDK](https://github.com/cosmos/cosmos-sdk) is an open-source framework for building multi-asset public Proof-of-Stake (PoS) blockchains, like the Cosmos Hub, as well as permissioned Proof-of-Authority (PoA) blockchains. Blockchains built with the Cosmos SDK are generally referred to as **application-specific blockchains**. + +The goal of the Cosmos SDK is to allow developers to easily create custom blockchains from scratch that can natively interoperate with other blockchains. We envision the Cosmos SDK as the npm-like framework to build secure blockchain applications on top of [CometBFT](https://github.com/cometbft/cometbft). SDK-based blockchains are built out of composable [modules](../../integrate/building-modules/01-intro.md), most of which are open-source and readily available for any developers to use. Anyone can create a module for the Cosmos SDK, and integrating already-built modules is as simple as importing them into your blockchain application. What's more, the Cosmos SDK is a capabilities-based system that allows developers to better reason about the security of interactions between modules. For a deeper look at capabilities, jump to [Object-Capability Model](../advanced-concepts/10-ocap.md). + +## What are Application-Specific Blockchains + +One development paradigm in the blockchain world today is that of virtual-machine blockchains like Ethereum, where development generally revolves around building decentralized applications on top of an existing blockchain as a set of smart contracts. While smart contracts can be very good for some use cases like single-use applications (e.g. ICOs), they often fall short for building complex decentralized platforms. More generally, smart contracts can be limiting in terms of flexibility, sovereignty and performance. + +Application-specific blockchains offer a radically different development paradigm than virtual-machine blockchains. An application-specific blockchain is a blockchain customized to operate a single application: developers have all the freedom to make the design decisions required for the application to run optimally. They can also provide better sovereignty, security and performance. + +Learn more about [application-specific blockchains](01-why-app-specific.md). + +## Why the Cosmos SDK + +The Cosmos SDK is the most advanced framework for building custom application-specific blockchains today. Here are a few reasons why you might want to consider building your decentralized application with the Cosmos SDK: + +* The default consensus engine available within the Cosmos SDK is [CometBFT](https://github.com/cometbft/cometbft). CometBFT is the most (and only) mature BFT consensus engine in existence. It is widely used across the industry and is considered the gold standard consensus engine for building Proof-of-Stake systems. +* The Cosmos SDK is open-source and designed to make it easy to build blockchains out of composable [modules](../../integrate/modules). As the ecosystem of open-source Cosmos SDK modules grows, it will become increasingly easier to build complex decentralized platforms with it. +* The Cosmos SDK is inspired by capabilities-based security, and informed by years of wrestling with blockchain state-machines. This makes the Cosmos SDK a very secure environment to build blockchains. +* Most importantly, the Cosmos SDK has already been used to build many application-specific blockchains that are already in production. Among others, we can cite [Cosmos Hub](https://hub.cosmos.network), [IRIS Hub](https://irisnet.org), [Binance Chain](https://docs.binance.org/), [Terra](https://terra.money/) or [Kava](https://www.kava.io/). [Many more](https://cosmos.network/ecosystem) are building on the Cosmos SDK. + +## Getting started with the Cosmos SDK + +* Learn more about the [architecture of a Cosmos SDK application](02-sdk-app-architecture.md) +* Learn how to build an application-specific blockchain from scratch with the [Cosmos SDK Tutorial](https://cosmos.network/docs/tutorial) diff --git a/docs/develop/intro/01-why-app-specific.md b/docs/develop/intro/01-why-app-specific.md new file mode 100644 index 000000000..97a2d9a8d --- /dev/null +++ b/docs/develop/intro/01-why-app-specific.md @@ -0,0 +1,80 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- + +# Application-Specific Blockchains + +:::note Synopsis +This document explains what application-specific blockchains are, and why developers would want to build one as opposed to writing Smart Contracts. +::: + +## What are application-specific blockchains + +Application-specific blockchains are blockchains customized to operate a single application. Instead of building a decentralized application on top of an underlying blockchain like Ethereum, developers build their own blockchain from the ground up. This means building a full-node client, a light-client, and all the necessary interfaces (CLI, REST, ...) to interact with the nodes. + +```text + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | CometBFT + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +## What are the shortcomings of Smart Contracts + +Virtual-machine blockchains like Ethereum addressed the demand for more programmability back in 2014. At the time, the options available for building decentralized applications were quite limited. Most developers would build on top of the complex and limited Bitcoin scripting language, or fork the Bitcoin codebase which was hard to work with and customize. + +Virtual-machine blockchains came in with a new value proposition. Their state-machine incorporates a virtual-machine that is able to interpret turing-complete programs called Smart Contracts. These Smart Contracts are very good for use cases like one-time events (e.g. ICOs), but they can fall short for building complex decentralized platforms. Here is why: + +* Smart Contracts are generally developed with specific programming languages that can be interpreted by the underlying virtual-machine. These programming languages are often immature and inherently limited by the constraints of the virtual-machine itself. For example, the Ethereum Virtual Machine does not allow developers to implement automatic execution of code. Developers are also limited to the account-based system of the EVM, and they can only choose from a limited set of functions for their cryptographic operations. These are examples, but they hint at the lack of **flexibility** that a smart contract environment often entails. +* Smart Contracts are all run by the same virtual machine. This means that they compete for resources, which can severely restrain **performance**. And even if the state-machine were to be split in multiple subsets (e.g. via sharding), Smart Contracts would still need to be interpreted by a virtual machine, which would limit performance compared to a native application implemented at state-machine level (our benchmarks show an improvement on the order of 10x in performance when the virtual-machine is removed). +* Another issue with the fact that Smart Contracts share the same underlying environment is the resulting limitation in **sovereignty**. A decentralized application is an ecosystem that involves multiple players. If the application is built on a general-purpose virtual-machine blockchain, stakeholders have very limited sovereignty over their application, and are ultimately superseded by the governance of the underlying blockchain. If there is a bug in the application, very little can be done about it. + +Application-Specific Blockchains are designed to address these shortcomings. + +## Application-Specific Blockchains Benefits + +### Flexibility + +Application-specific blockchains give maximum flexibility to developers: + +* In Cosmos blockchains, the state-machine is typically connected to the underlying consensus engine via an interface called the [ABCI](https://docs.cometbft.com/v0.37/spec/abci/). This interface can be wrapped in any programming language, meaning developers can build their state-machine in the programming language of their choice. + +* Developers can choose among multiple frameworks to build their state-machine. The most widely used today is the Cosmos SDK, but others exist (e.g. [Lotion](https://github.com/nomic-io/lotion), [Weave](https://github.com/iov-one/weave), ...). Typically the choice will be made based on the programming language they want to use (Cosmos SDK and Weave are in Golang, Lotion is in Javascript, ...). +* The ABCI also allows developers to swap the consensus engine of their application-specific blockchain. Today, only CometBFT is production-ready, but in the future other consensus engines are expected to emerge. +* Even when they settle for a framework and consensus engine, developers still have the freedom to tweak them if they don't perfectly match their requirements in their pristine forms. +* Developers are free to explore the full spectrum of tradeoffs (e.g. number of validators vs transaction throughput, safety vs availability in asynchrony, ...) and design choices (DB or IAVL tree for storage, UTXO or account model, ...). +* Developers can implement automatic execution of code. In the Cosmos SDK, logic can be automatically triggered at the beginning and the end of each block. They are also free to choose the cryptographic library used in their application, as opposed to being constrained by what is made available by the underlying environment in the case of virtual-machine blockchains. + +The list above contains a few examples that show how much flexibility application-specific blockchains give to developers. The goal of Cosmos and the Cosmos SDK is to make developer tooling as generic and composable as possible, so that each part of the stack can be forked, tweaked and improved without losing compatibility. As the community grows, more alternatives for each of the core building blocks will emerge, giving more options to developers. + +### Performance + +decentralized applications built with Smart Contracts are inherently capped in performance by the underlying environment. For a decentralized application to optimise performance, it needs to be built as an application-specific blockchain. Next are some of the benefits an application-specific blockchain brings in terms of performance: + +* Developers of application-specific blockchains can choose to operate with a novel consensus engine such as CometBFT BFT. Compared to Proof-of-Work (used by most virtual-machine blockchains today), it offers significant gains in throughput. +* An application-specific blockchain only operates a single application, so that the application does not compete with others for computation and storage. This is the opposite of most non-sharded virtual-machine blockchains today, where smart contracts all compete for computation and storage. +* Even if a virtual-machine blockchain offered application-based sharding coupled with an efficient consensus algorithm, performance would still be limited by the virtual-machine itself. The real throughput bottleneck is the state-machine, and requiring transactions to be interpreted by a virtual-machine significantly increases the computational complexity of processing them. + +### Security + +Security is hard to quantify, and greatly varies from platform to platform. That said here are some important benefits an application-specific blockchain can bring in terms of security: + +* Developers can choose proven programming languages like Go when building their application-specific blockchains, as opposed to smart contract programming languages that are often more immature. +* Developers are not constrained by the cryptographic functions made available by the underlying virtual-machines. They can use their own custom cryptography, and rely on well-audited crypto libraries. +* Developers do not have to worry about potential bugs or exploitable mechanisms in the underlying virtual-machine, making it easier to reason about the security of the application. + +### Sovereignty + +One of the major benefits of application-specific blockchains is sovereignty. A decentralized application is an ecosystem that involves many actors: users, developers, third-party services, and more. When developers build on virtual-machine blockchain where many decentralized applications coexist, the community of the application is different than the community of the underlying blockchain, and the latter supersedes the former in the governance process. If there is a bug or if a new feature is needed, stakeholders of the application have very little leeway to upgrade the code. If the community of the underlying blockchain refuses to act, nothing can happen. + +The fundamental issue here is that the governance of the application and the governance of the network are not aligned. This issue is solved by application-specific blockchains. Because application-specific blockchains specialize to operate a single application, stakeholders of the application have full control over the entire chain. This ensures that the community will not be stuck if a bug is discovered, and that it has the freedom to choose how it is going to evolve. diff --git a/docs/develop/intro/02-sdk-app-architecture.md b/docs/develop/intro/02-sdk-app-architecture.md new file mode 100644 index 000000000..54c8eb4b5 --- /dev/null +++ b/docs/develop/intro/02-sdk-app-architecture.md @@ -0,0 +1,94 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- + +# Introduction to Blockchain Architecture + +## State machine + +At its core, a blockchain is a [replicated deterministic state machine](https://en.wikipedia.org/wiki/State_machine_replication). + +A state machine is a computer science concept whereby a machine can have multiple states, but only one at any given time. There is a `state`, which describes the current state of the system, and `transactions`, that trigger state transitions. + +Given a state S and a transaction T, the state machine will return a new state S'. + +```text ++--------+ +--------+ +| | | | +| S +---------------->+ S' | +| | apply(T) | | ++--------+ +--------+ +``` + +In practice, the transactions are bundled in blocks to make the process more efficient. Given a state S and a block of transactions B, the state machine will return a new state S'. + +```text ++--------+ +--------+ +| | | | +| S +----------------------------> | S' | +| | For each T in B: apply(T) | | ++--------+ +--------+ +``` + +In a blockchain context, the state machine is deterministic. This means that if a node is started at a given state and replays the same sequence of transactions, it will always end up with the same final state. + +The Cosmos SDK gives developers maximum flexibility to define the state of their application, transaction types and state transition functions. The process of building state-machines with the Cosmos SDK will be described more in depth in the following sections. But first, let us see how the state-machine is replicated using **CometBFT**. + +## CometBFT + +Thanks to the Cosmos SDK, developers just have to define the state machine, and [*CometBFT*](https://docs.cometbft.com/v0.37/introduction/what-is-cometbft) will handle replication over the network for them. + +```text + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | CometBFT + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +[CometBFT](https://docs.cometbft.com/v0.37/introduction/what-is-cometbft) is an application-agnostic engine that is responsible for handling the *networking* and *consensus* layers of a blockchain. In practice, this means that CometBFT is responsible for propagating and ordering transaction bytes. CometBFT relies on an eponymous Byzantine-Fault-Tolerant (BFT) algorithm to reach consensus on the order of transactions. + +The CometBFT [consensus algorithm](https://docs.cometbft.com/v0.37/introduction/what-is-cometbft#consensus-overview) works with a set of special nodes called *Validators*. Validators are responsible for adding blocks of transactions to the blockchain. At any given block, there is a validator set V. A validator in V is chosen by the algorithm to be the proposer of the next block. This block is considered valid if more than two thirds of V signed a `prevote` and a `precommit` on it, and if all the transactions that it contains are valid. The validator set can be changed by rules written in the state-machine. + +## ABCI + +CometBFT passes transactions to the application through an interface called the [ABCI](https://docs.cometbft.com/v0.37/spec/abci/), which the application must implement. + +```text + +---------------------+ + | | + | Application | + | | + +--------+---+--------+ + ^ | + | | ABCI + | v + +--------+---+--------+ + | | + | | + | CometBFT | + | | + | | + +---------------------+ +``` + +Note that **CometBFT only handles transaction bytes**. It has no knowledge of what these bytes mean. All CometBFT does is order these transaction bytes deterministically. CometBFT passes the bytes to the application via the ABCI, and expects a return code to inform it if the messages contained in the transactions were successfully processed or not. + +Here are the most important messages of the ABCI: + +* `CheckTx`: When a transaction is received by CometBFT, it is passed to the application to check if a few basic requirements are met. `CheckTx` is used to protect the mempool of full-nodes against spam transactions. . A special handler called the [`AnteHandler`](../high-level-concepts/04-gas-fees.md#antehandler) is used to execute a series of validation steps such as checking for sufficient fees and validating the signatures. If the checks are valid, the transaction is added to the [mempool](https://docs.cometbft.com/v0.37/spec/p2p/messages/mempool) and relayed to peer nodes. Note that transactions are not processed (i.e. no modification of the state occurs) with `CheckTx` since they have not been included in a block yet. +* `DeliverTx`: When a [valid block](https://docs.cometbft.com/v0.37/spec/core/data_structures#block) is received by CometBFT, each transaction in the block is passed to the application via `DeliverTx` in order to be processed. It is during this stage that the state transitions occur. The `AnteHandler` executes again, along with the actual [`Msg` service](../../integrate/building-modules/03-msg-services.md) RPC for each message in the transaction. +* `BeginBlock`/`EndBlock`: These messages are executed at the beginning and the end of each block, whether the block contains transactions or not. It is useful to trigger automatic execution of logic. Proceed with caution though, as computationally expensive loops could slow down your blockchain, or even freeze it if the loop is infinite. + +Find a more detailed view of the ABCI methods from the [CometBFT docs](https://docs.cometbft.com/v0.37/spec/abci/). + +Any application built on CometBFT needs to implement the ABCI interface in order to communicate with the underlying local CometBFT engine. Fortunately, you do not have to implement the ABCI interface. The Cosmos SDK provides a boilerplate implementation of it in the form of [baseapp](03-sdk-design.md#baseapp). diff --git a/docs/develop/intro/03-sdk-design.md b/docs/develop/intro/03-sdk-design.md new file mode 100644 index 000000000..f70f51867 --- /dev/null +++ b/docs/develop/intro/03-sdk-design.md @@ -0,0 +1,96 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- + +# Main Components of the Cosmos SDK + +The Cosmos SDK is a framework that facilitates the development of secure state-machines on top of CometBFT. At its core, the Cosmos SDK is a boilerplate implementation of the [ABCI](02-sdk-app-architecture.md#abci) in Golang. It comes with a [`multistore`](../advanced-concepts/04-store.md#multistore) to persist data and a [`router`](../advanced-concepts/00-baseapp.md#routing) to handle transactions. + +Here is a simplified view of how transactions are handled by an application built on top of the Cosmos SDK when transferred from CometBFT via `DeliverTx`: + +1. Decode `transactions` received from the CometBFT consensus engine (remember that CometBFT only deals with `[]bytes`). +2. Extract `messages` from `transactions` and do basic sanity checks. +3. Route each message to the appropriate module so that it can be processed. +4. Commit state changes. + +## `baseapp` + +`baseapp` is the boilerplate implementation of a Cosmos SDK application. It comes with an implementation of the ABCI to handle the connection with the underlying consensus engine. Typically, a Cosmos SDK application extends `baseapp` by embedding it in [`app.go`](../high-level-concepts/00-overview-app.md#core-application-file). + +Here is an example of this from `simapp`, the Cosmos SDK demonstration app: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L164-L203 +``` + +The goal of `baseapp` is to provide a secure interface between the store and the extensible state machine while defining as little about the state machine as possible (staying true to the ABCI). + +For more on `baseapp`, please click [here](../advanced-concepts/00-baseapp.md). + +## Multistore + +The Cosmos SDK provides a [`multistore`](../advanced-concepts/04-store.md#multistore) for persisting state. The multistore allows developers to declare any number of [`KVStores`](../advanced-concepts/04-store.md#base-layer-kvstores). These `KVStores` only accept the `[]byte` type as value and therefore any custom structure needs to be marshalled using [a codec](../advanced-concepts/06-encoding.md) before being stored. + +The multistore abstraction is used to divide the state in distinct compartments, each managed by its own module. For more on the multistore, click [here](../advanced-concepts/04-store.md#multistore) + +## Modules + +The power of the Cosmos SDK lies in its modularity. Cosmos SDK applications are built by aggregating a collection of interoperable modules. Each module defines a subset of the state and contains its own message/transaction processor, while the Cosmos SDK is responsible for routing each message to its respective module. + +Here is a simplified view of how a transaction is processed by the application of each full-node when it is received in a valid block: + +```text + + + | + | Transaction relayed from the full-node's + | CometBFT engine to the node's application + | via DeliverTx + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | Message routed to + | the correct module + | to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to CometBFT + | (0=Ok, 1=Err) + v +``` + +Each module can be seen as a little state-machine. Developers need to define the subset of the state handled by the module, as well as custom message types that modify the state (*Note:* `messages` are extracted from `transactions` by `baseapp`). In general, each module declares its own `KVStore` in the `multistore` to persist the subset of the state it defines. Most developers will need to access other 3rd party modules when building their own modules. Given that the Cosmos SDK is an open framework, some of the modules may be malicious, which means there is a need for security principles to reason about inter-module interactions. These principles are based on [object-capabilities](../advanced-concepts/10-ocap.md). In practice, this means that instead of having each module keep an access control list for other modules, each module implements special objects called `keepers` that can be passed to other modules to grant a pre-defined set of capabilities. + +Cosmos SDK modules are defined in the `x/` folder of the Cosmos SDK. Some core modules include: + +* `x/auth`: Used to manage accounts and signatures. +* `x/bank`: Used to enable tokens and token transfers. +* `x/staking` + `x/slashing`: Used to build Proof-Of-Stake blockchains. + +In addition to the already existing modules in `x/`, that anyone can use in their app, the Cosmos SDK lets you build your own custom modules. You can check an [example of that in the tutorial](https://tutorials.cosmos.network/). diff --git a/docs/develop/intro/_category_.json b/docs/develop/intro/_category_.json new file mode 100644 index 000000000..b218fe9be --- /dev/null +++ b/docs/develop/intro/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Introduction", + "position": 0, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/_category_.json b/docs/integrate/_category_.json new file mode 100644 index 000000000..47b369a05 --- /dev/null +++ b/docs/integrate/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Integrate", + "position": 1, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/architecture/PROCESS.md b/docs/integrate/architecture/PROCESS.md new file mode 100644 index 000000000..e30a74062 --- /dev/null +++ b/docs/integrate/architecture/PROCESS.md @@ -0,0 +1,58 @@ +# ADR Creation Process + +1. Copy the `adr-template.md` file. Use the following filename pattern: `adr-next_number-title.md` +2. Create a draft Pull Request if you want to get an early feedback. +3. Make sure the context and a solution is clear and well documented. +4. Add an entry to a list in the [README](README.md) file. +5. Create a Pull Request to propose a new ADR. + +## What is an ADR? + +An ADR is a document to document an implementation and design that may or may not have been discussed in an RFC. While an RFC is meant to replace synchoronus communication in a distributed environment, an ADR is meant to document an already made decision. An ADR wont come with much of a communication overhead because the discussion was recorded in an RFC or a synchronous discussion. If the consensus came from a synchoronus discussion then a short excerpt should be added to the ADR to explain the goals. + +## ADR life cycle + +ADR creation is an **iterative** process. Instead of having a high amount of communication overhead, an ADR is used when there is already a decision made and implementation details need to be added. The ADR should document what the collective consensus for the specific issue is and how to solve it. + +1. Every ADR should start with either an RFC or discussion where consensus has been met. + +2. Once consensus is met, a GitHub Pull Request (PR) is created with a new document based on the `adr-template.md`. + +3. If a _proposed_ ADR is merged, then it should clearly document outstanding issues either in ADR document notes or in a GitHub Issue. + +4. The PR SHOULD always be merged. In the case of a faulty ADR, we still prefer to merge it with a _rejected_ status. The only time the ADR SHOULD NOT be merged is if the author abandons it. + +5. Merged ADRs SHOULD NOT be pruned. + +### ADR status + +Status has two components: + +```text +{CONSENSUS STATUS} {IMPLEMENTATION STATUS} +``` + +IMPLEMENTATION STATUS is either `Implemented` or `Not Implemented`. + +#### Consensus Status + +```text +DRAFT -> PROPOSED -> LAST CALL yyyy-mm-dd -> ACCEPTED | REJECTED -> SUPERSEDED by ADR-xxx + \ | + \ | + v v + ABANDONED +``` + +* `DRAFT`: [optional] an ADR which is work in progress, not being ready for a general review. This is to present an early work and get an early feedback in a Draft Pull Request form. +* `PROPOSED`: an ADR covering a full solution architecture and still in the review - project stakeholders haven't reached an agreed yet. +* `LAST CALL `: [optional] clear notify that we are close to accept updates. Changing a status to `LAST CALL` means that social consensus (of Cosmos SDK maintainers) has been reached and we still want to give it a time to let the community react or analyze. +* `ACCEPTED`: ADR which will represent a currently implemented or to be implemented architecture design. +* `REJECTED`: ADR can go from PROPOSED or ACCEPTED to rejected if the consensus among project stakeholders will decide so. +* `SUPERSEEDED by ADR-xxx`: ADR which has been superseded by a new ADR. +* `ABANDONED`: the ADR is no longer pursued by the original authors. + +## Language used in ADR + +* The context/background should be written in the present tense. +* Avoid using a first, personal form. diff --git a/docs/integrate/architecture/README.md b/docs/integrate/architecture/README.md new file mode 100644 index 000000000..ce1ee432d --- /dev/null +++ b/docs/integrate/architecture/README.md @@ -0,0 +1,94 @@ +--- +sidebar_position: 1 +--- + +# Architecture Decision Records (ADR) + +This is a location to record all high-level architecture decisions in the Cosmos-SDK. + +An Architectural Decision (**AD**) is a software design choice that addresses a functional or non-functional requirement that is architecturally significant. +An Architecturally Significant Requirement (**ASR**) is a requirement that has a measurable effect on a software system’s architecture and quality. +An Architectural Decision Record (**ADR**) captures a single AD, such as often done when writing personal notes or meeting minutes; the collection of ADRs created and maintained in a project constitute its decision log. All these are within the topic of Architectural Knowledge Management (AKM). + +You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). + +## Rationale + +ADRs are intended to be the primary mechanism for proposing new feature designs and new processes, for collecting community input on an issue, and for documenting the design decisions. +An ADR should provide: + +* Context on the relevant goals and the current state +* Proposed changes to achieve the goals +* Summary of pros and cons +* References +* Changelog + +Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and +justification for a change in architecture, or for the architecture of something +new. The spec is much more compressed and streamlined summary of everything as +it stands today. + +If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match. + +## Creating new ADR + +Read about the [PROCESS](PROCESS.md). + +### Use RFC 2119 Keywords + +When writing ADRs, follow the same best practices for writing RFCs. When writing RFCs, key words are used to signify the requirements in the specification. These words are often capitalized: "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL. They are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119). + +## ADR Table of Contents + +### Accepted + +* [ADR 002: SDK Documentation Structure](adr-002-docs-structure.md) +* [ADR 004: Split Denomination Keys](adr-004-split-denomination-keys.md) +* [ADR 006: Secret Store Replacement](adr-006-secret-store-replacement.md) +* [ADR 009: Evidence Module](adr-009-evidence-module.md) +* [ADR 010: Modular AnteHandler](adr-010-modular-antehandler.md) +* [ADR 019: Protocol Buffer State Encoding](adr-019-protobuf-state-encoding.md) +* [ADR 020: Protocol Buffer Transaction Encoding](adr-020-protobuf-transaction-encoding.md) +* [ADR 021: Protocol Buffer Query Encoding](adr-021-protobuf-query-encoding.md) +* [ADR 023: Protocol Buffer Naming and Versioning](adr-023-protobuf-naming.md) +* [ADR 029: Fee Grant Module](adr-029-fee-grant-module.md) +* [ADR 030: Message Authorization Module](adr-030-authz-module.md) +* [ADR 031: Protobuf Msg Services](adr-031-msg-service.md) +* [ADR 055: ORM](adr-055-orm.md) +* [ADR 058: Auto-Generated CLI](adr-058-auto-generated-cli.md) +* [ADR 060: ABCI 1.0 (Phase I)](adr-060-abci-1.0.md) +* [ADR 061: Liquid Staking](adr-061-liquid-staking.md) + +### Proposed + +* [ADR 003: Dynamic Capability Store](adr-003-dynamic-capability-store.md) +* [ADR 011: Generalize Genesis Accounts](adr-011-generalize-genesis-accounts.md) +* [ADR 012: State Accessors](adr-012-state-accessors.md) +* [ADR 013: Metrics](adr-013-metrics.md) +* [ADR 016: Validator Consensus Key Rotation](adr-016-validator-consensus-key-rotation.md) +* [ADR 017: Historical Header Module](adr-017-historical-header-module.md) +* [ADR 018: Extendable Voting Periods](adr-018-extendable-voting-period.md) +* [ADR 022: Custom baseapp panic handling](adr-022-custom-panic-handling.md) +* [ADR 024: Coin Metadata](adr-024-coin-metadata.md) +* [ADR 027: Deterministic Protobuf Serialization](adr-027-deterministic-protobuf-serialization.md) +* [ADR 028: Public Key Addresses](adr-028-public-key-addresses.md) +* [ADR 032: Typed Events](adr-032-typed-events.md) +* [ADR 033: Inter-module RPC](adr-033-protobuf-inter-module-comm.md) +* [ADR 035: Rosetta API Support](adr-035-rosetta-api-support.md) +* [ADR 037: Governance Split Votes](adr-037-gov-split-vote.md) +* [ADR 038: State Listening](adr-038-state-listening.md) +* [ADR 039: Epoched Staking](adr-039-epoched-staking.md) +* [ADR 040: Storage and SMT State Commitments](adr-040-storage-and-smt-state-commitments.md) +* [ADR 046: Module Params](adr-046-module-params.md) +* [ADR 054: Semver Compatible SDK Modules](adr-054-semver-compatible-modules.md) +* [ADR 057: App Wiring](adr-057-app-wiring.md) +* [ADR 059: Test Scopes](adr-059-test-scopes.md) +* [ADR 062: Collections State Layer](adr-062-collections-state-layer.md) +* [ADR 063: Core Module API](adr-063-core-module-api.md) +* [ADR 065: Store V2](adr-065-store-v2.md) + +### Draft + +* [ADR 044: Guidelines for Updating Protobuf Definitions](adr-044-protobuf-updates-guidelines.md) +* [ADR 047: Extend Upgrade Plan](adr-047-extend-upgrade-plan.md) +* [ADR 053: Go Module Refactoring](adr-053-go-module-refactoring.md) diff --git a/docs/integrate/architecture/_category_.json b/docs/integrate/architecture/_category_.json new file mode 100644 index 000000000..87ceb9374 --- /dev/null +++ b/docs/integrate/architecture/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "ADRs", + "position": 11, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/architecture/adr-002-docs-structure.md b/docs/integrate/architecture/adr-002-docs-structure.md new file mode 100644 index 000000000..5819151fc --- /dev/null +++ b/docs/integrate/architecture/adr-002-docs-structure.md @@ -0,0 +1,86 @@ +# ADR 002: SDK Documentation Structure + +## Context + +There is a need for a scalable structure of the Cosmos SDK documentation. Current documentation includes a lot of non-related Cosmos SDK material, is difficult to maintain and hard to follow as a user. + +Ideally, we would have: + +* All docs related to dev frameworks or tools live in their respective github repos (sdk repo would contain sdk docs, hub repo would contain hub docs, lotion repo would contain lotion docs, etc.) +* All other docs (faqs, whitepaper, high-level material about Cosmos) would live on the website. + +## Decision + +Re-structure the `/docs` folder of the Cosmos SDK github repo as follows: + +```text +docs/ +├── README +├── intro/ +├── concepts/ +│ ├── baseapp +│ ├── types +│ ├── store +│ ├── server +│ ├── modules/ +│ │ ├── keeper +│ │ ├── handler +│ │ ├── cli +│ ├── gas +│ └── commands +├── clients/ +│ ├── lite/ +│ ├── service-providers +├── modules/ +├── spec/ +├── translations/ +└── architecture/ +``` + +The files in each sub-folders do not matter and will likely change. What matters is the sectioning: + +* `README`: Landing page of the docs. +* `intro`: Introductory material. Goal is to have a short explainer of the Cosmos SDK and then channel people to the resource they need. The [Cosmos SDK tutorial](https://github.com/cosmos/sdk-application-tutorial/) will be highlighted, as well as the `godocs`. +* `concepts`: Contains high-level explanations of the abstractions of the Cosmos SDK. It does not contain specific code implementation and does not need to be updated often. **It is not an API specification of the interfaces**. API spec is the `godoc`. +* `clients`: Contains specs and info about the various Cosmos SDK clients. +* `spec`: Contains specs of modules, and others. +* `modules`: Contains links to `godocs` and the spec of the modules. +* `architecture`: Contains architecture-related docs like the present one. +* `translations`: Contains different translations of the documentation. + +Website docs sidebar will only include the following sections: + +* `README` +* `intro` +* `concepts` +* `clients` + +`architecture` need not be displayed on the website. + +## Status + +Accepted + +## Consequences + +### Positive + +* Much clearer organisation of the Cosmos SDK docs. +* The `/docs` folder now only contains Cosmos SDK and gaia related material. Later, it will only contain Cosmos SDK related material. +* Developers only have to update `/docs` folder when they open a PR (and not `/examples` for example). +* Easier for developers to find what they need to update in the docs thanks to reworked architecture. +* Cleaner vuepress build for website docs. +* Will help build an executable doc (cf https://github.com/cosmos/cosmos-sdk/issues/2611) + +### Neutral + +* We need to move a bunch of deprecated stuff to `/_attic` folder. +* We need to integrate content in `docs/sdk/docs/core` in `concepts`. +* We need to move all the content that currently lives in `docs` and does not fit in new structure (like `lotion`, intro material, whitepaper) to the website repository. +* Update `DOCS_README.md` + +## References + +* https://github.com/cosmos/cosmos-sdk/issues/1460 +* https://github.com/cosmos/cosmos-sdk/pull/2695 +* https://github.com/cosmos/cosmos-sdk/issues/2611 diff --git a/docs/integrate/architecture/adr-003-dynamic-capability-store.md b/docs/integrate/architecture/adr-003-dynamic-capability-store.md new file mode 100644 index 000000000..f9ddd3643 --- /dev/null +++ b/docs/integrate/architecture/adr-003-dynamic-capability-store.md @@ -0,0 +1,344 @@ +# ADR 3: Dynamic Capability Store + +## Changelog + +* 12 December 2019: Initial version +* 02 April 2020: Memory Store Revisions + +## Context + +Full implementation of the [IBC specification](https://github.com/cosmos/ibc) requires the ability to create and authenticate object-capability keys at runtime (i.e., during transaction execution), +as described in [ICS 5](https://github.com/cosmos/ibc/tree/master/spec/core/ics-005-port-allocation#technical-specification). In the IBC specification, capability keys are created for each newly initialised +port & channel, and are used to authenticate future usage of the port or channel. Since channels and potentially ports can be initialised during transaction execution, the state machine must be able to create +object-capability keys at this time. + +At present, the Cosmos SDK does not have the ability to do this. Object-capability keys are currently pointers (memory addresses) of `StoreKey` structs created at application initialisation in `app.go` ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L132)) +and passed to Keepers as fixed arguments ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L160)). Keepers cannot create or store capability keys during transaction execution — although they could call `NewKVStoreKey` and take the memory address +of the returned struct, storing this in the Merklised store would result in a consensus fault, since the memory address will be different on each machine (this is intentional — were this not the case, the keys would be predictable and couldn't serve as object capabilities). + +Keepers need a way to keep a private map of store keys which can be altered during transaction execution, along with a suitable mechanism for regenerating the unique memory addresses (capability keys) in this map whenever the application is started or restarted, along with a mechanism to revert capability creation on tx failure. +This ADR proposes such an interface & mechanism. + +## Decision + +The Cosmos SDK will include a new `CapabilityKeeper` abstraction, which is responsible for provisioning, +tracking, and authenticating capabilities at runtime. During application initialisation in `app.go`, +the `CapabilityKeeper` will be hooked up to modules through unique function references +(by calling `ScopeToModule`, defined below) so that it can identify the calling module when later +invoked. + +When the initial state is loaded from disk, the `CapabilityKeeper`'s `Initialise` function will create +new capability keys for all previously allocated capability identifiers (allocated during execution of +past transactions and assigned to particular modes), and keep them in a memory-only store while the +chain is running. + +The `CapabilityKeeper` will include a persistent `KVStore`, a `MemoryStore`, and an in-memory map. +The persistent `KVStore` tracks which capability is owned by which modules. +The `MemoryStore` stores a forward mapping that map from module name, capability tuples to capability names and +a reverse mapping that map from module name, capability name to the capability index. +Since we cannot marshal the capability into a `KVStore` and unmarshal without changing the memory location of the capability, +the reverse mapping in the KVStore will simply map to an index. This index can then be used as a key in the ephemeral +go-map to retrieve the capability at the original memory location. + +The `CapabilityKeeper` will define the following types & functions: + +The `Capability` is similar to `StoreKey`, but has a globally unique `Index()` instead of +a name. A `String()` method is provided for debugging. + +A `Capability` is simply a struct, the address of which is taken for the actual capability. + +```go +type Capability struct { + index uint64 +} +``` + +A `CapabilityKeeper` contains a persistent store key, memory store key, and mapping of allocated module names. + +```go +type CapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleNames map[string]interface{} + sealed bool +} +``` + +The `CapabilityKeeper` provides the ability to create *scoped* sub-keepers which are tied to a +particular module name. These `ScopedCapabilityKeeper`s must be created at application initialisation +and passed to modules, which can then use them to claim capabilities they receive and retrieve +capabilities which they own by name, in addition to creating new capabilities & authenticating capabilities +passed by other modules. + +```go +type ScopedCapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleName string +} +``` + +`ScopeToModule` is used to create a scoped sub-keeper with a particular name, which must be unique. +It MUST be called before `InitialiseAndSeal`. + +```go +func (ck CapabilityKeeper) ScopeToModule(moduleName string) ScopedCapabilityKeeper { + if k.sealed { + panic("cannot scope to module via a sealed capability keeper") + } + + if _, ok := k.scopedModules[moduleName]; ok { + panic(fmt.Sprintf("cannot create multiple scoped keepers for the same module name: %s", moduleName)) + } + + k.scopedModules[moduleName] = struct{}{} + + return ScopedKeeper{ + cdc: k.cdc, + storeKey: k.storeKey, + memKey: k.memKey, + capMap: k.capMap, + module: moduleName, + } +} +``` + +`InitialiseAndSeal` MUST be called exactly once, after loading the initial state and creating all +necessary `ScopedCapabilityKeeper`s, in order to populate the memory store with newly-created +capability keys in accordance with the keys previously claimed by particular modules and prevent the +creation of any new `ScopedCapabilityKeeper`s. + +```go +func (ck CapabilityKeeper) InitialiseAndSeal(ctx Context) { + if ck.sealed { + panic("capability keeper is sealed") + } + + persistentStore := ctx.KVStore(ck.persistentKey) + map := ctx.KVStore(ck.memKey) + + // initialise memory store for all names in persistent store + for index, value := range persistentStore.Iter() { + capability = &CapabilityKey{index: index} + + for moduleAndCapability := range value { + moduleName, capabilityName := moduleAndCapability.Split("/") + memStore.Set(moduleName + "/fwd/" + capability, capabilityName) + memStore.Set(moduleName + "/rev/" + capabilityName, index) + + ck.capMap[index] = capability + } + } + + ck.sealed = true +} +``` + +`NewCapability` can be called by any module to create a new unique, unforgeable object-capability +reference. The newly created capability is automatically persisted; the calling module need not +call `ClaimCapability`. + +```go +func (sck ScopedCapabilityKeeper) NewCapability(ctx Context, name string) (Capability, error) { + // check name not taken in memory store + if capStore.Get("rev/" + name) != nil { + return nil, errors.New("name already taken") + } + + // fetch the current index + index := persistentStore.Get("index") + + // create a new capability + capability := &CapabilityKey{index: index} + + // set persistent store + persistentStore.Set(index, Set.singleton(sck.moduleName + "/" + name)) + + // update the index + index++ + persistentStore.Set("index", index) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to index + memStore.Set(sck.moduleName + "/rev/" + name, index) + + // set the in-memory mapping from index to capability pointer + capMap[index] = capability + + // return the newly created capability + return capability +} +``` + +`AuthenticateCapability` can be called by any module to check that a capability +does in fact correspond to a particular name (the name can be untrusted user input) +with which the calling module previously associated it. + +```go +func (sck ScopedCapabilityKeeper) AuthenticateCapability(name string, capability Capability) bool { + // return whether forward mapping in memory store matches name + return memStore.Get(sck.moduleName + "/fwd/" + capability) === name +} +``` + +`ClaimCapability` allows a module to claim a capability key which it has received from another module +so that future `GetCapability` calls will succeed. + +`ClaimCapability` MUST be called if a module which receives a capability wishes to access it by name +in the future. Capabilities are multi-owner, so if multiple modules have a single `Capability` reference, +they will all own it. + +```go +func (sck ScopedCapabilityKeeper) ClaimCapability(ctx Context, capability Capability, name string) error { + persistentStore := ctx.KVStore(sck.persistentKey) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to capability + memStore.Set(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.add(sck.moduleName + "/" + name) + persistentStore.Set(capability.Index(), owners) +} +``` + +`GetCapability` allows a module to fetch a capability which it has previously claimed by name. +The module is not allowed to retrieve capabilities which it does not own. + +```go +func (sck ScopedCapabilityKeeper) GetCapability(ctx Context, name string) (Capability, error) { + // fetch the index of capability using reverse mapping in memstore + index := memStore.Get(sck.moduleName + "/rev/" + name) + + // fetch capability from go-map using index + capability := capMap[index] + + // return the capability + return capability +} +``` + +`ReleaseCapability` allows a module to release a capability which it had previously claimed. If no +more owners exist, the capability will be deleted globally. + +```go +func (sck ScopedCapabilityKeeper) ReleaseCapability(ctx Context, capability Capability) err { + persistentStore := ctx.KVStore(sck.persistentKey) + + name := capStore.Get(sck.moduleName + "/fwd/" + capability) + if name == nil { + return error("capability not owned by module") + } + + // delete forward mapping in memory store + memoryStore.Delete(sck.moduleName + "/fwd/" + capability, name) + + // delete reverse mapping in memory store + memoryStore.Delete(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.remove(sck.moduleName + "/" + name) + if owners.size() > 0 { + // there are still other owners, keep the capability around + persistentStore.Set(capability.Index(), owners) + } else { + // no more owners, delete the capability + persistentStore.Delete(capability.Index()) + delete(capMap[capability.Index()]) + } +} +``` + +### Usage patterns + +#### Initialisation + +Any modules which use dynamic capabilities must be provided a `ScopedCapabilityKeeper` in `app.go`: + +```go +ck := NewCapabilityKeeper(persistentKey, memoryKey) +mod1Keeper := NewMod1Keeper(ck.ScopeToModule("mod1"), ....) +mod2Keeper := NewMod2Keeper(ck.ScopeToModule("mod2"), ....) + +// other initialisation logic ... + +// load initial state... + +ck.InitialiseAndSeal(initialContext) +``` + +#### Creating, passing, claiming and using capabilities + +Consider the case where `mod1` wants to create a capability, associate it with a resource (e.g. an IBC channel) by name, then pass it to `mod2` which will use it later: + +Module 1 would have the following code: + +```go +capability := scopedCapabilityKeeper.NewCapability(ctx, "resourceABC") +mod2Keeper.SomeFunction(ctx, capability, args...) +``` + +`SomeFunction`, running in module 2, could then claim the capability: + +```go +func (k Mod2Keeper) SomeFunction(ctx Context, capability Capability) { + k.sck.ClaimCapability(ctx, capability, "resourceABC") + // other logic... +} +``` + +Later on, module 2 can retrieve that capability by name and pass it to module 1, which will authenticate it against the resource: + +```go +func (k Mod2Keeper) SomeOtherFunction(ctx Context, name string) { + capability := k.sck.GetCapability(ctx, name) + mod1.UseResource(ctx, capability, "resourceABC") +} +``` + +Module 1 will then check that this capability key is authenticated to use the resource before allowing module 2 to use it: + +```go +func (k Mod1Keeper) UseResource(ctx Context, capability Capability, resource string) { + if !k.sck.AuthenticateCapability(name, capability) { + return errors.New("unauthenticated") + } + // do something with the resource +} +``` + +If module 2 passed the capability key to module 3, module 3 could then claim it and call module 1 just like module 2 did +(in which case module 1, module 2, and module 3 would all be able to use this capability). + +## Status + +Proposed. + +## Consequences + +### Positive + +* Dynamic capability support. +* Allows CapabilityKeeper to return same capability pointer from go-map while reverting any writes to the persistent `KVStore` and in-memory `MemoryStore` on tx failure. + +### Negative + +* Requires an additional keeper. +* Some overlap with existing `StoreKey` system (in the future they could be combined, since this is a superset functionality-wise). +* Requires an extra level of indirection in the reverse mapping, since MemoryStore must map to index which must then be used as key in a go map to retrieve the actual capability + +### Neutral + +(none known) + +## References + +* [Original discussion](https://github.com/cosmos/cosmos-sdk/pull/5230#discussion_r343978513) diff --git a/docs/integrate/architecture/adr-004-split-denomination-keys.md b/docs/integrate/architecture/adr-004-split-denomination-keys.md new file mode 100644 index 000000000..8abf25fda --- /dev/null +++ b/docs/integrate/architecture/adr-004-split-denomination-keys.md @@ -0,0 +1,120 @@ +# ADR 004: Split Denomination Keys + +## Changelog + +* 2020-01-08: Initial version +* 2020-01-09: Alterations to handle vesting accounts +* 2020-01-14: Updates from review feedback +* 2020-01-30: Updates from implementation + +### Glossary + +* denom / denomination key -- unique token identifier. + +## Context + +With permissionless IBC, anyone will be able to send arbitrary denominations to any other account. Currently, all non-zero balances are stored along with the account in an `sdk.Coins` struct, which creates a potential denial-of-service concern, as too many denominations will become expensive to load & store each time the account is modified. See issues [5467](https://github.com/cosmos/cosmos-sdk/issues/5467) and [4982](https://github.com/cosmos/cosmos-sdk/issues/4982) for additional context. + +Simply rejecting incoming deposits after a denomination count limit doesn't work, since it opens up a griefing vector: someone could send a user lots of nonsensical coins over IBC, and then prevent the user from receiving real denominations (such as staking rewards). + +## Decision + +Balances shall be stored per-account & per-denomination under a denomination- and account-unique key, thus enabling O(1) read & write access to the balance of a particular account in a particular denomination. + +### Account interface (x/auth) + +`GetCoins()` and `SetCoins()` will be removed from the account interface, since coin balances will +now be stored in & managed by the bank module. + +The vesting account interface will replace `SpendableCoins` in favor of `LockedCoins` which does +not require the account balance anymore. In addition, `TrackDelegation()` will now accept the +account balance of all tokens denominated in the vesting balance instead of loading the entire +account balance. + +Vesting accounts will continue to store original vesting, delegated free, and delegated +vesting coins (which is safe since these cannot contain arbitrary denominations). + +### Bank keeper (x/bank) + +The following APIs will be added to the `x/bank` keeper: + +* `GetAllBalances(ctx Context, addr AccAddress) Coins` +* `GetBalance(ctx Context, addr AccAddress, denom string) Coin` +* `SetBalance(ctx Context, addr AccAddress, coin Coin)` +* `LockedCoins(ctx Context, addr AccAddress) Coins` +* `SpendableCoins(ctx Context, addr AccAddress) Coins` + +Additional APIs may be added to facilitate iteration and auxiliary functionality not essential to +core functionality or persistence. + +Balances will be stored first by the address, then by the denomination (the reverse is also possible, +but retrieval of all balances for a single account is presumed to be more frequent): + +```go +var BalancesPrefix = []byte("balances") + +func (k Keeper) SetBalance(ctx Context, addr AccAddress, balance Coin) error { + if !balance.IsValid() { + return err + } + + store := ctx.KVStore(k.storeKey) + balancesStore := prefix.NewStore(store, BalancesPrefix) + accountStore := prefix.NewStore(balancesStore, addr.Bytes()) + + bz := Marshal(balance) + accountStore.Set([]byte(balance.Denom), bz) + + return nil +} +``` + +This will result in the balances being indexed by the byte representation of +`balances/{address}/{denom}`. + +`DelegateCoins()` and `UndelegateCoins()` will be altered to only load each individual +account balance by denomination found in the (un)delegation amount. As a result, +any mutations to the account balance by will made by denomination. + +`SubtractCoins()` and `AddCoins()` will be altered to read & write the balances +directly instead of calling `GetCoins()` / `SetCoins()` (which no longer exist). + +`trackDelegation()` and `trackUndelegation()` will be altered to no longer update +account balances. + +External APIs will need to scan all balances under an account to retain backwards-compatibility. It +is advised that these APIs use `GetBalance` and `SetBalance` instead of `GetAllBalances` when +possible as to not load the entire account balance. + +### Supply module + +The supply module, in order to implement the total supply invariant, will now need +to scan all accounts & call `GetAllBalances` using the `x/bank` Keeper, then sum +the balances and check that they match the expected total supply. + +## Status + +Accepted. + +## Consequences + +### Positive + +* O(1) reads & writes of balances (with respect to the number of denominations for +which an account has non-zero balances). Note, this does not relate to the actual +I/O cost, rather the total number of direct reads needed. + +### Negative + +* Slightly less efficient reads/writes when reading & writing all balances of a +single account in a transaction. + +### Neutral + +None in particular. + +## References + +* Ref: https://github.com/cosmos/cosmos-sdk/issues/4982 +* Ref: https://github.com/cosmos/cosmos-sdk/issues/5467 +* Ref: https://github.com/cosmos/cosmos-sdk/issues/5492 diff --git a/docs/integrate/architecture/adr-006-secret-store-replacement.md b/docs/integrate/architecture/adr-006-secret-store-replacement.md new file mode 100644 index 000000000..fe2e25467 --- /dev/null +++ b/docs/integrate/architecture/adr-006-secret-store-replacement.md @@ -0,0 +1,54 @@ +# ADR 006: Secret Store Replacement + +## Changelog + +* July 29th, 2019: Initial draft +* September 11th, 2019: Work has started +* November 4th: Cosmos SDK changes merged in +* November 18th: Gaia changes merged in + +## Context + +Currently, a Cosmos SDK application's CLI directory stores key material and metadata in a plain text database in the user’s home directory. Key material is encrypted by a passphrase, protected by bcrypt hashing algorithm. Metadata (e.g. addresses, public keys, key storage details) is available in plain text. + +This is not desirable for a number of reasons. Perhaps the biggest reason is insufficient security protection of key material and metadata. Leaking the plain text allows an attacker to surveil what keys a given computer controls via a number of techniques, like compromised dependencies without any privilege execution. This could be followed by a more targeted attack on a particular user/computer. + +All modern desktop computers OS (Ubuntu, Debian, MacOS, Windows) provide a built-in secret store that is designed to allow applications to store information that is isolated from all other applications and requires passphrase entry to access the data. + +We are seeking solution that provides a common abstraction layer to the many different backends and reasonable fallback for minimal platforms that don’t provide a native secret store. + +## Decision + +We recommend replacing the current Keybase backend based on LevelDB with [Keyring](https://github.com/99designs/keyring) by 99 designs. This application is designed to provide a common abstraction and uniform interface between many secret stores and is used by AWS Vault application by 99-designs application. + +This appears to fulfill the requirement of protecting both key material and metadata from rouge software on a user’s machine. + +## Status + +Accepted + +## Consequences + +### Positive + +Increased safety for users. + +### Negative + +Users must manually migrate. + +Testing against all supported backends is difficult. + +Running tests locally on a Mac require numerous repetitive password entries. + +### Neutral + +{neutral consequences} + +## References + +* #4754 Switch secret store to the keyring secret store (original PR by @poldsam) [__CLOSED__] +* #5029 Add support for github.com/99designs/keyring-backed keybases [__MERGED__] +* #5097 Add keys migrate command [__MERGED__] +* #5180 Drop on-disk keybase in favor of keyring [_PENDING_REVIEW_] +* cosmos/gaia#164 Drop on-disk keybase in favor of keyring (gaia's changes) [_PENDING_REVIEW_] diff --git a/docs/integrate/architecture/adr-007-specialization-groups.md b/docs/integrate/architecture/adr-007-specialization-groups.md new file mode 100644 index 000000000..9a351dd1a --- /dev/null +++ b/docs/integrate/architecture/adr-007-specialization-groups.md @@ -0,0 +1,177 @@ +# ADR 007: Specialization Groups + +## Changelog + +* 2019 Jul 31: Initial Draft + +## Context + +This idea was first conceived of in order to fulfill the use case of the +creation of a decentralized Computer Emergency Response Team (dCERT), whose +members would be elected by a governing community and would fulfill the role of +coordinating the community under emergency situations. This thinking +can be further abstracted into the conception of "blockchain specialization +groups". + +The creation of these groups are the beginning of specialization capabilities +within a wider blockchain community which could be used to enable a certain +level of delegated responsibilities. Examples of specialization which could be +beneficial to a blockchain community include: code auditing, emergency response, +code development etc. This type of community organization paves the way for +individual stakeholders to delegate votes by issue type, if in the future +governance proposals include a field for issue type. + +## Decision + +A specialization group can be broadly broken down into the following functions +(herein containing examples): + +* Membership Admittance +* Membership Acceptance +* Membership Revocation + * (probably) Without Penalty + * member steps down (self-Revocation) + * replaced by new member from governance + * (probably) With Penalty + * due to breach of soft-agreement (determined through governance) + * due to breach of hard-agreement (determined by code) +* Execution of Duties + * Special transactions which only execute for members of a specialization + group (for example, dCERT members voting to turn off transaction routes in + an emergency scenario) +* Compensation + * Group compensation (further distribution decided by the specialization group) + * Individual compensation for all constituents of a group from the + greater community + +Membership admittance to a specialization group could take place over a wide +variety of mechanisms. The most obvious example is through a general vote among +the entire community, however in certain systems a community may want to allow +the members already in a specialization group to internally elect new members, +or maybe the community may assign a permission to a particular specialization +group to appoint members to other 3rd party groups. The sky is really the limit +as to how membership admittance can be structured. We attempt to capture +some of these possiblities in a common interface dubbed the `Electionator`. For +its initial implementation as a part of this ADR we recommend that the general +election abstraction (`Electionator`) is provided as well as a basic +implementation of that abstraction which allows for a continuous election of +members of a specialization group. + +``` golang +// The Electionator abstraction covers the concept space for +// a wide variety of election kinds. +type Electionator interface { + + // is the election object accepting votes. + Active() bool + + // functionality to execute for when a vote is cast in this election, here + // the vote field is anticipated to be marshalled into a vote type used + // by an election. + // + // NOTE There are no explicit ids here. Just votes which pertain specifically + // to one electionator. Anyone can create and send a vote to the electionator item + // which will presumably attempt to marshal those bytes into a particular struct + // and apply the vote information in some arbitrary way. There can be multiple + // Electionators within the Cosmos-Hub for multiple specialization groups, votes + // would need to be routed to the Electionator upstream of here. + Vote(addr sdk.AccAddress, vote []byte) + + // here lies all functionality to authenticate and execute changes for + // when a member accepts being elected + AcceptElection(sdk.AccAddress) + + // Register a revoker object + RegisterRevoker(Revoker) + + // No more revokers may be registered after this function is called + SealRevokers() + + // register hooks to call when an election actions occur + RegisterHooks(ElectionatorHooks) + + // query for the current winner(s) of this election based on arbitrary + // election ruleset + QueryElected() []sdk.AccAddress + + // query metadata for an address in the election this + // could include for example position that an address + // is being elected for within a group + // + // this metadata may be directly related to + // voting information and/or privileges enabled + // to members within a group. + QueryMetadata(sdk.AccAddress) []byte +} + +// ElectionatorHooks, once registered with an Electionator, +// trigger execution of relevant interface functions when +// Electionator events occur. +type ElectionatorHooks interface { + AfterVoteCast(addr sdk.AccAddress, vote []byte) + AfterMemberAccepted(addr sdk.AccAddress) + AfterMemberRevoked(addr sdk.AccAddress, cause []byte) +} + +// Revoker defines the function required for a membership revocation rule-set +// used by a specialization group. This could be used to create self revoking, +// and evidence based revoking, etc. Revokers types may be created and +// reused for different election types. +// +// When revoking the "cause" bytes may be arbitrarily marshalled into evidence, +// memos, etc. +type Revoker interface { + RevokeName() string // identifier for this revoker type + RevokeMember(addr sdk.AccAddress, cause []byte) error +} +``` + +Certain level of commonality likely exists between the existing code within +`x/governance` and required functionality of elections. This common +functionality should be abstracted during implementation. Similarly for each +vote implementation client CLI/REST functionality should be abstracted +to be reused for multiple elections. + +The specialization group abstraction firstly extends the `Electionator` +but also further defines traits of the group. + +``` golang +type SpecializationGroup interface { + Electionator + GetName() string + GetDescription() string + + // general soft contract the group is expected + // to fulfill with the greater community + GetContract() string + + // messages which can be executed by the members of the group + Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result + + // logic to be executed at endblock, this may for instance + // include payment of a stipend to the group members + // for participation in the security group. + EndBlocker(ctx sdk.Context) +} +``` + +## Status + +> Proposed + +## Consequences + +### Positive + +* increases specialization capabilities of a blockchain +* improve abstractions in `x/gov/` such that they can be used with specialization groups + +### Negative + +* could be used to increase centralization within a community + +### Neutral + +## References + +* [dCERT ADR](adr-008-dCERT-group.md) diff --git a/docs/integrate/architecture/adr-008-dCERT-group.md b/docs/integrate/architecture/adr-008-dCERT-group.md new file mode 100644 index 000000000..2097bf1b9 --- /dev/null +++ b/docs/integrate/architecture/adr-008-dCERT-group.md @@ -0,0 +1,171 @@ +# ADR 008: Decentralized Computer Emergency Response Team (dCERT) Group + +## Changelog + +* 2019 Jul 31: Initial Draft + +## Context + +In order to reduce the number of parties involved with handling sensitive +information in an emergency scenario, we propose the creation of a +specialization group named The Decentralized Computer Emergency Response Team +(dCERT). Initially this group's role is intended to serve as coordinators +between various actors within a blockchain community such as validators, +bug-hunters, and developers. During a time of crisis, the dCERT group would +aggregate and relay input from a variety of stakeholders to the developers who +are actively devising a patch to the software, this way sensitive information +does not need to be publicly disclosed while some input from the community can +still be gained. + +Additionally, a special privilege is proposed for the dCERT group: the capacity +to "circuit-break" (aka. temporarily disable) a particular message path. Note +that this privilege should be enabled/disabled globally with a governance +parameter such that this privilege could start disabled and later be enabled +through a parameter change proposal, once a dCERT group has been established. + +In the future it is foreseeable that the community may wish to expand the roles +of dCERT with further responsibilities such as the capacity to "pre-approve" a +security update on behalf of the community prior to a full community +wide vote whereby the sensitive information would be revealed prior to a +vulnerability being patched on the live network. + +## Decision + +The dCERT group is proposed to include an implementation of a `SpecializationGroup` +as defined in [ADR 007](adr-007-specialization-groups.md). This will include the +implementation of: + +* continuous voting +* slashing due to breach of soft contract +* revoking a member due to breach of soft contract +* emergency disband of the entire dCERT group (ex. for colluding maliciously) +* compensation stipend from the community pool or other means decided by + governance + +This system necessitates the following new parameters: + +* blockly stipend allowance per dCERT member +* maximum number of dCERT members +* required staked slashable tokens for each dCERT member +* quorum for suspending a particular member +* proposal wager for disbanding the dCERT group +* stabilization period for dCERT member transition +* circuit break dCERT privileges enabled + +These parameters are expected to be implemented through the param keeper such +that governance may change them at any given point. + +### Continuous Voting Electionator + +An `Electionator` object is to be implemented as continuous voting and with the +following specifications: + +* All delegation addresses may submit votes at any point which updates their + preferred representation on the dCERT group. +* Preferred representation may be arbitrarily split between addresses (ex. 50% + to John, 25% to Sally, 25% to Carol) +* In order for a new member to be added to the dCERT group they must + send a transaction accepting their admission at which point the validity of + their admission is to be confirmed. + * A sequence number is assigned when a member is added to dCERT group. + If a member leaves the dCERT group and then enters back, a new sequence number + is assigned. +* Addresses which control the greatest amount of preferred-representation are + eligible to join the dCERT group (up the _maximum number of dCERT members_). + If the dCERT group is already full and new member is admitted, the existing + dCERT member with the lowest amount of votes is kicked from the dCERT group. + * In the split situation where the dCERT group is full but a vying candidate + has the same amount of vote as an existing dCERT member, the existing + member should maintain its position. + * In the split situation where somebody must be kicked out but the two + addresses with the smallest number of votes have the same number of votes, + the address with the smallest sequence number maintains its position. +* A stabilization period can be optionally included to reduce the + "flip-flopping" of the dCERT membership tail members. If a stabilization + period is provided which is greater than 0, when members are kicked due to + insufficient support, a queue entry is created which documents which member is + to replace which other member. While this entry is in the queue, no new entries + to kick that same dCERT member can be made. When the entry matures at the + duration of the stabilization period, the new member is instantiated, and old + member kicked. + +### Staking/Slashing + +All members of the dCERT group must stake tokens _specifically_ to maintain +eligibility as a dCERT member. These tokens can be staked directly by the vying +dCERT member or out of the good will of a 3rd party (who shall gain no on-chain +benefits for doing so). This staking mechanism should use the existing global +unbonding time of tokens staked for network validator security. A dCERT member +can _only be_ a member if it has the required tokens staked under this +mechanism. If those tokens are unbonded then the dCERT member must be +automatically kicked from the group. + +Slashing of a particular dCERT member due to soft-contract breach should be +performed by governance on a per member basis based on the magnitude of the +breach. The process flow is anticipated to be that a dCERT member is suspended +by the dCERT group prior to being slashed by governance. + +Membership suspension by the dCERT group takes place through a voting procedure +by the dCERT group members. After this suspension has taken place, a governance +proposal to slash the dCERT member must be submitted, if the proposal is not +approved by the time the rescinding member has completed unbonding their +tokens, then the tokens are no longer staked and unable to be slashed. + +Additionally in the case of an emergency situation of a colluding and malicious +dCERT group, the community needs the capability to disband the entire dCERT +group and likely fully slash them. This could be achieved though a special new +proposal type (implemented as a general governance proposal) which would halt +the functionality of the dCERT group until the proposal was concluded. This +special proposal type would likely need to also have a fairly large wager which +could be slashed if the proposal creator was malicious. The reason a large +wager should be required is because as soon as the proposal is made, the +capability of the dCERT group to halt message routes is put on temporarily +suspended, meaning that a malicious actor who created such a proposal could +then potentially exploit a bug during this period of time, with no dCERT group +capable of shutting down the exploitable message routes. + +### dCERT membership transactions + +Active dCERT members + +* change of the description of the dCERT group +* circuit break a message route +* vote to suspend a dCERT member. + +Here circuit-breaking refers to the capability to disable a groups of messages, +This could for instance mean: "disable all staking-delegation messages", or +"disable all distribution messages". This could be accomplished by verifying +that the message route has not been "circuit-broken" at CheckTx time (in +`baseapp/baseapp.go`). + +"unbreaking" a circuit is anticipated only to occur during a hard fork upgrade +meaning that no capability to unbreak a message route on a live chain is +required. + +Note also, that if there was a problem with governance voting (for instance a +capability to vote many times) then governance would be broken and should be +halted with this mechanism, it would be then up to the validator set to +coordinate and hard-fork upgrade to a patched version of the software where +governance is re-enabled (and fixed). If the dCERT group abuses this privilege +they should all be severely slashed. + +## Status + +> Proposed + +## Consequences + +### Positive + +* Potential to reduces the number of parties to coordinate with during an emergency +* Reduction in possibility of disclosing sensitive information to malicious parties + +### Negative + +* Centralization risks + +### Neutral + +## References + + [Specialization Groups ADR](adr-007-specialization-groups.md) diff --git a/docs/integrate/architecture/adr-009-evidence-module.md b/docs/integrate/architecture/adr-009-evidence-module.md new file mode 100644 index 000000000..ded04a142 --- /dev/null +++ b/docs/integrate/architecture/adr-009-evidence-module.md @@ -0,0 +1,182 @@ +# ADR 009: Evidence Module + +## Changelog + +* 2019 July 31: Initial draft +* 2019 October 24: Initial implementation + +## Status + +Accepted + +## Context + +In order to support building highly secure, robust and interoperable blockchain +applications, it is vital for the Cosmos SDK to expose a mechanism in which arbitrary +evidence can be submitted, evaluated and verified resulting in some agreed upon +penalty for any misbehavior committed by a validator, such as equivocation (double-voting), +signing when unbonded, signing an incorrect state transition (in the future), etc. +Furthermore, such a mechanism is paramount for any +[IBC](https://github.com/cosmos/ics/blob/master/ibc/2_IBC_ARCHITECTURE.md) or +cross-chain validation protocol implementation in order to support the ability +for any misbehavior to be relayed back from a collateralized chain to a primary +chain so that the equivocating validator(s) can be slashed. + +## Decision + +We will implement an evidence module in the Cosmos SDK supporting the following +functionality: + +* Provide developers with the abstractions and interfaces necessary to define + custom evidence messages, message handlers, and methods to slash and penalize + accordingly for misbehavior. +* Support the ability to route evidence messages to handlers in any module to + determine the validity of submitted misbehavior. +* Support the ability, through governance, to modify slashing penalties of any + evidence type. +* Querier implementation to support querying params, evidence types, params, and + all submitted valid misbehavior. + +### Types + +First, we define the `Evidence` interface type. The `x/evidence` module may implement +its own types that can be used by many chains (e.g. `CounterFactualEvidence`). +In addition, other modules may implement their own `Evidence` types in a similar +manner in which governance is extensible. It is important to note any concrete +type implementing the `Evidence` interface may include arbitrary fields such as +an infraction time. We want the `Evidence` type to remain as flexible as possible. + +When submitting evidence to the `x/evidence` module, the concrete type must provide +the validator's consensus address, which should be known by the `x/slashing` +module (assuming the infraction is valid), the height at which the infraction +occurred and the validator's power at same height in which the infraction occurred. + +```go +type Evidence interface { + Route() string + Type() string + String() string + Hash() HexBytes + ValidateBasic() error + + // The consensus address of the malicious validator at time of infraction + GetConsensusAddress() ConsAddress + + // Height at which the infraction occurred + GetHeight() int64 + + // The total power of the malicious validator at time of infraction + GetValidatorPower() int64 + + // The total validator set power at time of infraction + GetTotalPower() int64 +} +``` + +### Routing & Handling + +Each `Evidence` type must map to a specific unique route and be registered with +the `x/evidence` module. It accomplishes this through the `Router` implementation. + +```go +type Router interface { + AddRoute(r string, h Handler) Router + HasRoute(r string) bool + GetRoute(path string) Handler + Seal() +} +``` + +Upon successful routing through the `x/evidence` module, the `Evidence` type +is passed through a `Handler`. This `Handler` is responsible for executing all +corresponding business logic necessary for verifying the evidence as valid. In +addition, the `Handler` may execute any necessary slashing and potential jailing. +Since slashing fractions will typically result from some form of static functions, +allow the `Handler` to do this provides the greatest flexibility. An example could +be `k * evidence.GetValidatorPower()` where `k` is an on-chain parameter controlled +by governance. The `Evidence` type should provide all the external information +necessary in order for the `Handler` to make the necessary state transitions. +If no error is returned, the `Evidence` is considered valid. + +```go +type Handler func(Context, Evidence) error +``` + +### Submission + +`Evidence` is submitted through a `MsgSubmitEvidence` message type which is internally +handled by the `x/evidence` module's `SubmitEvidence`. + +```go +type MsgSubmitEvidence struct { + Evidence +} + +func handleMsgSubmitEvidence(ctx Context, keeper Keeper, msg MsgSubmitEvidence) Result { + if err := keeper.SubmitEvidence(ctx, msg.Evidence); err != nil { + return err.Result() + } + + // emit events... + + return Result{ + // ... + } +} +``` + +The `x/evidence` module's keeper is responsible for matching the `Evidence` against +the module's router and invoking the corresponding `Handler` which may include +slashing and jailing the validator. Upon success, the submitted evidence is persisted. + +```go +func (k Keeper) SubmitEvidence(ctx Context, evidence Evidence) error { + handler := keeper.router.GetRoute(evidence.Route()) + if err := handler(ctx, evidence); err != nil { + return ErrInvalidEvidence(keeper.codespace, err) + } + + keeper.setEvidence(ctx, evidence) + return nil +} +``` + +### Genesis + +Finally, we need to represent the genesis state of the `x/evidence` module. The +module only needs a list of all submitted valid infractions and any necessary params +for which the module needs in order to handle submitted evidence. The `x/evidence` +module will naturally define and route native evidence types for which it'll most +likely need slashing penalty constants for. + +```go +type GenesisState struct { + Params Params + Infractions []Evidence +} +``` + +## Consequences + +### Positive + +* Allows the state machine to process misbehavior submitted on-chain and penalize + validators based on agreed upon slashing parameters. +* Allows evidence types to be defined and handled by any module. This further allows + slashing and jailing to be defined by more complex mechanisms. +* Does not solely rely on Tendermint to submit evidence. + +### Negative + +* No easy way to introduce new evidence types through governance on a live chain + due to the inability to introduce the new evidence type's corresponding handler + +### Neutral + +* Should we persist infractions indefinitely? Or should we rather rely on events? + +## References + +* [ICS](https://github.com/cosmos/ics) +* [IBC Architecture](https://github.com/cosmos/ics/blob/master/ibc/1_IBC_ARCHITECTURE.md) +* [Tendermint Fork Accountability](https://github.com/tendermint/spec/blob/7b3138e69490f410768d9b1ffc7a17abc23ea397/spec/consensus/fork-accountability.md) diff --git a/docs/integrate/architecture/adr-010-modular-antehandler.md b/docs/integrate/architecture/adr-010-modular-antehandler.md new file mode 100644 index 000000000..386af1a77 --- /dev/null +++ b/docs/integrate/architecture/adr-010-modular-antehandler.md @@ -0,0 +1,290 @@ +# ADR 010: Modular AnteHandler + +## Changelog + +* 2019 Aug 31: Initial draft +* 2021 Sep 14: Superseded by ADR-045 + +## Status + +SUPERSEDED by ADR-045 + +## Context + +The current AnteHandler design allows users to either use the default AnteHandler provided in `x/auth` or to build their own AnteHandler from scratch. Ideally AnteHandler functionality is split into multiple, modular functions that can be chained together along with custom ante-functions so that users do not have to rewrite common antehandler logic when they want to implement custom behavior. + +For example, let's say a user wants to implement some custom signature verification logic. In the current codebase, the user would have to write their own Antehandler from scratch largely reimplementing much of the same code and then set their own custom, monolithic antehandler in the baseapp. Instead, we would like to allow users to specify custom behavior when necessary and combine them with default ante-handler functionality in a way that is as modular and flexible as possible. + +## Proposals + +### Per-Module AnteHandler + +One approach is to use the [ModuleManager](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types/module) and have each module implement its own antehandler if it requires custom antehandler logic. The ModuleManager can then be passed in an AnteHandler order in the same way it has an order for BeginBlockers and EndBlockers. The ModuleManager returns a single AnteHandler function that will take in a tx and run each module's `AnteHandle` in the specified order. The module manager's AnteHandler is set as the baseapp's AnteHandler. + +Pros: + +1. Simple to implement +2. Utilizes the existing ModuleManager architecture + +Cons: + +1. Improves granularity but still cannot get more granular than a per-module basis. e.g. If auth's `AnteHandle` function is in charge of validating memo and signatures, users cannot swap the signature-checking functionality while keeping the rest of auth's `AnteHandle` functionality. +2. Module AnteHandler are run one after the other. There is no way for one AnteHandler to wrap or "decorate" another. + +### Decorator Pattern + +The [weave project](https://github.com/iov-one/weave) achieves AnteHandler modularity through the use of a decorator pattern. The interface is designed as follows: + +```go +// Decorator wraps a Handler to provide common functionality +// like authentication, or fee-handling, to many Handlers +type Decorator interface { + Check(ctx Context, store KVStore, tx Tx, next Checker) (*CheckResult, error) + Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) (*DeliverResult, error) +} +``` + +Each decorator works like a modularized Cosmos SDK antehandler function, but it can take in a `next` argument that may be another decorator or a Handler (which does not take in a next argument). These decorators can be chained together, one decorator being passed in as the `next` argument of the previous decorator in the chain. The chain ends in a Router which can take a tx and route to the appropriate msg handler. + +A key benefit of this approach is that one Decorator can wrap its internal logic around the next Checker/Deliverer. A weave Decorator may do the following: + +```go +// Example Decorator's Deliver function +func (example Decorator) Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) { + // Do some pre-processing logic + + res, err := next.Deliver(ctx, store, tx) + + // Do some post-processing logic given the result and error +} +``` + +Pros: + +1. Weave Decorators can wrap over the next decorator/handler in the chain. The ability to both pre-process and post-process may be useful in certain settings. +2. Provides a nested modular structure that isn't possible in the solution above, while also allowing for a linear one-after-the-other structure like the solution above. + +Cons: + +1. It is hard to understand at first glance the state updates that would occur after a Decorator runs given the `ctx`, `store`, and `tx`. A Decorator can have an arbitrary number of nested Decorators being called within its function body, each possibly doing some pre- and post-processing before calling the next decorator on the chain. Thus to understand what a Decorator is doing, one must also understand what every other decorator further along the chain is also doing. This can get quite complicated to understand. A linear, one-after-the-other approach while less powerful, may be much easier to reason about. + +### Chained Micro-Functions + +The benefit of Weave's approach is that the Decorators can be very concise, which when chained together allows for maximum customizability. However, the nested structure can get quite complex and thus hard to reason about. + +Another approach is to split the AnteHandler functionality into tightly scoped "micro-functions", while preserving the one-after-the-other ordering that would come from the ModuleManager approach. + +We can then have a way to chain these micro-functions so that they run one after the other. Modules may define multiple ante micro-functions and then also provide a default per-module AnteHandler that implements a default, suggested order for these micro-functions. + +Users can order the AnteHandlers easily by simply using the ModuleManager. The ModuleManager will take in a list of AnteHandlers and return a single AnteHandler that runs each AnteHandler in the order of the list provided. If the user is comfortable with the default ordering of each module, this is as simple as providing a list with each module's antehandler (exactly the same as BeginBlocker and EndBlocker). + +If however, users wish to change the order or add, modify, or delete ante micro-functions in anyway; they can always define their own ante micro-functions and add them explicitly to the list that gets passed into module manager. + +#### Default Workflow + +This is an example of a user's AnteHandler if they choose not to make any custom micro-functions. + +##### Cosmos SDK code + +```go +// Chains together a list of AnteHandler micro-functions that get run one after the other. +// Returned AnteHandler will abort on first error. +func Chainer(order []AnteHandler) AnteHandler { + return func(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + for _, ante := range order { + ctx, err := ante(ctx, tx, simulate) + if err != nil { + return ctx, err + } + } + return ctx, err + } +} +``` + +```go +// AnteHandler micro-function to verify signatures +func VerifySignatures(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // verify signatures + // Returns InvalidSignature Result and abort=true if sigs invalid + // Return OK result and abort=false if sigs are valid +} + +// AnteHandler micro-function to validate memo +func ValidateMemo(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // validate memo +} + +// Auth defines its own default ante-handler by chaining its micro-functions in a recommended order +AuthModuleAnteHandler := Chainer([]AnteHandler{VerifySignatures, ValidateMemo}) +``` + +```go +// Distribution micro-function to deduct fees from tx +func DeductFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // Deduct fees from tx + // Abort if insufficient funds in account to pay for fees +} + +// Distribution micro-function to check if fees > mempool parameter +func CheckMempoolFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // If CheckTx: Abort if the fees are less than the mempool's minFee parameter +} + +// Distribution defines its own default ante-handler by chaining its micro-functions in a recommended order +DistrModuleAnteHandler := Chainer([]AnteHandler{CheckMempoolFees, DeductFees}) +``` + +```go +type ModuleManager struct { + // other fields + AnteHandlerOrder []AnteHandler +} + +func (mm ModuleManager) GetAnteHandler() AnteHandler { + retun Chainer(mm.AnteHandlerOrder) +} +``` + +##### User Code + +```go +// Note: Since user is not making any custom modifications, we can just SetAnteHandlerOrder with the default AnteHandlers provided by each module in our preferred order +moduleManager.SetAnteHandlerOrder([]AnteHandler(AuthModuleAnteHandler, DistrModuleAnteHandler)) + +app.SetAnteHandler(mm.GetAnteHandler()) +``` + +#### Custom Workflow + +This is an example workflow for a user that wants to implement custom antehandler logic. In this example, the user wants to implement custom signature verification and change the order of antehandler so that validate memo runs before signature verification. + +##### User Code + +```go +// User can implement their own custom signature verification antehandler micro-function +func CustomSigVerify(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // do some custom signature verification logic +} +``` + +```go +// Micro-functions allow users to change order of when they get executed, and swap out default ante-functionality with their own custom logic. +// Note that users can still chain the default distribution module handler, and auth micro-function along with their custom ante function +moduleManager.SetAnteHandlerOrder([]AnteHandler(ValidateMemo, CustomSigVerify, DistrModuleAnteHandler)) +``` + +Pros: + +1. Allows for ante functionality to be as modular as possible. +2. For users that do not need custom ante-functionality, there is little difference between how antehandlers work and how BeginBlock and EndBlock work in ModuleManager. +3. Still easy to understand + +Cons: + +1. Cannot wrap antehandlers with decorators like you can with Weave. + +### Simple Decorators + +This approach takes inspiration from Weave's decorator design while trying to minimize the number of breaking changes to the Cosmos SDK and maximizing simplicity. Like Weave decorators, this approach allows one `AnteDecorator` to wrap the next AnteHandler to do pre- and post-processing on the result. This is useful since decorators can do defer/cleanups after an AnteHandler returns as well as perform some setup beforehand. Unlike Weave decorators, these `AnteDecorator` functions can only wrap over the AnteHandler rather than the entire handler execution path. This is deliberate as we want decorators from different modules to perform authentication/validation on a `tx`. However, we do not want decorators being capable of wrapping and modifying the results of a `MsgHandler`. + +In addition, this approach will not break any core Cosmos SDK API's. Since we preserve the notion of an AnteHandler and still set a single AnteHandler in baseapp, the decorator is simply an additional approach available for users that desire more customization. The API of modules (namely `x/auth`) may break with this approach, but the core API remains untouched. + +Allow Decorator interface that can be chained together to create a Cosmos SDK AnteHandler. + +This allows users to choose between implementing an AnteHandler by themselves and setting it in the baseapp, or use the decorator pattern to chain their custom decorators with the Cosmos SDK provided decorators in the order they wish. + +```go +// An AnteDecorator wraps an AnteHandler, and can do pre- and post-processing on the next AnteHandler +type AnteDecorator interface { + AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) +} +``` + +```go +// ChainAnteDecorators will recursively link all of the AnteDecorators in the chain and return a final AnteHandler function +// This is done to preserve the ability to set a single AnteHandler function in the baseapp. +func ChainAnteDecorators(chain ...AnteDecorator) AnteHandler { + if len(chain) == 1 { + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, nil) + } + } + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, ChainAnteDecorators(chain[1:])) + } +} +``` + +#### Example Code + +Define AnteDecorator functions + +```go +// Setup GasMeter, catch OutOfGasPanic and handle appropriately +type SetUpContextDecorator struct{} + +func (sud SetUpContextDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + ctx.GasMeter = NewGasMeter(tx.Gas) + + defer func() { + // recover from OutOfGas panic and handle appropriately + } + + return next(ctx, tx, simulate) +} + +// Signature Verification decorator. Verify Signatures and move on +type SigVerifyDecorator struct{} + +func (svd SigVerifyDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // verify sigs. Return error if invalid + + // call next antehandler if sigs ok + return next(ctx, tx, simulate) +} + +// User-defined Decorator. Can choose to pre- and post-process on AnteHandler +type UserDefinedDecorator struct{ + // custom fields +} + +func (udd UserDefinedDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // pre-processing logic + + ctx, err = next(ctx, tx, simulate) + + // post-processing logic +} +``` + +Link AnteDecorators to create a final AnteHandler. Set this AnteHandler in baseapp. + +```go +// Create final antehandler by chaining the decorators together +antehandler := ChainAnteDecorators(NewSetUpContextDecorator(), NewSigVerifyDecorator(), NewUserDefinedDecorator()) + +// Set chained Antehandler in the baseapp +bapp.SetAnteHandler(antehandler) +``` + +Pros: + +1. Allows one decorator to pre- and post-process the next AnteHandler, similar to the Weave design. +2. Do not need to break baseapp API. Users can still set a single AnteHandler if they choose. + +Cons: + +1. Decorator pattern may have a deeply nested structure that is hard to understand, this is mitigated by having the decorator order explicitly listed in the `ChainAnteDecorators` function. +2. Does not make use of the ModuleManager design. Since this is already being used for BeginBlocker/EndBlocker, this proposal seems unaligned with that design pattern. + +## Consequences + +Since pros and cons are written for each approach, it is omitted from this section + +## References + +* [#4572](https://github.com/cosmos/cosmos-sdk/issues/4572): Modular AnteHandler Issue +* [#4582](https://github.com/cosmos/cosmos-sdk/pull/4583): Initial Implementation of Per-Module AnteHandler Approach +* [Weave Decorator Code](https://github.com/iov-one/weave/blob/master/handler.go#L35) +* [Weave Design Videos](https://vimeo.com/showcase/6189877) diff --git a/docs/integrate/architecture/adr-011-generalize-genesis-accounts.md b/docs/integrate/architecture/adr-011-generalize-genesis-accounts.md new file mode 100644 index 000000000..92a704ba6 --- /dev/null +++ b/docs/integrate/architecture/adr-011-generalize-genesis-accounts.md @@ -0,0 +1,170 @@ +# ADR 011: Generalize Genesis Accounts + +## Changelog + +* 2019-08-30: initial draft + +## Context + +Currently, the Cosmos SDK allows for custom account types; the `auth` keeper stores any type fulfilling its `Account` interface. However `auth` does not handle exporting or loading accounts to/from a genesis file, this is done by `genaccounts`, which only handles one of 4 concrete account types (`BaseAccount`, `ContinuousVestingAccount`, `DelayedVestingAccount` and `ModuleAccount`). + +Projects desiring to use custom accounts (say custom vesting accounts) need to fork and modify `genaccounts`. + +## Decision + +In summary, we will (un)marshal all accounts (interface types) directly using amino, rather than converting to `genaccounts`’s `GenesisAccount` type. Since doing this removes the majority of `genaccounts`'s code, we will merge `genaccounts` into `auth`. Marshalled accounts will be stored in `auth`'s genesis state. + +Detailed changes: + +### 1) (Un)Marshal accounts directly using amino + +The `auth` module's `GenesisState` gains a new field `Accounts`. Note these aren't of type `exported.Account` for reasons outlined in section 3. + +```go +// GenesisState - all auth state that must be provided at genesis +type GenesisState struct { + Params Params `json:"params" yaml:"params"` + Accounts []GenesisAccount `json:"accounts" yaml:"accounts"` +} +``` + +Now `auth`'s `InitGenesis` and `ExportGenesis` (un)marshal accounts as well as the defined params. + +```go +// InitGenesis - Init store state from genesis data +func InitGenesis(ctx sdk.Context, ak AccountKeeper, data GenesisState) { + ak.SetParams(ctx, data.Params) + // load the accounts + for _, a := range data.Accounts { + acc := ak.NewAccount(ctx, a) // set account number + ak.SetAccount(ctx, acc) + } +} + +// ExportGenesis returns a GenesisState for a given context and keeper +func ExportGenesis(ctx sdk.Context, ak AccountKeeper) GenesisState { + params := ak.GetParams(ctx) + + var genAccounts []exported.GenesisAccount + ak.IterateAccounts(ctx, func(account exported.Account) bool { + genAccount := account.(exported.GenesisAccount) + genAccounts = append(genAccounts, genAccount) + return false + }) + + return NewGenesisState(params, genAccounts) +} +``` + +### 2) Register custom account types on the `auth` codec + +The `auth` codec must have all custom account types registered to marshal them. We will follow the pattern established in `gov` for proposals. + +An example custom account definition: + +```go +import authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + +// Register the module account type with the auth module codec so it can decode module accounts stored in a genesis file +func init() { + authtypes.RegisterAccountTypeCodec(ModuleAccount{}, "cosmos-sdk/ModuleAccount") +} + +type ModuleAccount struct { + ... +``` + +The `auth` codec definition: + +```go +var ModuleCdc *codec.LegacyAmino + +func init() { + ModuleCdc = codec.NewLegacyAmino() + // register module msg's and Account interface + ... + // leave the codec unsealed +} + +// RegisterAccountTypeCodec registers an external account type defined in another module for the internal ModuleCdc. +func RegisterAccountTypeCodec(o interface{}, name string) { + ModuleCdc.RegisterConcrete(o, name, nil) +} +``` + +### 3) Genesis validation for custom account types + +Modules implement a `ValidateGenesis` method. As `auth` does not know of account implementations, accounts will need to validate themselves. + +We will unmarshal accounts into a `GenesisAccount` interface that includes a `Validate` method. + +```go +type GenesisAccount interface { + exported.Account + Validate() error +} +``` + +Then the `auth` `ValidateGenesis` function becomes: + +```go +// ValidateGenesis performs basic validation of auth genesis data returning an +// error for any failed validation criteria. +func ValidateGenesis(data GenesisState) error { + // Validate params + ... + + // Validate accounts + addrMap := make(map[string]bool, len(data.Accounts)) + for _, acc := range data.Accounts { + + // check for duplicated accounts + addrStr := acc.GetAddress().String() + if _, ok := addrMap[addrStr]; ok { + return fmt.Errorf("duplicate account found in genesis state; address: %s", addrStr) + } + addrMap[addrStr] = true + + // check account specific validation + if err := acc.Validate(); err != nil { + return fmt.Errorf("invalid account found in genesis state; address: %s, error: %s", addrStr, err.Error()) + } + + } + return nil +} +``` + +### 4) Move add-genesis-account cli to `auth` + +The `genaccounts` module contains a cli command to add base or vesting accounts to a genesis file. + +This will be moved to `auth`. We will leave it to projects to write their own commands to add custom accounts. An extensible cli handler, similar to `gov`, could be created but it is not worth the complexity for this minor use case. + +### 5) Update module and vesting accounts + +Under the new scheme, module and vesting account types need some minor updates: + +* Type registration on `auth`'s codec (shown above) +* A `Validate` method for each `Account` concrete type + +## Status + +Proposed + +## Consequences + +### Positive + +* custom accounts can be used without needing to fork `genaccounts` +* reduction in lines of code + +### Negative + +### Neutral + +* `genaccounts` module no longer exists +* accounts in genesis files are stored under `accounts` in `auth` rather than in the `genaccounts` module. +-`add-genesis-account` cli command now in `auth` + +## References diff --git a/docs/integrate/architecture/adr-012-state-accessors.md b/docs/integrate/architecture/adr-012-state-accessors.md new file mode 100644 index 000000000..93600000f --- /dev/null +++ b/docs/integrate/architecture/adr-012-state-accessors.md @@ -0,0 +1,155 @@ +# ADR 012: State Accessors + +## Changelog + +* 2019 Sep 04: Initial draft + +## Context + +Cosmos SDK modules currently use the `KVStore` interface and `Codec` to access their respective state. While +this provides a large degree of freedom to module developers, it is hard to modularize and the UX is +mediocre. + +First, each time a module tries to access the state, it has to marshal the value and set or get the +value and finally unmarshal. Usually this is done by declaring `Keeper.GetXXX` and `Keeper.SetXXX` functions, +which are repetitive and hard to maintain. + +Second, this makes it harder to align with the object capability theorem: the right to access the +state is defined as a `StoreKey`, which gives full access on the entire Merkle tree, so a module cannot +send the access right to a specific key-value pair (or a set of key-value pairs) to another module safely. + +Finally, because the getter/setter functions are defined as methods of a module's `Keeper`, the reviewers +have to consider the whole Merkle tree space when they reviewing a function accessing any part of the state. +There is no static way to know which part of the state that the function is accessing (and which is not). + +## Decision + +We will define a type named `Value`: + +```go +type Value struct { + m Mapping + key []byte +} +``` + +The `Value` works as a reference for a key-value pair in the state, where `Value.m` defines the key-value +space it will access and `Value.key` defines the exact key for the reference. + +We will define a type named `Mapping`: + +```go +type Mapping struct { + storeKey sdk.StoreKey + cdc *codec.LegacyAmino + prefix []byte +} +``` + +The `Mapping` works as a reference for a key-value space in the state, where `Mapping.storeKey` defines +the IAVL (sub-)tree and `Mapping.prefix` defines the optional subspace prefix. + +We will define the following core methods for the `Value` type: + +```go +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Value) Get(ctx Context, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Value) GetSafe(ctx Context, ptr interface{}) {} + +// Get stored data as raw byte slice +func (Value) GetRaw(ctx Context) []byte {} + +// Marshal and set a raw value +func (Value) Set(ctx Context, o interface{}) {} + +// Check if a raw value exists +func (Value) Exists(ctx Context) bool {} + +// Delete a raw value value +func (Value) Delete(ctx Context) {} +``` + +We will define the following core methods for the `Mapping` type: + +```go +// Constructs key-value pair reference corresponding to the key argument in the Mapping space +func (Mapping) Value(key []byte) Value {} + +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Mapping) Get(ctx Context, key []byte, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Mapping) GetSafe(ctx Context, key []byte, ptr interface{}) + +// Get stored data as raw byte slice +func (Mapping) GetRaw(ctx Context, key []byte) []byte {} + +// Marshal and set a raw value +func (Mapping) Set(ctx Context, key []byte, o interface{}) {} + +// Check if a raw value exists +func (Mapping) Has(ctx Context, key []byte) bool {} + +// Delete a raw value value +func (Mapping) Delete(ctx Context, key []byte) {} +``` + +Each method of the `Mapping` type that is passed the arguments `ctx`, `key`, and `args...` will proxy +the call to `Mapping.Value(key)` with arguments `ctx` and `args...`. + +In addition, we will define and provide a common set of types derived from the `Value` type: + +```go +type Boolean struct { Value } +type Enum struct { Value } +type Integer struct { Value; enc IntEncoding } +type String struct { Value } +// ... +``` + +Where the encoding schemes can be different, `o` arguments in core methods are typed, and `ptr` arguments +in core methods are replaced by explicit return types. + +Finally, we will define a family of types derived from the `Mapping` type: + +```go +type Indexer struct { + m Mapping + enc IntEncoding +} +``` + +Where the `key` argument in core method is typed. + +Some of the properties of the accessor types are: + +* State access happens only when a function which takes a `Context` as an argument is invoked +* Accessor type structs give rights to access the state only that the struct is referring, no other +* Marshalling/Unmarshalling happens implicitly within the core methods + +## Status + +Proposed + +## Consequences + +### Positive + +* Serialization will be done automatically +* Shorter code size, less boilerplate, better UX +* References to the state can be transferred safely +* Explicit scope of accessing + +### Negative + +* Serialization format will be hidden +* Different architecture from the current, but the use of accessor types can be opt-in +* Type-specific types (e.g. `Boolean` and `Integer`) have to be defined manually + +### Neutral + +## References + +* [#4554](https://github.com/cosmos/cosmos-sdk/issues/4554) diff --git a/docs/integrate/architecture/adr-013-metrics.md b/docs/integrate/architecture/adr-013-metrics.md new file mode 100644 index 000000000..33849b56c --- /dev/null +++ b/docs/integrate/architecture/adr-013-metrics.md @@ -0,0 +1,157 @@ +# ADR 013: Observability + +## Changelog + +* 20-01-2020: Initial Draft + +## Status + +Proposed + +## Context + +Telemetry is paramount into debugging and understanding what the application is doing and how it is +performing. We aim to expose metrics from modules and other core parts of the Cosmos SDK. + +In addition, we should aim to support multiple configurable sinks that an operator may choose from. +By default, when telemetry is enabled, the application should track and expose metrics that are +stored in-memory. The operator may choose to enable additional sinks, where we support only +[Prometheus](https://prometheus.io/) for now, as it's battle-tested, simple to setup, open source, +and is rich with ecosystem tooling. + +We must also aim to integrate metrics into the Cosmos SDK in the most seamless way possible such that +metrics may be added or removed at will and without much friction. To do this, we will use the +[go-metrics](https://github.com/armon/go-metrics) library. + +Finally, operators may enable telemetry along with specific configuration options. If enabled, metrics +will be exposed via `/metrics?format={text|prometheus}` via the API server. + +## Decision + +We will add an additional configuration block to `app.toml` that defines telemetry settings: + +```toml +############################################################################### +### Telemetry Configuration ### +############################################################################### + +[telemetry] + +# Prefixed with keys to separate services +service-name = {{ .Telemetry.ServiceName }} + +# Enabled enables the application telemetry functionality. When enabled, +# an in-memory sink is also enabled by default. Operators may also enabled +# other sinks such as Prometheus. +enabled = {{ .Telemetry.Enabled }} + +# Enable prefixing gauge values with hostname +enable-hostname = {{ .Telemetry.EnableHostname }} + +# Enable adding hostname to labels +enable-hostname-label = {{ .Telemetry.EnableHostnameLabel }} + +# Enable adding service to labels +enable-service-label = {{ .Telemetry.EnableServiceLabel }} + +# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. +prometheus-retention-time = {{ .Telemetry.PrometheusRetentionTime }} +``` + +The given configuration allows for two sinks -- in-memory and Prometheus. We create a `Metrics` +type that performs all the bootstrapping for the operator, so capturing metrics becomes seamless. + +```go +// Metrics defines a wrapper around application telemetry functionality. It allows +// metrics to be gathered at any point in time. When creating a Metrics object, +// internally, a global metrics is registered with a set of sinks as configured +// by the operator. In addition to the sinks, when a process gets a SIGUSR1, a +// dump of formatted recent metrics will be sent to STDERR. +type Metrics struct { + memSink *metrics.InmemSink + prometheusEnabled bool +} + +// Gather collects all registered metrics and returns a GatherResponse where the +// metrics are encoded depending on the type. Metrics are either encoded via +// Prometheus or JSON if in-memory. +func (m *Metrics) Gather(format string) (GatherResponse, error) { + switch format { + case FormatPrometheus: + return m.gatherPrometheus() + + case FormatText: + return m.gatherGeneric() + + case FormatDefault: + return m.gatherGeneric() + + default: + return GatherResponse{}, fmt.Errorf("unsupported metrics format: %s", format) + } +} +``` + +In addition, `Metrics` allows us to gather the current set of metrics at any given point in time. An +operator may also choose to send a signal, SIGUSR1, to dump and print formatted metrics to STDERR. + +During an application's bootstrapping and construction phase, if `Telemetry.Enabled` is `true`, the +API server will create an instance of a reference to `Metrics` object and will register a metrics +handler accordingly. + +```go +func (s *Server) Start(cfg config.Config) error { + // ... + + if cfg.Telemetry.Enabled { + m, err := telemetry.New(cfg.Telemetry) + if err != nil { + return err + } + + s.metrics = m + s.registerMetrics() + } + + // ... +} + +func (s *Server) registerMetrics() { + metricsHandler := func(w http.ResponseWriter, r *http.Request) { + format := strings.TrimSpace(r.FormValue("format")) + + gr, err := s.metrics.Gather(format) + if err != nil { + rest.WriteErrorResponse(w, http.StatusBadRequest, fmt.Sprintf("failed to gather metrics: %s", err)) + return + } + + w.Header().Set("Content-Type", gr.ContentType) + _, _ = w.Write(gr.Metrics) + } + + s.Router.HandleFunc("/metrics", metricsHandler).Methods("GET") +} +``` + +Application developers may track counters, gauges, summaries, and key/value metrics. There is no +additional lifting required by modules to leverage profiling metrics. To do so, it's as simple as: + +```go +func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { + defer metrics.MeasureSince(time.Now(), "MintCoins") + // ... +} +``` + +## Consequences + +### Positive + +* Exposure into the performance and behavior of an application + +### Negative + +### Neutral + +## References diff --git a/docs/integrate/architecture/adr-014-proportional-slashing.md b/docs/integrate/architecture/adr-014-proportional-slashing.md new file mode 100644 index 000000000..63cd04dee --- /dev/null +++ b/docs/integrate/architecture/adr-014-proportional-slashing.md @@ -0,0 +1,85 @@ +# ADR 14: Proportional Slashing + +## Changelog + +* 2019-10-15: Initial draft +* 2020-05-25: Removed correlation root slashing +* 2020-07-01: Updated to include S-curve function instead of linear + +## Context + +In Proof of Stake-based chains, centralization of consensus power amongst a small set of validators can cause harm to the network due to increased risk of censorship, liveness failure, fork attacks, etc. However, while this centralization causes a negative externality to the network, it is not directly felt by the delegators contributing towards delegating towards already large validators. We would like a way to pass on the negative externality cost of centralization onto those large validators and their delegators. + +## Decision + +### Design + +To solve this problem, we will implement a procedure called Proportional Slashing. The desire is that the larger a validator is, the more they should be slashed. The first naive attempt is to make a validator's slash percent proportional to their share of consensus voting power. + +```text +slash_amount = k * power // power is the faulting validator's voting power and k is some on-chain constant +``` + +However, this will incentivize validators with large amounts of stake to split up their voting power amongst accounts (sybil attack), so that if they fault, they all get slashed at a lower percent. The solution to this is to take into account not just a validator's own voting percentage, but also the voting percentage of all the other validators who get slashed in a specified time frame. + +```text +slash_amount = k * (power_1 + power_2 + ... + power_n) // where power_i is the voting power of the ith validator faulting in the specified time frame and k is some on-chain constant +``` + +Now, if someone splits a validator of 10% into two validators of 5% each which both fault, then they both fault in the same time frame, they both will get slashed at the sum 10% amount. + +However in practice, we likely don't want a linear relation between amount of stake at fault, and the percentage of stake to slash. In particular, solely 5% of stake double signing effectively did nothing to majorly threaten security, whereas 30% of stake being at fault clearly merits a large slashing factor, due to being very close to the point at which Tendermint security is threatened. A linear relation would require a factor of 6 gap between these two, whereas the difference in risk posed to the network is much larger. We propose using S-curves (formally [logistic functions](https://en.wikipedia.org/wiki/Logistic_function) to solve this). S-Curves capture the desired criterion quite well. They allow the slashing factor to be minimal for small values, and then grow very rapidly near some threshold point where the risk posed becomes notable. + +#### Parameterization + +This requires parameterizing a logistic function. It is very well understood how to parameterize this. It has four parameters: + +1) A minimum slashing factor +2) A maximum slashing factor +3) The inflection point of the S-curve (essentially where do you want to center the S) +4) The rate of growth of the S-curve (How elongated is the S) + +#### Correlation across non-sybil validators + +One will note, that this model doesn't differentiate between multiple validators run by the same operators vs validators run by different operators. This can be seen as an additional benefit in fact. It incentivizes validators to differentiate their setups from other validators, to avoid having correlated faults with them or else they risk a higher slash. So for example, operators should avoid using the same popular cloud hosting platforms or using the same Staking as a Service providers. This will lead to a more resilient and decentralized network. + +#### Griefing + +Griefing, the act of intentionally getting oneself slashed in order to make another's slash worse, could be a concern here. However, using the protocol described here, the attacker also gets equally impacted by the grief as the victim, so it would not provide much benefit to the griefer. + +### Implementation + +In the slashing module, we will add two queues that will track all of the recent slash events. For double sign faults, we will define "recent slashes" as ones that have occurred within the last `unbonding period`. For liveness faults, we will define "recent slashes" as ones that have occurred withing the last `jail period`. + +```go +type SlashEvent struct { + Address sdk.ValAddress + ValidatorVotingPercent sdk.Dec + SlashedSoFar sdk.Dec +} +``` + +These slash events will be pruned from the queue once they are older than their respective "recent slash period". + +Whenever a new slash occurs, a `SlashEvent` struct is created with the faulting validator's voting percent and a `SlashedSoFar` of 0. Because recent slash events are pruned before the unbonding period and unjail period expires, it should not be possible for the same validator to have multiple SlashEvents in the same Queue at the same time. + +We then will iterate over all the SlashEvents in the queue, adding their `ValidatorVotingPercent` to calculate the new percent to slash all the validators in the queue at, using the "Square of Sum of Roots" formula introduced above. + +Once we have the `NewSlashPercent`, we then iterate over all the `SlashEvent`s in the queue once again, and if `NewSlashPercent > SlashedSoFar` for that SlashEvent, we call the `staking.Slash(slashEvent.Address, slashEvent.Power, Math.Min(Math.Max(minSlashPercent, NewSlashPercent - SlashedSoFar), maxSlashPercent)` (we pass in the power of the validator before any slashes occurred, so that we slash the right amount of tokens). We then set `SlashEvent.SlashedSoFar` amount to `NewSlashPercent`. + +## Status + +Proposed + +## Consequences + +### Positive + +* Increases decentralization by disincentivizing delegating to large validators +* Incentivizes Decorrelation of Validators +* More severely punishes attacks than accidental faults +* More flexibility in slashing rates parameterization + +### Negative + +* More computationally expensive than current implementation. Will require more data about "recent slashing events" to be stored on chain. diff --git a/docs/integrate/architecture/adr-016-validator-consensus-key-rotation.md b/docs/integrate/architecture/adr-016-validator-consensus-key-rotation.md new file mode 100644 index 000000000..1d91a8de7 --- /dev/null +++ b/docs/integrate/architecture/adr-016-validator-consensus-key-rotation.md @@ -0,0 +1,125 @@ +# ADR 016: Validator Consensus Key Rotation + +## Changelog + +* 2019 Oct 23: Initial draft +* 2019 Nov 28: Add key rotation fee + +## Context + +Validator consensus key rotation feature has been discussed and requested for a long time, for the sake of safer validator key management policy (e.g. https://github.com/tendermint/tendermint/issues/1136). So, we suggest one of the simplest form of validator consensus key rotation implementation mostly onto Cosmos SDK. + +We don't need to make any update on consensus logic in Tendermint because Tendermint does not have any mapping information of consensus key and validator operator key, meaning that from Tendermint point of view, a consensus key rotation of a validator is simply a replacement of a consensus key to another. + +Also, it should be noted that this ADR includes only the simplest form of consensus key rotation without considering multiple consensus keys concept. Such multiple consensus keys concept shall remain a long term goal of Tendermint and Cosmos SDK. + +## Decision + +### Pseudo procedure for consensus key rotation + +* create new random consensus key. +* create and broadcast a transaction with a `MsgRotateConsPubKey` that states the new consensus key is now coupled with the validator operator with signature from the validator's operator key. +* old consensus key becomes unable to participate on consensus immediately after the update of key mapping state on-chain. +* start validating with new consensus key. +* validators using HSM and KMS should update the consensus key in HSM to use the new rotated key after the height `h` when `MsgRotateConsPubKey` committed to the blockchain. + +### Considerations + +* consensus key mapping information management strategy + * store history of each key mapping changes in the kvstore. + * the state machine can search corresponding consensus key paired with given validator operator for any arbitrary height in a recent unbonding period. + * the state machine does not need any historical mapping information which is past more than unbonding period. +* key rotation costs related to LCD and IBC + * LCD and IBC will have traffic/computation burden when there exists frequent power changes + * In current Tendermint design, consensus key rotations are seen as power changes from LCD or IBC perspective + * Therefore, to minimize unnecessary frequent key rotation behavior, we limited maximum number of rotation in recent unbonding period and also applied exponentially increasing rotation fee +* limits + * a validator cannot rotate its consensus key more than `MaxConsPubKeyRotations` time for any unbonding period, to prevent spam. + * parameters can be decided by governance and stored in genesis file. +* key rotation fee + * a validator should pay `KeyRotationFee` to rotate the consensus key which is calculated as below + * `KeyRotationFee` = (max(`VotingPowerPercentage` *100, 1)* `InitialKeyRotationFee`) * 2^(number of rotations in `ConsPubKeyRotationHistory` in recent unbonding period) +* evidence module + * evidence module can search corresponding consensus key for any height from slashing keeper so that it can decide which consensus key is supposed to be used for given height. +* abci.ValidatorUpdate + * tendermint already has ability to change a consensus key by ABCI communication(`ValidatorUpdate`). + * validator consensus key update can be done via creating new + delete old by change the power to zero. + * therefore, we expect we even do not need to change tendermint codebase at all to implement this feature. +* new genesis parameters in `staking` module + * `MaxConsPubKeyRotations` : maximum number of rotation can be executed by a validator in recent unbonding period. default value 10 is suggested(11th key rotation will be rejected) + * `InitialKeyRotationFee` : the initial key rotation fee when no key rotation has happened in recent unbonding period. default value 1atom is suggested(1atom fee for the first key rotation in recent unbonding period) + +### Workflow + +1. The validator generates a new consensus keypair. +2. The validator generates and signs a `MsgRotateConsPubKey` tx with their operator key and new ConsPubKey + + ```go + type MsgRotateConsPubKey struct { + ValidatorAddress sdk.ValAddress + NewPubKey crypto.PubKey + } + ``` + +3. `handleMsgRotateConsPubKey` gets `MsgRotateConsPubKey`, calls `RotateConsPubKey` with emits event +4. `RotateConsPubKey` + * checks if `NewPubKey` is not duplicated on `ValidatorsByConsAddr` + * checks if the validator is does not exceed parameter `MaxConsPubKeyRotations` by iterating `ConsPubKeyRotationHistory` + * checks if the signing account has enough balance to pay `KeyRotationFee` + * pays `KeyRotationFee` to community fund + * overwrites `NewPubKey` in `validator.ConsPubKey` + * deletes old `ValidatorByConsAddr` + * `SetValidatorByConsAddr` for `NewPubKey` + * Add `ConsPubKeyRotationHistory` for tracking rotation + + ```go + type ConsPubKeyRotationHistory struct { + OperatorAddress sdk.ValAddress + OldConsPubKey crypto.PubKey + NewConsPubKey crypto.PubKey + RotatedHeight int64 + } + ``` + +5. `ApplyAndReturnValidatorSetUpdates` checks if there is `ConsPubKeyRotationHistory` with `ConsPubKeyRotationHistory.RotatedHeight == ctx.BlockHeight()` and if so, generates 2 `ValidatorUpdate` , one for a remove validator and one for create new validator + + ```go + abci.ValidatorUpdate{ + PubKey: cmttypes.TM2PB.PubKey(OldConsPubKey), + Power: 0, + } + + abci.ValidatorUpdate{ + PubKey: cmttypes.TM2PB.PubKey(NewConsPubKey), + Power: v.ConsensusPower(), + } + ``` + +6. at `previousVotes` Iteration logic of `AllocateTokens`, `previousVote` using `OldConsPubKey` match up with `ConsPubKeyRotationHistory`, and replace validator for token allocation +7. Migrate `ValidatorSigningInfo` and `ValidatorMissedBlockBitArray` from `OldConsPubKey` to `NewConsPubKey` + +* Note : All above features shall be implemented in `staking` module. + +## Status + +Proposed + +## Consequences + +### Positive + +* Validators can immediately or periodically rotate their consensus key to have better security policy +* improved security against Long-Range attacks (https://nearprotocol.com/blog/long-range-attacks-and-a-new-fork-choice-rule) given a validator throws away the old consensus key(s) + +### Negative + +* Slash module needs more computation because it needs to lookup corresponding consensus key of validators for each height +* frequent key rotations will make light client bisection less efficient + +### Neutral + +## References + +* on tendermint repo : https://github.com/tendermint/tendermint/issues/1136 +* on cosmos-sdk repo : https://github.com/cosmos/cosmos-sdk/issues/5231 +* about multiple consensus keys : https://github.com/tendermint/tendermint/issues/1758#issuecomment-545291698 diff --git a/docs/integrate/architecture/adr-017-historical-header-module.md b/docs/integrate/architecture/adr-017-historical-header-module.md new file mode 100644 index 000000000..573c632c2 --- /dev/null +++ b/docs/integrate/architecture/adr-017-historical-header-module.md @@ -0,0 +1,61 @@ +# ADR 17: Historical Header Module + +## Changelog + +* 26 November 2019: Start of first version +* 2 December 2019: Final draft of first version + +## Context + +In order for the Cosmos SDK to implement the [IBC specification](https://github.com/cosmos/ics), modules within the Cosmos SDK must have the ability to introspect recent consensus states (validator sets & commitment roots) as proofs of these values on other chains must be checked during the handshakes. + +## Decision + +The application MUST store the most recent `n` headers in a persistent store. At first, this store MAY be the current Merklised store. A non-Merklised store MAY be used later as no proofs are necessary. + +The application MUST store this information by storing new headers immediately when handling `abci.RequestBeginBlock`: + +```go +func BeginBlock(ctx sdk.Context, keeper HistoricalHeaderKeeper, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + info := HistoricalInfo{ + Header: ctx.BlockHeader(), + ValSet: keeper.StakingKeeper.GetAllValidators(ctx), // note that this must be stored in a canonical order + } + keeper.SetHistoricalInfo(ctx, ctx.BlockHeight(), info) + n := keeper.GetParamRecentHeadersToStore() + keeper.PruneHistoricalInfo(ctx, ctx.BlockHeight() - n) + // continue handling request +} +``` + +Alternatively, the application MAY store only the hash of the validator set. + +The application MUST make these past `n` committed headers available for querying by Cosmos SDK modules through the `Keeper`'s `GetHistoricalInfo` function. This MAY be implemented in a new module, or it MAY also be integrated into an existing one (likely `x/staking` or `x/ibc`). + +`n` MAY be configured as a parameter store parameter, in which case it could be changed by `ParameterChangeProposal`s, although it will take some blocks for the stored information to catch up if `n` is increased. + +## Status + +Proposed. + +## Consequences + +Implementation of this ADR will require changes to the Cosmos SDK. It will not require changes to Tendermint. + +### Positive + +* Easy retrieval of headers & state roots for recent past heights by modules anywhere in the Cosmos SDK. +* No RPC calls to Tendermint required. +* No ABCI alterations required. + +### Negative + +* Duplicates `n` headers data in Tendermint & the application (additional disk usage) - in the long term, an approach such as [this](https://github.com/tendermint/tendermint/issues/4210) might be preferable. + +### Neutral + +(none known) + +## References + +* [ICS 2: "Consensus state introspection"](https://github.com/cosmos/ibc/tree/master/spec/core/ics-002-client-semantics#consensus-state-introspection) diff --git a/docs/integrate/architecture/adr-018-extendable-voting-period.md b/docs/integrate/architecture/adr-018-extendable-voting-period.md new file mode 100644 index 000000000..ee238fc35 --- /dev/null +++ b/docs/integrate/architecture/adr-018-extendable-voting-period.md @@ -0,0 +1,66 @@ +# ADR 18: Extendable Voting Periods + +## Changelog + +* 1 January 2020: Start of first version + +## Context + +Currently the voting period for all governance proposals is the same. However, this is suboptimal as all governance proposals do not require the same time period. For more non-contentious proposals, they can be dealt with more efficently with a faster period, while more contentious or complex proposals may need a longer period for extended discussion/consideration. + +## Decision + +We would like to design a mechanism for making the voting period of a governance proposal variable based on the demand of voters. We would like it to be based on the view of the governance participants, rather than just the proposer of a governance proposal (thus, allowing the proposer to select the voting period length is not sufficient). + +However, we would like to avoid the creation of an entire second voting process to determine the length of the voting period, as it just pushed the problem to determining the length of that first voting period. + +Thus, we propose the following mechanism: + +### Params + +* The current gov param `VotingPeriod` is to be replaced by a `MinVotingPeriod` param. This is the default voting period that all governance proposal voting periods start with. +* There is a new gov param called `MaxVotingPeriodExtension`. + +### Mechanism + +There is a new `Msg` type called `MsgExtendVotingPeriod`, which can be sent by any staked account during a proposal's voting period. It allows the sender to unilaterally extend the length of the voting period by `MaxVotingPeriodExtension * sender's share of voting power`. Every address can only call `MsgExtendVotingPeriod` once per proposal. + +So for example, if the `MaxVotingPeriodExtension` is set to 100 Days, then anyone with 1% of voting power can extend the voting power by 1 day. If 33% of voting power has sent the message, the voting period will be extended by 33 days. Thus, if absolutely everyone chooses to extend the voting period, the absolute maximum voting period will be `MinVotingPeriod + MaxVotingPeriodExtension`. + +This system acts as a sort of distributed coordination, where individual stakers choosing to extend or not, allows the system the guage the conentiousness/complexity of the proposal. It is extremely unlikely that many stakers will choose to extend at the exact same time, it allows stakers to view how long others have already extended thus far, to decide whether or not to extend further. + +### Dealing with Unbonding/Redelegation + +There is one thing that needs to be addressed. How to deal with redelegation/unbonding during the voting period. If a staker of 5% calls `MsgExtendVotingPeriod` and then unbonds, does the voting period then decrease by 5 days again? This is not good as it can give people a false sense of how long they have to make their decision. For this reason, we want to design it such that the voting period length can only be extended, not shortened. To do this, the current extension amount is based on the highest percent that voted extension at any time. This is best explained by example: + +1. Let's say 2 stakers of voting power 4% and 3% respectively vote to extend. The voting period will be extended by 7 days. +2. Now the staker of 3% decides to unbond before the end of the voting period. The voting period extension remains 7 days. +3. Now, let's say another staker of 2% voting power decides to extend voting period. There is now 6% of active voting power choosing the extend. The voting power remains 7 days. +4. If a fourth staker of 10% chooses to extend now, there is a total of 16% of active voting power wishing to extend. The voting period will be extended to 16 days. + +### Delegators + +Just like votes in the actual voting period, delegators automatically inherit the extension of their validators. If their validator chooses to extend, their voting power will be used in the validator's extension. However, the delegator is unable to override their validator and "unextend" as that would contradict the "voting power length can only be ratcheted up" principle described in the previous section. However, a delegator may choose the extend using their personal voting power, if their validator has not done so. + +## Status + +Proposed + +## Consequences + +### Positive + +* More complex/contentious governance proposals will have more time to properly digest and deliberate + +### Negative + +* Governance process becomes more complex and requires more understanding to interact with effectively +* Can no longer predict when a governance proposal will end. Can't assume order in which governance proposals will end. + +### Neutral + +* The minimum voting period can be made shorter + +## References + +* [Cosmos Forum post where idea first originated](https://forum.cosmos.network/t/proposal-draft-reduce-governance-voting-period-to-7-days/3032/9) diff --git a/docs/integrate/architecture/adr-019-protobuf-state-encoding.md b/docs/integrate/architecture/adr-019-protobuf-state-encoding.md new file mode 100644 index 000000000..5ad1b953e --- /dev/null +++ b/docs/integrate/architecture/adr-019-protobuf-state-encoding.md @@ -0,0 +1,379 @@ +# ADR 019: Protocol Buffer State Encoding + +## Changelog + +* 2020 Feb 15: Initial Draft +* 2020 Feb 24: Updates to handle messages with interface fields +* 2020 Apr 27: Convert usages of `oneof` for interfaces to `Any` +* 2020 May 15: Describe `cosmos_proto` extensions and amino compatibility +* 2020 Dec 4: Move and rename `MarshalAny` and `UnmarshalAny` into the `codec.Codec` interface. +* 2021 Feb 24: Remove mentions of `HybridCodec`, which has been abandoned in [#6843](https://github.com/cosmos/cosmos-sdk/pull/6843). + +## Status + +Accepted + +## Context + +Currently, the Cosmos SDK utilizes [go-amino](https://github.com/tendermint/go-amino/) for binary +and JSON object encoding over the wire bringing parity between logical objects and persistence objects. + +From the Amino docs: + +> Amino is an object encoding specification. It is a subset of Proto3 with an extension for interface +> support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) for more +> information on Proto3, which Amino is largely compatible with (but not with Proto2). +> +> The goal of the Amino encoding protocol is to bring parity into logic objects and persistence objects. + +Amino also aims to have the following goals (not a complete list): + +* Binary bytes must be decode-able with a schema. +* Schema must be upgradeable. +* The encoder and decoder logic must be reasonably simple. + +However, we believe that Amino does not fulfill these goals completely and does not fully meet the +needs of a truly flexible cross-language and multi-client compatible encoding protocol in the Cosmos SDK. +Namely, Amino has proven to be a big pain-point in regards to supporting object serialization across +clients written in various languages while providing virtually little in the way of true backwards +compatibility and upgradeability. Furthermore, through profiling and various benchmarks, Amino has +been shown to be an extremely large performance bottleneck in the Cosmos SDK 1. This is +largely reflected in the performance of simulations and application transaction throughput. + +Thus, we need to adopt an encoding protocol that meets the following criteria for state serialization: + +* Language agnostic +* Platform agnostic +* Rich client support and thriving ecosystem +* High performance +* Minimal encoded message size +* Codegen-based over reflection-based +* Supports backward and forward compatibility + +Note, migrating away from Amino should be viewed as a two-pronged approach, state and client encoding. +This ADR focuses on state serialization in the Cosmos SDK state machine. A corresponding ADR will be +made to address client-side encoding. + +## Decision + +We will adopt [Protocol Buffers](https://developers.google.com/protocol-buffers) for serializing +persisted structured data in the Cosmos SDK while providing a clean mechanism and developer UX for +applications wishing to continue to use Amino. We will provide this mechanism by updating modules to +accept a codec interface, `Marshaler`, instead of a concrete Amino codec. Furthermore, the Cosmos SDK +will provide two concrete implementations of the `Marshaler` interface: `AminoCodec` and `ProtoCodec`. + +* `AminoCodec`: Uses Amino for both binary and JSON encoding. +* `ProtoCodec`: Uses Protobuf for both binary and JSON encoding. + +Modules will use whichever codec that is instantiated in the app. By default, the Cosmos SDK's `simapp` +instantiates a `ProtoCodec` as the concrete implementation of `Marshaler`, inside the `MakeTestEncodingConfig` +function. This can be easily overwritten by app developers if they so desire. + +The ultimate goal will be to replace Amino JSON encoding with Protobuf encoding and thus have +modules accept and/or extend `ProtoCodec`. Until then, Amino JSON is still provided for legacy use-cases. +A handful of places in the Cosmos SDK still have Amino JSON hardcoded, such as the Legacy API REST endpoints +and the `x/params` store. They are planned to be converted to Protobuf in a gradual manner. + +### Module Codecs + +Modules that do not require the ability to work with and serialize interfaces, the path to Protobuf +migration is pretty straightforward. These modules are to simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf and have their keeper accept a +`Marshaler` that will be a `ProtoCodec`. This migration is simple as things will just work as-is. + +Note, any business logic that needs to encode primitive types like `bool` or `int64` should use +[gogoprotobuf](https://github.com/cosmos/gogoproto) Value types. + +Example: + +```go + ts, err := gogotypes.TimestampProto(completionTime) + if err != nil { + // ... + } + + bz := cdc.MustMarshal(ts) +``` + +However, modules can vary greatly in purpose and design and so we must support the ability for modules +to be able to encode and work with interfaces (e.g. `Account` or `Content`). For these modules, they +must define their own codec interface that extends `Marshaler`. These specific interfaces are unique +to the module and will contain method contracts that know how to serialize the needed interfaces. + +Example: + +```go +// x/auth/types/codec.go + +type Codec interface { + codec.Codec + + MarshalAccount(acc exported.Account) ([]byte, error) + UnmarshalAccount(bz []byte) (exported.Account, error) + + MarshalAccountJSON(acc exported.Account) ([]byte, error) + UnmarshalAccountJSON(bz []byte) (exported.Account, error) +} +``` + +### Usage of `Any` to encode interfaces + +In general, module-level .proto files should define messages which encode interfaces +using [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). +After [extension discussion](https://github.com/cosmos/cosmos-sdk/issues/6030), +this was chosen as the preferred alternative to application-level `oneof`s +as in our original protobuf design. The arguments in favor of `Any` can be +summarized as follows: + +* `Any` provides a simpler, more consistent client UX for dealing with +interfaces than app-level `oneof`s that will need to be coordinated more +carefully across applications. Creating a generic transaction +signing library using `oneof`s may be cumbersome and critical logic may need +to be reimplemented for each chain +* `Any` provides more resistance against human error than `oneof` +* `Any` is generally simpler to implement for both modules and apps + +The main counter-argument to using `Any` centers around its additional space +and possibly performance overhead. The space overhead could be dealt with using +compression at the persistence layer in the future and the performance impact +is likely to be small. Thus, not using `Any` is seem as a pre-mature optimization, +with user experience as the higher order concern. + +Note, that given the Cosmos SDK's decision to adopt the `Codec` interfaces described +above, apps can still choose to use `oneof` to encode state and transactions +but it is not the recommended approach. If apps do choose to use `oneof`s +instead of `Any` they will likely lose compatibility with client apps that +support multiple chains. Thus developers should think carefully about whether +they care more about what is possibly a pre-mature optimization or end-user +and client developer UX. + +### Safe usage of `Any` + +By default, the [gogo protobuf implementation of `Any`](https://pkg.go.dev/github.com/cosmos/gogoproto/types) +uses [global type registration]( https://github.com/cosmos/gogoproto/blob/master/proto/properties.go#L540) +to decode values packed in `Any` into concrete +go types. This introduces a vulnerability where any malicious module +in the dependency tree could register a type with the global protobuf registry +and cause it to be loaded and unmarshaled by a transaction that referenced +it in the `type_url` field. + +To prevent this, we introduce a type registration mechanism for decoding `Any` +values into concrete types through the `InterfaceRegistry` interface which +bears some similarity to type registration with Amino: + +```go +type InterfaceRegistry interface { + // RegisterInterface associates protoName as the public name for the + // interface passed in as iface + // Ex: + // registry.RegisterInterface("cosmos_sdk.Msg", (*sdk.Msg)(nil)) + RegisterInterface(protoName string, iface interface{}) + + // RegisterImplementations registers impls as a concrete implementations of + // the interface iface + // Ex: + // registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSend{}, &MsgMultiSend{}) + RegisterImplementations(iface interface{}, impls ...proto.Message) + +} +``` + +In addition to serving as a whitelist, `InterfaceRegistry` can also serve +to communicate the list of concrete types that satisfy an interface to clients. + +In .proto files: + +* fields which accept interfaces should be annotated with `cosmos_proto.accepts_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` +* interface implementations should be annotated with `cosmos_proto.implements_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` + +In the future, `protoName`, `cosmos_proto.accepts_interface`, `cosmos_proto.implements_interface` +may be used via code generation, reflection &/or static linting. + +The same struct that implements `InterfaceRegistry` will also implement an +interface `InterfaceUnpacker` to be used for unpacking `Any`s: + +```go +type InterfaceUnpacker interface { + // UnpackAny unpacks the value in any to the interface pointer passed in as + // iface. Note that the type in any must have been registered with + // RegisterImplementations as a concrete type for that interface + // Ex: + // var msg sdk.Msg + // err := ctx.UnpackAny(any, &msg) + // ... + UnpackAny(any *Any, iface interface{}) error +} +``` + +Note that `InterfaceRegistry` usage does not deviate from standard protobuf +usage of `Any`, it just introduces a security and introspection layer for +golang usage. + +`InterfaceRegistry` will be a member of `ProtoCodec` +described above. In order for modules to register interface types, app modules +can optionally implement the following interface: + +```go +type InterfaceModule interface { + RegisterInterfaceTypes(InterfaceRegistry) +} +``` + +The module manager will include a method to call `RegisterInterfaceTypes` on +every module that implements it in order to populate the `InterfaceRegistry`. + +### Using `Any` to encode state + +The Cosmos SDK will provide support methods `MarshalInterface` and `UnmarshalInterface` to hide a complexity of wrapping interface types into `Any` and allow easy serialization. + +```go +import "github.com/cosmos/cosmos-sdk/codec" + +// note: eviexported.Evidence is an interface type +func MarshalEvidence(cdc codec.BinaryCodec, e eviexported.Evidence) ([]byte, error) { + return cdc.MarshalInterface(e) +} + +func UnmarshalEvidence(cdc codec.BinaryCodec, bz []byte) (eviexported.Evidence, error) { + var evi eviexported.Evidence + err := cdc.UnmarshalInterface(&evi, bz) + return err, nil +} +``` + +### Using `Any` in `sdk.Msg`s + +A similar concept is to be applied for messages that contain interfaces fields. +For example, we can define `MsgSubmitEvidence` as follows where `Evidence` is +an interface: + +```protobuf +// x/evidence/types/types.proto + +message MsgSubmitEvidence { + bytes submitter = 1 + [ + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress" + ]; + google.protobuf.Any evidence = 2; +} +``` + +Note that in order to unpack the evidence from `Any` we do need a reference to +`InterfaceRegistry`. In order to reference evidence in methods like +`ValidateBasic` which shouldn't have to know about the `InterfaceRegistry`, we +introduce an `UnpackInterfaces` phase to deserialization which unpacks +interfaces before they're needed. + +### Unpacking Interfaces + +To implement the `UnpackInterfaces` phase of deserialization which unpacks +interfaces wrapped in `Any` before they're needed, we create an interface +that `sdk.Msg`s and other types can implement: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +We also introduce a private `cachedValue interface{}` field onto the `Any` +struct itself with a public getter `GetCachedValue() interface{}`. + +The `UnpackInterfaces` method is to be invoked during message deserialization right +after `Unmarshal` and any interface values packed in `Any`s will be decoded +and stored in `cachedValue` for reference later. + +Then unpacked interface values can safely be used in any code afterwards +without knowledge of the `InterfaceRegistry` +and messages can introduce a simple getter to cast the cached value to the +correct interface type. + +This has the added benefit that unmarshaling of `Any` values only happens once +during initial deserialization rather than every time the value is read. Also, +when `Any` values are first packed (for instance in a call to +`NewMsgSubmitEvidence`), the original interface value is cached so that +unmarshaling isn't needed to read it again. + +`MsgSubmitEvidence` could implement `UnpackInterfaces`, plus a convenience getter +`GetEvidence` as follows: + +```go +func (msg MsgSubmitEvidence) UnpackInterfaces(ctx sdk.InterfaceRegistry) error { + var evi eviexported.Evidence + return ctx.UnpackAny(msg.Evidence, *evi) +} + +func (msg MsgSubmitEvidence) GetEvidence() eviexported.Evidence { + return msg.Evidence.GetCachedValue().(eviexported.Evidence) +} +``` + +### Amino Compatibility + +Our custom implementation of `Any` can be used transparently with Amino if used +with the proper codec instance. What this means is that interfaces packed within +`Any`s will be amino marshaled like regular Amino interfaces (assuming they +have been registered properly with Amino). + +In order for this functionality to work: + +* **all legacy code must use `*codec.LegacyAmino` instead of `*amino.Codec` which is + now a wrapper which properly handles `Any`** +* **all new code should use `Marshaler` which is compatible with both amino and + protobuf** +* Also, before v0.39, `codec.LegacyAmino` will be renamed to `codec.LegacyAmino`. + +### Why Wasn't X Chosen Instead + +For a more complete comparison to alternative protocols, see [here](https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f). + +### Cap'n Proto + +While [Cap’n Proto](https://capnproto.org/) does seem like an advantageous alternative to Protobuf +due to it's native support for interfaces/generics and built in canonicalization, it does lack the +rich client ecosystem compared to Protobuf and is a bit less mature. + +### FlatBuffers + +[FlatBuffers](https://google.github.io/flatbuffers/) is also a potentially viable alternative, with the +primary difference being that FlatBuffers does not need a parsing/unpacking step to a secondary +representation before you can access data, often coupled with per-object memory allocation. + +However, it would require great efforts into research and full understanding the scope of the migration +and path forward -- which isn't immediately clear. In addition, FlatBuffers aren't designed for +untrusted inputs. + +## Future Improvements & Roadmap + +In the future we may consider a compression layer right above the persistence +layer which doesn't change tx or merkle tree hashes, but reduces the storage +overhead of `Any`. In addition, we may adopt protobuf naming conventions which +make type URLs a bit more concise while remaining descriptive. + +Additional code generation support around the usage of `Any` is something that +could also be explored in the future to make the UX for go developers more +seamless. + +## Consequences + +### Positive + +* Significant performance gains. +* Supports backward and forward type compatibility. +* Better support for cross-language clients. + +### Negative + +* Learning curve required to understand and implement Protobuf messages. +* Slightly larger message size due to use of `Any`, although this could be offset + by a compression layer in the future + +### Neutral + +## References + +1. https://github.com/cosmos/cosmos-sdk/issues/4977 +2. https://github.com/cosmos/cosmos-sdk/issues/5444 diff --git a/docs/integrate/architecture/adr-020-protobuf-transaction-encoding.md b/docs/integrate/architecture/adr-020-protobuf-transaction-encoding.md new file mode 100644 index 000000000..344a7fef5 --- /dev/null +++ b/docs/integrate/architecture/adr-020-protobuf-transaction-encoding.md @@ -0,0 +1,464 @@ +# ADR 020: Protocol Buffer Transaction Encoding + +## Changelog + +* 2020 March 06: Initial Draft +* 2020 March 12: API Updates +* 2020 April 13: Added details on interface `oneof` handling +* 2020 April 30: Switch to `Any` +* 2020 May 14: Describe public key encoding +* 2020 June 08: Store `TxBody` and `AuthInfo` as bytes in `SignDoc`; Document `TxRaw` as broadcast and storage type. +* 2020 August 07: Use ADR 027 for serializing `SignDoc`. +* 2020 August 19: Move sequence field from `SignDoc` to `SignerInfo`, as discussed in [#6966](https://github.com/cosmos/cosmos-sdk/issues/6966). +* 2020 September 25: Remove `PublicKey` type in favor of `secp256k1.PubKey`, `ed25519.PubKey` and `multisig.LegacyAminoPubKey`. +* 2020 October 15: Add `GetAccount` and `GetAccountWithHeight` methods to the `AccountRetriever` interface. +* 2021 Feb 24: The Cosmos SDK does not use Tendermint's `PubKey` interface anymore, but its own `cryptotypes.PubKey`. Updates to reflect this. +* 2021 May 3: Rename `clientCtx.JSONMarshaler` to `clientCtx.JSONCodec`. +* 2021 June 10: Add `clientCtx.Codec: codec.Codec`. + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](adr-019-protobuf-state-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +Specifically, the client-side migration path primarily includes tx generation and +signing, message construction and routing, in addition to CLI & REST handlers and +business logic (i.e. queriers). + +With this in mind, we will tackle the migration path via two main areas, txs and +querying. However, this ADR solely focuses on transactions. Querying should be +addressed in a future ADR, but it should build off of these proposals. + +Based on detailed discussions ([\#6030](https://github.com/cosmos/cosmos-sdk/issues/6030) +and [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078)), the original +design for transactions was changed substantially from an `oneof` /JSON-signing +approach to the approach described below. + +## Decision + +### Transactions + +Since interface values are encoded with `google.protobuf.Any` in state (see [ADR 019](adr-019-protobuf-state-encoding.md)), +`sdk.Msg`s are encoding with `Any` in transactions. + +One of the main goals of using `Any` to encode interface values is to have a +core set of types which is reused by apps so that +clients can safely be compatible with as many chains as possible. + +It is one of the goals of this specification to provide a flexible cross-chain transaction +format that can serve a wide variety of use cases without breaking client +compatibility. + +In order to facilitate signing, transactions are separated into `TxBody`, +which will be re-used by `SignDoc` below, and `signatures`: + +```protobuf +// types/types.proto +package cosmos_sdk.v1; + +message Tx { + TxBody body = 1; + AuthInfo auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +// A variant of Tx that pins the signer's exact binary represenation of body and +// auth_info. This is used for signing, broadcasting and verification. The binary +// `serialize(tx: TxRaw)` is stored in Tendermint and the hash `sha256(serialize(tx: TxRaw))` +// becomes the "txhash", commonly used as the transaction ID. +message TxRaw { + // A protobuf serialization of a TxBody that matches the representation in SignDoc. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in SignDoc. + bytes auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +message TxBody { + // A list of messages to be executed. The required signers of those messages define + // the number and order of elements in AuthInfo's signer_infos and Tx's signatures. + // Each required signer address is added to the list only the first time it occurs. + // + // By convention, the first required signer (usually from the first message) is referred + // to as the primary signer and pays the fee for the whole transaction. + repeated google.protobuf.Any messages = 1; + string memo = 2; + int64 timeout_height = 3; + repeated google.protobuf.Any extension_options = 1023; +} + +message AuthInfo { + // This list defines the signing modes for the required signers. The number + // and order of elements must match the required signers from TxBody's messages. + // The first element is the primary signer and the one which pays the fee. + repeated SignerInfo signer_infos = 1; + // The fee can be calculated based on the cost of evaluating the body and doing signature verification of the signers. This can be estimated via simulation. + Fee fee = 2; +} + +message SignerInfo { + // The public key is optional for accounts that already exist in state. If unset, the + // verifier can use the required signer address for this position and lookup the public key. + google.protobuf.Any public_key = 1; + // ModeInfo describes the signing mode of the signer and is a nested + // structure to support nested multisig pubkey's + ModeInfo mode_info = 2; + // sequence is the sequence of the account, which describes the + // number of committed transactions signed by a given address. It is used to prevent + // replay attacks. + uint64 sequence = 3; +} + +message ModeInfo { + oneof sum { + Single single = 1; + Multi multi = 2; + } + + // Single is the mode info for a single signer. It is structured as a message + // to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the future + message Single { + SignMode mode = 1; + } + + // Multi is the mode info for a multisig public key + message Multi { + // bitarray specifies which keys within the multisig are signing + CompactBitArray bitarray = 1; + // mode_infos is the corresponding modes of the signers of the multisig + // which could include nested multisig public keys + repeated ModeInfo mode_infos = 2; + } +} + +enum SignMode { + SIGN_MODE_UNSPECIFIED = 0; + + SIGN_MODE_DIRECT = 1; + + SIGN_MODE_TEXTUAL = 2; + + SIGN_MODE_LEGACY_AMINO_JSON = 127; +} +``` + +As will be discussed below, in order to include as much of the `Tx` as possible +in the `SignDoc`, `SignerInfo` is separated from signatures so that only the +raw signatures themselves live outside of what is signed over. + +Because we are aiming for a flexible, extensible cross-chain transaction +format, new transaction processing options should be added to `TxBody` as soon +those use cases are discovered, even if they can't be implemented yet. + +Because there is coordination overhead in this, `TxBody` includes an +`extension_options` field which can be used for any transaction processing +options that are not already covered. App developers should, nevertheless, +attempt to upstream important improvements to `Tx`. + +### Signing + +All of the signing modes below aim to provide the following guarantees: + +* **No Malleability**: `TxBody` and `AuthInfo` cannot change once the transaction + is signed +* **Predictable Gas**: if I am signing a transaction where I am paying a fee, + the final gas is fully dependent on what I am signing + +These guarantees give the maximum amount confidence to message signers that +manipulation of `Tx`s by intermediaries can't result in any meaningful changes. + +#### `SIGN_MODE_DIRECT` + +The "direct" signing behavior is to sign the raw `TxBody` bytes as broadcast over +the wire. This has the advantages of: + +* requiring the minimum additional client capabilities beyond a standard protocol + buffers implementation +* leaving effectively zero holes for transaction malleability (i.e. there are no + subtle differences between the signing and encoding formats which could + potentially be exploited by an attacker) + +Signatures are structured using the `SignDoc` below which reuses the serialization of +`TxBody` and `AuthInfo` and only adds the fields which are needed for signatures: + +```protobuf +// types/types.proto +message SignDoc { + // A protobuf serialization of a TxBody that matches the representation in TxRaw. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in TxRaw. + bytes auth_info = 2; + string chain_id = 3; + uint64 account_number = 4; +} +``` + +In order to sign in the default mode, clients take the following steps: + +1. Serialize `TxBody` and `AuthInfo` using any valid protobuf implementation. +2. Create a `SignDoc` and serialize it using [ADR 027](adr-027-deterministic-protobuf-serialization.md). +3. Sign the encoded `SignDoc` bytes. +4. Build a `TxRaw` and serialize it for broadcasting. + +Signature verification is based on comparing the raw `TxBody` and `AuthInfo` +bytes encoded in `TxRaw` not based on any ["canonicalization"](https://github.com/regen-network/canonical-proto3) +algorithm which creates added complexity for clients in addition to preventing +some forms of upgradeability (to be addressed later in this document). + +Signature verifiers do: + +1. Deserialize a `TxRaw` and pull out `body` and `auth_info`. +2. Create a list of required signer addresses from the messages. +3. For each required signer: + * Pull account number and sequence from the state. + * Obtain the public key either from state or `AuthInfo`'s `signer_infos`. + * Create a `SignDoc` and serialize it using [ADR 027](adr-027-deterministic-protobuf-serialization.md). + * Verify the signature at the same list position against the serialized `SignDoc`. + +#### `SIGN_MODE_LEGACY_AMINO` + +In order to support legacy wallets and exchanges, Amino JSON will be temporarily +supported transaction signing. Once wallets and exchanges have had a +chance to upgrade to protobuf based signing, this option will be disabled. In +the meantime, it is foreseen that disabling the current Amino signing would cause +too much breakage to be feasible. Note that this is mainly a requirement of the +Cosmos Hub and other chains may choose to disable Amino signing immediately. + +Legacy clients will be able to sign a transaction using the current Amino +JSON format and have it encoded to protobuf using the REST `/tx/encode` +endpoint before broadcasting. + +#### `SIGN_MODE_TEXTUAL` + +As was discussed extensively in [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078), +there is a desire for a human-readable signing encoding, especially for hardware +wallets like the [Ledger](https://www.ledger.com) which display +transaction contents to users before signing. JSON was an attempt at this but +falls short of the ideal. + +`SIGN_MODE_TEXTUAL` is intended as a placeholder for a human-readable +encoding which will replace Amino JSON. This new encoding should be even more +focused on readability than JSON, possibly based on formatting strings like +[MessageFormat](http://userguide.icu-project.org/formatparse/messages). + +In order to ensure that the new human-readable format does not suffer from +transaction malleability issues, `SIGN_MODE_TEXTUAL` +requires that the _human-readable bytes are concatenated with the raw `SignDoc`_ +to generate sign bytes. + +Multiple human-readable formats (maybe even localized messages) may be supported +by `SIGN_MODE_TEXTUAL` when it is implemented. + +### Unknown Field Filtering + +Unknown fields in protobuf messages should generally be rejected by transaction +processors because: + +* important data may be present in the unknown fields, that if ignored, will + cause unexpected behavior for clients +* they present a malleability vulnerability where attackers can bloat tx size + by adding random uninterpreted data to unsigned content (i.e. the master `Tx`, + not `TxBody`) + +There are also scenarios where we may choose to safely ignore unknown fields +(https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-624400188) to +provide graceful forwards compatibility with newer clients. + +We propose that field numbers with bit 11 set (for most use cases this is +the range of 1024-2047) be considered non-critical fields that can safely be +ignored if unknown. + +To handle this we will need a unknown field filter that: + +* always rejects unknown fields in unsigned content (i.e. top-level `Tx` and + unsigned parts of `AuthInfo` if present based on the signing mode) +* rejects unknown fields in all messages (including nested `Any`s) other than + fields with bit 11 set + +This will likely need to be a custom protobuf parser pass that takes message bytes +and `FileDescriptor`s and returns a boolean result. + +### Public Key Encoding + +Public keys in the Cosmos SDK implement the `cryptotypes.PubKey` interface. +We propose to use `Any` for protobuf encoding as we are doing with other interfaces (for example, in `BaseAccount.PubKey` and `SignerInfo.PublicKey`). +The following public keys are implemented: secp256k1, secp256r1, ed25519 and legacy-multisignature. + +Ex: + +```protobuf +message PubKey { + bytes key = 1; +} +``` + +`multisig.LegacyAminoPubKey` has an array of `Any`'s member to support any +protobuf public key type. + +Apps should only attempt to handle a registered set of public keys that they +have tested. The provided signature verification ante handler decorators will +enforce this. + +### CLI & REST + +Currently, the REST and CLI handlers encode and decode types and txs via Amino +JSON encoding using a concrete Amino codec. Being that some of the types dealt with +in the client can be interfaces, similar to how we described in [ADR 019](adr-019-protobuf-state-encoding.md), +the client logic will now need to take a codec interface that knows not only how +to handle all the types, but also knows how to generate transactions, signatures, +and messages. + +```go +type AccountRetriever interface { + GetAccount(clientCtx Context, addr sdk.AccAddress) (client.Account, error) + GetAccountWithHeight(clientCtx Context, addr sdk.AccAddress) (client.Account, int64, error) + EnsureExists(clientCtx client.Context, addr sdk.AccAddress) error + GetAccountNumberSequence(clientCtx client.Context, addr sdk.AccAddress) (uint64, uint64, error) +} + +type Generator interface { + NewTx() TxBuilder + NewFee() ClientFee + NewSignature() ClientSignature + MarshalTx(tx types.Tx) ([]byte, error) +} + +type TxBuilder interface { + GetTx() sdk.Tx + + SetMsgs(...sdk.Msg) error + GetSignatures() []sdk.Signature + SetSignatures(...sdk.Signature) + GetFee() sdk.Fee + SetFee(sdk.Fee) + GetMemo() string + SetMemo(string) +} +``` + +We then update `Context` to have new fields: `Codec`, `TxGenerator`, +and `AccountRetriever`, and we update `AppModuleBasic.GetTxCmd` to take +a `Context` which should have all of these fields pre-populated. + +Each client method should then use one of the `Init` methods to re-initialize +the pre-populated `Context`. `tx.GenerateOrBroadcastTx` can be used to +generate or broadcast a transaction. For example: + +```go +import "github.com/spf13/cobra" +import "github.com/cosmos/cosmos-sdk/client" +import "github.com/cosmos/cosmos-sdk/client/tx" + +func NewCmdDoSomething(clientCtx client.Context) *cobra.Command { + return &cobra.Command{ + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := ctx.InitWithInput(cmd.InOrStdin()) + msg := NewSomeMsg{...} + tx.GenerateOrBroadcastTx(clientCtx, msg) + }, + } +} +``` + +## Future Improvements + +### `SIGN_MODE_TEXTUAL` specification + +A concrete specification and implementation of `SIGN_MODE_TEXTUAL` is intended +as a near-term future improvement so that the ledger app and other wallets +can gracefully transition away from Amino JSON. + +### `SIGN_MODE_DIRECT_AUX` + +(\*Documented as option (3) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933) + +We could add a mode `SIGN_MODE_DIRECT_AUX` +to support scenarios where multiple signatures +are being gathered into a single transaction but the message composer does not +yet know which signatures will be included in the final transaction. For instance, +I may have a 3/5 multisig wallet and want to send a `TxBody` to all 5 +signers to see who signs first. As soon as I have 3 signatures then I will go +ahead and build the full transaction. + +With `SIGN_MODE_DIRECT`, each signer needs +to sign the full `AuthInfo` which includes the full list of all signers and +their signing modes, making the above scenario very hard. + +`SIGN_MODE_DIRECT_AUX` would allow "auxiliary" signers to create their signature +using only `TxBody` and their own `PublicKey`. This allows the full list of +signers in `AuthInfo` to be delayed until signatures have been collected. + +An "auxiliary" signer is any signer besides the primary signer who is paying +the fee. For the primary signer, the full `AuthInfo` is actually needed to calculate gas and fees +because that is dependent on how many signers and which key types and signing +modes they are using. Auxiliary signers, however, do not need to worry about +fees or gas and thus can just sign `TxBody`. + +To generate a signature in `SIGN_MODE_DIRECT_AUX` these steps would be followed: + +1. Encode `SignDocAux` (with the same requirement that fields must be serialized + in order): + + ```protobuf + // types/types.proto + message SignDocAux { + bytes body_bytes = 1; + // PublicKey is included in SignDocAux : + // 1. as a special case for multisig public keys. For multisig public keys, + // the signer should use the top-level multisig public key they are signing + // against, not their own public key. This is to prevent against a form + // of malleability where a signature could be taken out of context of the + // multisig key that was intended to be signed for + // 2. to guard against scenario where configuration information is encoded + // in public keys (it has been proposed) such that two keys can generate + // the same signature but have different security properties + // + // By including it here, the composer of AuthInfo cannot reference the + // a public key variant the signer did not intend to use + PublicKey public_key = 2; + string chain_id = 3; + uint64 account_number = 4; + } + ``` + +2. Sign the encoded `SignDocAux` bytes +3. Send their signature and `SignerInfo` to primary signer who will then + sign and broadcast the final transaction (with `SIGN_MODE_DIRECT` and `AuthInfo` + added) once enough signatures have been collected + +### `SIGN_MODE_DIRECT_RELAXED` + +(_Documented as option (1)(a) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933_) + +This is a variation of `SIGN_MODE_DIRECT` where multiple signers wouldn't need to +coordinate public keys and signing modes in advance. It would involve an alternate +`SignDoc` similar to `SignDocAux` above with fee. This could be added in the future +if client developers found the burden of collecting public keys and modes in advance +too burdensome. + +## Consequences + +### Positive + +* Significant performance gains. +* Supports backward and forward type compatibility. +* Better support for cross-language clients. +* Multiple signing modes allow for greater protocol evolution + +### Negative + +* `google.protobuf.Any` type URLs increase transaction size although the effect + may be negligible or compression may be able to mitigate it. + +### Neutral + +## References diff --git a/docs/integrate/architecture/adr-021-protobuf-query-encoding.md b/docs/integrate/architecture/adr-021-protobuf-query-encoding.md new file mode 100644 index 000000000..76fd40feb --- /dev/null +++ b/docs/integrate/architecture/adr-021-protobuf-query-encoding.md @@ -0,0 +1,256 @@ +# ADR 021: Protocol Buffer Query Encoding + +## Changelog + +* 2020 March 27: Initial Draft + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](adr-019-protobuf-state-encoding.md) and +[ADR 020](adr-020-protobuf-transaction-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +This ADR continues from [ADD 020](adr-020-protobuf-transaction-encoding.md) +to specify the encoding of queries. + +## Decision + +### Custom Query Definition + +Modules define custom queries through a protocol buffers `service` definition. +These `service` definitions are generally associated with and used by the +GRPC protocol. However, the protocol buffers specification indicates that +they can be used more generically by any request/response protocol that uses +protocol buffer encoding. Thus, we can use `service` definitions for specifying +custom ABCI queries and even reuse a substantial amount of the GRPC infrastructure. + +Each module with custom queries should define a service canonically named `Query`: + +```protobuf +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { } +} +``` + +#### Handling of Interface Types + +Modules that use interface types and need true polymorphism generally force a +`oneof` up to the app-level that provides the set of concrete implementations of +that interface that the app supports. While app's are welcome to do the same for +queries and implement an app-level query service, it is recommended that modules +provide query methods that expose these interfaces via `google.protobuf.Any`. +There is a concern on the transaction level that the overhead of `Any` is too +high to justify its usage. However for queries this is not a concern, and +providing generic module-level queries that use `Any` does not preclude apps +from also providing app-level queries that return use the app-level `oneof`s. + +A hypothetical example for the `gov` module would look something like: + +```protobuf +// x/gov/types/types.proto + +import "google/protobuf/any.proto"; + +service Query { + rpc GetProposal(GetProposalParams) returns (AnyProposal) { } +} + +message AnyProposal { + ProposalBase base = 1; + google.protobuf.Any content = 2; +} +``` + +### Custom Query Implementation + +In order to implement the query service, we can reuse the existing [gogo protobuf](https://github.com/cosmos/gogoproto) +grpc plugin, which for a service named `Query` generates an interface named +`QueryServer` as below: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +The custom queries for our module are implemented by implementing this interface. + +The first parameter in this generated interface is a generic `context.Context`, +whereas querier methods generally need an instance of `sdk.Context` to read +from the store. Since arbitrary values can be attached to `context.Context` +using the `WithValue` and `Value` methods, the Cosmos SDK should provide a function +`sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +An example implementation of `QueryBalance` for the bank module as above would +look something like: + +```go +type Querier struct { + Keeper +} + +func (q Querier) QueryBalance(ctx context.Context, params *types.QueryBalanceParams) (*sdk.Coin, error) { + balance := q.GetBalance(sdk.UnwrapSDKContext(ctx), params.Address, params.Denom) + return &balance, nil +} +``` + +### Custom Query Registration and Routing + +Query server implementations as above would be registered with `AppModule`s using +a new method `RegisterQueryService(grpc.Server)` which could be implemented simply +as below: + +```go +// x/bank/module.go +func (am AppModule) RegisterQueryService(server grpc.Server) { + types.RegisterQueryServer(server, keeper.Querier{am.keeper}) +} +``` + +Underneath the hood, a new method `RegisterService(sd *grpc.ServiceDesc, handler interface{})` +will be added to the existing `baseapp.QueryRouter` to add the queries to the custom +query routing table (with the routing method being described below). +The signature for this method matches the existing +`RegisterServer` method on the GRPC `Server` type where `handler` is the custom +query server implementation described above. + +GRPC-like requests are routed by the service name (ex. `cosmos_sdk.x.bank.v1.Query`) +and method name (ex. `QueryBalance`) combined with `/`s to form a full +method name (ex. `/cosmos_sdk.x.bank.v1.Query/QueryBalance`). This gets translated +into an ABCI query as `custom/cosmos_sdk.x.bank.v1.Query/QueryBalance`. Service handlers +registered with `QueryRouter.RegisterService` will be routed this way. + +Beyond the method name, GRPC requests carry a protobuf encoded payload, which maps naturally +to `RequestQuery.Data`, and receive a protobuf encoded response or error. Thus +there is a quite natural mapping of GRPC-like rpc methods to the existing +`sdk.Query` and `QueryRouter` infrastructure. + +This basic specification allows us to reuse protocol buffer `service` definitions +for ABCI custom queries substantially reducing the need for manual decoding and +encoding in query methods. + +### GRPC Protocol Support + +In addition to providing an ABCI query pathway, we can easily provide a GRPC +proxy server that routes requests in the GRPC protocol to ABCI query requests +under the hood. In this way, clients could use their host languages' existing +GRPC implementations to make direct queries against Cosmos SDK app's using +these `service` definitions. In order for this server to work, the `QueryRouter` +on `BaseApp` will need to expose the service handlers registered with +`QueryRouter.RegisterService` to the proxy server implementation. Nodes could +launch the proxy server on a separate port in the same process as the ABCI app +with a command-line flag. + +### REST Queries and Swagger Generation + +[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) is a project that +translates REST calls into GRPC calls using special annotations on service +methods. Modules that want to expose REST queries should add `google.api.http` +annotations to their `rpc` methods as in this example below. + +```protobuf +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { + option (google.api.http) = { + get: "/x/bank/v1/balance/{address}/{denom}" + }; + } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { + option (google.api.http) = { + get: "/x/bank/v1/balances/{address}" + }; + } +} +``` + +grpc-gateway will work direcly against the GRPC proxy described above which will +translate requests to ABCI queries under the hood. grpc-gateway can also +generate Swagger definitions automatically. + +In the current implementation of REST queries, each module needs to implement +REST queries manually in addition to ABCI querier methods. Using the grpc-gateway +approach, there will be no need to generate separate REST query handlers, just +query servers as described above as grpc-gateway handles the translation of protobuf +to REST as well as Swagger definitions. + +The Cosmos SDK should provide CLI commands for apps to start GRPC gateway either in +a separate process or the same process as the ABCI app, as well as provide a +command for generating grpc-gateway proxy `.proto` files and the `swagger.json` +file. + +### Client Usage + +The gogo protobuf grpc plugin generates client interfaces in addition to server +interfaces. For the `Query` service defined above we would get a `QueryClient` +interface like: + +```go +type QueryClient interface { + QueryBalance(ctx context.Context, in *QueryBalanceParams, opts ...grpc.CallOption) (*types.Coin, error) + QueryAllBalances(ctx context.Context, in *QueryAllBalancesParams, opts ...grpc.CallOption) (*QueryAllBalancesResponse, error) +} +``` + +Via a small patch to gogo protobuf ([gogo/protobuf#675](https://github.com/gogo/protobuf/pull/675)) +we have tweaked the grpc codegen to use an interface rather than concrete type +for the generated client struct. This allows us to also reuse the GRPC infrastructure +for ABCI client queries. + +1Context`will receive a new method`QueryConn`that returns a`ClientConn` +that routes calls to ABCI queries + +Clients (such as CLI methods) will then be able to call query methods like this: + +```go +clientCtx := client.NewContext() +queryClient := types.NewQueryClient(clientCtx.QueryConn()) +params := &types.QueryBalanceParams{addr, denom} +result, err := queryClient.QueryBalance(gocontext.Background(), params) +``` + +### Testing + +Tests would be able to create a query client directly from keeper and `sdk.Context` +references using a `QueryServerTestHelper` as below: + +```go +queryHelper := baseapp.NewQueryServerTestHelper(ctx) +types.RegisterQueryServer(queryHelper, keeper.Querier{app.BankKeeper}) +queryClient := types.NewQueryClient(queryHelper) +``` + +## Future Improvements + +## Consequences + +### Positive + +* greatly simplified querier implementation (no manual encoding/decoding) +* easy query client generation (can use existing grpc and swagger tools) +* no need for REST query implementations +* type safe query methods (generated via grpc plugin) +* going forward, there will be less breakage of query methods because of the +backwards compatibility guarantees provided by buf + +### Negative + +* all clients using the existing ABCI/REST queries will need to be refactored +for both the new GRPC/REST query paths as well as protobuf/proto-json encoded +data, but this is more or less unavoidable in the protobuf refactoring + +### Neutral + +## References diff --git a/docs/integrate/architecture/adr-022-custom-panic-handling.md b/docs/integrate/architecture/adr-022-custom-panic-handling.md new file mode 100644 index 000000000..2cdce59f4 --- /dev/null +++ b/docs/integrate/architecture/adr-022-custom-panic-handling.md @@ -0,0 +1,218 @@ +# ADR 022: Custom BaseApp panic handling + +## Changelog + +* 2020 Apr 24: Initial Draft +* 2021 Sep 14: Superseded by ADR-045 + +## Status + +SUPERSEDED by ADR-045 + +## Context + +The current implementation of BaseApp does not allow developers to write custom error handlers during panic recovery +[runTx()](https://github.com/cosmos/cosmos-sdk/blob/bad4ca75f58b182f600396ca350ad844c18fc80b/baseapp/baseapp.go#L539) +method. We think that this method can be more flexible and can give Cosmos SDK users more options for customizations without +the need to rewrite whole BaseApp. Also there's one special case for `sdk.ErrorOutOfGas` error handling, that case +might be handled in a "standard" way (middleware) alongside the others. + +We propose middleware-solution, which could help developers implement the following cases: + +* add external logging (let's say sending reports to external services like [Sentry](https://sentry.io)); +* call panic for specific error cases; + +It will also make `OutOfGas` case and `default` case one of the middlewares. +`Default` case wraps recovery object to an error and logs it ([example middleware implementation](#recovery-middleware)). + +Our project has a sidecar service running alongside the blockchain node (smart contracts virtual machine). It is +essential that node <-> sidecar connectivity stays stable for TXs processing. So when the communication breaks we need +to crash the node and reboot it once the problem is solved. That behaviour makes node's state machine execution +deterministic. As all keeper panics are caught by runTx's `defer()` handler, we have to adjust the BaseApp code +in order to customize it. + +## Decision + +### Design + +#### Overview + +Instead of hardcoding custom error handling into BaseApp we suggest using set of middlewares which can be customized +externally and will allow developers use as many custom error handlers as they want. Implementation with tests +can be found [here](https://github.com/cosmos/cosmos-sdk/pull/6053). + +#### Implementation details + +##### Recovery handler + +New `RecoveryHandler` type added. `recoveryObj` input argument is an object returned by the standard Go function +`recover()` from the `builtin` package. + +```go +type RecoveryHandler func(recoveryObj interface{}) error +``` + +Handler should type assert (or other methods) an object to define if object should be handled. +`nil` should be returned if input object can't be handled by that `RecoveryHandler` (not a handler's target type). +Not `nil` error should be returned if input object was handled and middleware chain execution should be stopped. + +An example: + +```go +func exampleErrHandler(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { return nil } + + if someSpecificError.Is(err) { + panic(customPanicMsg) + } else { + return nil + } +} +``` + +This example breaks the application execution, but it also might enrich the error's context like the `OutOfGas` handler. + +##### Recovery middleware + +We also add a middleware type (decorator). That function type wraps `RecoveryHandler` and returns the next middleware in +execution chain and handler's `error`. Type is used to separate actual `recovery()` object handling from middleware +chain processing. + +```go +type recoveryMiddleware func(recoveryObj interface{}) (recoveryMiddleware, error) + +func newRecoveryMiddleware(handler RecoveryHandler, next recoveryMiddleware) recoveryMiddleware { + return func(recoveryObj interface{}) (recoveryMiddleware, error) { + if err := handler(recoveryObj); err != nil { + return nil, err + } + return next, nil + } +} +``` + +Function receives a `recoveryObj` object and returns: + +* (next `recoveryMiddleware`, `nil`) if object wasn't handled (not a target type) by `RecoveryHandler`; +* (`nil`, not nil `error`) if input object was handled and other middlewares in the chain should not be executed; +* (`nil`, `nil`) in case of invalid behavior. Panic recovery might not have been properly handled; +this can be avoided by always using a `default` as a rightmost middleware in the chain (always returns an `error`'); + +`OutOfGas` middleware example: + +```go +func newOutOfGasRecoveryMiddleware(gasWanted uint64, ctx sdk.Context, next recoveryMiddleware) recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(sdk.ErrorOutOfGas) + if !ok { return nil } + + return errorsmod.Wrap( + sdkerrors.ErrOutOfGas, fmt.Sprintf( + "out of gas in location: %v; gasWanted: %d, gasUsed: %d", err.Descriptor, gasWanted, ctx.GasMeter().GasConsumed(), + ), + ) + } + + return newRecoveryMiddleware(handler, next) +} +``` + +`Default` middleware example: + +```go +func newDefaultRecoveryMiddleware() recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + return errorsmod.Wrap( + sdkerrors.ErrPanic, fmt.Sprintf("recovered: %v\nstack:\n%v", recoveryObj, string(debug.Stack())), + ) + } + + return newRecoveryMiddleware(handler, nil) +} +``` + +##### Recovery processing + +Basic chain of middlewares processing would look like: + +```go +func processRecovery(recoveryObj interface{}, middleware recoveryMiddleware) error { + if middleware == nil { return nil } + + next, err := middleware(recoveryObj) + if err != nil { return err } + if next == nil { return nil } + + return processRecovery(recoveryObj, next) +} +``` + +That way we can create a middleware chain which is executed from left to right, the rightmost middleware is a +`default` handler which must return an `error`. + +##### BaseApp changes + +The `default` middleware chain must exist in a `BaseApp` object. `Baseapp` modifications: + +```go +type BaseApp struct { + // ... + runTxRecoveryMiddleware recoveryMiddleware +} + +func NewBaseApp(...) { + // ... + app.runTxRecoveryMiddleware = newDefaultRecoveryMiddleware() +} + +func (app *BaseApp) runTx(...) { + // ... + defer func() { + if r := recover(); r != nil { + recoveryMW := newOutOfGasRecoveryMiddleware(gasWanted, ctx, app.runTxRecoveryMiddleware) + err, result = processRecovery(r, recoveryMW), nil + } + + gInfo = sdk.GasInfo{GasWanted: gasWanted, GasUsed: ctx.GasMeter().GasConsumed()} + }() + // ... +} +``` + +Developers can add their custom `RecoveryHandler`s by providing `AddRunTxRecoveryHandler` as a BaseApp option parameter to the `NewBaseapp` constructor: + +```go +func (app *BaseApp) AddRunTxRecoveryHandler(handlers ...RecoveryHandler) { + for _, h := range handlers { + app.runTxRecoveryMiddleware = newRecoveryMiddleware(h, app.runTxRecoveryMiddleware) + } +} +``` + +This method would prepend handlers to an existing chain. + +## Consequences + +### Positive + +* Developers of Cosmos SDK based projects can add custom panic handlers to: + * add error context for custom panic sources (panic inside of custom keepers); + * emit `panic()`: passthrough recovery object to the Tendermint core; + * other necessary handling; +* Developers can use standard Cosmos SDK `BaseApp` implementation, rather that rewriting it in their projects; +* Proposed solution doesn't break the current "standard" `runTx()` flow; + +### Negative + +* Introduces changes to the execution model design. + +### Neutral + +* `OutOfGas` error handler becomes one of the middlewares; +* Default panic handler becomes one of the middlewares; + +## References + +* [PR-6053 with proposed solution](https://github.com/cosmos/cosmos-sdk/pull/6053) +* [Similar solution. ADR-010 Modular AnteHandler](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-010-modular-antehandler.md) diff --git a/docs/integrate/architecture/adr-023-protobuf-naming.md b/docs/integrate/architecture/adr-023-protobuf-naming.md new file mode 100644 index 000000000..4360befde --- /dev/null +++ b/docs/integrate/architecture/adr-023-protobuf-naming.md @@ -0,0 +1,263 @@ +# ADR 023: Protocol Buffer Naming and Versioning Conventions + +## Changelog + +* 2020 April 27: Initial Draft +* 2020 August 5: Update guidelines + +## Status + +Accepted + +## Context + +Protocol Buffers provide a basic [style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide) builds upon that. To the +extent possible, we want to follow industry accepted guidelines and wisdom for +the effective usage of protobuf, deviating from those only when there is clear +rationale for our use case. + +### Adoption of `Any` + +The adoption of `google.protobuf.Any` as the recommended approach for encoding +interface types (as opposed to `oneof`) makes package naming a central part +of the encoding as fully-qualified message names now appear in encoded +messages. + +### Current Directory Organization + +Thus far we have mostly followed [Buf's](https://buf.build) [DEFAULT](https://buf.build/docs/lint-checkers#default) +recommendations, with the minor deviation of disabling [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout) +which although being convenient for developing code comes with the warning +from Buf that: + +> you will have a very bad time with many Protobuf plugins across various languages if you do not do this + +### Adoption of gRPC Queries + +In [ADR 021](adr-021-protobuf-query-encoding.md), gRPC was adopted for Protobuf +native queries. The full gRPC service path thus becomes a key part of ABCI query +path. In the future, gRPC queries may be allowed from within persistent scripts +by technologies such as CosmWasm and these query routes would be stored within +script binaries. + +## Decision + +The goal of this ADR is to provide thoughtful naming conventions that: + +* encourage a good user experience for when users interact directly with +.proto files and fully-qualified protobuf names +* balance conciseness against the possibility of either over-optimizing (making +names too short and cryptic) or under-optimizing (just accepting bloated names +with lots of redundant information) + +These guidelines are meant to act as a style guide for both the Cosmos SDK and +third-party modules. + +As a starting point, we should adopt all of the [DEFAULT](https://buf.build/docs/lint-checkers#default) +checkers in [Buf's](https://buf.build) including [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout), +except: + +* [PACKAGE_VERSION_SUFFIX](https://buf.build/docs/lint-checkers#package_version_suffix) +* [SERVICE_SUFFIX](https://buf.build/docs/lint-checkers#service_suffix) + +Further guidelines to be described below. + +### Principles + +#### Concise and Descriptive Names + +Names should be descriptive enough to convey their meaning and distinguish +them from other names. + +Given that we are using fully-qualifed names within +`google.protobuf.Any` as well as within gRPC query routes, we should aim to +keep names concise, without going overboard. The general rule of thumb should +be if a shorter name would convey more or else the same thing, pick the shorter +name. + +For instance, `cosmos.bank.MsgSend` (19 bytes) conveys roughly the same information +as `cosmos_sdk.x.bank.v1.MsgSend` (28 bytes) but is more concise. + +Such conciseness makes names both more pleasant to work with and take up less +space within transactions and on the wire. + +We should also resist the temptation to over-optimize, by making names +cryptically short with abbreviations. For instance, we shouldn't try to +reduce `cosmos.bank.MsgSend` to `csm.bk.MSnd` just to save a few bytes. + +The goal is to make names **_concise but not cryptic_**. + +#### Names are for Clients First + +Package and type names should be chosen for the benefit of users, not +necessarily because of legacy concerns related to the go code-base. + +#### Plan for Longevity + +In the interests of long-term support, we should plan on the names we do +choose to be in usage for a long time, so now is the opportunity to make +the best choices for the future. + +### Versioning + +#### Guidelines on Stable Package Versions + +In general, schema evolution is the way to update protobuf schemas. That means that new fields, +messages, and RPC methods are _added_ to existing schemas and old fields, messages and RPC methods +are maintained as long as possible. + +Breaking things is often unacceptable in a blockchain scenario. For instance, immutable smart contracts +may depend on certain data schemas on the host chain. If the host chain breaks those schemas, the smart +contract may be irreparably broken. Even when things can be fixed (for instance in client software), +this often comes at a high cost. + +Instead of breaking things, we should make every effort to evolve schemas rather than just breaking them. +[Buf](https://buf.build) breaking change detection should be used on all stable (non-alpha or beta) packages +to prevent such breakage. + +With that in mind, different stable versions (i.e. `v1` or `v2`) of a package should more or less be considered +different packages and this should be last resort approach for upgrading protobuf schemas. Scenarios where creating +a `v2` may make sense are: + +* we want to create a new module with similar functionality to an existing module and adding `v2` is the most natural +way to do this. In that case, there are really just two different, but similar modules with different APIs. +* we want to add a new revamped API for an existing module and it's just too cumbersome to add it to the existing package, +so putting it in `v2` is cleaner for users. In this case, care should be made to not deprecate support for +`v1` if it is actively used in immutable smart contracts. + +#### Guidelines on unstable (alpha and beta) package versions + +The following guidelines are recommended for marking packages as alpha or beta: + +* marking something as `alpha` or `beta` should be a last resort and just putting something in the +stable package (i.e. `v1` or `v2`) should be preferred +* a package _should_ be marked as `alpha` _if and only if_ there are active discussions to remove +or significantly alter the package in the near future +* a package _should_ be marked as `beta` _if and only if_ there is an active discussion to +significantly refactor/rework the functionality in the near future but not remove it +* modules _can and should_ have types in both stable (i.e. `v1` or `v2`) and unstable (`alpha` or `beta`) packages. + +_`alpha` and `beta` should not be used to avoid responsibility for maintaining compatibility._ +Whenever code is released into the wild, especially on a blockchain, there is a high cost to changing things. In some +cases, for instance with immutable smart contracts, a breaking change may be impossible to fix. + +When marking something as `alpha` or `beta`, maintainers should ask the questions: + +* what is the cost of asking others to change their code vs the benefit of us maintaining the optionality to change it? +* what is the plan for moving this to `v1` and how will that affect users? + +`alpha` or `beta` should really be used to communicate "changes are planned". + +As a case study, gRPC reflection is in the package `grpc.reflection.v1alpha`. It hasn't been changed since +2017 and it is now used in other widely used software like gRPCurl. Some folks probably use it in production services +and so if they actually went and changed the package to `grpc.reflection.v1`, some software would break and +they probably don't want to do that... So now the `v1alpha` package is more or less the de-facto `v1`. Let's not do that. + +The following are guidelines for working with non-stable packages: + +* [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix) +(ex. `v1alpha1`) _should_ be used for non-stable packages +* non-stable packages should generally be excluded from breaking change detection +* immutable smart contract modules (i.e. CosmWasm) _should_ block smart contracts/persistent +scripts from interacting with `alpha`/`beta` packages + +#### Omit v1 suffix + +Instead of using [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix), +we can omit `v1` for packages that don't actually have a second version. This +allows for more concise names for common use cases like `cosmos.bank.Send`. +Packages that do have a second or third version can indicate that with `.v2` +or `.v3`. + +### Package Naming + +#### Adopt a short, unique top-level package name + +Top-level packages should adopt a short name that is known to not collide with +other names in common usage within the Cosmos ecosystem. In the near future, a +registry should be created to reserve and index top-level package names used +within the Cosmos ecosystem. Because the Cosmos SDK is intended to provide +the top-level types for the Cosmos project, the top-level package name `cosmos` +is recommended for usage within the Cosmos SDK instead of the longer `cosmos_sdk`. +[ICS](https://github.com/cosmos/ics) specifications could consider a +short top-level package like `ics23` based upon the standard number. + +#### Limit sub-package depth + +Sub-package depth should be increased with caution. Generally a single +sub-package is needed for a module or a library. Even though `x` or `modules` +is used in source code to denote modules, this is often unnecessary for .proto +files as modules are the primary thing sub-packages are used for. Only items which +are known to be used infrequently should have deep sub-package depths. + +For the Cosmos SDK, it is recommended that that we simply write `cosmos.bank`, +`cosmos.gov`, etc. rather than `cosmos.x.bank`. In practice, most non-module +types can go straight in the `cosmos` package or we can introduce a +`cosmos.base` package if needed. Note that this naming _will not_ change +go package names, i.e. the `cosmos.bank` protobuf package will still live in +`x/bank`. + +### Message Naming + +Message type names should be as concise possible without losing clarity. `sdk.Msg` +types which are used in transactions will retain the `Msg` prefix as that provides +helpful context. + +### Service and RPC Naming + +[ADR 021](adr-021-protobuf-query-encoding.md) specifies that modules should +implement a gRPC query service. We should consider the principle of conciseness +for query service and RPC names as these may be called from persistent script +modules such as CosmWasm. Also, users may use these query paths from tools like +[gRPCurl](https://github.com/fullstorydev/grpcurl). As an example, we can shorten +`/cosmos_sdk.x.bank.v1.QueryService/QueryBalance` to +`/cosmos.bank.Query/Balance` without losing much useful information. + +RPC request and response types _should_ follow the `ServiceNameMethodNameRequest`/ +`ServiceNameMethodNameResponse` naming convention. i.e. for an RPC method named `Balance` +on the `Query` service, the request and response types would be `QueryBalanceRequest` +and `QueryBalanceResponse`. This will be more self-explanatory than `BalanceRequest` +and `BalanceResponse`. + +#### Use just `Query` for the query service + +Instead of [Buf's default service suffix recommendation](https://github.com/cosmos/cosmos-sdk/pull/6033), +we should simply use the shorter `Query` for query services. + +For other types of gRPC services, we should consider sticking with Buf's +default recommendation. + +#### Omit `Get` and `Query` from query service RPC names + +`Get` and `Query` should be omitted from `Query` service names because they are +redundant in the fully-qualified name. For instance, `/cosmos.bank.Query/QueryBalance` +just says `Query` twice without any new information. + +## Future Improvements + +A registry of top-level package names should be created to coordinate naming +across the ecosystem, prevent collisions, and also help developers discover +useful schemas. A simple starting point would be a git repository with +community-based governance. + +## Consequences + +### Positive + +* names will be more concise and easier to read and type +* all transactions using `Any` will be at shorter (`_sdk.x` and `.v1` will be removed) +* `.proto` file imports will be more standard (without `"third_party/proto"` in +the path) +* code generation will be easier for clients because .proto files will be +in a single `proto/` directory which can be copied rather than scattered +throughout the Cosmos SDK + +### Negative + +### Neutral + +* `.proto` files will need to be reorganized and refactored +* some modules may need to be marked as alpha or beta + +## References diff --git a/docs/integrate/architecture/adr-024-coin-metadata.md b/docs/integrate/architecture/adr-024-coin-metadata.md new file mode 100644 index 000000000..71bedac5b --- /dev/null +++ b/docs/integrate/architecture/adr-024-coin-metadata.md @@ -0,0 +1,140 @@ +# ADR 024: Coin Metadata + +## Changelog + +* 05/19/2020: Initial draft + +## Status + +Proposed + +## Context + +Assets in the Cosmos SDK are represented via a `Coins` type that consists of an `amount` and a `denom`, +where the `amount` can be any arbitrarily large or small value. In addition, the Cosmos SDK uses an +account-based model where there are two types of primary accounts -- basic accounts and module accounts. +All account types have a set of balances that are composed of `Coins`. The `x/bank` module keeps +track of all balances for all accounts and also keeps track of the total supply of balances in an +application. + +With regards to a balance `amount`, the Cosmos SDK assumes a static and fixed unit of denomination, +regardless of the denomination itself. In other words, clients and apps built atop a Cosmos-SDK-based +chain may choose to define and use arbitrary units of denomination to provide a richer UX, however, by +the time a tx or operation reaches the Cosmos SDK state machine, the `amount` is treated as a single +unit. For example, for the Cosmos Hub (Gaia), clients assume 1 ATOM = 10^6 uatom, and so all txs and +operations in the Cosmos SDK work off of units of 10^6. + +This clearly provides a poor and limited UX especially as interoperability of networks increases and +as a result the total amount of asset types increases. We propose to have `x/bank` additionally keep +track of metadata per `denom` in order to help clients, wallet providers, and explorers improve their +UX and remove the requirement for making any assumptions on the unit of denomination. + +## Decision + +The `x/bank` module will be updated to store and index metadata by `denom`, specifically the "base" or +smallest unit -- the unit the Cosmos SDK state-machine works with. + +Metadata may also include a non-zero length list of denominations. Each entry contains the name of +the denomination `denom`, the exponent to the base and a list of aliases. An entry is to be +interpreted as `1 denom = 10^exponent base_denom` (e.g. `1 ETH = 10^18 wei` and `1 uatom = 10^0 uatom`). + +There are two denominations that are of high importance for clients: the `base`, which is the smallest +possible unit and the `display`, which is the unit that is commonly referred to in human communication +and on exchanges. The values in those fields link to an entry in the list of denominations. + +The list in `denom_units` and the `display` entry may be changed via governance. + +As a result, we can define the type as follows: + +```protobuf +message DenomUnit { + string denom = 1; + uint32 exponent = 2; + repeated string aliases = 3; +} + +message Metadata { + string description = 1; + repeated DenomUnit denom_units = 2; + string base = 3; + string display = 4; +} +``` + +As an example, the ATOM's metadata can be defined as follows: + +```json +{ + "name": "atom", + "description": "The native staking token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "uatom", + "exponent": 0, + "aliases": [ + "microatom" + ], + }, + { + "denom": "matom", + "exponent": 3, + "aliases": [ + "milliatom" + ] + }, + { + "denom": "atom", + "exponent": 6, + } + ], + "base": "uatom", + "display": "atom", +} +``` + +Given the above metadata, a client may infer the following things: + +* 4.3atom = 4.3 * (10^6) = 4,300,000uatom +* The string "atom" can be used as a display name in a list of tokens. +* The balance 4300000 can be displayed as 4,300,000uatom or 4,300matom or 4.3atom. + The `display` denomination 4.3atom is a good default if the authors of the client don't make + an explicit decision to choose a different representation. + +A client should be able to query for metadata by denom both via the CLI and REST interfaces. In +addition, we will add handlers to these interfaces to convert from any unit to another given unit, +as the base framework for this already exists in the Cosmos SDK. + +Finally, we need to ensure metadata exists in the `GenesisState` of the `x/bank` module which is also +indexed by the base `denom`. + +```go +type GenesisState struct { + SendEnabled bool `json:"send_enabled" yaml:"send_enabled"` + Balances []Balance `json:"balances" yaml:"balances"` + Supply sdk.Coins `json:"supply" yaml:"supply"` + DenomMetadata []Metadata `json:"denom_metadata" yaml:"denom_metadata"` +} +``` + +## Future Work + +In order for clients to avoid having to convert assets to the base denomination -- either manually or +via an endpoint, we may consider supporting automatic conversion of a given unit input. + +## Consequences + +### Positive + +* Provides clients, wallet providers and block explorers with additional data on + asset denomination to improve UX and remove any need to make assumptions on + denomination units. + +### Negative + +* A small amount of required additional storage in the `x/bank` module. The amount + of additional storage should be minimal as the amount of total assets should not + be large. + +### Neutral + +## References diff --git a/docs/integrate/architecture/adr-027-deterministic-protobuf-serialization.md b/docs/integrate/architecture/adr-027-deterministic-protobuf-serialization.md new file mode 100644 index 000000000..e19a45a73 --- /dev/null +++ b/docs/integrate/architecture/adr-027-deterministic-protobuf-serialization.md @@ -0,0 +1,314 @@ +# ADR 027: Deterministic Protobuf Serialization + +## Changelog + +* 2020-08-07: Initial Draft +* 2020-09-01: Further clarify rules + +## Status + +Proposed + +## Abstract + +Fully deterministic structure serialization, which works across many languages and clients, +is needed when signing messages. We need to be sure that whenever we serialize +a data structure, no matter in which supported language, the raw bytes +will stay the same. +[Protobuf](https://developers.google.com/protocol-buffers/docs/proto3) +serialization is not bijective (i.e. there exist a practically unlimited number of +valid binary representations for a given protobuf document)1. + +This document describes a deterministic serialization scheme for +a subset of protobuf documents, that covers this use case but can be reused in +other cases as well. + +### Context + +For signature verification in Cosmos SDK, the signer and verifier need to agree on +the same serialization of a `SignDoc` as defined in +[ADR-020](adr-020-protobuf-transaction-encoding.md) without transmitting the +serialization. + +Currently, for block signatures we are using a workaround: we create a new [TxRaw](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L30) +instance (as defined in [adr-020-protobuf-transaction-encoding](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-020-protobuf-transaction-encoding.md#transactions)) +by converting all [Tx](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L13) +fields to bytes on the client side. This adds an additional manual +step when sending and signing transactions. + +### Decision + +The following encoding scheme is to be used by other ADRs, +and in particular for `SignDoc` serialization. + +## Specification + +### Scope + +This ADR defines a protobuf3 serializer. The output is a valid protobuf +serialization, such that every protobuf parser can parse it. + +No maps are supported in version 1 due to the complexity of defining a +deterministic serialization. This might change in future. Implementations must +reject documents containing maps as invalid input. + +### Background - Protobuf3 Encoding + +Most numeric types in protobuf3 are encoded as +[varints](https://developers.google.com/protocol-buffers/docs/encoding#varints). +Varints are at most 10 bytes, and since each varint byte has 7 bits of data, +varints are a representation of `uint70` (70-bit unsigned integer). When +encoding, numeric values are casted from their base type to `uint70`, and when +decoding, the parsed `uint70` is casted to the appropriate numeric type. + +The maximum valid value for a varint that complies with protobuf3 is +`FF FF FF FF FF FF FF FF FF 7F` (i.e. `2**70 -1`). If the field type is +`{,u,s}int64`, the highest 6 bits of the 70 are dropped during decoding, +introducing 6 bits of malleability. If the field type is `{,u,s}int32`, the +highest 38 bits of the 70 are dropped during decoding, introducing 38 bits of +malleability. + +Among other sources of non-determinism, this ADR eliminates the possibility of +encoding malleability. + +### Serialization rules + +The serialization is based on the +[protobuf3 encoding](https://developers.google.com/protocol-buffers/docs/encoding) +with the following additions: + +1. Fields must be serialized only once in ascending order +2. Extra fields or any extra data must not be added +3. [Default values](https://developers.google.com/protocol-buffers/docs/proto3#default) + must be omitted +4. `repeated` fields of scalar numeric types must use + [packed encoding](https://developers.google.com/protocol-buffers/docs/encoding#packed) +5. Varint encoding must not be longer than needed: + * No trailing zero bytes (in little endian, i.e. no leading zeroes in big + endian). Per rule 3 above, the default value of `0` must be omitted, so + this rule does not apply in such cases. + * The maximum value for a varint must be `FF FF FF FF FF FF FF FF FF 01`. + In other words, when decoded, the highest 6 bits of the 70-bit unsigned + integer must be `0`. (10-byte varints are 10 groups of 7 bits, i.e. + 70 bits, of which only the lowest 70-6=64 are useful.) + * The maximum value for 32-bit values in varint encoding must be `FF FF FF FF 0F` + with one exception (below). In other words, when decoded, the highest 38 + bits of the 70-bit unsigned integer must be `0`. + * The one exception to the above is _negative_ `int32`, which must be + encoded using the full 10 bytes for sign extension2. + * The maximum value for Boolean values in varint encoding must be `01` (i.e. + it must be `0` or `1`). Per rule 3 above, the default value of `0` must + be omitted, so if a Boolean is included it must have a value of `1`. + +While rule number 1. and 2. should be pretty straight forward and describe the +default behavior of all protobuf encoders the author is aware of, the 3rd rule +is more interesting. After a protobuf3 deserialization you cannot differentiate +between unset fields and fields set to the default value3. At +serialization level however, it is possible to set the fields with an empty +value or omitting them entirely. This is a significant difference to e.g. JSON +where a property can be empty (`""`, `0`), `null` or undefined, leading to 3 +different documents. + +Omitting fields set to default values is valid because the parser must assign +the default value to fields missing in the serialization4. For scalar +types, omitting defaults is required by the spec5. For `repeated` +fields, not serializing them is the only way to express empty lists. Enums must +have a first element of numeric value 0, which is the default6. And +message fields default to unset7. + +Omitting defaults allows for some amount of forward compatibility: users of +newer versions of a protobuf schema produce the same serialization as users of +older versions as long as newly added fields are not used (i.e. set to their +default value). + +### Implementation + +There are three main implementation strategies, ordered from the least to the +most custom development: + +* **Use a protobuf serializer that follows the above rules by default.** E.g. + [gogoproto](https://pkg.go.dev/github.com/cosmos/gogoproto/gogoproto) is known to + be compliant by in most cases, but not when certain annotations such as + `nullable = false` are used. It might also be an option to configure an + existing serializer accordingly. +* **Normalize default values before encoding them.** If your serializer follows + rule 1. and 2. and allows you to explicitly unset fields for serialization, + you can normalize default values to unset. This can be done when working with + [protobuf.js](https://www.npmjs.com/package/protobufjs): + + ```js + const bytes = SignDoc.encode({ + bodyBytes: body.length > 0 ? body : null, // normalize empty bytes to unset + authInfoBytes: authInfo.length > 0 ? authInfo : null, // normalize empty bytes to unset + chainId: chainId || null, // normalize "" to unset + accountNumber: accountNumber || null, // normalize 0 to unset + accountSequence: accountSequence || null, // normalize 0 to unset + }).finish(); + ``` + +* **Use a hand-written serializer for the types you need.** If none of the above + ways works for you, you can write a serializer yourself. For SignDoc this + would look something like this in Go, building on existing protobuf utilities: + + ```go + if !signDoc.body_bytes.empty() { + buf.WriteUVarInt64(0xA) // wire type and field number for body_bytes + buf.WriteUVarInt64(signDoc.body_bytes.length()) + buf.WriteBytes(signDoc.body_bytes) + } + + if !signDoc.auth_info.empty() { + buf.WriteUVarInt64(0x12) // wire type and field number for auth_info + buf.WriteUVarInt64(signDoc.auth_info.length()) + buf.WriteBytes(signDoc.auth_info) + } + + if !signDoc.chain_id.empty() { + buf.WriteUVarInt64(0x1a) // wire type and field number for chain_id + buf.WriteUVarInt64(signDoc.chain_id.length()) + buf.WriteBytes(signDoc.chain_id) + } + + if signDoc.account_number != 0 { + buf.WriteUVarInt64(0x20) // wire type and field number for account_number + buf.WriteUVarInt(signDoc.account_number) + } + + if signDoc.account_sequence != 0 { + buf.WriteUVarInt64(0x28) // wire type and field number for account_sequence + buf.WriteUVarInt(signDoc.account_sequence) + } + ``` + +### Test vectors + +Given the protobuf definition `Article.proto` + +```protobuf +package blog; +syntax = "proto3"; + +enum Type { + UNSPECIFIED = 0; + IMAGES = 1; + NEWS = 2; +}; + +enum Review { + UNSPECIFIED = 0; + ACCEPTED = 1; + REJECTED = 2; +}; + +message Article { + string title = 1; + string description = 2; + uint64 created = 3; + uint64 updated = 4; + bool public = 5; + bool promoted = 6; + Type type = 7; + Review review = 8; + repeated string comments = 9; + repeated string backlinks = 10; +}; +``` + +serializing the values + +```yaml +title: "The world needs change 🌳" +description: "" +created: 1596806111080 +updated: 0 +public: true +promoted: false +type: Type.NEWS +review: Review.UNSPECIFIED +comments: ["Nice one", "Thank you"] +backlinks: [] +``` + +must result in the serialization + +```text +0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 +``` + +When inspecting the serialized document, you see that every second field is +omitted: + +```shell +$ echo 0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 | xxd -r -p | protoc --decode_raw +1: "The world needs change \360\237\214\263" +3: 1596806111080 +5: 1 +7: 2 +9: "Nice one" +9: "Thank you" +``` + +## Consequences + +Having such an encoding available allows us to get deterministic serialization +for all protobuf documents we need in the context of Cosmos SDK signing. + +### Positive + +* Well defined rules that can be verified independent of a reference + implementation +* Simple enough to keep the barrier to implement transaction signing low +* It allows us to continue to use 0 and other empty values in SignDoc, avoiding + the need to work around 0 sequences. This does not imply the change from + https://github.com/cosmos/cosmos-sdk/pull/6949 should not be merged, but not + too important anymore. + +### Negative + +* When implementing transaction signing, the encoding rules above must be + understood and implemented. +* The need for rule number 3. adds some complexity to implementations. +* Some data structures may require custom code for serialization. Thus + the code is not very portable - it will require additional work for each + client implementing serialization to properly handle custom data structures. + +### Neutral + +### Usage in Cosmos SDK + +For the reasons mentioned above ("Negative" section) we prefer to keep workarounds +for shared data structure. Example: the aforementioned `TxRaw` is using raw bytes +as a workaround. This allows them to use any valid Protobuf library without +the need of implementing a custom serializer that adheres to this standard (and related risks of bugs). + +## References + +* 1 _When a message is serialized, there is no guaranteed order for + how its known or unknown fields should be written. Serialization order is an + implementation detail and the details of any particular implementation may + change in the future. Therefore, protocol buffer parsers must be able to parse + fields in any order._ from + https://developers.google.com/protocol-buffers/docs/encoding#order +* 2 https://developers.google.com/protocol-buffers/docs/encoding#signed_integers +* 3 _Note that for scalar message fields, once a message is parsed + there's no way of telling whether a field was explicitly set to the default + value (for example whether a boolean was set to false) or just not set at all: + you should bear this in mind when defining your message types. For example, + don't have a boolean that switches on some behavior when set to false if you + don't want that behavior to also happen by default._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 4 _When a message is parsed, if the encoded message does not + contain a particular singular element, the corresponding field in the parsed + object is set to the default value for that field._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 5 _Also note that if a scalar message field is set to its default, + the value will not be serialized on the wire._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 6 _For enums, the default value is the first defined enum value, + which must be 0._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 7 _For message fields, the field is not set. Its exact value is + language-dependent._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* Encoding rules and parts of the reasoning taken from + [canonical-proto3 Aaron Craelius](https://github.com/regen-network/canonical-proto3) diff --git a/docs/integrate/architecture/adr-028-public-key-addresses.md b/docs/integrate/architecture/adr-028-public-key-addresses.md new file mode 100644 index 000000000..9f394f7a2 --- /dev/null +++ b/docs/integrate/architecture/adr-028-public-key-addresses.md @@ -0,0 +1,342 @@ +# ADR 028: Public Key Addresses + +## Changelog + +* 2020/08/18: Initial version +* 2021/01/15: Analysis and algorithm update + +## Status + +Proposed + +## Abstract + +This ADR defines an address format for all addressable Cosmos SDK accounts. That includes: new public key algorithms, multisig public keys, and module accounts. + +## Context + +Issue [\#3685](https://github.com/cosmos/cosmos-sdk/issues/3685) identified that public key +address spaces are currently overlapping. We confirmed that it significantly decreases security of Cosmos SDK. + +### Problem + +An attacker can control an input for an address generation function. This leads to a birthday attack, which significantly decreases the security space. +To overcome this, we need to separate the inputs for different kind of account types: +a security break of one account type shouldn't impact the security of other account types. + +### Initial proposals + +One initial proposal was extending the address length and +adding prefixes for different types of addresses. + +@ethanfrey explained an alternate approach originally used in https://github.com/iov-one/weave: + +> I spent quite a bit of time thinking about this issue while building weave... The other cosmos Sdk. +> Basically I define a condition to be a type and format as human readable string with some binary data appended. This condition is hashed into an Address (again at 20 bytes). The use of this prefix makes it impossible to find a preimage for a given address with a different condition (eg ed25519 vs secp256k1). +> This is explained in depth here https://weave.readthedocs.io/en/latest/design/permissions.html +> And the code is here, look mainly at the top where we process conditions. https://github.com/iov-one/weave/blob/master/conditions.go + +And explained how this approach should be sufficiently collision resistant: + +> Yeah, AFAIK, 20 bytes should be collision resistance when the preimages are unique and not malleable. A space of 2^160 would expect some collision to be likely around 2^80 elements (birthday paradox). And if you want to find a collision for some existing element in the database, it is still 2^160. 2^80 only is if all these elements are written to state. +> The good example you brought up was eg. a public key bytes being a valid public key on two algorithms supported by the codec. Meaning if either was broken, you would break accounts even if they were secured with the safer variant. This is only as the issue when no differentiating type info is present in the preimage (before hashing into an address). +> I would like to hear an argument if the 20 bytes space is an actual issue for security, as I would be happy to increase my address sizes in weave. I just figured cosmos and ethereum and bitcoin all use 20 bytes, it should be good enough. And the arguments above which made me feel it was secure. But I have not done a deeper analysis. + +This led to the first proposal (which we proved to be not good enough): +we concatenate a key type with a public key, hash it and take the first 20 bytes of that hash, summarized as `sha256(keyTypePrefix || keybytes)[:20]`. + +### Review and Discussions + +In [\#5694](https://github.com/cosmos/cosmos-sdk/issues/5694) we discussed various solutions. +We agreed that 20 bytes it's not future proof, and extending the address length is the only way to allow addresses of different types, various signature types, etc. +This disqualifies the initial proposal. + +In the issue we discussed various modifications: + +* Choice of the hash function. +* Move the prefix out of the hash function: `keyTypePrefix + sha256(keybytes)[:20]` [post-hash-prefix-proposal]. +* Use double hashing: `sha256(keyTypePrefix + sha256(keybytes)[:20])`. +* Increase to keybytes hash slice from 20 byte to 32 or 40 bytes. We concluded that 32 bytes, produced by a good hash functions is future secure. + +### Requirements + +* Support currently used tools - we don't want to break an ecosystem, or add a long adaptation period. Ref: https://github.com/cosmos/cosmos-sdk/issues/8041 +* Try to keep the address length small - addresses are widely used in state, both as part of a key and object value. + +### Scope + +This ADR only defines a process for the generation of address bytes. For end-user interactions with addresses (through the API, or CLI, etc.), we still use bech32 to format these addresses as strings. This ADR doesn't change that. +Using Bech32 for string encoding gives us support for checksum error codes and handling of user typos. + +## Decision + +We define the following account types, for which we define the address function: + +1. simple accounts: represented by a regular public key (ie: secp256k1, sr25519) +2. naive multisig: accounts composed by other addressable objects (ie: naive multisig) +3. composed accounts with a native address key (ie: bls, group module accounts) +4. module accounts: basically any accounts which cannot sign transactions and which are managed internally by modules + +### Legacy Public Key Addresses Don't Change + +Currently (Jan 2021), the only officially supported Cosmos SDK user accounts are `secp256k1` basic accounts and legacy amino multisig. +They are used in existing Cosmos SDK zones. They use the following address formats: + +* secp256k1: `ripemd160(sha256(pk_bytes))[:20]` +* legacy amino multisig: `sha256(aminoCdc.Marshal(pk))[:20]` + +We don't want to change existing addresses. So the addresses for these two key types will remain the same. + +The current multisig public keys use amino serialization to generate the address. We will retain +those public keys and their address formatting, and call them "legacy amino" multisig public keys +in protobuf. We will also create multisig public keys without amino addresses to be described below. + +### Hash Function Choice + +As in other parts of the Cosmos SDK, we will use `sha256`. + +### Basic Address + +We start with defining a base algorithm for generating addresses which we will call `Hash`. Notably, it's used for accounts represented by a single key pair. For each public key schema we have to have an associated `typ` string, explained in the next section. `hash` is the cryptographic hash function defined in the previous section. + +```go +const A_LEN = 32 + +func Hash(typ string, key []byte) []byte { + return hash(hash(typ) + key)[:A_LEN] +} +``` + +The `+` is bytes concatenation, which doesn't use any separator. + +This algorithm is the outcome of a consultation session with a professional cryptographer. +Motivation: this algorithm keeps the address relatively small (length of the `typ` doesn't impact the length of the final address) +and it's more secure than [post-hash-prefix-proposal] (which uses the first 20 bytes of a pubkey hash, significantly reducing the address space). +Moreover the cryptographer motivated the choice of adding `typ` in the hash to protect against a switch table attack. + +`address.Hash` is a low level function to generate _base_ addresses for new key types. Example: + +* BLS: `address.Hash("bls", pubkey)` + +### Composed Addresses + +For simple composed accounts (like a new naive multisig) we generalize the `address.Hash`. The address is constructed by recursively creating addresses for the sub accounts, sorting the addresses and composing them into a single address. It ensures that the ordering of keys doesn't impact the resulting address. + +```go +// We don't need a PubKey interface - we need anything which is addressable. +type Addressable interface { + Address() []byte +} + +func Composed(typ string, subaccounts []Addressable) []byte { + addresses = map(subaccounts, \a -> LengthPrefix(a.Address())) + addresses = sort(addresses) + return address.Hash(typ, addresses[0] + ... + addresses[n]) +} +``` + +The `typ` parameter should be a schema descriptor, containing all significant attributes with deterministic serialization (eg: utf8 string). +`LengthPrefix` is a function which prepends 1 byte to the address. The value of that byte is the length of the address bits before prepending. The address must be at most 255 bits long. +We are using `LengthPrefix` to eliminate conflicts - it assures, that for 2 lists of addresses: `as = {a1, a2, ..., an}` and `bs = {b1, b2, ..., bm}` such that every `bi` and `ai` is at most 255 long, `concatenate(map(as, (a) => LengthPrefix(a))) = map(bs, (b) => LengthPrefix(b))` if `as = bs`. + +Implementation Tip: account implementations should cache addresses. + +#### Multisig Addresses + +For a new multisig public keys, we define the `typ` parameter not based on any encoding scheme (amino or protobuf). This avoids issues with non-determinism in the encoding scheme. + +Example: + +```protobuf +package cosmos.crypto.multisig; + +message PubKey { + uint32 threshold = 1; + repeated google.protobuf.Any pubkeys = 2; +} +``` + +```go +func (multisig PubKey) Address() { + // first gather all nested pub keys + var keys []address.Addressable // cryptotypes.PubKey implements Addressable + for _, _key := range multisig.Pubkeys { + keys = append(keys, key.GetCachedValue().(cryptotypes.PubKey)) + } + + // form the type from the message name (cosmos.crypto.multisig.PubKey) and the threshold joined together + prefix := fmt.Sprintf("%s/%d", proto.MessageName(multisig), multisig.Threshold) + + // use the Composed function defined above + return address.Composed(prefix, keys) +} +``` + + +### Derived Addresses + +We must be able to cryptographically derive one address from another one. The derivation process must guarantee hash properties, hence we use the already defined `Hash` function: + +```go +func Derive(address, derivationKey []byte) []byte { + return Hash(addres, derivationKey) +} +``` + +### Module Account Addresses + +A module account will have `"module"` type. Module accounts can have sub accounts. The submodule account will be created based on module name, and sequence of derivation keys. Typically, the first derivation key should be a class of the derived accounts. The derivation process has a defined order: module name, submodule key, subsubmodule key... An example module account is created using: + +```go +address.Module(moduleName, key) +``` + +An example sub-module account is created using: + +```go +groupPolicyAddresses := []byte{1} +address.Module(moduleName, groupPolicyAddresses, policyID) +``` + +The `address.Module` function is using `address.Hash` with `"module"` as the type argument, and byte representation of the module name concatenated with submodule key. The two last component must be uniquely separated to avoid potential clashes (example: modulename="ab" & submodulekey="bc" will have the same derivation key as modulename="a" & submodulekey="bbc"). +We use a null byte (`'\x00'`) to separate module name from the submodule key. This works, because null byte is not a part of a valid module name. Finally, the sub-submodule accounts are created by applying the `Derive` function recursively. +We could use `Derive` function also in the first step (rather than concatenating module name with zero byte and the submodule key). We decided to do concatenation to avoid one level of derivation and speed up computation. + +For backward compatibility with the existing `authtypes.NewModuleAddress`, we add a special case in `Module` function: when no derivation key is provided, we fallback to the "legacy" implementation. + +```go +func Module(moduleName string, derivationKeys ...[]byte) []byte{ + if len(derivationKeys) == 0 { + return authtypes.NewModuleAddress(modulenName) // legacy case + } + submoduleAddress := Hash("module", []byte(moduleName) + 0 + key) + return fold((a, k) => Derive(a, k), subsubKeys, submoduleAddress) +} +``` + +**Example 1** A lending BTC pool address would be: + +```go +btcPool := address.Module("lending", btc.Address()}) +``` + +If we want to create an address for a module account depending on more than one key, we can concatenate them: + +```go +btcAtomAMM := address.Module("amm", btc.Address() + atom.Address()}) +``` + +**Example 2** a smart-contract address could be constructed by: + +```go +smartContractAddr = Module("mySmartContractVM", smartContractsNamespace, smartContractKey}) + +// which equals to: +smartContractAddr = Derived( + Module("mySmartContractVM", smartContractsNamespace), + []{smartContractKey}) +``` + +### Schema Types + +A `typ` parameter used in `Hash` function SHOULD be unique for each account type. +Since all Cosmos SDK account types are serialized in the state, we propose to use the protobuf message name string. + +Example: all public key types have a unique protobuf message type similar to: + +```protobuf +package cosmos.crypto.sr25519; + +message PubKey { + bytes key = 1; +} +``` + +All protobuf messages have unique fully qualified names, in this example `cosmos.crypto.sr25519.PubKey`. +These names are derived directly from .proto files in a standardized way and used +in other places such as the type URL in `Any`s. We can easily obtain the name using +`proto.MessageName(msg)`. + +## Consequences + +### Backwards Compatibility + +This ADR is compatible with what was committed and directly supported in the Cosmos SDK repository. + +### Positive + +* a simple algorithm for generating addresses for new public keys, complex accounts and modules +* the algorithm generalizes _native composed keys_ +* increased security and collision resistance of addresses +* the approach is extensible for future use-cases - one can use other address types, as long as they don't conflict with the address length specified here (20 or 32 bytes). +* support new account types. + +### Negative + +* addresses do not communicate key type, a prefixed approach would have done this +* addresses are 60% longer and will consume more storage space +* requires a refactor of KVStore store keys to handle variable length addresses + +### Neutral + +* protobuf message names are used as key type prefixes + +## Further Discussions + +Some accounts can have a fixed name or may be constructed in other way (eg: modules). We were discussing an idea of an account with a predefined name (eg: `me.regen`), which could be used by institutions. +Without going into details, these kinds of addresses are compatible with the hash based addresses described here as long as they don't have the same length. +More specifically, any special account address must not have a length equal to 20 or 32 bytes. + +## Appendix: Consulting session + +End of Dec 2020 we had a session with [Alan Szepieniec](https://scholar.google.be/citations?user=4LyZn8oAAAAJ&hl=en) to consult the approach presented above. + +Alan general observations: + +* we don’t need 2-preimage resistance +* we need 32bytes address space for collision resistance +* when an attacker can control an input for object with an address then we have a problem with birthday attack +* there is an issue with smart-contracts for hashing +* sha2 mining can be use to breaking address pre-image + +Hashing algorithm + +* any attack breaking blake3 will break blake2 +* Alan is pretty confident about the current security analysis of the blake hash algorithm. It was a finalist, and the author is well known in security analysis. + +Algorithm: + +* Alan recommends to hash the prefix: `address(pub_key) = hash(hash(key_type) + pub_key)[:32]`, main benefits: + * we are free to user arbitrary long prefix names + * we still don’t risk collisions + * switch tables +* discussion about penalization -> about adding prefix post hash +* Aaron asked about post hash prefixes (`address(pub_key) = key_type + hash(pub_key)`) and differences. Alan noted that this approach has longer address space and it’s stronger. + +Algorithm for complex / composed keys: + +* merging tree like addresses with same algorithm are fine + +Module addresses: Should module addresses have different size to differentiate it? + +* we will need to set a pre-image prefix for module addresse to keept them in 32-byte space: `hash(hash('module') + module_key)` +* Aaron observation: we already need to deal with variable length (to not break secp256k1 keys). + +Discssion about arithmetic hash function for ZKP + +* Posseidon / Rescue +* Problem: much bigger risk because we don’t know much techniques and history of crypto-analysis of arithmetic constructions. It’s still a new ground and area of active research. + +Post quantum signature size + +* Alan suggestion: Falcon: speed / size ration - very good. +* Aaron - should we think about it? + Alan: based on early extrapolation this thing will get able to break EC cryptography in 2050 . But that’s a lot of uncertainty. But there is magic happening with recurions / linking / simulation and that can speedup the progress. + +Other ideas + +* Let’s say we use same key and two different address algorithms for 2 different use cases. Is it still safe to use it? Alan: if we want to hide the public key (which is not our use case), then it’s less secure but there are fixes. + +### References + +* [Notes](https://hackmd.io/_NGWI4xZSbKzj1BkCqyZMw) diff --git a/docs/integrate/architecture/adr-029-fee-grant-module.md b/docs/integrate/architecture/adr-029-fee-grant-module.md new file mode 100644 index 000000000..6b52556ff --- /dev/null +++ b/docs/integrate/architecture/adr-029-fee-grant-module.md @@ -0,0 +1,153 @@ +# ADR 029: Fee Grant Module + +## Changelog + +* 2020/08/18: Initial Draft +* 2021/05/05: Removed height based expiration support and simplified naming. + +## Status + +Accepted + +## Context + +In order to make blockchain transactions, the signing account must possess a sufficient balance of the right denomination +in order to pay fees. There are classes of transactions where needing to maintain a wallet with sufficient fees is a +barrier to adoption. + +For instance, when proper permissions are setup, someone may temporarily delegate the ability to vote on proposals to +a "burner" account that is stored on a mobile phone with only minimal security. + +Other use cases include workers tracking items in a supply chain or farmers submitting field data for analytics +or compliance purposes. + +For all of these use cases, UX would be significantly enhanced by obviating the need for these accounts to always +maintain the appropriate fee balance. This is especially true if we wanted to achieve enterprise adoption for something +like supply chain tracking. + +While one solution would be to have a service that fills up these accounts automatically with the appropriate fees, a better UX +would be provided by allowing these accounts to pull from a common fee pool account with proper spending limits. +A single pool would reduce the churn of making lots of small "fill up" transactions and also more effectively leverages +the resources of the organization setting up the pool. + +## Decision + +As a solution we propose a module, `x/feegrant` which allows one account, the "granter" to grant another account, the "grantee" +an allowance to spend the granter's account balance for fees within certain well-defined limits. + +Fee allowances are defined by the extensible `FeeAllowanceI` interface: + +```go +type FeeAllowanceI { + // Accept can use fee payment requested as well as timestamp of the current block + // to determine whether or not to process this. This is checked in + // Keeper.UseGrantedFees and the return values should match how it is handled there. + // + // If it returns an error, the fee payment is rejected, otherwise it is accepted. + // The FeeAllowance implementation is expected to update it's internal state + // and will be saved again after an acceptance. + // + // If remove is true (regardless of the error), the FeeAllowance will be deleted from storage + // (eg. when it is used up). (See call to RevokeFeeAllowance in Keeper.UseGrantedFees) + Accept(ctx sdk.Context, fee sdk.Coins, msgs []sdk.Msg) (remove bool, err error) + + // ValidateBasic should evaluate this FeeAllowance for internal consistency. + // Don't allow negative amounts, or negative periods for example. + ValidateBasic() error +} +``` + +Two basic fee allowance types, `BasicAllowance` and `PeriodicAllowance` are defined to support known use cases: + +```protobuf +// BasicAllowance implements FeeAllowanceI with a one-time grant of tokens +// that optionally expires. The delegatee can use up to SpendLimit to cover fees. +message BasicAllowance { + // spend_limit specifies the maximum amount of tokens that can be spent + // by this allowance and will be updated as tokens are spent. If it is + // empty, there is no spend limit and any amount of coins can be spent. + repeated cosmos_sdk.v1.Coin spend_limit = 1; + + // expiration specifies an optional time when this allowance expires + google.protobuf.Timestamp expiration = 2; +} + +// PeriodicAllowance extends FeeAllowanceI to allow for both a maximum cap, +// as well as a limit per time period. +message PeriodicAllowance { + BasicAllowance basic = 1; + + // period specifies the time duration in which period_spend_limit coins can + // be spent before that allowance is reset + google.protobuf.Duration period = 2; + + // period_spend_limit specifies the maximum number of coins that can be spent + // in the period + repeated cosmos_sdk.v1.Coin period_spend_limit = 3; + + // period_can_spend is the number of coins left to be spent before the period_reset time + repeated cosmos_sdk.v1.Coin period_can_spend = 4; + + // period_reset is the time at which this period resets and a new one begins, + // it is calculated from the start time of the first transaction after the + // last period ended + google.protobuf.Timestamp period_reset = 5; +} + +``` + +Allowances can be granted and revoked using `MsgGrantAllowance` and `MsgRevokeAllowance`: + +```protobuf +// MsgGrantAllowance adds permission for Grantee to spend up to Allowance +// of fees from the account of Granter. +message MsgGrantAllowance { + string granter = 1; + string grantee = 2; + google.protobuf.Any allowance = 3; + } + + // MsgRevokeAllowance removes any existing FeeAllowance from Granter to Grantee. + message MsgRevokeAllowance { + string granter = 1; + string grantee = 2; + } +``` + +In order to use allowances in transactions, we add a new field `granter` to the transaction `Fee` type: + +```protobuf +package cosmos.tx.v1beta1; + +message Fee { + repeated cosmos.base.v1beta1.Coin amount = 1; + uint64 gas_limit = 2; + string payer = 3; + string granter = 4; +} +``` + +`granter` must either be left empty or must correspond to an account which has granted +a fee allowance to fee payer (either the first signer or the value of the `payer` field). + +A new `AnteDecorator` named `DeductGrantedFeeDecorator` will be created in order to process transactions with `fee_payer` +set and correctly deduct fees based on fee allowances. + +## Consequences + +### Positive + +* improved UX for use cases where it is cumbersome to maintain an account balance just for fees + +### Negative + +### Neutral + +* a new field must be added to the transaction `Fee` message and a new `AnteDecorator` must be +created to use it + +## References + +* Blog article describing initial work: https://medium.com/regen-network/hacking-the-cosmos-cosmwasm-and-key-management-a08b9f561d1b +* Initial public specification: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56 +* Original subkeys proposal from B-harvest which influenced this design: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/docs/integrate/architecture/adr-030-authz-module.md b/docs/integrate/architecture/adr-030-authz-module.md new file mode 100644 index 000000000..0454138d1 --- /dev/null +++ b/docs/integrate/architecture/adr-030-authz-module.md @@ -0,0 +1,258 @@ +# ADR 030: Authorization Module + +## Changelog + +* 2019-11-06: Initial Draft +* 2020-10-12: Updated Draft +* 2020-11-13: Accepted +* 2020-05-06: proto API updates, use `sdk.Msg` instead of `sdk.ServiceMsg` (the latter concept was removed from Cosmos SDK) +* 2022-04-20: Updated the `SendAuthorization` proto docs to clarify the `SpendLimit` is a required field. (Generic authorization can be used with bank msg type url to create limit less bank authorization) + +## Status + +Accepted + +## Abstract + +This ADR defines the `x/authz` module which allows accounts to grant authorizations to perform actions +on behalf of that account to other accounts. + +## Context + +The concrete use cases which motivated this module include: + +* the desire to delegate the ability to vote on proposals to other accounts besides the account which one has +delegated stake +* "sub-keys" functionality, as originally proposed in [\#4480](https://github.com/cosmos/cosmos-sdk/issues/4480) which +is a term used to describe the functionality provided by this module together with +the `fee_grant` module from [ADR 029](adr-029-fee-grant-module.md) and the [group module](https://github.com/cosmos/cosmos-sdk/tree/main/x/group). + +The "sub-keys" functionality roughly refers to the ability for one account to grant some subset of its capabilities to +other accounts with possibly less robust, but easier to use security measures. For instance, a master account representing +an organization could grant the ability to spend small amounts of the organization's funds to individual employee accounts. +Or an individual (or group) with a multisig wallet could grant the ability to vote on proposals to any one of the member +keys. + +The current implementation is based on work done by the [Gaian's team at Hackatom Berlin 2019](https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation). + +## Decision + +We will create a module named `authz` which provides functionality for +granting arbitrary privileges from one account (the _granter_) to another account (the _grantee_). Authorizations +must be granted for a particular `Msg` service methods one by one using an implementation +of `Authorization` interface. + +### Types + +Authorizations determine exactly what privileges are granted. They are extensible +and can be defined for any `Msg` service method even outside of the module where +the `Msg` method is defined. `Authorization`s reference `Msg`s using their TypeURL. + +#### Authorization + +```go +type Authorization interface { + proto.Message + + // MsgTypeURL returns the fully-qualified Msg TypeURL (as described in ADR 020), + // which will process and accept or reject a request. + MsgTypeURL() string + + // Accept determines whether this grant permits the provided sdk.Msg to be performed, and if + // so provides an upgraded authorization instance. + Accept(ctx sdk.Context, msg sdk.Msg) (AcceptResponse, error) + + // ValidateBasic does a simple validation check that + // doesn't require access to any other information. + ValidateBasic() error +} + +// AcceptResponse instruments the controller of an authz message if the request is accepted +// and if it should be updated or deleted. +type AcceptResponse struct { + // If Accept=true, the controller can accept and authorization and handle the update. + Accept bool + // If Delete=true, the controller must delete the authorization object and release + // storage resources. + Delete bool + // Controller, who is calling Authorization.Accept must check if `Updated != nil`. If yes, + // it must use the updated version and handle the update on the storage level. + Updated Authorization +} +``` + +For example a `SendAuthorization` like this is defined for `MsgSend` that takes +a `SpendLimit` and updates it down to zero: + +```go +type SendAuthorization struct { + // SpendLimit specifies the maximum amount of tokens that can be spent + // by this authorization and will be updated as tokens are spent. This field is required. (Generic authorization + // can be used with bank msg type url to create limit less bank authorization). + SpendLimit sdk.Coins +} + +func (a SendAuthorization) MsgTypeURL() string { + return sdk.MsgTypeURL(&MsgSend{}) +} + +func (a SendAuthorization) Accept(ctx sdk.Context, msg sdk.Msg) (authz.AcceptResponse, error) { + mSend, ok := msg.(*MsgSend) + if !ok { + return authz.AcceptResponse{}, sdkerrors.ErrInvalidType.Wrap("type mismatch") + } + limitLeft, isNegative := a.SpendLimit.SafeSub(mSend.Amount) + if isNegative { + return authz.AcceptResponse{}, sdkerrors.ErrInsufficientFunds.Wrapf("requested amount is more than spend limit") + } + if limitLeft.IsZero() { + return authz.AcceptResponse{Accept: true, Delete: true}, nil + } + + return authz.AcceptResponse{Accept: true, Delete: false, Updated: &SendAuthorization{SpendLimit: limitLeft}}, nil +} +``` + +A different type of capability for `MsgSend` could be implemented +using the `Authorization` interface with no need to change the underlying +`bank` module. + +##### Small notes on `AcceptResponse` + +* The `AcceptResponse.Accept` field will be set to `true` if the authorization is accepted. +However, if it is rejected, the function `Accept` will raise an error (without setting `AcceptResponse.Accept` to `false`). + +* The `AcceptResponse.Updated` field will be set to a non-nil value only if there is a real change to the authorization. +If authorization remains the same (as is, for instance, always the case for a [`GenericAuthorization`](#genericauthorization)), +the field will be `nil`. + +### `Msg` Service + +```protobuf +service Msg { + // Grant grants the provided authorization to the grantee on the granter's + // account with the provided expiration time. + rpc Grant(MsgGrant) returns (MsgGrantResponse); + + // Exec attempts to execute the provided messages using + // authorizations granted to the grantee. Each message should have only + // one signer corresponding to the granter of the authorization. + rpc Exec(MsgExec) returns (MsgExecResponse); + + // Revoke revokes any authorization corresponding to the provided method name on the + // granter's account that has been granted to the grantee. + rpc Revoke(MsgRevoke) returns (MsgRevokeResponse); +} + +// Grant gives permissions to execute +// the provided method with expiration time. +message Grant { + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; +} + +message MsgGrant { + string granter = 1; + string grantee = 2; + + Grant grant = 3 [(gogoproto.nullable) = false]; +} + +message MsgExecResponse { + cosmos.base.abci.v1beta1.Result result = 1; +} + +message MsgExec { + string grantee = 1; + // Authorization Msg requests to execute. Each msg must implement Authorization interface + repeated google.protobuf.Any msgs = 2 [(cosmos_proto.accepts_interface) = "cosmos.base.v1beta1.Msg"];; +} +``` + +### Router Middleware + +The `authz` `Keeper` will expose a `DispatchActions` method which allows other modules to send `Msg`s +to the router based on `Authorization` grants: + +```go +type Keeper interface { + // DispatchActions routes the provided msgs to their respective handlers if the grantee was granted an authorization + // to send those messages by the first (and only) signer of each msg. + DispatchActions(ctx sdk.Context, grantee sdk.AccAddress, msgs []sdk.Msg) sdk.Result` +} +``` + +### CLI + +#### `tx exec` Method + +When a CLI user wants to run a transaction on behalf of another account using `MsgExec`, they +can use the `exec` method. For instance `gaiacli tx gov vote 1 yes --from --generate-only | gaiacli tx authz exec --send-as --from ` +would send a transaction like this: + +```go +MsgExec { + Grantee: mykey, + Msgs: []sdk.Msg{ + MsgVote { + ProposalID: 1, + Voter: cosmos3thsdgh983egh823 + Option: Yes + } + } +} +``` + +#### `tx grant --from ` + +This CLI command will send a `MsgGrant` transaction. `authorization` should be encoded as +JSON on the CLI. + +#### `tx revoke --from ` + +This CLI command will send a `MsgRevoke` transaction. + +### Built-in Authorizations + +#### `SendAuthorization` + +```protobuf +// SendAuthorization allows the grantee to spend up to spend_limit coins from +// the granter's account. +message SendAuthorization { + repeated cosmos.base.v1beta1.Coin spend_limit = 1; +} +``` + +#### `GenericAuthorization` + +```protobuf +// GenericAuthorization gives the grantee unrestricted permissions to execute +// the provided method on behalf of the granter's account. +message GenericAuthorization { + option (cosmos_proto.implements_interface) = "Authorization"; + + // Msg, identified by it's type URL, to grant unrestricted permissions to execute + string msg = 1; +} +``` + +## Consequences + +### Positive + +* Users will be able to authorize arbitrary actions on behalf of their accounts to other +users, improving key management for many use cases +* The solution is more generic than previously considered approaches and the +`Authorization` interface approach can be extended to cover other use cases by +SDK users + +### Negative + +### Neutral + +## References + +* Initial Hackatom implementation: https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation +* Post-Hackatom spec: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#delegation-module +* B-Harvest subkeys spec: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/docs/integrate/architecture/adr-031-msg-service.md b/docs/integrate/architecture/adr-031-msg-service.md new file mode 100644 index 000000000..b8e4005d2 --- /dev/null +++ b/docs/integrate/architecture/adr-031-msg-service.md @@ -0,0 +1,202 @@ +# ADR 031: Protobuf Msg Services + +## Changelog + +* 2020-10-05: Initial Draft +* 2021-04-21: Remove `ServiceMsg`s to follow Protobuf `Any`'s spec, see [#9063](https://github.com/cosmos/cosmos-sdk/issues/9063). + +## Status + +Accepted + +## Abstract + +We want to leverage protobuf `service` definitions for defining `Msg`s which will give us significant developer UX +improvements in terms of the code that is generated and the fact that return types will now be well defined. + +## Context + +Currently `Msg` handlers in the Cosmos SDK do have return values that are placed in the `data` field of the response. +These return values, however, are not specified anywhere except in the golang handler code. + +In early conversations [it was proposed](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc/edit) +that `Msg` return types be captured using a protobuf extension field, ex: + +```protobuf +package cosmos.gov; + +message MsgSubmitProposal + option (cosmos_proto.msg_return) = “uint64”; + string delegator_address = 1; + string validator_address = 2; + repeated sdk.Coin amount = 3; +} +``` + +This was never adopted, however. + +Having a well-specified return value for `Msg`s would improve client UX. For instance, +in `x/gov`, `MsgSubmitProposal` returns the proposal ID as a big-endian `uint64`. +This isn’t really documented anywhere and clients would need to know the internals +of the Cosmos SDK to parse that value and return it to users. + +Also, there may be cases where we want to use these return values programatically. +For instance, https://github.com/cosmos/cosmos-sdk/issues/7093 proposes a method for +doing inter-module Ocaps using the `Msg` router. A well-defined return type would +improve the developer UX for this approach. + +In addition, handler registration of `Msg` types tends to add a bit of +boilerplate on top of keepers and is usually done through manual type switches. +This isn't necessarily bad, but it does add overhead to creating modules. + +## Decision + +We decide to use protobuf `service` definitions for defining `Msg`s as well as +the code generated by them as a replacement for `Msg` handlers. + +Below we define how this will look for the `SubmitProposal` message from `x/gov` module. +We start with a `Msg` `service` definition: + +```protobuf +package cosmos.gov; + +service Msg { + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); +} + +// Note that for backwards compatibility this uses MsgSubmitProposal as the request +// type instead of the more canonical MsgSubmitProposalRequest +message MsgSubmitProposal { + google.protobuf.Any content = 1; + string proposer = 2; +} + +message MsgSubmitProposalResponse { + uint64 proposal_id; +} +``` + +While this is most commonly used for gRPC, overloading protobuf `service` definitions like this does not violate +the intent of the [protobuf spec](https://developers.google.com/protocol-buffers/docs/proto3#services) which says: +> If you don’t want to use gRPC, it’s also possible to use protocol buffers with your own RPC implementation. +With this approach, we would get an auto-generated `MsgServer` interface: + +In addition to clearly specifying return types, this has the benefit of generating client and server code. On the server +side, this is almost like an automatically generated keeper method and could maybe be used intead of keepers eventually +(see [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093)): + +```go +package gov + +type MsgServer interface { + SubmitProposal(context.Context, *MsgSubmitProposal) (*MsgSubmitProposalResponse, error) +} +``` + +On the client side, developers could take advantage of this by creating RPC implementations that encapsulate transaction +logic. Protobuf libraries that use asynchronous callbacks, like [protobuf.js](https://github.com/protobufjs/protobuf.js#using-services) +could use this to register callbacks for specific messages even for transactions that include multiple `Msg`s. + +Each `Msg` service method should have exactly one request parameter: its corresponding `Msg` type. For example, the `Msg` service method `/cosmos.gov.v1beta1.Msg/SubmitProposal` above has exactly one request parameter, namely the `Msg` type `/cosmos.gov.v1beta1.MsgSubmitProposal`. It is important the reader understands clearly the nomenclature difference between a `Msg` service (a Protobuf service) and a `Msg` type (a Protobuf message), and the differences in their fully-qualified name. + +This convention has been decided over the more canonical `Msg...Request` names mainly for backwards compatibility, but also for better readability in `TxBody.messages` (see [Encoding section](#encoding) below): transactions containing `/cosmos.gov.MsgSubmitProposal` read better than those containing `/cosmos.gov.v1beta1.MsgSubmitProposalRequest`. + +One consequence of this convention is that each `Msg` type can be the request parameter of only one `Msg` service method. However, we consider this limitation a good practice in explicitness. + +### Encoding + +Encoding of transactions generated with `Msg` services do not differ from current Protobuf transaction encoding as defined in [ADR-020](adr-020-protobuf-transaction-encoding.md). We are encoding `Msg` types (which are exactly `Msg` service methods' request parameters) as `Any` in `Tx`s which involves packing the +binary-encoded `Msg` with its type URL. + +### Decoding + +Since `Msg` types are packed into `Any`, decoding transactions messages are done by unpacking `Any`s into `Msg` types. For more information, please refer to [ADR-020](adr-020-protobuf-transaction-encoding.md#transactions). + +### Routing + +We propose to add a `msg_service_router` in BaseApp. This router is a key/value map which maps `Msg` types' `type_url`s to their corresponding `Msg` service method handler. Since there is a 1-to-1 mapping between `Msg` types and `Msg` service method, the `msg_service_router` has exactly one entry per `Msg` service method. + +When a transaction is processed by BaseApp (in CheckTx or in DeliverTx), its `TxBody.messages` are decoded as `Msg`s. Each `Msg`'s `type_url` is matched against an entry in the `msg_service_router`, and the respective `Msg` service method handler is called. + +For backward compatability, the old handlers are not removed yet. If BaseApp receives a legacy `Msg` with no correspoding entry in the `msg_service_router`, it will be routed via its legacy `Route()` method into the legacy handler. + +### Module Configuration + +In [ADR 021](adr-021-protobuf-query-encoding.md), we introduced a method `RegisterQueryService` +to `AppModule` which allows for modules to register gRPC queriers. + +To register `Msg` services, we attempt a more extensible approach by converting `RegisterQueryService` +to a more generic `RegisterServices` method: + +```go +type AppModule interface { + RegisterServices(Configurator) + ... +} + +type Configurator interface { + QueryServer() grpc.Server + MsgServer() grpc.Server +} + +// example module: +func (am AppModule) RegisterServices(cfg Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper) +} +``` + +The `RegisterServices` method and the `Configurator` interface are intended to +evolve to satisfy the use cases discussed in [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) +and [\#7122](https://github.com/cosmos/cosmos-sdk/issues/7421). + +When `Msg` services are registered, the framework _should_ verify that all `Msg` types +implement the `sdk.Msg` interface and throw an error during initialization rather +than later when transactions are processed. + +### `Msg` Service Implementation + +Just like query services, `Msg` service methods can retrieve the `sdk.Context` +from the `context.Context` parameter method using the `sdk.UnwrapSDKContext` +method: + +```go +package gov + +func (k Keeper) SubmitProposal(goCtx context.Context, params *types.MsgSubmitProposal) (*MsgSubmitProposalResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + ... +} +``` + +The `sdk.Context` should have an `EventManager` already attached by BaseApp's `msg_service_router`. + +Separate handler definition is no longer needed with this approach. + +## Consequences + +This design changes how a module functionality is exposed and accessed. It deprecates the existing `Handler` interface and `AppModule.Route` in favor of [Protocol Buffer Services](https://developers.google.com/protocol-buffers/docs/proto3#services) and Service Routing described above. This dramatically simplifies the code. We don't need to create handlers and keepers any more. Use of Protocol Buffer auto-generated clients clearly separates the communication interfaces between the module and a modules user. The control logic (aka handlers and keepers) is not exposed any more. A module interface can be seen as a black box accessible through a client API. It's worth to note that the client interfaces are also generated by Protocol Buffers. + +This also allows us to change how we perform functional tests. Instead of mocking AppModules and Router, we will mock a client (server will stay hidden). More specifically: we will never mock `moduleA.MsgServer` in `moduleB`, but rather `moduleA.MsgClient`. One can think about it as working with external services (eg DBs, or online servers...). We assume that the transmission between clients and servers is correctly handled by generated Protocol Buffers. + +Finally, closing a module to client API opens desirable OCAP patterns discussed in ADR-033. Since server implementation and interface is hidden, nobody can hold "keepers"/servers and will be forced to relay on the client interface, which will drive developers for correct encapsulation and software engineering patterns. + +### Pros + +* communicates return type clearly +* manual handler registration and return type marshaling is no longer needed, just implement the interface and register it +* communication interface is automatically generated, the developer can now focus only on the state transition methods - this would improve the UX of [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) approach (1) if we chose to adopt that +* generated client code could be useful for clients and tests +* dramatically reduces and simplifies the code + +### Cons + +* using `service` definitions outside the context of gRPC could be confusing (but doesn’t violate the proto3 spec) + +## References + +* [Initial Github Issue \#7122](https://github.com/cosmos/cosmos-sdk/issues/7122) +* [proto 3 Language Guide: Defining Services](https://developers.google.com/protocol-buffers/docs/proto3#services) +* [Initial pre-`Any` `Msg` designs](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc) +* [ADR 020](adr-020-protobuf-transaction-encoding.md) +* [ADR 021](adr-021-protobuf-query-encoding.md) diff --git a/docs/integrate/architecture/adr-032-typed-events.md b/docs/integrate/architecture/adr-032-typed-events.md new file mode 100644 index 000000000..c1dd0a73c --- /dev/null +++ b/docs/integrate/architecture/adr-032-typed-events.md @@ -0,0 +1,319 @@ +# ADR 032: Typed Events + +## Changelog + +* 28-Sept-2020: Initial Draft + +## Authors + +* Anil Kumar (@anilcse) +* Jack Zampolin (@jackzampolin) +* Adam Bozanich (@boz) + +## Status + +Proposed + +## Abstract + +Currently in the Cosmos SDK, events are defined in the handlers for each message as well as `BeginBlock` and `EndBlock`. Each module doesn't have types defined for each event, they are implemented as `map[string]string`. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +## Context + +Currently in the Cosmos SDK, events are defined in the handlers for each message, meaning each module doesn't have a cannonical set of types for each event. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +[Our platform](http://github.com/ovrclk/akash) requires a number of programatic on chain interactions both on the provider (datacenter - to bid on new orders and listen for leases created) and user (application developer - to send the app manifest to the provider) side. In addition the Akash team is now maintaining the IBC [`relayer`](https://github.com/ovrclk/relayer), another very event driven process. In working on these core pieces of infrastructure, and integrating lessons learned from Kubernetes developement, our team has developed a standard method for defining and consuming typed events in Cosmos SDK modules. We have found that it is extremely useful in building this type of event driven application. + +As the Cosmos SDK gets used more extensively for apps like `peggy`, other peg zones, IBC, DeFi, etc... there will be an exploding demand for event driven applications to support new features desired by users. We propose upstreaming our findings into the Cosmos SDK to enable all Cosmos SDK applications to quickly and easily build event driven apps to aid their core application. Wallets, exchanges, explorers, and defi protocols all stand to benefit from this work. + +If this proposal is accepted, users will be able to build event driven Cosmos SDK apps in go by just writing `EventHandler`s for their specific event types and passing them to `EventEmitters` that are defined in the Cosmos SDK. + +The end of this proposal contains a detailed example of how to consume events after this refactor. + +This proposal is specifically about how to consume these events as a client of the blockchain, not for intermodule communication. + +## Decision + +**Step-1**: Implement additional functionality in the `types` package: `EmitTypedEvent` and `ParseTypedEvent` functions + +```go +// types/events.go + +// EmitTypedEvent takes typed event and emits converting it into sdk.Event +func (em *EventManager) EmitTypedEvent(event proto.Message) error { + evtType := proto.MessageName(event) + evtJSON, err := codec.ProtoMarshalJSON(event) + if err != nil { + return err + } + + var attrMap map[string]json.RawMessage + err = json.Unmarshal(evtJSON, &attrMap) + if err != nil { + return err + } + + var attrs []abci.EventAttribute + for k, v := range attrMap { + attrs = append(attrs, abci.EventAttribute{ + Key: []byte(k), + Value: v, + }) + } + + em.EmitEvent(Event{ + Type: evtType, + Attributes: attrs, + }) + + return nil +} + +// ParseTypedEvent converts abci.Event back to typed event +func ParseTypedEvent(event abci.Event) (proto.Message, error) { + concreteGoType := proto.MessageType(event.Type) + if concreteGoType == nil { + return nil, fmt.Errorf("failed to retrieve the message of type %q", event.Type) + } + + var value reflect.Value + if concreteGoType.Kind() == reflect.Ptr { + value = reflect.New(concreteGoType.Elem()) + } else { + value = reflect.Zero(concreteGoType) + } + + protoMsg, ok := value.Interface().(proto.Message) + if !ok { + return nil, fmt.Errorf("%q does not implement proto.Message", event.Type) + } + + attrMap := make(map[string]json.RawMessage) + for _, attr := range event.Attributes { + attrMap[string(attr.Key)] = attr.Value + } + + attrBytes, err := json.Marshal(attrMap) + if err != nil { + return nil, err + } + + err = jsonpb.Unmarshal(strings.NewReader(string(attrBytes)), protoMsg) + if err != nil { + return nil, err + } + + return protoMsg, nil +} +``` + +Here, the `EmitTypedEvent` is a method on `EventManager` which takes typed event as input and apply json serialization on it. Then it maps the JSON key/value pairs to `event.Attributes` and emits it in form of `sdk.Event`. `Event.Type` will be the type URL of the proto message. + +When we subscribe to emitted events on the CometBFT websocket, they are emitted in the form of an `abci.Event`. `ParseTypedEvent` parses the event back to it's original proto message. + +**Step-2**: Add proto definitions for typed events for msgs in each module: + +For example, let's take `MsgSubmitProposal` of `gov` module and implement this event's type. + +```protobuf +// proto/cosmos/gov/v1beta1/gov.proto +// Add typed event definition + +package cosmos.gov.v1beta1; + +message EventSubmitProposal { + string from_address = 1; + uint64 proposal_id = 2; + TextProposal proposal = 3; +} +``` + +**Step-3**: Refactor event emission to use the typed event created and emit using `sdk.EmitTypedEvent`: + +```go +// x/gov/handler.go +func handleMsgSubmitProposal(ctx sdk.Context, keeper keeper.Keeper, msg types.MsgSubmitProposalI) (*sdk.Result, error) { + ... + types.Context.EventManager().EmitTypedEvent( + &EventSubmitProposal{ + FromAddress: fromAddress, + ProposalId: id, + Proposal: proposal, + }, + ) + ... +} +``` + +### How to subscribe to these typed events in `Client` + +> NOTE: Full code example below + +Users will be able to subscribe using `client.Context.Client.Subscribe` and consume events which are emitted using `EventHandler`s. + +Akash Network has built a simple [`pubsub`](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/pubsub/bus.go#L20). This can be used to subscribe to `abci.Events` and [publish](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L21) them as typed events. + +Please see the below code sample for more detail on this flow looks for clients. + +## Consequences + +### Positive + +* Improves consistency of implementation for the events currently in the Cosmos SDK +* Provides a much more ergonomic way to handle events and facilitates writing event driven applications +* This implementation will support a middleware ecosystem of `EventHandler`s + +### Negative + +## Detailed code example of publishing events + +This ADR also proposes adding affordances to emit and consume these events. This way developers will only need to write +`EventHandler`s which define the actions they desire to take. + +```go +// EventEmitter is a type that describes event emitter functions +// This should be defined in `types/events.go` +type EventEmitter func(context.Context, client.Context, ...EventHandler) error + +// EventHandler is a type of function that handles events coming out of the event bus +// This should be defined in `types/events.go` +type EventHandler func(proto.Message) error + +// Sample use of the functions below +func main() { + ctx, cancel := context.WithCancel(context.Background()) + + if err := TxEmitter(ctx, client.Context{}.WithNodeURI("tcp://localhost:26657"), SubmitProposalEventHandler); err != nil { + cancel() + panic(err) + } + + return +} + +// SubmitProposalEventHandler is an example of an event handler that prints proposal details +// when any EventSubmitProposal is emitted. +func SubmitProposalEventHandler(ev proto.Message) (err error) { + switch event := ev.(type) { + // Handle governance proposal events creation events + case govtypes.EventSubmitProposal: + // Users define business logic here e.g. + fmt.Println(ev.FromAddress, ev.ProposalId, ev.Proposal) + return nil + default: + return nil + } +} + +// TxEmitter is an example of an event emitter that emits just transaction events. This can and +// should be implemented somewhere in the Cosmos SDK. The Cosmos SDK can include an EventEmitters for tm.event='Tx' +// and/or tm.event='NewBlock' (the new block events may contain typed events) +func TxEmitter(ctx context.Context, cliCtx client.Context, ehs ...EventHandler) (err error) { + // Instantiate and start CometBFT RPC client + client, err := cliCtx.GetNode() + if err != nil { + return err + } + + if err = client.Start(); err != nil { + return err + } + + // Start the pubsub bus + bus := pubsub.NewBus() + defer bus.Close() + + // Initialize a new error group + eg, ctx := errgroup.WithContext(ctx) + + // Publish chain events to the pubsub bus + eg.Go(func() error { + return PublishChainTxEvents(ctx, client, bus, simapp.ModuleBasics) + }) + + // Subscribe to the bus events + subscriber, err := bus.Subscribe() + if err != nil { + return err + } + + // Handle all the events coming out of the bus + eg.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + return nil + case <-subscriber.Done(): + return nil + case ev := <-subscriber.Events(): + for _, eh := range ehs { + if err = eh(ev); err != nil { + break + } + } + } + } + return nil + }) + + return group.Wait() +} + +// PublishChainTxEvents events using cmtclient. Waits on context shutdown signals to exit. +func PublishChainTxEvents(ctx context.Context, client cmtclient.EventsClient, bus pubsub.Bus, mb module.BasicManager) (err error) { + // Subscribe to transaction events + txch, err := client.Subscribe(ctx, "txevents", "tm.event='Tx'", 100) + if err != nil { + return err + } + + // Unsubscribe from transaction events on function exit + defer func() { + err = client.UnsubscribeAll(ctx, "txevents") + }() + + // Use errgroup to manage concurrency + g, ctx := errgroup.WithContext(ctx) + + // Publish transaction events in a goroutine + g.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + break + case ed := <-ch: + switch evt := ed.Data.(type) { + case cmttypes.EventDataTx: + if !evt.Result.IsOK() { + continue + } + // range over events, parse them using the basic manager and + // send them to the pubsub bus + for _, abciEv := range events { + typedEvent, err := sdk.ParseTypedEvent(abciEv) + if err != nil { + return er + } + if err := bus.Publish(typedEvent); err != nil { + bus.Close() + return + } + continue + } + } + } + } + return err + }) + + // Exit on error or context cancelation + return g.Wait() +} +``` + +## References + +* [Publish Custom Events via a bus](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L19-L58) +* [Consuming the events in `Client`](https://github.com/ovrclk/deploy/blob/bf6c633ab6c68f3026df59efd9982d6ca1bf0561/cmd/event-handlers.go#L57) diff --git a/docs/integrate/architecture/adr-033-protobuf-inter-module-comm.md b/docs/integrate/architecture/adr-033-protobuf-inter-module-comm.md new file mode 100644 index 000000000..9c02a6684 --- /dev/null +++ b/docs/integrate/architecture/adr-033-protobuf-inter-module-comm.md @@ -0,0 +1,400 @@ +# ADR 033: Protobuf-based Inter-Module Communication + +## Changelog + +* 2020-10-05: Initial Draft + +## Status + +Proposed + +## Abstract + +This ADR introduces a system for permissioned inter-module communication leveraging the protobuf `Query` and `Msg` +service definitions defined in [ADR 021](adr-021-protobuf-query-encoding.md) and +[ADR 031](adr-031-msg-service.md) which provides: + +* stable protobuf based module interfaces to potentially later replace the keeper paradigm +* stronger inter-module object capabilities (OCAPs) guarantees +* module accounts and sub-account authorization + +## Context + +In the current Cosmos SDK documentation on the [Object-Capability Model](../../develop/advanced-concepts/10-ocap.md), it is stated that: + +> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +There is currently not a thriving ecosystem of Cosmos SDK modules. We hypothesize that this is in part due to: + +1. lack of a stable v1.0 Cosmos SDK to build modules off of. Module interfaces are changing, sometimes dramatically, from +point release to point release, often for good reasons, but this does not create a stable foundation to build on. +2. lack of a properly implemented object capability or even object-oriented encapsulation system which makes refactors +of module keeper interfaces inevitable because the current interfaces are poorly constrained. + +### `x/bank` Case Study + +Currently the `x/bank` keeper gives pretty much unrestricted access to any module which references it. For instance, the +`SetBalance` method allows the caller to set the balance of any account to anything, bypassing even proper tracking of supply. + +There appears to have been some later attempts to implement some semblance of OCAPs using module-level minting, staking +and burning permissions. These permissions allow a module to mint, burn or delegate tokens with reference to the module’s +own account. These permissions are actually stored as a `[]string` array on the `ModuleAccount` type in state. + +However, these permissions don’t really do much. They control what modules can be referenced in the `MintCoins`, +`BurnCoins` and `DelegateCoins***` methods, but for one there is no unique object capability token that controls access — +just a simple string. So the `x/upgrade` module could mint tokens for the `x/staking` module simple by calling +`MintCoins(“staking”)`. Furthermore, all modules which have access to these keeper methods, also have access to +`SetBalance` negating any other attempt at OCAPs and breaking even basic object-oriented encapsulation. + +## Decision + +Based on [ADR-021](adr-021-protobuf-query-encoding.md) and [ADR-031](adr-031-msg-service.md), we introduce the +Inter-Module Communication framework for secure module authorization and OCAPs. +When implemented, this could also serve as an alternative to the existing paradigm of passing keepers between +modules. The approach outlined here-in is intended to form the basis of a Cosmos SDK v1.0 that provides the necessary +stability and encapsulation guarantees that allow a thriving module ecosystem to emerge. + +Of particular note — the decision is to _enable_ this functionality for modules to adopt at their own discretion. +Proposals to migrate existing modules to this new paradigm will have to be a separate conversation, potentially +addressed as amendments to this ADR. + +### New "Keeper" Paradigm + +In [ADR 021](adr-021-protobuf-query-encoding.md), a mechanism for using protobuf service definitions to define queriers +was introduced and in [ADR 31](adr-031-msg-service.md), a mechanism for using protobuf service to define `Msg`s was added. +Protobuf service definitions generate two golang interfaces representing the client and server sides of a service plus +some helper code. Here is a minimal example for the bank `cosmos.bank.Msg/Send` message type: + +```go +package bank + +type MsgClient interface { + Send(context.Context, *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) +} + +type MsgServer interface { + Send(context.Context, *MsgSend) (*MsgSendResponse, error) +} +``` + +[ADR 021](adr-021-protobuf-query-encoding.md) and [ADR 31](adr-031-msg-service.md) specifies how modules can implement the generated `QueryServer` +and `MsgServer` interfaces as replacements for the legacy queriers and `Msg` handlers respectively. + +In this ADR we explain how modules can make queries and send `Msg`s to other modules using the generated `QueryClient` +and `MsgClient` interfaces and propose this mechanism as a replacement for the existing `Keeper` paradigm. To be clear, +this ADR does not necessitate the creation of new protobuf definitions or services. Rather, it leverages the same proto +based service interfaces already used by clients for inter-module communication. + +Using this `QueryClient`/`MsgClient` approach has the following key benefits over exposing keepers to external modules: + +1. Protobuf types are checked for breaking changes using [buf](https://buf.build/docs/breaking-overview) and because of +the way protobuf is designed this will give us strong backwards compatibility guarantees while allowing for forward +evolution. +2. The separation between the client and server interfaces will allow us to insert permission checking code in between +the two which checks if one module is authorized to send the specified `Msg` to the other module providing a proper +object capability system (see below). +3. The router for inter-module communication gives us a convenient place to handle rollback of transactions, +enabling atomicy of operations ([currently a problem](https://github.com/cosmos/cosmos-sdk/issues/8030)). Any failure within a module-to-module call would result in a failure of the entire +transaction + +This mechanism has the added benefits of: + +* reducing boilerplate through code generation, and +* allowing for modules in other languages either via a VM like CosmWasm or sub-processes using gRPC + +### Inter-module Communication + +To use the `Client` generated by the protobuf compiler we need a `grpc.ClientConn` [interface](https://github.com/grpc/grpc-go/blob/v1.49.x/clientconn.go#L441-L450) +implementation. For this we introduce +a new type, `ModuleKey`, which implements the `grpc.ClientConn` interface. `ModuleKey` can be thought of as the "private +key" corresponding to a module account, where authentication is provided through use of a special `Invoker()` function, +described in more detail below. + +Blockchain users (external clients) use their account's private key to sign transactions containing `Msg`s where they are listed as signers (each +message specifies required signers with `Msg.GetSigner`). The authentication checks is performed by `AnteHandler`. + +Here, we extend this process, by allowing modules to be identified in `Msg.GetSigners`. When a module wants to trigger the execution a `Msg` in another module, +its `ModuleKey` acts as the sender (through the `ClientConn` interface we describe below) and is set as a sole "signer". It's worth to note +that we don't use any cryptographic signature in this case. +For example, module `A` could use its `A.ModuleKey` to create `MsgSend` object for `/cosmos.bank.Msg/Send` transaction. `MsgSend` validation +will assure that the `from` account (`A.ModuleKey` in this case) is the signer. + +Here's an example of a hypothetical module `foo` interacting with `x/bank`: + +```go +package foo + + +type FooMsgServer { + // ... + + bankQuery bank.QueryClient + bankMsg bank.MsgClient +} + +func NewFooMsgServer(moduleKey RootModuleKey, ...) FooMsgServer { + // ... + + return FooMsgServer { + // ... + modouleKey: moduleKey, + bankQuery: bank.NewQueryClient(moduleKey), + bankMsg: bank.NewMsgClient(moduleKey), + } +} + +func (foo *FooMsgServer) Bar(ctx context.Context, req *MsgBarRequest) (*MsgBarResponse, error) { + balance, err := foo.bankQuery.Balance(&bank.QueryBalanceRequest{Address: fooMsgServer.moduleKey.Address(), Denom: "foo"}) + + ... + + res, err := foo.bankMsg.Send(ctx, &bank.MsgSendRequest{FromAddress: fooMsgServer.moduleKey.Address(), ...}) + + ... +} +``` + +This design is also intended to be extensible to cover use cases of more fine grained permissioning like minting by +denom prefix being restricted to certain modules (as discussed in +[#7459](https://github.com/cosmos/cosmos-sdk/pull/7459#discussion_r529545528)). + +### `ModuleKey`s and `ModuleID`s + +A `ModuleKey` can be thought of as a "private key" for a module account and a `ModuleID` can be thought of as the +corresponding "public key". From the [ADR 028](adr-028-public-key-addresses.md), modules can have both a root module account and any number of sub-accounts +or derived accounts that can be used for different pools (ex. staking pools) or managed accounts (ex. group +accounts). We can also think of module sub-accounts as similar to derived keys - there is a root key and then some +derivation path. `ModuleID` is a simple struct which contains the module name and optional "derivation" path, +and forms its address based on the `AddressHash` method from [the ADR-028](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-028-public-key-addresses.md): + +```go +type ModuleID struct { + ModuleName string + Path []byte +} + +func (key ModuleID) Address() []byte { + return AddressHash(key.ModuleName, key.Path) +} +``` + +In addition to being able to generate a `ModuleID` and address, a `ModuleKey` contains a special function called +`Invoker` which is the key to safe inter-module access. The `Invoker` creates an `InvokeFn` closure which is used as an `Invoke` method in +the `grpc.ClientConn` interface and under the hood is able to route messages to the appropriate `Msg` and `Query` handlers +performing appropriate security checks on `Msg`s. This allows for even safer inter-module access than keeper's whose +private member variables could be manipulated through reflection. Golang does not support reflection on a function +closure's captured variables and direct manipulation of memory would be needed for a truly malicious module to bypass +the `ModuleKey` security. + +The two `ModuleKey` types are `RootModuleKey` and `DerivedModuleKey`: + +```go +type Invoker func(callInfo CallInfo) func(ctx context.Context, request, response interface{}, opts ...interface{}) error + +type CallInfo { + Method string + Caller ModuleID +} + +type RootModuleKey struct { + moduleName string + invoker Invoker +} + +func (rm RootModuleKey) Derive(path []byte) DerivedModuleKey { /* ... */} + +type DerivedModuleKey struct { + moduleName string + path []byte + invoker Invoker +} +``` + +A module can get access to a `DerivedModuleKey`, using the `Derive(path []byte)` method on `RootModuleKey` and then +would use this key to authenticate `Msg`s from a sub-account. Ex: + +```go +package foo + +func (fooMsgServer *MsgServer) Bar(ctx context.Context, req *MsgBar) (*MsgBarResponse, error) { + derivedKey := fooMsgServer.moduleKey.Derive(req.SomePath) + bankMsgClient := bank.NewMsgClient(derivedKey) + res, err := bankMsgClient.Balance(ctx, &bank.MsgSend{FromAddress: derivedKey.Address(), ...}) + ... +} +``` + +In this way, a module can gain permissioned access to a root account and any number of sub-accounts and send +authenticated `Msg`s from these accounts. The `Invoker` `callInfo.Caller` parameter is used under the hood to +distinguish between different module accounts, but either way the function returned by `Invoker` only allows `Msg`s +from either the root or a derived module account to pass through. + +Note that `Invoker` itself returns a function closure based on the `CallInfo` passed in. This will allow client implementations +in the future that cache the invoke function for each method type avoiding the overhead of hash table lookup. +This would reduce the performance overhead of this inter-module communication method to the bare minimum required for +checking permissions. + +To re-iterate, the closure only allows access to authorized calls. There is no access to anything else regardless of any +name impersonation. + +Below is a rough sketch of the implementation of `grpc.ClientConn.Invoke` for `RootModuleKey`: + +```go +func (key RootModuleKey) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...grpc.CallOption) error { + f := key.invoker(CallInfo {Method: method, Caller: ModuleID {ModuleName: key.moduleName}}) + return f(ctx, args, reply) +} +``` + +### `AppModule` Wiring and Requirements + +In [ADR 031](adr-031-msg-service.md), the `AppModule.RegisterService(Configurator)` method was introduced. To support +inter-module communication, we extend the `Configurator` interface to pass in the `ModuleKey` and to allow modules to +specify their dependencies on other modules using `RequireServer()`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + + ModuleKey() ModuleKey + RequireServer(msgServer interface{}) +} +``` + +The `ModuleKey` is passed to modules in the `RegisterService` method itself so that `RegisterServices` serves as a single +entry point for configuring module services. This is intended to also have the side-effect of greatly reducing boilerplate in +`app.go`. For now, `ModuleKey`s will be created based on `AppModuleBasic.Name()`, but a more flexible system may be +introduced in the future. The `ModuleManager` will handle creation of module accounts behind the scenes. + +Because modules do not get direct access to each other anymore, modules may have unfulfilled dependencies. To make sure +that module dependencies are resolved at startup, the `Configurator.RequireServer` method should be added. The `ModuleManager` +will make sure that all dependencies declared with `RequireServer` can be resolved before the app starts. An example +module `foo` could declare it's dependency on `x/bank` like this: + +```go +package foo + +func (am AppModule) RegisterServices(cfg Configurator) { + cfg.RequireServer((*bank.QueryServer)(nil)) + cfg.RequireServer((*bank.MsgServer)(nil)) +} +``` + +### Security Considerations + +In addition to checking for `ModuleKey` permissions, a few additional security precautions will need to be taken by +the underlying router infrastructure. + +#### Recursion and Re-entry + +Recursive or re-entrant method invocations pose a potential security threat. This can be a problem if Module A +calls Module B and Module B calls module A again in the same call. + +One basic way for the router system to deal with this is to maintain a call stack which prevents a module from +being referenced more than once in the call stack so that there is no re-entry. A `map[string]interface{}` table +in the router could be used to perform this security check. + +#### Queries + +Queries in Cosmos SDK are generally un-permissioned so allowing one module to query another module should not pose +any major security threats assuming basic precautions are taken. The basic precaution that the router system will +need to take is making sure that the `sdk.Context` passed to query methods does not allow writing to the store. This +can be done for now with a `CacheMultiStore` as is currently done for `BaseApp` queries. + +### Internal Methods + +In many cases, we may wish for modules to call methods on other modules which are not exposed to clients at all. For this +purpose, we add the `InternalServer` method to `Configurator`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + InternalServer() grpc.Server +} +``` + +As an example, x/slashing's Slash must call x/staking's Slash, but we don't want to expose x/staking's Slash to end users +and clients. + +Internal protobuf services will be defined in a corresponding `internal.proto` file in the given module's +proto package. + +Services registered against `InternalServer` will be callable from other modules but not by external clients. + +An alternative solution to internal-only methods could involve hooks / plugins as discussed [here](https://github.com/cosmos/cosmos-sdk/pull/7459#issuecomment-733807753). +A more detailed evaluation of a hooks / plugin system will be addressed later in follow-ups to this ADR or as a separate +ADR. + +### Authorization + +By default, the inter-module router requires that messages are sent by the first signer returned by `GetSigners`. The +inter-module router should also accept authorization middleware such as that provided by [ADR 030](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-030-authz-module.md). +This middleware will allow accounts to otherwise specific module accounts to perform actions on their behalf. +Authorization middleware should take into account the need to grant certain modules effectively "admin" privileges to +other modules. This will be addressed in separate ADRs or updates to this ADR. + +### Future Work + +Other future improvements may include: + +* custom code generation that: + * simplifies interfaces (ex. generates code with `sdk.Context` instead of `context.Context`) + * optimizes inter-module calls - for instance caching resolved methods after first invocation +* combining `StoreKey`s and `ModuleKey`s into a single interface so that modules have a single OCAPs handle +* code generation which makes inter-module communication more performant +* decoupling `ModuleKey` creation from `AppModuleBasic.Name()` so that app's can override root module account names +* inter-module hooks and plugins + +## Alternatives + +### MsgServices vs `x/capability` + +The `x/capability` module does provide a proper object-capability implementation that can be used by any module in the +Cosmos SDK and could even be used for inter-module OCAPs as described in [\#5931](https://github.com/cosmos/cosmos-sdk/issues/5931). + +The advantages of the approach described in this ADR are mostly around how it integrates with other parts of the Cosmos SDK, +specifically: + +* protobuf so that: + * code generation of interfaces can be leveraged for a better dev UX + * module interfaces are versioned and checked for breakage using [buf](https://docs.buf.build/breaking-overview) +* sub-module accounts as per ADR 028 +* the general `Msg` passing paradigm and the way signers are specified by `GetSigners` + +Also, this is a complete replacement for keepers and could be applied to _all_ inter-module communication whereas the +`x/capability` approach in #5931 would need to be applied method by method. + +## Consequences + +### Backwards Compatibility + +This ADR is intended to provide a pathway to a scenario where there is greater long term compatibility between modules. +In the short-term, this will likely result in breaking certain `Keeper` interfaces which are too permissive and/or +replacing `Keeper` interfaces altogether. + +### Positive + +* an alternative to keepers which can more easily lead to stable inter-module interfaces +* proper inter-module OCAPs +* improved module developer DevX, as commented on by several particpants on + [Architecture Review Call, Dec 3](https://hackmd.io/E0wxxOvRQ5qVmTf6N_k84Q) +* lays the groundwork for what can be a greatly simplified `app.go` +* router can be setup to enforce atomic transactions for module-to-module calls + +### Negative + +* modules which adopt this will need significant refactoring + +### Neutral + +## Test Cases [optional] + +## References + +* [ADR 021](adr-021-protobuf-query-encoding.md) +* [ADR 031](adr-031-msg-service.md) +* [ADR 028](adr-028-public-key-addresses.md) +* [ADR 030 draft](https://github.com/cosmos/cosmos-sdk/pull/7105) +* [Object-Capability Model](https://docs.network.com/main/core/ocap) diff --git a/docs/integrate/architecture/adr-034-account-rekeying.md b/docs/integrate/architecture/adr-034-account-rekeying.md new file mode 100644 index 000000000..cd9b91469 --- /dev/null +++ b/docs/integrate/architecture/adr-034-account-rekeying.md @@ -0,0 +1,76 @@ +# ADR 034: Account Rekeying + +## Changelog + +* 30-09-2020: Initial Draft + +## Status + +PROPOSED + +## Abstract + +Account rekeying is a process hat allows an account to replace its authentication pubkey with a new one. + +## Context + +Currently, in the Cosmos SDK, the address of an auth `BaseAccount` is based on the hash of the public key. Once an account is created, the public key for the account is set in stone, and cannot be changed. This can be a problem for users, as key rotation is a useful security practice, but is not possible currently. Furthermore, as multisigs are a type of pubkey, once a multisig for an account is set, it can not be updated. This is problematic, as multisigs are often used by organizations or companies, who may need to change their set of multisig signers for internal reasons. + +Transferring all the assets of an account to a new account with the updated pubkey is not sufficient, because some "engagements" of an account are not easily transferable. For example, in staking, to transfer bonded Atoms, an account would have to unbond all delegations and wait the three week unbonding period. Even more significantly, for validator operators, ownership over a validator is not transferrable at all, meaning that the operator key for a validator can never be updated, leading to poor operational security for validators. + +## Decision + +We propose the addition of a new feature to `x/auth` that allows accounts to update the public key associated with their account, while keeping the address the same. + +This is possible because the Cosmos SDK `BaseAccount` stores the public key for an account in state, instead of making the assumption that the public key is included in the transaction (whether explicitly or implicitly through the signature) as in other blockchains such as Bitcoin and Ethereum. Because the public key is stored on chain, it is okay for the public key to not hash to the address of an account, as the address is not pertinent to the signature checking process. + +To build this system, we design a new Msg type as follows: + +```protobuf +service Msg { + rpc ChangePubKey(MsgChangePubKey) returns (MsgChangePubKeyResponse); +} + +message MsgChangePubKey { + string address = 1; + google.protobuf.Any pub_key = 2; +} + +message MsgChangePubKeyResponse {} +``` + +The MsgChangePubKey transaction needs to be signed by the existing pubkey in state. + +Once, approved, the handler for this message type, which takes in the AccountKeeper, will update the in-state pubkey for the account and replace it with the pubkey from the Msg. + +An account that has had its pubkey changed cannot be automatically pruned from state. This is because if pruned, the original pubkey of the account would be needed to recreate the same address, but the owner of the address may not have the original pubkey anymore. Currently, we do not automatically prune any accounts anyways, but we would like to keep this option open the road (this is the purpose of account numbers). To resolve this, we charge an additional gas fee for this operation to compensate for this this externality (this bound gas amount is configured as parameter `PubKeyChangeCost`). The bonus gas is charged inside the handler, using the `ConsumeGas` function. Furthermore, in the future, we can allow accounts that have rekeyed manually prune themselves using a new Msg type such as `MsgDeleteAccount`. Manually pruning accounts can give a gas refund as an incentive for performing the action. + +```go + amount := ak.GetParams(ctx).PubKeyChangeCost + ctx.GasMeter().ConsumeGas(amount, "pubkey change fee") +``` + +Everytime a key for an address is changed, we will store a log of this change in the state of the chain, thus creating a stack of all previous keys for an address and the time intervals for which they were active. This allows dapps and clients to easily query past keys for an account which may be useful for features such as verifying timestamped off-chain signed messages. + +## Consequences + +### Positive + +* Will allow users and validator operators to employ better operational security practices with key rotation. +* Will allow organizations or groups to easily change and add/remove multisig signers. + +### Negative + +Breaks the current assumed relationship between address and pubkeys as H(pubkey) = address. This has a couple of consequences. + +* This makes wallets that support this feature more complicated. For example, if an address on chain was updated, the corresponding key in the CLI wallet also needs to be updated. +* Cannot automatically prune accounts with 0 balance that have had their pubkey changed. + +### Neutral + +* While the purpose of this is intended to allow the owner of an account to update to a new pubkey they own, this could technically also be used to transfer ownership of an account to a new owner. For example, this could be use used to sell a staked position without unbonding or an account that has vesting tokens. However, the friction of this is very high as this would essentially have to be done as a very specific OTC trade. Furthermore, additional constraints could be added to prevent accouns with Vesting tokens to use this feature. +* Will require that PubKeys for an account are included in the genesis exports. + +## References + +* https://www.algorand.com/resources/blog/announcing-rekeying diff --git a/docs/integrate/architecture/adr-035-rosetta-api-support.md b/docs/integrate/architecture/adr-035-rosetta-api-support.md new file mode 100644 index 000000000..01a81048b --- /dev/null +++ b/docs/integrate/architecture/adr-035-rosetta-api-support.md @@ -0,0 +1,211 @@ +# ADR 035: Rosetta API Support + +## Authors + +* Jonathan Gimeno (@jgimeno) +* David Grierson (@senormonito) +* Alessio Treglia (@alessio) +* Frojdy Dymylja (@fdymylja) + +## Changelog + +* 2021-05-12: the external library [cosmos-rosetta-gateway](https://github.com/tendermint/cosmos-rosetta-gateway) has been moved within the Cosmos SDK. + +## Context + +[Rosetta API](https://www.rosetta-api.org/) is an open-source specification and set of tools developed by Coinbase to +standardise blockchain interactions. + +Through the use of a standard API for integrating blockchain applications it will + +* Be easier for a user to interact with a given blockchain +* Allow exchanges to integrate new blockchains quickly and easily +* Enable application developers to build cross-blockchain applications such as block explorers, wallets and dApps at + considerably lower cost and effort. + +## Decision + +It is clear that adding Rosetta API support to the Cosmos SDK will bring value to all the developers and +Cosmos SDK based chains in the ecosystem. How it is implemented is key. + +The driving principles of the proposed design are: + +1. **Extensibility:** it must be as riskless and painless as possible for application developers to set-up network + configurations to expose Rosetta API-compliant services. +2. **Long term support:** This proposal aims to provide support for all the supported Cosmos SDK release series. +3. **Cost-efficiency:** Backporting changes to Rosetta API specifications from `master` to the various stable + branches of Cosmos SDK is a cost that needs to be reduced. + +We will achieve these delivering on these principles by the following: + +1. There will be a package `rosetta/lib` + for the implementation of the core Rosetta API features, particularly: + a. The types and interfaces (`Client`, `OfflineClient`...), this separates design from implementation detail. + b. The `Server` functionality as this is independent of the Cosmos SDK version. + c. The `Online/OfflineNetwork`, which is not exported, and implements the rosetta API using the `Client` interface to query the node, build tx and so on. + d. The `errors` package to extend rosetta errors. +2. Due to differences between the Cosmos release series, each series will have its own specific implementation of `Client` interface. +3. There will be two options for starting an API service in applications: + a. API shares the application process + b. API-specific process. + +## Architecture + +### The External Repo + +As section will describe the proposed external library, including the service implementation, plus the defined types and interfaces. + +#### Server + +`Server` is a simple `struct` that is started and listens to the port specified in the settings. This is meant to be used across all the Cosmos SDK versions that are actively supported. + +The constructor follows: + +`func NewServer(settings Settings) (Server, error)` + +`Settings`, which are used to construct a new server, are the following: + +```go +// Settings define the rosetta server settings +type Settings struct { + // Network contains the information regarding the network + Network *types.NetworkIdentifier + // Client is the online API handler + Client crgtypes.Client + // Listen is the address the handler will listen at + Listen string + // Offline defines if the rosetta service should be exposed in offline mode + Offline bool + // Retries is the number of readiness checks that will be attempted when instantiating the handler + // valid only for online API + Retries int + // RetryWait is the time that will be waited between retries + RetryWait time.Duration +} +``` + +#### Types + +Package types uses a mixture of rosetta types and custom defined type wrappers, that the client must parse and return while executing operations. + +##### Interfaces + +Every SDK version uses a different format to connect (rpc, gRPC, etc), query and build transactions, we have abstracted this in what is the `Client` interface. +The client uses rosetta types, whilst the `Online/OfflineNetwork` takes care of returning correctly parsed rosetta responses and errors. + +Each Cosmos SDK release series will have their own `Client` implementations. +Developers can implement their own custom `Client`s as required. + +```go +// Client defines the API the client implementation should provide. +type Client interface { + // Needed if the client needs to perform some action before connecting. + Bootstrap() error + // Ready checks if the servicer constraints for queries are satisfied + // for example the node might still not be ready, it's useful in process + // when the rosetta instance might come up before the node itself + // the servicer must return nil if the node is ready + Ready() error + + // Data API + + // Balances fetches the balance of the given address + // if height is not nil, then the balance will be displayed + // at the provided height, otherwise last block balance will be returned + Balances(ctx context.Context, addr string, height *int64) ([]*types.Amount, error) + // BlockByHashAlt gets a block and its transaction at the provided height + BlockByHash(ctx context.Context, hash string) (BlockResponse, error) + // BlockByHeightAlt gets a block given its height, if height is nil then last block is returned + BlockByHeight(ctx context.Context, height *int64) (BlockResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHash(ctx context.Context, hash string) (BlockTransactionsResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHeight(ctx context.Context, height *int64) (BlockTransactionsResponse, error) + // GetTx gets a transaction given its hash + GetTx(ctx context.Context, hash string) (*types.Transaction, error) + // GetUnconfirmedTx gets an unconfirmed Tx given its hash + // NOTE(fdymylja): NOT IMPLEMENTED YET! + GetUnconfirmedTx(ctx context.Context, hash string) (*types.Transaction, error) + // Mempool returns the list of the current non confirmed transactions + Mempool(ctx context.Context) ([]*types.TransactionIdentifier, error) + // Peers gets the peers currently connected to the node + Peers(ctx context.Context) ([]*types.Peer, error) + // Status returns the node status, such as sync data, version etc + Status(ctx context.Context) (*types.SyncStatus, error) + + // Construction API + + // PostTx posts txBytes to the node and returns the transaction identifier plus metadata related + // to the transaction itself. + PostTx(txBytes []byte) (res *types.TransactionIdentifier, meta map[string]interface{}, err error) + // ConstructionMetadataFromOptions + ConstructionMetadataFromOptions(ctx context.Context, options map[string]interface{}) (meta map[string]interface{}, err error) + OfflineClient +} + +// OfflineClient defines the functionalities supported without having access to the node +type OfflineClient interface { + NetworkInformationProvider + // SignedTx returns the signed transaction given the tx bytes (msgs) plus the signatures + SignedTx(ctx context.Context, txBytes []byte, sigs []*types.Signature) (signedTxBytes []byte, err error) + // TxOperationsAndSignersAccountIdentifiers returns the operations related to a transaction and the account + // identifiers if the transaction is signed + TxOperationsAndSignersAccountIdentifiers(signed bool, hexBytes []byte) (ops []*types.Operation, signers []*types.AccountIdentifier, err error) + // ConstructionPayload returns the construction payload given the request + ConstructionPayload(ctx context.Context, req *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) + // PreprocessOperationsToOptions returns the options given the preprocess operations + PreprocessOperationsToOptions(ctx context.Context, req *types.ConstructionPreprocessRequest) (options map[string]interface{}, err error) + // AccountIdentifierFromPublicKey returns the account identifier given the public key + AccountIdentifierFromPublicKey(pubKey *types.PublicKey) (*types.AccountIdentifier, error) +} +``` + +### 2. Cosmos SDK Implementation + +The Cosmos SDK implementation, based on version, takes care of satisfying the `Client` interface. +In Stargate, Launchpad and 0.37, we have introduced the concept of rosetta.Msg, this message is not in the shared repository as the sdk.Msg type differs between Cosmos SDK versions. + +The rosetta.Msg interface follows: + +```go +// Msg represents a cosmos-sdk message that can be converted from and to a rosetta operation. +type Msg interface { + sdk.Msg + ToOperations(withStatus, hasError bool) []*types.Operation + FromOperations(ops []*types.Operation) (sdk.Msg, error) +} +``` + +Hence developers who want to extend the rosetta set of supported operations just need to extend their module's sdk.Msgs with the `ToOperations` and `FromOperations` methods. + +### 3. API service invocation + +As stated at the start, application developers will have two methods for invocation of the Rosetta API service: + +1. Shared process for both application and API +2. Standalone API service + +#### Shared Process (Only Stargate) + +Rosetta API service could run within the same execution process as the application. This would be enabled via app.toml settings, and if gRPC is not enabled the rosetta instance would be spinned in offline mode (tx building capabilities only). + +#### Separate API service + +Client application developers can write a new command to launch a Rosetta API server as a separate process too, using the rosetta command contained in the `/server/rosetta` package. Construction of the command depends on Cosmos SDK version. Examples can be found inside `simd` for stargate, and `contrib/rosetta/simapp` for other release series. + +## Status + +Proposed + +## Consequences + +### Positive + +* Out-of-the-box Rosetta API support within Cosmos SDK. +* Blockchain interface standardisation + +## References + +* https://www.rosetta-api.org/ diff --git a/docs/integrate/architecture/adr-036-arbitrary-signature.md b/docs/integrate/architecture/adr-036-arbitrary-signature.md new file mode 100644 index 000000000..fe9dada54 --- /dev/null +++ b/docs/integrate/architecture/adr-036-arbitrary-signature.md @@ -0,0 +1,132 @@ +# ADR 036: Arbitrary Message Signature Specification + +## Changelog + +* 28/10/2020 - Initial draft + +## Authors + +* Antoine Herzog (@antoineherzog) +* Zaki Manian (@zmanian) +* Aleksandr Bezobchuk (alexanderbez) [1] +* Frojdi Dymylja (@fdymylja) + +## Status + +Draft + +## Abstract + +Currently, in the Cosmos SDK, there is no convention to sign arbitrary message like on Ethereum. We propose with this specification, for Cosmos SDK ecosystem, a way to sign and validate off-chain arbitrary messages. + +This specification serves the purpose of covering every use case, this means that cosmos-sdk applications developers decide how to serialize and represent `Data` to users. + +## Context + +Having the ability to sign messages off-chain has proven to be a fundamental aspect of nearly any blockchain. The notion of signing messages off-chain has many added benefits such as saving on computational costs and reducing transaction throughput and overhead. Within the context of the Cosmos, some of the major applications of signing such data includes, but is not limited to, providing a cryptographic secure and verifiable means of proving validator identity and possibly associating it with some other framework or organization. In addition, having the ability to sign Cosmos messages with a Ledger or similar HSM device. + +Further context and use cases can be found in the references links. + +## Decision + +The aim is being able to sign arbitrary messages, even using Ledger or similar HSM devices. + +As a result signed messages should look roughly like Cosmos SDK messages but **must not** be a valid on-chain transaction. `chain-id`, `account_number` and `sequence` can all be assigned invalid values. + +Cosmos SDK 0.40 also introduces a concept of “auth_info” this can specify SIGN_MODES. + +A spec should include an `auth_info` that supports SIGN_MODE_DIRECT and SIGN_MODE_LEGACY_AMINO. + +Create the `offchain` proto definitions, we extend the auth module with `offchain` package to offer functionalities to verify and sign offline messages. + +An offchain transaction follows these rules: + +* the memo must be empty +* nonce, sequence number must be equal to 0 +* chain-id must be equal to “” +* fee gas must be equal to 0 +* fee amount must be an empty array + +Verification of an offchain transaction follows the same rules as an onchain one, except for the spec differences highlighted above. + +The first message added to the `offchain` package is `MsgSignData`. + +`MsgSignData` allows developers to sign arbitrary bytes valid offchain only. Where `Signer` is the account address of the signer. `Data` is arbitrary bytes which can represent `text`, `files`, `object`s. It's applications developers decision how `Data` should be deserialized, serialized and the object it can represent in their context. + +It's applications developers decision how `Data` should be treated, by treated we mean the serialization and deserialization process and the Object `Data` should represent. + +Proto definition: + +```protobuf +// MsgSignData defines an arbitrary, general-purpose, off-chain message +message MsgSignData { + // Signer is the sdk.AccAddress of the message signer + bytes Signer = 1 [(gogoproto.jsontag) = "signer", (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; + // Data represents the raw bytes of the content that is signed (text, json, etc) + bytes Data = 2 [(gogoproto.jsontag) = "data"]; +} +``` + +Signed MsgSignData json example: + +```json +{ + "type": "cosmos-sdk/StdTx", + "value": { + "msg": [ + { + "type": "sign/MsgSignData", + "value": { + "signer": "cosmos1hftz5ugqmpg9243xeegsqqav62f8hnywsjr4xr", + "data": "cmFuZG9t" + } + } + ], + "fee": { + "amount": [], + "gas": "0" + }, + "signatures": [ + { + "pub_key": { + "type": "tendermint/PubKeySecp256k1", + "value": "AqnDSiRoFmTPfq97xxEb2VkQ/Hm28cPsqsZm9jEVsYK9" + }, + "signature": "8y8i34qJakkjse9pOD2De+dnlc4KvFgh0wQpes4eydN66D9kv7cmCEouRrkka9tlW9cAkIL52ErB+6ye7X5aEg==" + } + ], + "memo": "" + } +} +``` + +## Consequences + +There is a specification on how messages, that are not meant to be broadcast to a live chain, should be formed. + +### Backwards Compatibility + +Backwards compatibility is maintained as this is a new message spec definition. + +### Positive + +* A common format that can be used by multiple applications to sign and verify off-chain messages. +* The specification is primitive which means it can cover every use case without limiting what is possible to fit inside it. +* It gives room for other off-chain messages specifications that aim to target more specific and common use cases such as off-chain-based authN/authZ layers [2]. + +### Negative + +* Current proposal requires a fixed relationship between an account address and a public key. +* Doesn't work with multisig accounts. + +## Further discussion + +* Regarding security in `MsgSignData`, the developer using `MsgSignData` is in charge of making the content laying in `Data` non-replayable when, and if, needed. +* the offchain package will be further extended with extra messages that target specific use cases such as, but not limited to, authentication in applications, payment channels, L2 solutions in general. + +## References + +1. https://github.com/cosmos/ics/pull/33 +2. https://github.com/cosmos/cosmos-sdk/pull/7727#discussion_r515668204 +3. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-722478477 +4. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-721062923 diff --git a/docs/integrate/architecture/adr-037-gov-split-vote.md b/docs/integrate/architecture/adr-037-gov-split-vote.md new file mode 100644 index 000000000..0a3b9bc43 --- /dev/null +++ b/docs/integrate/architecture/adr-037-gov-split-vote.md @@ -0,0 +1,111 @@ +# ADR 037: Governance split votes + +## Changelog + +* 2020/10/28: Intial draft + +## Status + +Accepted + +## Abstract + +This ADR defines a modification to the governance module that would allow a staker to split their votes into several voting options. For example, it could use 70% of its voting power to vote Yes and 30% of its voting power to vote No. + +## Context + +Currently, an address can cast a vote with only one options (Yes/No/Abstain/NoWithVeto) and use their full voting power behind that choice. + +However, often times the entity owning that address might not be a single individual. For example, a company might have different stakeholders who want to vote differently, and so it makes sense to allow them to split their voting power. Another example use case is exchanges. Many centralized exchanges often stake a portion of their users' tokens in their custody. Currently, it is not possible for them to do "passthrough voting" and giving their users voting rights over their tokens. However, with this system, exchanges can poll their users for voting preferences, and then vote on-chain proportionally to the results of the poll. + +## Decision + +We modify the vote structs to be + +```go +type WeightedVoteOption struct { + Option string + Weight sdk.Dec +} + +type Vote struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +And for backwards compatibility, we introduce `MsgVoteWeighted` while keeping `MsgVote`. + +```go +type MsgVote struct { + ProposalID int64 + Voter sdk.Address + Option Option +} + +type MsgVoteWeighted struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +The `ValidateBasic` of a `MsgVoteWeighted` struct would require that + +1. The sum of all the Rates is equal to 1.0 +2. No Option is repeated + +The governance tally function will iterate over all the options in a vote and add to the tally the result of the voter's voting power * the rate for that option. + +```go +tally() { + results := map[types.VoteOption]sdk.Dec + + for _, vote := range votes { + for i, weightedOption := range vote.Options { + results[weightedOption.Option] += getVotingPower(vote.voter) * weightedOption.Weight + } + } +} +``` + +The CLI command for creating a multi-option vote would be as such: + +```shell +simd tx gov vote 1 "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05" --from mykey +``` + +To create a single-option vote a user can do either + +```shell +simd tx gov vote 1 "yes=1" --from mykey +``` + +or + +```shell +simd tx gov vote 1 yes --from mykey +``` + +to maintain backwards compatibility. + +## Consequences + +### Backwards Compatibility + +* Previous VoteMsg types will remain the same and so clients will not have to update their procedure unless they want to support the WeightedVoteMsg feature. +* When querying a Vote struct from state, its structure will be different, and so clients wanting to display all voters and their respective votes will have to handle the new format and the fact that a single voter can have split votes. +* The result of querying the tally function should have the same API for clients. + +### Positive + +* Can make the voting process more accurate for addresses representing multiple stakeholders, often some of the largest addresses. + +### Negative + +* Is more complex than simple voting, and so may be harder to explain to users. However, this is mostly mitigated because the feature is opt-in. + +### Neutral + +* Relatively minor change to governance tally function. diff --git a/docs/integrate/architecture/adr-038-state-listening.md b/docs/integrate/architecture/adr-038-state-listening.md new file mode 100644 index 000000000..37d856cc4 --- /dev/null +++ b/docs/integrate/architecture/adr-038-state-listening.md @@ -0,0 +1,822 @@ +# ADR 038: KVStore state listening + +## Changelog + +* 11/23/2020: Initial draft +* 10/06/2022: Introduce plugin system based on hashicorp/go-plugin +* 10/14/2022: + * Add `ListenCommit`, flatten the state writes in a block to a single batch. + * Remove listeners from cache stores, should only listen to `rootmulti.Store`. + * Remove `HaltAppOnDeliveryError()`, the errors are propagated by default, the implementations should return nil if don't want to propogate errors. + + +## Status + +Proposed + +## Abstract + +This ADR defines a set of changes to enable listening to state changes of individual KVStores and exposing these data to consumers. + +## Context + +Currently, KVStore data can be remotely accessed through [Queries](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/messages-and-queries.md#queries) +which proceed either through Tendermint and the ABCI, or through the gRPC server. +In addition to these request/response queries, it would be beneficial to have a means of listening to state changes as they occur in real time. + +## Decision + +We will modify the `CommitMultiStore` interface and its concrete (`rootmulti`) implementations and introduce a new `listenkv.Store` to allow listening to state changes in underlying KVStores. We don't need to listen to cache stores, because we can't be sure that the writes will be committed eventually, and the writes are duplicated in `rootmulti.Store` eventually, so we should only listen to `rootmulti.Store`. +We will introduce a plugin system for configuring and running streaming services that write these state changes and their surrounding ABCI message context to different destinations. + +### Listening + +In a new file, `store/types/listening.go`, we will create a `MemoryListener` struct for streaming out protobuf encoded KV pairs state changes from a KVStore. +The `MemoryListener` will be used internally by the concrete `rootmulti` implementation to collect state changes from KVStores. + +```go +// MemoryListener listens to the state writes and accumulate the records in memory. +type MemoryListener struct { + stateCache []StoreKVPair +} + +// NewMemoryListener creates a listener that accumulate the state writes in memory. +func NewMemoryListener() *MemoryListener { + return &MemoryListener{} +} + +// OnWrite writes state change events to the internal cache +func (fl *MemoryListener) OnWrite(storeKey StoreKey, key []byte, value []byte, delete bool) { + fl.stateCache = append(fl.stateCache, StoreKVPair{ + StoreKey: storeKey.Name(), + Delete: delete, + Key: key, + Value: value, + }) +} + +// PopStateCache returns the current state caches and set to nil +func (fl *MemoryListener) PopStateCache() []StoreKVPair { + res := fl.stateCache + fl.stateCache = nil + return res +} +``` + +We will also define a protobuf type for the KV pairs. In addition to the key and value fields this message +will include the StoreKey for the originating KVStore so that we can collect information from separate KVStores and determine the source of each KV pair. + +```protobuf +message StoreKVPair { + optional string store_key = 1; // the store key for the KVStore this pair originates from + required bool set = 2; // true indicates a set operation, false indicates a delete operation + required bytes key = 3; + required bytes value = 4; +} +``` + +### ListenKVStore + +We will create a new `Store` type `listenkv.Store` that the `rootmulti` store will use to wrap a `KVStore` to enable state listening. +We will configure the `Store` with a `MemoryListener` which will collect state changes for output to specific destinations. + +```go +// Store implements the KVStore interface with listening enabled. +// Operations are traced on each advanced-concepts KVStore call and written to any of the +// underlying listeners with the proper key and operation permissions +type Store struct { + parent types.KVStore + listener *types.MemoryListener + parentStoreKey types.StoreKey +} + +// NewStore returns a reference to a new traceKVStore given a parent +// KVStore implementation and a buffered writer. +func NewStore(parent types.KVStore, psk types.StoreKey, listener *types.MemoryListener) *Store { + return &Store{parent: parent, listener: listener, parentStoreKey: psk} +} + +// Set implements the KVStore interface. It traces a write operation and +// delegates the Set call to the parent KVStore. +func (s *Store) Set(key []byte, value []byte) { + types.AssertValidKey(key) + s.parent.Set(key, value) + s.listener.OnWrite(s.parentStoreKey, key, value, false) +} + +// Delete implements the KVStore interface. It traces a write operation and +// delegates the Delete call to the parent KVStore. +func (s *Store) Delete(key []byte) { + s.parent.Delete(key) + s.listener.OnWrite(s.parentStoreKey, key, nil, true) +} +``` + +### MultiStore interface updates + +We will update the `CommitMultiStore` interface to allow us to wrap a `Memorylistener` to a specific `KVStore`. +Note that the `MemoryListener` will be attached internally by the concrete `rootmulti` implementation. + +```go +type CommitMultiStore interface { + ... + + // AddListeners adds a listener for the KVStore belonging to the provided StoreKey + AddListeners(keys []StoreKey) + + // PopStateCache returns the accumulated state change messages from MemoryListener + PopStateCache() []StoreKVPair +} +``` + + +### MultiStore implementation updates + +We will adjust the `rootmulti` `GetKVStore` method to wrap the returned `KVStore` with a `listenkv.Store` if listening is turned on for that `Store`. + +```go +func (rs *Store) GetKVStore(key types.StoreKey) types.KVStore { + store := rs.stores[key].(types.KVStore) + + if rs.TracingEnabled() { + store = tracekv.NewStore(store, rs.traceWriter, rs.traceContext) + } + if rs.ListeningEnabled(key) { + store = listenkv.NewStore(store, key, rs.listeners[key]) + } + + return store +} +``` + +We will implement `AddListeners` to manage KVStore listeners internally and implement `PopStateCache` +for a means of retrieving the current state. + +```go +// AddListeners adds state change listener for a specific KVStore +func (rs *Store) AddListeners(keys []types.StoreKey) { + listener := types.NewMemoryListener() + for i := range keys { + rs.listeners[keys[i]] = listener + } +} +``` + +```go +func (rs *Store) PopStateCache() []types.StoreKVPair { + var cache []types.StoreKVPair + for _, ls := range rs.listeners { + cache = append(cache, ls.PopStateCache()...) + } + sort.SliceStable(cache, func(i, j int) bool { + return cache[i].StoreKey < cache[j].StoreKey + }) + return cache +} +``` + +We will also adjust the `rootmulti` `CacheMultiStore` and `CacheMultiStoreWithVersion` methods to enable listening in +the cache layer. + +```go +func (rs *Store) CacheMultiStore() types.CacheMultiStore { + stores := make(map[types.StoreKey]types.CacheWrapper) + for k, v := range rs.stores { + store := v.(types.KVStore) + // Wire the listenkv.Store to allow listeners to observe the writes from the cache store, + // set same listeners on cache store will observe duplicated writes. + if rs.ListeningEnabled(k) { + store = listenkv.NewStore(store, k, rs.listeners[k]) + } + stores[k] = store + } + return cachemulti.NewStore(rs.db, stores, rs.keysByName, rs.traceWriter, rs.getTracingContext()) +} +``` + +```go +func (rs *Store) CacheMultiStoreWithVersion(version int64) (types.CacheMultiStore, error) { + // ... + + // Wire the listenkv.Store to allow listeners to observe the writes from the cache store, + // set same listeners on cache store will observe duplicated writes. + if rs.ListeningEnabled(key) { + cacheStore = listenkv.NewStore(cacheStore, key, rs.listeners[key]) + } + + cachedStores[key] = cacheStore + } + + return cachemulti.NewStore(rs.db, cachedStores, rs.keysByName, rs.traceWriter, rs.getTracingContext()), nil +} +``` + +### Exposing the data + +#### Streaming Service + +We will introduce a new `ABCIListener` interface that plugs into the BaseApp and relays ABCI requests and responses +so that the service can group the state changes with the ABCI requests. + +```go +// baseapp/streaming.go + +// ABCIListener is the interface that we're exposing as a streaming service. +type ABCIListener interface { + // ListenBeginBlock updates the streaming service with the latest BeginBlock messages + ListenBeginBlock(ctx context.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error + // ListenEndBlock updates the steaming service with the latest EndBlock messages + ListenEndBlock(ctx types.Context, req abci.RequestEndBlock, res abci.ResponseEndBlock) error + // ListenDeliverTx updates the steaming service with the latest DeliverTx messages + ListenDeliverTx(ctx context.Context, req abci.RequestDeliverTx, res abci.ResponseDeliverTx) error + // ListenCommit updates the steaming service with the latest Commit messages and state changes + ListenCommit(ctx context.Context, res abci.ResponseCommit, changeSet []*store.StoreKVPair) error +} +``` + +#### BaseApp Registration + +We will add a new method to the `BaseApp` to enable the registration of `StreamingService`s: + + ```go + // SetStreamingService is used to set a streaming service into the BaseApp hooks and load the listeners into the multistore +func (app *BaseApp) SetStreamingService(s ABCIListener) { + // register the StreamingService within the BaseApp + // BaseApp will pass BeginBlock, DeliverTx, and EndBlock requests and responses to the streaming services to update their ABCI context + app.abciListeners = append(app.abciListeners, s) +} +``` + +We will add two new fields to the `BaseApp` struct: + +```go +type BaseApp struct { + + ... + + // abciListenersAsync for determining if abciListeners will run asynchronously. + // When abciListenersAsync=false and stopNodeOnABCIListenerErr=false listeners will run synchronized but will not stop the node. + // When abciListenersAsync=true stopNodeOnABCIListenerErr will be ignored. + abciListenersAsync bool + + // stopNodeOnABCIListenerErr halts the node when ABCI streaming service listening results in an error. + // stopNodeOnABCIListenerErr=true must be paired with abciListenersAsync=false. + stopNodeOnABCIListenerErr bool +} +``` + +#### ABCI Event Hooks + +We will modify the `BeginBlock`, `EndBlock`, `DeliverTx` and `Commit` methods to pass ABCI requests and responses +to any streaming service hooks registered with the `BaseApp`. + +```go +func (app *BaseApp) BeginBlock(req abci.RequestBeginBlock) (res abci.ResponseBeginBlock) { + + ... + + // call the streaming service hook with the BeginBlock messages + for _, abciListener := range app.abciListeners { + ctx := app.deliverState.ctx + blockHeight := ctx.BlockHeight() + if app.abciListenersAsync { + go func(req abci.RequestBeginBlock, res abci.ResponseBeginBlock) { + if err := app.abciListener.ListenBeginBlock(ctx, req, res); err != nil { + app.logger.Error("BeginBlock listening hook failed", "height", blockHeight, "err", err) + } + }(req, res) + } else { + if err := app.abciListener.ListenBeginBlock(ctx, req, res); err != nil { + app.logger.Error("BeginBlock listening hook failed", "height", blockHeight, "err", err) + if app.stopNodeOnABCIListenerErr { + os.Exit(1) + } + } + } + } + + return res +} +``` + +```go +func (app *BaseApp) EndBlock(req abci.RequestEndBlock) (res abci.ResponseEndBlock) { + + ... + + // call the streaming service hook with the EndBlock messages + for _, abciListener := range app.abciListeners { + ctx := app.deliverState.ctx + blockHeight := ctx.BlockHeight() + if app.abciListenersAsync { + go func(req abci.RequestEndBlock, res abci.ResponseEndBlock) { + if err := app.abciListener.ListenEndBlock(blockHeight, req, res); err != nil { + app.logger.Error("EndBlock listening hook failed", "height", blockHeight, "err", err) + } + }(req, res) + } else { + if err := app.abciListener.ListenEndBlock(blockHeight, req, res); err != nil { + app.logger.Error("EndBlock listening hook failed", "height", blockHeight, "err", err) + if app.stopNodeOnABCIListenerErr { + os.Exit(1) + } + } + } + } + + return res +} +``` + +```go +func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { + + var abciRes abci.ResponseDeliverTx + defer func() { + // call the streaming service hook with the EndBlock messages + for _, abciListener := range app.abciListeners { + ctx := app.deliverState.ctx + blockHeight := ctx.BlockHeight() + if app.abciListenersAsync { + go func(req abci.RequestDeliverTx, res abci.ResponseDeliverTx) { + if err := app.abciListener.ListenDeliverTx(blockHeight, req, res); err != nil { + app.logger.Error("DeliverTx listening hook failed", "height", blockHeight, "err", err) + } + }(req, abciRes) + } else { + if err := app.abciListener.ListenDeliverTx(blockHeight, req, res); err != nil { + app.logger.Error("DeliverTx listening hook failed", "height", blockHeight, "err", err) + if app.stopNodeOnABCIListenerErr { + os.Exit(1) + } + } + } + } + }() + + ... + + return abciRes +} +``` + +```go +func (app *BaseApp) Commit() abci.ResponseCommit { + + ... + + res := abci.ResponseCommit{ + Data: commitID.Hash, + RetainHeight: retainHeight, + } + + // call the streaming service hook with the Commit messages + for _, abciListener := range app.abciListeners { + ctx := app.deliverState.ctx + blockHeight := ctx.BlockHeight() + changeSet := app.cms.PopStateCache() + if app.abciListenersAsync { + go func(res abci.ResponseCommit, changeSet []store.StoreKVPair) { + if err := app.abciListener.ListenCommit(ctx, res, changeSet); err != nil { + app.logger.Error("ListenCommit listening hook failed", "height", blockHeight, "err", err) + } + }(res, changeSet) + } else { + if err := app.abciListener.ListenCommit(ctx, res, changeSet); err != nil { + app.logger.Error("ListenCommit listening hook failed", "height", blockHeight, "err", err) + if app.stopNodeOnABCIListenerErr { + os.Exit(1) + } + } + } + } + + ... + + return res +} +``` + +#### Go Plugin System + +We propose a plugin architecture to load and run `Streaming` plugins and other types of implementations. We will introduce a plugin +system over gRPC that is used to load and run Cosmos-SDK plugins. The plugin system uses [hashicorp/go-plugin](https://github.com/hashicorp/go-plugin). +Each plugin must have a struct that implements the `plugin.Plugin` interface and an `Impl` interface for processing messages over gRPC. +Each plugin must also have a message protocol defined for the gRPC service: + +```go +// streaming/plugins/abci/{plugin_version}/interface.go + +// Handshake is a common handshake that is shared by streaming and host. +// This prevents users from executing bad plugins or executing a plugin +// directory. It is a UX feature, not a security feature. +var Handshake = plugin.HandshakeConfig{ + ProtocolVersion: 1, + MagicCookieKey: "ABCI_LISTENER_PLUGIN", + MagicCookieValue: "ef78114d-7bdf-411c-868f-347c99a78345", +} + +// ListenerPlugin is the base struc for all kinds of go-plugin implementations +// It will be included in interfaces of different Plugins +type ABCIListenerPlugin struct { + // GRPCPlugin must still implement the Plugin interface + plugin.Plugin + // Concrete implementation, written in Go. This is only used for plugins + // that are written in Go. + Impl baseapp.ABCIListener +} + +func (p *ListenerGRPCPlugin) GRPCServer(_ *plugin.GRPCBroker, s *grpc.Server) error { + RegisterABCIListenerServiceServer(s, &GRPCServer{Impl: p.Impl}) + return nil +} + +func (p *ListenerGRPCPlugin) GRPCClient( + _ context.Context, + _ *plugin.GRPCBroker, + c *grpc.ClientConn, +) (interface{}, error) { + return &GRPCClient{client: NewABCIListenerServiceClient(c)}, nil +} +``` + +The `plugin.Plugin` interface has two methods `Client` and `Server`. For our GRPC service these are `GRPCClient` and `GRPCServer` +The `Impl` field holds the concrete implementation of our `baseapp.ABCIListener` interface written in Go. +Note: this is only used for plugin implementations written in Go. + +The advantage of having such a plugin system is that within each plugin authors can define the message protocol in a way that fits their use case. +For example, when state change listening is desired, the `ABCIListener` message protocol can be defined as below (*for illustrative purposes only*). +When state change listening is not desired than `ListenCommit` can be omitted from the protocol. + +```protobuf +syntax = "proto3"; + +... + +message Empty {} + +message ListenBeginBlockRequest { + RequestBeginBlock req = 1; + ResponseBeginBlock res = 2; +} +message ListenEndBlockRequest { + RequestEndBlock req = 1; + ResponseEndBlock res = 2; +} +message ListenDeliverTxRequest { + int64 block_height = 1; + RequestDeliverTx req = 2; + ResponseDeliverTx res = 3; +} +message ListenCommitRequest { + int64 block_height = 1; + ResponseCommit res = 2; + repeated StoreKVPair changeSet = 3; +} + +// plugin that listens to state changes +service ABCIListenerService { + rpc ListenBeginBlock(ListenBeginBlockRequest) returns (Empty); + rpc ListenEndBlock(ListenEndBlockRequest) returns (Empty); + rpc ListenDeliverTx(ListenDeliverTxRequest) returns (Empty); + rpc ListenCommit(ListenCommitRequest) returns (Empty); +} +``` + +```protobuf +... +// plugin that doesn't listen to state changes +service ABCIListenerService { + rpc ListenBeginBlock(ListenBeginBlockRequest) returns (Empty); + rpc ListenEndBlock(ListenEndBlockRequest) returns (Empty); + rpc ListenDeliverTx(ListenDeliverTxRequest) returns (Empty); + rpc ListenCommit(ListenCommitRequest) returns (Empty); +} +``` + +Implementing the service above: + +```go +// streaming/plugins/abci/{plugin_version}/grpc.go + +var ( + _ baseapp.ABCIListener = (*GRPCClient)(nil) +) + +// GRPCClient is an implementation of the ABCIListener and ABCIListenerPlugin interfaces that talks over RPC. +type GRPCClient struct { + client ABCIListenerServiceClient +} + +func (m *GRPCClient) ListenBeginBlock(ctx context.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error { + _, err := m.client.ListenBeginBlock(ctx, &ListenBeginBlockRequest{Req: req, Res: res}) + return err +} + +func (m *GRPCClient) ListenEndBlock(goCtx context.Context, req abci.RequestEndBlock, res abci.ResponseEndBlock) error { + _, err := m.client.ListenEndBlock(ctx, &ListenEndBlockRequest{Req: req, Res: res}) + return err +} + +func (m *GRPCClient) ListenDeliverTx(goCtx context.Context, req abci.RequestDeliverTx, res abci.ResponseDeliverTx) error { + ctx := sdk.UnwrapSDKContext(goCtx) + _, err := m.client.ListenDeliverTx(ctx, &ListenDeliverTxRequest{BlockHeight: ctx.BlockHeight(), Req: req, Res: res}) + return err +} + +func (m *GRPCClient) ListenCommit(goCtx context.Context, res abci.ResponseCommit, changeSet []store.StoreKVPair) error { + ctx := sdk.UnwrapSDKContext(goCtx) + _, err := m.client.ListenCommit(ctx, &ListenCommitRequest{BlockHeight: ctx.BlockHeight(), Res: res, ChangeSet: changeSet}) + return err +} + +// GRPCServer is the gRPC server that GRPCClient talks to. +type GRPCServer struct { + // This is the real implementation + Impl baseapp.ABCIListener +} + +func (m *GRPCServer) ListenBeginBlock(ctx context.Context, req *ListenBeginBlockRequest) (*Empty, error) { + return &Empty{}, m.Impl.ListenBeginBlock(ctx, req.Req, req.Res) +} + +func (m *GRPCServer) ListenEndBlock(ctx context.Context, req *ListenEndBlockRequest) (*Empty, error) { + return &Empty{}, m.Impl.ListenEndBlock(ctx, req.Req, req.Res) +} + +func (m *GRPCServer) ListenDeliverTx(ctx context.Context, req *ListenDeliverTxRequest) (*Empty, error) { + return &Empty{}, m.Impl.ListenDeliverTx(ctx, req.Req, req.Res) +} + +func (m *GRPCServer) ListenCommit(ctx context.Context, req *ListenCommitRequest) (*Empty, error) { + return &Empty{}, m.Impl.ListenCommit(ctx, req.Res, req.ChangeSet) +} + +``` + +And the pre-compiled Go plugin `Impl`(*this is only used for plugins that are written in Go*): + +```go +// streaming/plugins/abci/{plugin_version}/impl/plugin.go + +// Plugins are pre-compiled and loaded by the plugin system + +// ABCIListener is the implementation of the baseapp.ABCIListener interface +type ABCIListener struct{} + +func (m *ABCIListenerPlugin) ListenBeginBlock(ctx context.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error { + // send data to external system +} + +func (m *ABCIListenerPlugin) ListenEndBlock(ctx context.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error { + // send data to external system +} + +func (m *ABCIListenerPlugin) ListenDeliverTxBlock(ctx context.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error { + // send data to external system +} + +func (m *ABCIListenerPlugin) ListenCommit(ctx context.Context, res abci.ResponseCommit, changeSet []store.StoreKVPair) error { + // send data to external system +} + +func main() { + plugin.Serve(&plugin.ServeConfig{ + HandshakeConfig: grpc_abci_v1.Handshake, + Plugins: map[string]plugin.Plugin{ + "grpc_plugin_v1": &grpc_abci_v1.ABCIListenerGRPCPlugin{Impl: &ABCIListenerPlugin{}}, + }, + + // A non-nil value here enables gRPC serving for this streaming... + GRPCServer: plugin.DefaultGRPCServer, + }) +} +``` + +We will introduce a plugin loading system that will return `(interface{}, error)`. +This provides the advantage of using versioned plugins where the plugin interface and gRPC protocol change over time. +In addition, it allows for building independent plugin that can expose different parts of the system over gRPC. + +```go +func NewStreamingPlugin(name string, logLevel string) (interface{}, error) { + logger := hclog.New(&hclog.LoggerOptions{ + Output: hclog.DefaultOutput, + Level: toHclogLevel(logLevel), + Name: fmt.Sprintf("plugin.%s", name), + }) + + // We're a host. Start by launching the streaming process. + env := os.Getenv(GetPluginEnvKey(name)) + client := plugin.NewClient(&plugin.ClientConfig{ + HandshakeConfig: HandshakeMap[name], + Plugins: PluginMap, + Cmd: exec.Command("sh", "-c", env), + Logger: logger, + AllowedProtocols: []plugin.Protocol{ + plugin.ProtocolNetRPC, plugin.ProtocolGRPC}, + }) + + // Connect via RPC + rpcClient, err := client.Client() + if err != nil { + return nil, err + } + + // Request streaming plugin + return rpcClient.Dispense(name) +} + +``` + +We propose a `RegisterStreamingPlugin` function for the App to register `NewStreamingPlugin`s with the App's BaseApp. +Streaming plugins can be of `Any` type; therefore, the function takes in an interface vs a concrete type. +For example, we could have plugins of `ABCIListener`, `WasmListener` or `IBCListener`. Note that `RegisterStreamingPluing` function +is helper function and not a requirement. Plugin registration can easily be moved from the App to the BaseApp directly. + +```go +// baseapp/streaming.go + +// RegisterStreamingPlugin registers streaming plugins with the App. +// This method returns an error if a plugin is not supported. +func RegisterStreamingPlugin( + bApp *BaseApp, + appOpts servertypes.AppOptions, + keys map[string]*types.KVStoreKey, + streamingPlugin interface{}, +) error { + switch t := streamingPlugin.(type) { + case ABCIListener: + registerABCIListenerPlugin(bApp, appOpts, keys, t) + default: + return fmt.Errorf("unexpected plugin type %T", t) + } + return nil +} +``` + +```go +func registerABCIListenerPlugin( + bApp *BaseApp, + appOpts servertypes.AppOptions, + keys map[string]*store.KVStoreKey, + abciListener ABCIListener, +) { + asyncKey := fmt.Sprintf("%s.%s.%s", StreamingTomlKey, StreamingABCITomlKey, StreamingABCIAsync) + async := cast.ToBool(appOpts.Get(asyncKey)) + stopNodeOnErrKey := fmt.Sprintf("%s.%s.%s", StreamingTomlKey, StreamingABCITomlKey, StreamingABCIStopNodeOnErrTomlKey) + stopNodeOnErr := cast.ToBool(appOpts.Get(stopNodeOnErrKey)) + keysKey := fmt.Sprintf("%s.%s.%s", StreamingTomlKey, StreamingABCITomlKey, StreamingABCIKeysTomlKey) + exposeKeysStr := cast.ToStringSlice(appOpts.Get(keysKey)) + exposedKeys := exposeStoreKeysSorted(exposeKeysStr, keys) + bApp.cms.AddListeners(exposedKeys) + bApp.SetStreamingService(abciListener) + bApp.stopNodeOnABCIListenerErr = stopNodeOnErr + bApp.abciListenersAsync = async +} +``` + +```go +func exposeAll(list []string) bool { + for _, ele := range list { + if ele == "*" { + return true + } + } + return false +} + +func exposeStoreKeys(keysStr []string, keys map[string]*types.KVStoreKey) []types.StoreKey { + var exposeStoreKeys []types.StoreKey + if exposeAll(keysStr) { + exposeStoreKeys = make([]types.StoreKey, 0, len(keys)) + for _, storeKey := range keys { + exposeStoreKeys = append(exposeStoreKeys, storeKey) + } + } else { + exposeStoreKeys = make([]types.StoreKey, 0, len(keysStr)) + for _, keyStr := range keysStr { + if storeKey, ok := keys[keyStr]; ok { + exposeStoreKeys = append(exposeStoreKeys, storeKey) + } + } + } + // sort storeKeys for deterministic output + sort.SliceStable(exposeStoreKeys, func(i, j int) bool { + return exposeStoreKeys[i].Name() < exposeStoreKeys[j].Name() + }) + + return exposeStoreKeys +} +``` + +The `NewStreamingPlugin` and `RegisterStreamingPlugin` functions are used to register a plugin with the App's BaseApp. + +e.g. in `NewSimApp`: + +```go +func NewSimApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + loadLatest bool, + appOpts servertypes.AppOptions, + baseAppOptions ...func(*baseapp.BaseApp), +) *SimApp { + + ... + + keys := sdk.NewKVStoreKeys( + authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, + ) + + ... + + // register streaming services + streamingCfg := cast.ToStringMap(appOpts.Get(baseapp.StreamingTomlKey)) + for service := range streamingCfg { + pluginKey := fmt.Sprintf("%s.%s.%s", baseapp.StreamingTomlKey, service, baseapp.StreamingPluginTomlKey) + pluginName := strings.TrimSpace(cast.ToString(appOpts.Get(pluginKey))) + if len(pluginName) > 0 { + logLevel := cast.ToString(appOpts.Get(flags.FlagLogLevel)) + plugin, err := streaming.NewStreamingPlugin(pluginName, logLevel) + if err != nil { + tmos.Exit(err.Error()) + } + if err := baseapp.RegisterStreamingPlugin(bApp, appOpts, keys, plugin); err != nil { + tmos.Exit(err.Error()) + } + } + } + + return app +``` + +#### Configuration + +The plugin system will be configured within an App's TOML configuration files. + +```toml +# gRPC streaming +[streaming] + +# ABCI streaming service +[streaming.abci] + +# The plugin version to use for ABCI listening +plugin = "abci_v1" + +# List of kv store keys to listen to for state changes. +# Set to ["*"] to expose all keys. +keys = ["*"] + +# Enable abciListeners to run asynchronously. +# When abciListenersAsync=false and stopNodeOnABCIListenerErr=false listeners will run synchronized but will not stop the node. +# When abciListenersAsync=true stopNodeOnABCIListenerErr will be ignored. +async = false + +# Whether to stop the node on message deliver error. +stop-node-on-err = true +``` + +There will be four parameters for configuring `ABCIListener` plugin: `streaming.abci.plugin`, `streaming.abci.keys`, `streaming.abci.async` and `streaming.abci.stop-node-on-err`. +`streaming.abci.plugin` is the name of the plugin we want to use for streaming, `streaming.abci.keys` is a set of store keys for stores it listens to, +`streaming.abci.async` is bool enabling asynchronous listening and `streaming.abci.stop-node-on-err` is a bool that stops the node when true and when operating +on synchronized mode `streaming.abci.async=false`. Note that `streaming.abci.stop-node-on-err=true` will be ignored if `streaming.abci.async=true`. + +The configuration above support additional streaming plugins by adding the plugin to the `[streaming]` configuration section +and registering the plugin with `RegisterStreamingPlugin` helper function. + +Note the that each plugin must include `streaming.{service}.plugin` property as it is a requirement for doing the lookup and registration of the plugin +with the App. All other properties are unique to the individual services. + +#### Encoding and decoding streams + +ADR-038 introduces the interfaces and types for streaming state changes out from KVStores, associating this +data with their related ABCI requests and responses, and registering a service for consuming this data and streaming it to some destination in a final format. +Instead of prescribing a final data format in this ADR, it is left to a specific plugin implementation to define and document this format. +We take this approach because flexibility in the final format is necessary to support a wide range of streaming service plugins. For example, +the data format for a streaming service that writes the data out to a set of files will differ from the data format that is written to a Kafka topic. + +## Consequences + +These changes will provide a means of subscribing to KVStore state changes in real time. + +### Backwards Compatibility + +* This ADR changes the `CommitMultiStore` interface, implementations supporting the previous version of this interface will not support the new one + +### Positive + +* Ability to listen to KVStore state changes in real time and expose these events to external consumers + +### Negative + +* Changes `CommitMultiStore` interface and its implementations + +### Neutral + +* Introduces additional- but optional- complexity to configuring and running a cosmos application +* If an application developer opts to use these features to expose data, they need to be aware of the ramifications/risks of that data exposure as it pertains to the specifics of their application diff --git a/docs/integrate/architecture/adr-039-epoched-staking.md b/docs/integrate/architecture/adr-039-epoched-staking.md new file mode 100644 index 000000000..29418fc89 --- /dev/null +++ b/docs/integrate/architecture/adr-039-epoched-staking.md @@ -0,0 +1,122 @@ +# ADR 039: Epoched Staking + +## Changelog + +* 10-Feb-2021: Initial Draft + +## Authors + +* Dev Ojha (@valardragon) +* Sunny Aggarwal (@sunnya97) + +## Status + +Proposed + +## Abstract + +This ADR updates the proof of stake module to buffer the staking weight updates for a number of blocks before updating the consensus' staking weights. The length of the buffer is dubbed an epoch. The prior functionality of the staking module is then a special case of the abstracted module, with the epoch being set to 1 block. + +## Context + +The current proof of stake module takes the design decision to apply staking weight changes to the consensus engine immediately. This means that delegations and unbonds get applied immediately to the validator set. This decision was primarily done as it was implementationally simplest, and because we at the time believed that this would lead to better UX for clients. + +An alternative design choice is to allow buffering staking updates (delegations, unbonds, validators joining) for a number of blocks. This 'epoch'd proof of stake consensus provides the guarantee that the consensus weights for validators will not change mid-epoch, except in the event of a slash condition. + +Additionally, the UX hurdle may not be as significant as was previously thought. This is because it is possible to provide users immediate acknowledgement that their bond was recorded and will be executed. + +Furthermore, it has become clearer over time that immediate execution of staking events comes with limitations, such as: + +* Threshold based cryptography. One of the main limitations is that because the validator set can change so regularly, it makes the running of multiparty computation by a fixed validator set difficult. Many threshold-based cryptographic features for blockchains such as randomness beacons and threshold decryption require a computationally-expensive DKG process (will take much longer than 1 block to create). To productively use these, we need to guarantee that the result of the DKG will be used for a reasonably long time. It wouldn't be feasible to rerun the DKG every block. By epoching staking, it guarantees we'll only need to run a new DKG once every epoch. + +* Light client efficiency. This would lessen the overhead for IBC when there is high churn in the validator set. In the Tendermint light client bisection algorithm, the number of headers you need to verify is related to bounding the difference in validator sets between a trusted header and the latest header. If the difference is too great, you verify more header in between the two. By limiting the frequency of validator set changes, we can reduce the worst case size of IBC lite client proofs, which occurs when a validator set has high churn. + +* Fairness of deterministic leader election. Currently we have no ways of reasoning of fairness of deterministic leader election in the presence of staking changes without epochs (tendermint/spec#217). Breaking fairness of leader election is profitable for validators, as they earn additional rewards from being the proposer. Adding epochs at least makes it easier for our deterministic leader election to match something we can prove secure. (Albeit, we still haven’t proven if our current algorithm is fair with > 2 validators in the presence of stake changes) + +* Staking derivative design. Currently, reward distribution is done lazily using the F1 fee distribution. While saving computational complexity, lazy accounting requires a more stateful staking implementation. Right now, each delegation entry has to track the time of last withdrawal. Handling this can be a challenge for some staking derivatives designs that seek to provide fungibility for all tokens staked to a single validator. Force-withdrawing rewards to users can help solve this, however it is infeasible to force-withdraw rewards to users on a per block basis. With epochs, a chain could more easily alter the design to have rewards be forcefully withdrawn (iterating over delegator accounts only once per-epoch), and can thus remove delegation timing from state. This may be useful for certain staking derivative designs. + +## Design considerations + +### Slashing + +There is a design consideration for whether to apply a slash immediately or at the end of an epoch. A slash event should apply to only members who are actually staked during the time of the infraction, namely during the epoch the slash event occured. + +Applying it immediately can be viewed as offering greater consensus layer security, at potential costs to the aforementioned usecases. The benefits of immediate slashing for consensus layer security can be all be obtained by executing the validator jailing immediately (thus removing it from the validator set), and delaying the actual slash change to the validator's weight until the epoch boundary. For the use cases mentioned above, workarounds can be integrated to avoid problems, as follows: + +* For threshold based cryptography, this setting will have the threshold cryptography use the original epoch weights, while consensus has an update that lets it more rapidly benefit from additional security. If the threshold based cryptography blocks liveness of the chain, then we have effectively raised the liveness threshold of the remaining validators for the rest of the epoch. (Alternatively, jailed nodes could still contribute shares) This plan will fail in the extreme case that more than 1/3rd of the validators have been jailed within a single epoch. For such an extreme scenario, the chain already have its own custom incident response plan, and defining how to handle the threshold cryptography should be a part of that. +* For light client efficiency, there can be a bit included in the header indicating an intra-epoch slash (ala https://github.com/tendermint/spec/issues/199). +* For fairness of deterministic leader election, applying a slash or jailing within an epoch would break the guarantee we were seeking to provide. This then re-introduces a new (but significantly simpler) problem for trying to provide fairness guarantees. Namely, that validators can adversarially elect to remove themself from the set of proposers. From a security perspective, this could potentially be handled by two different mechanisms (or prove to still be too difficult to achieve). One is making a security statement acknowledging the ability for an adversary to force an ahead-of-time fixed threshold of users to drop out of the proposer set within an epoch. The second method would be to parameterize such that the cost of a slash within the epoch far outweights benefits due to being a proposer. However, this latter criterion is quite dubious, since being a proposer can have many advantageous side-effects in chains with complex state machines. (Namely, DeFi games such as Fomo3D) +* For staking derivative design, there is no issue introduced. This does not increase the state size of staking records, since whether a slash has occured is fully queryable given the validator address. + +### Token lockup + +When someone makes a transaction to delegate, even though they are not immediately staked, their tokens should be moved into a pool managed by the staking module which will then be used at the end of an epoch. This prevents concerns where they stake, and then spend those tokens not realizing they were already allocated for staking, and thus having their staking tx fail. + +### Pipelining the epochs + +For threshold based cryptography in particular, we need a pipeline for epoch changes. This is because when we are in epoch N, we want the epoch N+1 weights to be fixed so that the validator set can do the DKG accordingly. So if we are currently in epoch N, the stake weights for epoch N+1 should already be fixed, and new stake changes should be getting applied to epoch N + 2. + +This can be handled by making a parameter for the epoch pipeline length. This parameter should not be alterable except during hard forks, to mitigate implementation complexity of switching the pipeline length. + +With pipeline length 1, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+1. +With pipeline length 2, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+2. + +### Rewards + +Even though all staking updates are applied at epoch boundaries, rewards can still be distributed immediately when they are claimed. This is because they do not affect the current stake weights, as we do not implement auto-bonding of rewards. If such a feature were to be implemented, it would have to be setup so that rewards are auto-bonded at the epoch boundary. + +### Parameterizing the epoch length + +When choosing the epoch length, there is a trade-off queued state/computation buildup, and countering the previously discussed limitations of immediate execution if they apply to a given chain. + +Until an ABCI mechanism for variable block times is introduced, it is ill-advised to be using high epoch lengths due to the computation buildup. This is because when a block's execution time is greater than the expected block time from Tendermint, rounds may increment. + +## Decision + +**Step-1**: Implement buffering of all staking and slashing messages. + +First we create a pool for storing tokens that are being bonded, but should be applied at the epoch boundary called the `EpochDelegationPool`. Then, we have two separate queues, one for staking, one for slashing. We describe what happens on each message being delivered below: + +### Staking messages + +* **MsgCreateValidator**: Move user's self-bond to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the self-bond, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +* **MsgEditValidator**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **MsgDelegate**: Move user's funds to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the delegation, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +* **MsgBeginRedelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **MsgUndelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. + +### Slashing messages + +* **MsgUnjail**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **Slash Event**: Whenever a slash event is created, it gets queued in the slashing module to apply at the end of the epoch. The queues should be setup such that this slash applies immediately. + +### Evidence Messages + +* **MsgSubmitEvidence**: This gets executed immediately, and the validator gets jailed immediately. However in slashing, the actual slash event gets queued. + +Then we add methods to the end blockers, to ensure that at the epoch boundary the queues are cleared and delegation updates are applied. + +**Step-2**: Implement querying of queued staking txs. + +When querying the staking activity of a given address, the status should return not only the amount of tokens staked, but also if there are any queued stake events for that address. This will require more work to be done in the querying logic, to trace the queued upcoming staking events. + +As an initial implementation, this can be implemented as a linear search over all queued staking events. However, for chains that need long epochs, they should eventually build additional support for nodes that support querying to be able to produce results in constant time. (This is do-able by maintaining an auxilliary hashmap for indexing upcoming staking events by address) + +**Step-3**: Adjust gas + +Currently gas represents the cost of executing a transaction when its done immediately. (Merging together costs of p2p overhead, state access overhead, and computational overhead) However, now a transaction can cause computation in a future block, namely at the epoch boundary. + +To handle this, we should initially include parameters for estimating the amount of future computation (denominated in gas), and add that as a flat charge needed for the message. +We leave it as out of scope for how to weight future computation versus current computation in gas pricing, and have it set such that the are weighted equally for now. + +## Consequences + +### Positive + +* Abstracts the proof of stake module that allows retaining the existing functionality +* Enables new features such as validator-set based threshold cryptography + +### Negative + +* Increases complexity of integrating more complex gas pricing mechanisms, as they now have to consider future execution costs as well. +* When epoch > 1, validators can no longer leave the network immediately, and must wait until an epoch boundary. diff --git a/docs/integrate/architecture/adr-040-storage-and-smt-state-commitments.md b/docs/integrate/architecture/adr-040-storage-and-smt-state-commitments.md new file mode 100644 index 000000000..f60e3adcf --- /dev/null +++ b/docs/integrate/architecture/adr-040-storage-and-smt-state-commitments.md @@ -0,0 +1,289 @@ +# ADR 040: Storage and SMT State Commitments + +## Changelog + +* 2020-01-15: Draft + +## Status + +DRAFT Not Implemented + +## Abstract + +Sparse Merkle Tree ([SMT](https://osf.io/8mcnh/)) is a version of a Merkle Tree with various storage and performance optimizations. This ADR defines a separation of state commitments from data storage and the Cosmos SDK transition from IAVL to SMT. + +## Context + +Currently, Cosmos SDK uses IAVL for both state [commitments](https://cryptography.fandom.com/wiki/Commitment_scheme) and data storage. + +IAVL has effectively become an orphaned project within the Cosmos ecosystem and it's proven to be an inefficient state commitment data structure. +In the current design, IAVL is used for both data storage and as a Merkle Tree for state commitments. IAVL is meant to be a standalone Merkelized key/value database, however it's using a KV DB engine to store all tree nodes. So, each node is stored in a separate record in the KV DB. This causes many inefficiencies and problems: + +* Each object query requires a tree traversal from the root. Subsequent queries for the same object are cached on the Cosmos SDK level. +* Each edge traversal requires a DB query. +* Creating snapshots is [expensive](https://github.com/cosmos/cosmos-sdk/issues/7215#issuecomment-684804950). It takes about 30 seconds to export less than 100 MB of state (as of March 2020). +* Updates in IAVL may trigger tree reorganization and possible O(log(n)) hashes re-computation, which can become a CPU bottleneck. +* The node structure is pretty expensive - it contains a standard tree node elements (key, value, left and right element) and additional metadata such as height, version (which is not required by the Cosmos SDK). The entire node is hashed, and that hash is used as the key in the underlying database, [ref](https://github.com/cosmos/iavl/blob/master/docs/node/node.md +). + +Moreover, the IAVL project lacks support and a maintainer and we already see better and well-established alternatives. Instead of optimizing the IAVL, we are looking into other solutions for both storage and state commitments. + +## Decision + +We propose to separate the concerns of state commitment (**SC**), needed for consensus, and state storage (**SS**), needed for state machine. Finally we replace IAVL with [Celestia's SMT](https://github.com/lazyledger/smt). Celestia SMT is based on Diem (called jellyfish) design [*] - it uses a compute-optimised SMT by replacing subtrees with only default values with a single node (same approach is used by Ethereum2) and implements compact proofs. + +The storage model presented here doesn't deal with data structure nor serialization. It's a Key-Value database, where both key and value are binaries. The storage user is responsible for data serialization. + +### Decouple state commitment from storage + +Separation of storage and commitment (by the SMT) will allow the optimization of different components according to their usage and access patterns. + +`SC` (SMT) is used to commit to a data and compute Merkle proofs. `SS` is used to directly access data. To avoid collisions, both `SS` and `SC` will use a separate storage namespace (they could use the same database underneath). `SS` will store each record directly (mapping `(key, value)` as `key → value`). + +SMT is a merkle tree structure: we don't store keys directly. For every `(key, value)` pair, `hash(key)` is used as leaf path (we hash a key to uniformly distribute leaves in the tree) and `hash(value)` as the leaf contents. The tree structure is specified in more depth [below](#smt-for-state-commitment). + +For data access we propose 2 additional KV buckets (implemented as namespaces for the key-value pairs, sometimes called [column family](https://github.com/facebook/rocksdb/wiki/Terminology)): + +1. B1: `key → value`: the principal object storage, used by a state machine, behind the Cosmos SDK `KVStore` interface: provides direct access by key and allows prefix iteration (KV DB backend must support it). +2. B2: `hash(key) → key`: a reverse index to get a key from an SMT path. Internally the SMT will store `(key, value)` as `prefix || hash(key) || hash(value)`. So, we can get an object value by composing `hash(key) → B2 → B1`. +3. We could use more buckets to optimize the app usage if needed. + +We propose to use a KV database for both `SS` and `SC`. The store interface will allow to use the same physical DB backend for both `SS` and `SC` as well two separate DBs. The latter option allows for the separation of `SS` and `SC` into different hardware units, providing support for more complex setup scenarios and improving overall performance: one can use different backends (eg RocksDB and Badger) as well as independently tuning the underlying DB configuration. + +### Requirements + +State Storage requirements: + +* range queries +* quick (key, value) access +* creating a snapshot +* historical versioning +* pruning (garbage collection) + +State Commitment requirements: + +* fast updates +* tree path should be short +* query historical commitment proofs using ICS-23 standard +* pruning (garbage collection) + +### SMT for State Commitment + +A Sparse Merkle tree is based on the idea of a complete Merkle tree of an intractable size. The assumption here is that as the size of the tree is intractable, there would only be a few leaf nodes with valid data blocks relative to the tree size, rendering a sparse tree. + +The full specification can be found at [Celestia](https://github.com/celestiaorg/celestia-specs/blob/ec98170398dfc6394423ee79b00b71038879e211/src/specs/data_structures.md#sparse-merkle-tree). In summary: + +* The SMT consists of a binary Merkle tree, constructed in the same fashion as described in [Certificate Transparency (RFC-6962)](https://tools.ietf.org/html/rfc6962), but using as the hashing function SHA-2-256 as defined in [FIPS 180-4](https://doi.org/10.6028/NIST.FIPS.180-4). +* Leaves and internal nodes are hashed differently: the one-byte `0x00` is prepended for leaf nodes while `0x01` is prepended for internal nodes. +* Default values are given to leaf nodes with empty leaves. +* While the above rule is sufficient to pre-compute the values of intermediate nodes that are roots of empty subtrees, a further simplification is to extend this default value to all nodes that are roots of empty subtrees. The 32-byte zero is used as the default value. This rule takes precedence over the above one. +* An internal node that is the root of a subtree that contains exactly one non-empty leaf is replaced by that leaf's leaf node. + +### Snapshots for storage sync and state versioning + +Below, with simple _snapshot_ we refer to a database snapshot mechanism, not to a _ABCI snapshot sync_. The latter will be referred as _snapshot sync_ (which will directly use DB snapshot as described below). + +Database snapshot is a view of DB state at a certain time or transaction. It's not a full copy of a database (it would be too big). Usually a snapshot mechanism is based on a _copy on write_ and it allows DB state to be efficiently delivered at a certain stage. +Some DB engines support snapshotting. Hence, we propose to reuse that functionality for the state sync and versioning (described below). We limit the supported DB engines to ones which efficiently implement snapshots. In a final section we discuss the evaluated DBs. + +One of the Stargate core features is a _snapshot sync_ delivered in the `/snapshot` package. It provides a way to trustlessly sync a blockchain without repeating all transactions from the genesis. This feature is implemented in Cosmos SDK and requires storage support. Currently IAVL is the only supported backend. It works by streaming to a client a snapshot of a `SS` at a certain version together with a header chain. + +A new database snapshot will be created in every `EndBlocker` and identified by a block height. The `root` store keeps track of the available snapshots to offer `SS` at a certain version. The `root` store implements the `RootStore` interface described below. In essence, `RootStore` encapsulates a `Committer` interface. `Committer` has a `Commit`, `SetPruning`, `GetPruning` functions which will be used for creating and removing snapshots. The `rootStore.Commit` function creates a new snapshot and increments the version on each call, and checks if it needs to remove old versions. We will need to update the SMT interface to implement the `Committer` interface. +NOTE: `Commit` must be called exactly once per block. Otherwise we risk going out of sync for the version number and block height. +NOTE: For the Cosmos SDK storage, we may consider splitting that interface into `Committer` and `PruningCommitter` - only the multiroot should implement `PruningCommitter` (cache and prefix store don't need pruning). + +Number of historical versions for `abci.RequestQuery` and state sync snapshots is part of a node configuration, not a chain configuration (configuration implied by the blockchain consensus). A configuration should allow to specify number of past blocks and number of past blocks modulo some number (eg: 100 past blocks and one snapshot every 100 blocks for past 2000 blocks). Archival nodes can keep all past versions. + +Pruning old snapshots is effectively done by a database. Whenever we update a record in `SC`, SMT won't update nodes - instead it creates new nodes on the update path, without removing the old one. Since we are snapshotting each block, we need to change that mechanism to immediately remove orphaned nodes from the database. This is a safe operation - snapshots will keep track of the records and make it available when accessing past versions. + +To manage the active snapshots we will either use a DB _max number of snapshots_ option (if available), or we will remove DB snapshots in the `EndBlocker`. The latter option can be done efficiently by identifying snapshots with block height and calling a store function to remove past versions. + +#### Accessing old state versions + +One of the functional requirements is to access old state. This is done through `abci.RequestQuery` structure. The version is specified by a block height (so we query for an object by a key `K` at block height `H`). The number of old versions supported for `abci.RequestQuery` is configurable. Accessing an old state is done by using available snapshots. +`abci.RequestQuery` doesn't need old state of `SC` unless the `prove=true` parameter is set. The SMT merkle proof must be included in the `abci.ResponseQuery` only if both `SC` and `SS` have a snapshot for requested version. + +Moreover, Cosmos SDK could provide a way to directly access a historical state. However, a state machine shouldn't do that - since the number of snapshots is configurable, it would lead to nondeterministic execution. + +We positively [validated](https://github.com/cosmos/cosmos-sdk/discussions/8297) a versioning and snapshot mechanism for querying old state with regards to the database we evaluated. + +### State Proofs + +For any object stored in State Store (SS), we have corresponding object in `SC`. A proof for object `V` identified by a key `K` is a branch of `SC`, where the path corresponds to the key `hash(K)`, and the leaf is `hash(K, V)`. + +### Rollbacks + +We need to be able to process transactions and roll-back state updates if a transaction fails. This can be done in the following way: during transaction processing, we keep all state change requests (writes) in a `CacheWrapper` abstraction (as it's done today). Once we finish the block processing, in the `Endblocker`, we commit a root store - at that time, all changes are written to the SMT and to the `SS` and a snapshot is created. + +### Committing to an object without saving it + +We identified use-cases, where modules will need to save an object commitment without storing an object itself. Sometimes clients are receiving complex objects, and they have no way to prove a correctness of that object without knowing the storage layout. For those use cases it would be easier to commit to the object without storing it directly. + +### Refactor MultiStore + +The Stargate `/store` implementation (store/v1) adds an additional layer in the SDK store construction - the `MultiStore` structure. The multistore exists to support the modularity of the Cosmos SDK - each module is using its own instance of IAVL, but in the current implementation, all instances share the same database. The latter indicates, however, that the implementation doesn't provide true modularity. Instead it causes problems related to race condition and atomic DB commits (see: [\#6370](https://github.com/cosmos/cosmos-sdk/issues/6370) and [discussion](https://github.com/cosmos/cosmos-sdk/discussions/8297#discussioncomment-757043)). + +We propose to reduce the multistore concept from the SDK, and to use a single instance of `SC` and `SS` in a `RootStore` object. To avoid confusion, we should rename the `MultiStore` interface to `RootStore`. The `RootStore` will have the following interface; the methods for configuring tracing and listeners are omitted for brevity. + +```go +// Used where read-only access to versions is needed. +type BasicRootStore interface { + Store + GetKVStore(StoreKey) KVStore + CacheRootStore() CacheRootStore +} + +// Used as the main app state, replacing CommitMultiStore. +type CommitRootStore interface { + BasicRootStore + Committer + Snapshotter + + GetVersion(uint64) (BasicRootStore, error) + SetInitialVersion(uint64) error + + ... // Trace and Listen methods +} + +// Replaces CacheMultiStore for branched state. +type CacheRootStore interface { + BasicRootStore + Write() + + ... // Trace and Listen methods +} + +// Example of constructor parameters for the concrete type. +type RootStoreConfig struct { + Upgrades *StoreUpgrades + InitialVersion uint64 + + ReservePrefix(StoreKey, StoreType) +} +``` + + + + +In contrast to `MultiStore`, `RootStore` doesn't allow to dynamically mount sub-stores or provide an arbitrary backing DB for individual sub-stores. + +NOTE: modules will be able to use a special commitment and their own DBs. For example: a module which will use ZK proofs for state can store and commit this proof in the `RootStore` (usually as a single record) and manage the specialized store privately or using the `SC` low level interface. + +#### Compatibility support + +To ease the transition to this new interface for users, we can create a shim which wraps a `CommitMultiStore` but provides a `CommitRootStore` interface, and expose functions to safely create and access the underlying `CommitMultiStore`. + +The new `RootStore` and supporting types can be implemented in a `store/v2alpha1` package to avoid breaking existing code. + +#### Merkle Proofs and IBC + +Currently, an IBC (v1.0) Merkle proof path consists of two elements (`["", ""]`), with each key corresponding to a separate proof. These are each verified according to individual [ICS-23 specs](https://github.com/cosmos/ibc-go/blob/f7051429e1cf833a6f65d51e6c3df1609290a549/modules/core/23-commitment/types/merkle.go#L17), and the result hash of each step is used as the committed value of the next step, until a root commitment hash is obtained. +The root hash of the proof for `""` is hashed with the `""` to validate against the App Hash. + +This is not compatible with the `RootStore`, which stores all records in a single Merkle tree structure, and won't produce separate proofs for the store- and record-key. Ideally, the store-key component of the proof could just be omitted, and updated to use a "no-op" spec, so only the record-key is used. However, because the IBC verification code hardcodes the `"ibc"` prefix and applies it to the SDK proof as a separate element of the proof path, this isn't possible without a breaking change. Breaking this behavior would severely impact the Cosmos ecosystem which already widely adopts the IBC module. Requesting an update of the IBC module across the chains is a time consuming effort and not easily feasible. + +As a workaround, the `RootStore` will have to use two separate SMTs (they could use the same underlying DB): one for IBC state and one for everything else. A simple Merkle map that reference these SMTs will act as a Merkle Tree to create a final App hash. The Merkle map is not stored in a DBs - it's constructed in the runtime. The IBC substore key must be `"ibc"`. + +The workaround can still guarantee atomic syncs: the [proposed DB backends](#evaluated-kv-databases) support atomic transactions and efficient rollbacks, which will be used in the commit phase. + +The presented workaround can be used until the IBC module is fully upgraded to supports single-element commitment proofs. + +### Optimization: compress module key prefixes + +We consider a compression of prefix keys by creating a mapping from module key to an integer, and serializing the integer using varint coding. Varint coding assures that different values don't have common byte prefix. For Merkle Proofs we can't use prefix compression - so it should only apply for the `SS` keys. Moreover, the prefix compression should be only applied for the module namespace. More precisely: + +* each module has it's own namespace; +* when accessing a module namespace we create a KVStore with embedded prefix; +* that prefix will be compressed only when accessing and managing `SS`. + +We need to assure that the codes won't change. We can fix the mapping in a static variable (provided by an app) or SS state under a special key. + +TODO: need to make decision about the key compression. + +## Optimization: SS key compression + +Some objects may be saved with key, which contains a Protobuf message type. Such keys are long. We could save a lot of space if we can map Protobuf message types in varints. + +TODO: finalize this or move to another ADR. + +## Migration + +Using the new store will require a migration. 2 Migrations are proposed: + +1. Genesis export -- it will reset the blockchain history. +2. In place migration: we can reuse `UpgradeKeeper.SetUpgradeHandler` to provide the migration logic: + +```go +app.UpgradeKeeper.SetUpgradeHandler("adr-40", func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + + storev2.Migrate(iavlstore, v2.store) + + // RunMigrations returns the VersionMap + // with the updated module ConsensusVersions + return app.mm.RunMigrations(ctx, vm) +}) +``` + +The `Migrate` function will read all entries from a store/v1 DB and save them to the AD-40 combined KV store. +Cache layer should not be used and the operation must finish with a single Commit call. + +Inserting records to the `SC` (SMT) component is the bottleneck. Unfortunately SMT doesn't support batch transactions. +Adding batch transactions to `SC` layer is considered as a feature after the main release. + +## Consequences + +### Backwards Compatibility + +This ADR doesn't introduce any Cosmos SDK level API changes. + +We change the storage layout of the state machine, a storage hard fork and network upgrade is required to incorporate these changes. SMT provides a merkle proof functionality, however it is not compatible with ICS23. Updating the proofs for ICS23 compatibility is required. + +### Positive + +* Decoupling state from state commitment introduce better engineering opportunities for further optimizations and better storage patterns. +* Performance improvements. +* Joining SMT based camp which has wider and proven adoption than IAVL. Example projects which decided on SMT: Ethereum2, Diem (Libra), Trillan, Tezos, Celestia. +* Multistore removal fixes a longstanding issue with the current MultiStore design. +* Simplifies merkle proofs - all modules, except IBC, have only one pass for merkle proof. + +### Negative + +* Storage migration +* LL SMT doesn't support pruning - we will need to add and test that functionality. +* `SS` keys will have an overhead of a key prefix. This doesn't impact `SC` because all keys in `SC` have same size (they are hashed). + +### Neutral + +* Deprecating IAVL, which is one of the core proposals of Cosmos Whitepaper. + +## Alternative designs + +Most of the alternative designs were evaluated in [state commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h). + +Ethereum research published [Verkle Trie](https://dankradfeist.de/ethereum/2021/06/18/verkle-trie-for-eth1.html) - an idea of combining polynomial commitments with merkle tree in order to reduce the tree height. This concept has a very good potential, but we think it's too early to implement it. The current, SMT based design could be easily updated to the Verkle Trie once other research implement all necessary libraries. The main advantage of the design described in this ADR is the separation of state commitments from the data storage and designing a more powerful interface. + +## Further Discussions + +### Evaluated KV Databases + +We verified existing databases KV databases for evaluating snapshot support. The following databases provide efficient snapshot mechanism: Badger, RocksDB, [Pebble](https://github.com/cockroachdb/pebble). Databases which don't provide such support or are not production ready: boltdb, leveldb, goleveldb, membdb, lmdb. + +### RDBMS + +Use of RDBMS instead of simple KV store for state. Use of RDBMS will require a Cosmos SDK API breaking change (`KVStore` interface) and will allow better data extraction and indexing solutions. Instead of saving an object as a single blob of bytes, we could save it as record in a table in the state storage layer, and as a `hash(key, protobuf(object))` in the SMT as outlined above. To verify that an object registered in RDBMS is same as the one committed to SMT, one will need to load it from RDBMS, marshal using protobuf, hash and do SMT search. + +### Off Chain Store + +We were discussing use case where modules can use a support database, which is not automatically committed. Module will responsible for having a sound storage model and can optionally use the feature discussed in __Committing to an object without saving it_ section. + +## References + +* [IAVL What's Next?](https://github.com/cosmos/cosmos-sdk/issues/7100) +* [IAVL overview](https://docs.google.com/document/d/16Z_hW2rSAmoyMENO-RlAhQjAG3mSNKsQueMnKpmcBv0/edit#heading=h.yd2th7x3o1iv) of it's state v0.15 +* [State commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h) +* [Celestia (LazyLedger) SMT](https://github.com/lazyledger/smt) +* Facebook Diem (Libra) SMT [design](https://developers.diem.com/papers/jellyfish-merkle-tree/2021-01-14.pdf) +* [Trillian Revocation Transparency](https://github.com/google/trillian/blob/master/docs/papers/RevocationTransparency.pdf), [Trillian Verifiable Data Structures](https://github.com/google/trillian/blob/master/docs/papers/VerifiableDataStructures.pdf). +* Design and implementation [discussion](https://github.com/cosmos/cosmos-sdk/discussions/8297). +* [How to Upgrade IBC Chains and their Clients](https://github.com/cosmos/ibc-go/blob/main/docs/ibc/upgrades/quick-guide.md) +* [ADR-40 Effect on IBC](https://github.com/cosmos/ibc-go/discussions/256) diff --git a/docs/integrate/architecture/adr-041-in-place-store-migrations.md b/docs/integrate/architecture/adr-041-in-place-store-migrations.md new file mode 100644 index 000000000..2237b610d --- /dev/null +++ b/docs/integrate/architecture/adr-041-in-place-store-migrations.md @@ -0,0 +1,167 @@ +# ADR 041: In-Place Store Migrations + +## Changelog + +* 17.02.2021: Initial Draft + +## Status + +Accepted + +## Abstract + +This ADR introduces a mechanism to perform in-place state store migrations during chain software upgrades. + +## Context + +When a chain upgrade introduces state-breaking changes inside modules, the current procedure consists of exporting the whole state into a JSON file (via the `simd export` command), running migration scripts on the JSON file (`simd genesis migrate` command), clearing the stores (`simd unsafe-reset-all` command), and starting a new chain with the migrated JSON file as new genesis (optionally with a custom initial block height). An example of such a procedure can be seen [in the Cosmos Hub 3->4 migration guide](https://github.com/cosmos/gaia/blob/v4.0.3/docs/migration/cosmoshub-3.md#upgrade-procedure). + +This procedure is cumbersome for multiple reasons: + +* The procedure takes time. It can take hours to run the `export` command, plus some additional hours to run `InitChain` on the fresh chain using the migrated JSON. +* The exported JSON file can be heavy (~100MB-1GB), making it difficult to view, edit and transfer, which in turn introduces additional work to solve these problems (such as [streaming genesis](https://github.com/cosmos/cosmos-sdk/issues/6936)). + +## Decision + +We propose a migration procedure based on modifying the KV store in-place without involving the JSON export-process-import flow described above. + +### Module `ConsensusVersion` + +We introduce a new method on the `AppModule` interface: + +```go +type AppModule interface { + // --snip-- + ConsensusVersion() uint64 +} +``` + +This methods returns an `uint64` which serves as state-breaking version of the module. It MUST be incremented on each consensus-breaking change introduced by the module. To avoid potential errors with default values, the initial version of a module MUST be set to 1. In the Cosmos SDK, version 1 corresponds to the modules in the v0.41 series. + +### Module-Specific Migration Functions + +For each consensus-breaking change introduced by the module, a migration script from ConsensusVersion `N` to version `N+1` MUST be registered in the `Configurator` using its newly-added `RegisterMigration` method. All modules receive a reference to the configurator in their `RegisterServices` method on `AppModule`, and this is where the migration functions should be registered. The migration functions should be registered in increasing order. + +```go +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) + // etc. +} +``` + +For example, if the new ConsensusVersion of a module is `N` , then `N-1` migration functions MUST be registered in the configurator. + +In the Cosmos SDK, the migration functions are handled by each module's keeper, because the keeper holds the `sdk.StoreKey` used to perform in-place store migrations. To not overload the keeper, a `Migrator` wrapper is used by each module to handle the migration functions: + +```go +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + BaseKeeper +} +``` + +Migration functions should live inside the `migrations/` folder of each module, and be called by the Migrator's methods. We propose the format `Migrate{M}to{N}` for method names. + +```go +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2bank.MigrateStore(ctx, m.keeper.storeKey) // v043bank is package `x/bank/migrations/v2`. +} +``` + +Each module's migration functions are specific to the module's store evolutions, and are not described in this ADR. An example of x/bank store key migrations after the introduction of ADR-028 length-prefixed addresses can be seen in this [store.go code](https://github.com/cosmos/cosmos-sdk/blob/36f68eb9e041e20a5bb47e216ac5eb8b91f95471/x/bank/legacy/v043/store.go#L41-L62). + +### Tracking Module Versions in `x/upgrade` + +We introduce a new prefix store in `x/upgrade`'s store. This store will track each module's current version, it can be modelized as a `map[string]uint64` of module name to module ConsensusVersion, and will be used when running the migrations (see next section for details). The key prefix used is `0x1`, and the key/value format is: + +```text +0x2 | {bytes(module_name)} => BigEndian(module_consensus_version) +``` + +The initial state of the store is set from `app.go`'s `InitChainer` method. + +The UpgradeHandler signature needs to be updated to take a `VersionMap`, as well as return an upgraded `VersionMap` and an error: + +```diff +- type UpgradeHandler func(ctx sdk.Context, plan Plan) ++ type UpgradeHandler func(ctx sdk.Context, plan Plan, versionMap VersionMap) (VersionMap, error) +``` + +To apply an upgrade, we query the `VersionMap` from the `x/upgrade` store and pass it into the handler. The handler runs the actual migration functions (see next section), and if successful, returns an updated `VersionMap` to be stored in state. + +```diff +func (k UpgradeKeeper) ApplyUpgrade(ctx sdk.Context, plan types.Plan) { + // --snip-- +- handler(ctx, plan) ++ updatedVM, err := handler(ctx, plan, k.GetModuleVersionMap(ctx)) // k.GetModuleVersionMap() fetches the VersionMap stored in state. ++ if err != nil { ++ return err ++ } ++ ++ // Set the updated consensus versions to state ++ k.SetModuleVersionMap(ctx, updatedVM) +} +``` + +A gRPC query endpoint to query the `VersionMap` stored in `x/upgrade`'s state will also be added, so that app developers can double-check the `VersionMap` before the upgrade handler runs. + +### Running Migrations + +Once all the migration handlers are registered inside the configurator (which happens at startup), running migrations can happen by calling the `RunMigrations` method on `module.Manager`. This function will loop through all modules, and for each module: + +* Get the old ConsensusVersion of the module from its `VersionMap` argument (let's call it `M`). +* Fetch the new ConsensusVersion of the module from the `ConsensusVersion()` method on `AppModule` (call it `N`). +* If `N>M`, run all registered migrations for the module sequentially `M -> M+1 -> M+2...` until `N`. + * There is a special case where there is no ConsensusVersion for the module, as this means that the module has been newly added during the upgrade. In this case, no migration function is run, and the module's current ConsensusVersion is saved to `x/upgrade`'s store. + +If a required migration is missing (e.g. if it has not been registered in the `Configurator`), then the `RunMigrations` function will error. + +In practice, the `RunMigrations` method should be called from inside an `UpgradeHandler`. + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + return app.mm.RunMigrations(ctx, vm) +}) +``` + +Assuming a chain upgrades at block `n`, the procedure should run as follows: + +* the old binary will halt in `BeginBlock` when starting block `N`. In its store, the ConsensusVersions of the old binary's modules are stored. +* the new binary will start at block `N`. The UpgradeHandler is set in the new binary, so will run at `BeginBlock` of the new binary. Inside `x/upgrade`'s `ApplyUpgrade`, the `VersionMap` will be retrieved from the (old binary's) store, and passed into the `RunMigrations` functon, migrating all module stores in-place before the modules' own `BeginBlock`s. + +## Consequences + +### Backwards Compatibility + +This ADR introduces a new method `ConsensusVersion()` on `AppModule`, which all modules need to implement. It also alters the UpgradeHandler function signature. As such, it is not backwards-compatible. + +While modules MUST register their migration functions when bumping ConsensusVersions, running those scripts using an upgrade handler is optional. An application may perfectly well decide to not call the `RunMigrations` inside its upgrade handler, and continue using the legacy JSON migration path. + +### Positive + +* Perform chain upgrades without manipulating JSON files. +* While no benchmark has been made yet, it is probable that in-place store migrations will take less time than JSON migrations. The main reason supporting this claim is that both the `simd export` command on the old binary and the `InitChain` function on the new binary will be skipped. + +### Negative + +* Module developers MUST correctly track consensus-breaking changes in their modules. If a consensus-breaking change is introduced in a module without its corresponding `ConsensusVersion()` bump, then the `RunMigrations` function won't detect the migration, and the chain upgrade might be unsuccessful. Documentation should clearly reflect this. + +### Neutral + +* The Cosmos SDK will continue to support JSON migrations via the existing `simd export` and `simd genesis migrate` commands. +* The current ADR does not allow creating, renaming or deleting stores, only modifying existing store keys and values. The Cosmos SDK already has the `StoreLoader` for those operations. + +## Further Discussions + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/discussions/8429 +* Implementation of `ConsensusVersion` and `RunMigrations`: https://github.com/cosmos/cosmos-sdk/pull/8485 +* Issue discussing `x/upgrade` design: https://github.com/cosmos/cosmos-sdk/issues/8514 diff --git a/docs/integrate/architecture/adr-042-group-module.md b/docs/integrate/architecture/adr-042-group-module.md new file mode 100644 index 000000000..834ec455e --- /dev/null +++ b/docs/integrate/architecture/adr-042-group-module.md @@ -0,0 +1,279 @@ +# ADR 042: Group Module + +## Changelog + +* 2020/04/09: Initial Draft + +## Status + +Draft + +## Abstract + +This ADR defines the `x/group` module which allows the creation and management of on-chain multi-signature accounts and enables voting for message execution based on configurable decision policies. + +## Context + +The legacy amino multi-signature mechanism of the Cosmos SDK has certain limitations: + +* Key rotation is not possible, although this can be solved with [account rekeying](adr-034-account-rekeying.md). +* Thresholds can't be changed. +* UX is cumbersome for non-technical users ([#5661](https://github.com/cosmos/cosmos-sdk/issues/5661)). +* It requires `legacy_amino` sign mode ([#8141](https://github.com/cosmos/cosmos-sdk/issues/8141)). + +While the group module is not meant to be a total replacement for the current multi-signature accounts, it provides a solution to the limitations described above, with a more flexible key management system where keys can be added, updated or removed, as well as configurable thresholds. +It's meant to be used with other access control modules such as [`x/feegrant`](adr-029-fee-grant-module.md) ans [`x/authz`](adr-030-authz-module.md) to simplify key management for individuals and organizations. + +The proof of concept of the group module can be found in https://github.com/regen-network/regen-ledger/tree/master/proto/regen/group/v1alpha1 and https://github.com/regen-network/regen-ledger/tree/master/x/group. + +## Decision + +We propose merging the `x/group` module with its supporting [ORM/Table Store package](https://github.com/regen-network/regen-ledger/tree/master/orm) ([#7098](https://github.com/cosmos/cosmos-sdk/issues/7098)) into the Cosmos SDK and continuing development here. There will be a dedicated ADR for the ORM package. + +### Group + +A group is a composition of accounts with associated weights. It is not +an account and doesn't have a balance. It doesn't in and of itself have any +sort of voting or decision weight. +Group members can create proposals and vote on them through group accounts using different decision policies. + +It has an `admin` account which can manage members in the group, update the group +metadata and set a new admin. + +```protobuf +message GroupInfo { + + // group_id is the unique ID of this group. + uint64 group_id = 1; + + // admin is the account address of the group's admin. + string admin = 2; + + // metadata is any arbitrary metadata to attached to the group. + bytes metadata = 3; + + // version is used to track changes to a group's membership structure that + // would break existing proposals. Whenever a member weight has changed, + // or any member is added or removed, the version is incremented and will + // invalidate all proposals from older versions. + uint64 version = 4; + + // total_weight is the sum of the group members' weights. + string total_weight = 5; +} +``` + +```protobuf +message GroupMember { + + // group_id is the unique ID of the group. + uint64 group_id = 1; + + // member is the member data. + Member member = 2; +} + +// Member represents a group member with an account address, +// non-zero weight and metadata. +message Member { + + // address is the member's account address. + string address = 1; + + // weight is the member's voting weight that should be greater than 0. + string weight = 2; + + // metadata is any arbitrary metadata to attached to the member. + bytes metadata = 3; +} +``` + +### Group Account + +A group account is an account associated with a group and a decision policy. +A group account does have a balance. + +Group accounts are abstracted from groups because a single group may have +multiple decision policies for different types of actions. Managing group +membership separately from decision policies results in the least overhead +and keeps membership consistent across different policies. The pattern that +is recommended is to have a single master group account for a given group, +and then to create separate group accounts with different decision policies +and delegate the desired permissions from the master account to +those "sub-accounts" using the [`x/authz` module](adr-030-authz-module.md). + +```protobuf +message GroupAccountInfo { + + // address is the group account address. + string address = 1; + + // group_id is the ID of the Group the GroupAccount belongs to. + uint64 group_id = 2; + + // admin is the account address of the group admin. + string admin = 3; + + // metadata is any arbitrary metadata of this group account. + bytes metadata = 4; + + // version is used to track changes to a group's GroupAccountInfo structure that + // invalidates active proposal from old versions. + uint64 version = 5; + + // decision_policy specifies the group account's decision policy. + google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "cosmos.group.v1.DecisionPolicy"]; +} +``` + +Similarly to a group admin, a group account admin can update its metadata, decision policy or set a new group account admin. + +A group account can also be an admin or a member of a group. +For instance, a group admin could be another group account which could "elects" the members or it could be the same group that elects itself. + +### Decision Policy + +A decision policy is the mechanism by which members of a group can vote on +proposals. + +All decision policies should have a minimum and maximum voting window. +The minimum voting window is the minimum duration that must pass in order +for a proposal to potentially pass, and it may be set to 0. The maximum voting +window is the maximum time that a proposal may be voted on and executed if +it reached enough support before it is closed. +Both of these values must be less than a chain-wide max voting window parameter. + +We define the `DecisionPolicy` interface that all decision policies must implement: + +```go +type DecisionPolicy interface { + codec.ProtoMarshaler + + ValidateBasic() error + GetTimeout() types.Duration + Allow(tally Tally, totalPower string, votingDuration time.Duration) (DecisionPolicyResult, error) + Validate(g GroupInfo) error +} + +type DecisionPolicyResult struct { + Allow bool + Final bool +} +``` + +#### Threshold decision policy + +A threshold decision policy defines a minimum support votes (_yes_), based on a tally +of voter weights, for a proposal to pass. For +this decision policy, abstain and veto are treated as no support (_no_). + +```protobuf +message ThresholdDecisionPolicy { + + // threshold is the minimum weighted sum of support votes for a proposal to succeed. + string threshold = 1; + + // voting_period is the duration from submission of a proposal to the end of voting period + // Within this period, votes and exec messages can be submitted. + google.protobuf.Duration voting_period = 2 [(gogoproto.nullable) = false]; +} +``` + +### Proposal + +Any member of a group can submit a proposal for a group account to decide upon. +A proposal consists of a set of `sdk.Msg`s that will be executed if the proposal +passes as well as any metadata associated with the proposal. These `sdk.Msg`s get validated as part of the `Msg/CreateProposal` request validation. They should also have their signer set as the group account. + +Internally, a proposal also tracks: + +* its current `Status`: submitted, closed or aborted +* its `Result`: unfinalized, accepted or rejected +* its `VoteState` in the form of a `Tally`, which is calculated on new votes and when executing the proposal. + +```protobuf +// Tally represents the sum of weighted votes. +message Tally { + option (gogoproto.goproto_getters) = false; + + // yes_count is the weighted sum of yes votes. + string yes_count = 1; + + // no_count is the weighted sum of no votes. + string no_count = 2; + + // abstain_count is the weighted sum of abstainers. + string abstain_count = 3; + + // veto_count is the weighted sum of vetoes. + string veto_count = 4; +} +``` + +### Voting + +Members of a group can vote on proposals. There are four choices to choose while voting - yes, no, abstain and veto. Not +all decision policies will support them. Votes can contain some optional metadata. +In the current implementation, the voting window begins as soon as a proposal +is submitted. + +Voting internally updates the proposal `VoteState` as well as `Status` and `Result` if needed. + +### Executing Proposals + +Proposals will not be automatically executed by the chain in this current design, +but rather a user must submit a `Msg/Exec` transaction to attempt to execute the +proposal based on the current votes and decision policy. A future upgrade could +automate this and have the group account (or a fee granter) pay. + +#### Changing Group Membership + +In the current implementation, updating a group or a group account after submitting a proposal will make it invalid. It will simply fail if someone calls `Msg/Exec` and will eventually be garbage collected. + +### Notes on current implementation + +This section outlines the current implementation used in the proof of concept of the group module but this could be subject to changes and iterated on. + +#### ORM + +The [ORM package](https://github.com/cosmos/cosmos-sdk/discussions/9156) defines tables, sequences and secondary indexes which are used in the group module. + +Groups are stored in state as part of a `groupTable`, the `group_id` being an auto-increment integer. Group members are stored in a `groupMemberTable`. + +Group accounts are stored in a `groupAccountTable`. The group account address is generated based on an auto-increment integer which is used to derive the group module `RootModuleKey` into a `DerivedModuleKey`, as stated in [ADR-033](adr-033-protobuf-inter-module-comm.md#modulekeys-and-moduleids). The group account is added as a new `ModuleAccount` through `x/auth`. + +Proposals are stored as part of the `proposalTable` using the `Proposal` type. The `proposal_id` is an auto-increment integer. + +Votes are stored in the `voteTable`. The primary key is based on the vote's `proposal_id` and `voter` account address. + +#### ADR-033 to route proposal messages + +Inter-module communication introduced by [ADR-033](adr-033-protobuf-inter-module-comm.md) can be used to route a proposal's messages using the `DerivedModuleKey` corresponding to the proposal's group account. + +## Consequences + +### Positive + +* Improved UX for multi-signature accounts allowing key rotation and custom decision policies. + +### Negative + +### Neutral + +* It uses ADR 033 so it will need to be implemented within the Cosmos SDK, but this doesn't imply necessarily any large refactoring of existing Cosmos SDK modules. +* The current implementation of the group module uses the ORM package. + +## Further Discussions + +* Convergence of `/group` and `x/gov` as both support proposals and voting: https://github.com/cosmos/cosmos-sdk/discussions/9066 +* `x/group` possible future improvements: + * Execute proposals on submission (https://github.com/regen-network/regen-ledger/issues/288) + * Withdraw a proposal (https://github.com/regen-network/cosmos-modules/issues/41) + * Make `Tally` more flexible and support non-binary choices + +## References + +* Initial specification: + * https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#group-module + * [#5236](https://github.com/cosmos/cosmos-sdk/pull/5236) +* Proposal to add `x/group` into the Cosmos SDK: [#7633](https://github.com/cosmos/cosmos-sdk/issues/7633) diff --git a/docs/integrate/architecture/adr-043-nft-module.md b/docs/integrate/architecture/adr-043-nft-module.md new file mode 100644 index 000000000..87b4dbb5e --- /dev/null +++ b/docs/integrate/architecture/adr-043-nft-module.md @@ -0,0 +1,349 @@ +# ADR 43: NFT Module + +## Changelog + +* 2021-05-01: Initial Draft +* 2021-07-02: Review updates +* 2022-06-15: Add batch operation +* 2022-11-11: Remove strict validation of classID and tokenID + +## Status + +PROPOSED + +## Abstract + +This ADR defines the `x/nft` module which is a generic implementation of NFTs, roughly "compatible" with ERC721. **Applications using the `x/nft` module must implement the following functions**: + +* `MsgNewClass` - Receive the user's request to create a class, and call the `NewClass` of the `x/nft` module. +* `MsgUpdateClass` - Receive the user's request to update a class, and call the `UpdateClass` of the `x/nft` module. +* `MsgMintNFT` - Receive the user's request to mint a nft, and call the `MintNFT` of the `x/nft` module. +* `BurnNFT` - Receive the user's request to burn a nft, and call the `BurnNFT` of the `x/nft` module. +* `UpdateNFT` - Receive the user's request to update a nft, and call the `UpdateNFT` of the `x/nft` module. + +## Context + +NFTs are more than just crypto art, which is very helpful for accruing value to the Cosmos ecosystem. As a result, Cosmos Hub should implement NFT functions and enable a unified mechanism for storing and sending the ownership representative of NFTs as discussed in https://github.com/cosmos/cosmos-sdk/discussions/9065. + +As discussed in [#9065](https://github.com/cosmos/cosmos-sdk/discussions/9065), several potential solutions can be considered: + +* irismod/nft and modules/incubator/nft +* CW721 +* DID NFTs +* interNFT + +Since functions/use cases of NFTs are tightly connected with their logic, it is almost impossible to support all the NFTs' use cases in one Cosmos SDK module by defining and implementing different transaction types. + +Considering generic usage and compatibility of interchain protocols including IBC and Gravity Bridge, it is preferred to have a generic NFT module design which handles the generic NFTs logic. +This design idea can enable composability that application-specific functions should be managed by other modules on Cosmos Hub or on other Zones by importing the NFT module. + +The current design is based on the work done by [IRISnet team](https://github.com/irisnet/irismod/tree/master/modules/nft) and an older implementation in the [Cosmos repository](https://github.com/cosmos/modules/tree/master/incubator/nft). + +## Decision + +We create a `x/nft` module, which contains the following functionality: + +* Store NFTs and track their ownership. +* Expose `Keeper` interface for composing modules to transfer, mint and burn NFTs. +* Expose external `Message` interface for users to transfer ownership of their NFTs. +* Query NFTs and their supply information. + +The proposed module is a base module for NFT app logic. It's goal it to provide a common layer for storage, basic transfer functionality and IBC. The module should not be used as a standalone. +Instead an app should create a specialized module to handle app specific logic (eg: NFT ID construction, royalty), user level minting and burning. Moreover an app specialized module should handle auxiliary data to support the app logic (eg indexes, ORM, business data). + +All data carried over IBC must be part of the `NFT` or `Class` type described below. The app specific NFT data should be encoded in `NFT.data` for cross-chain integrity. Other objects related to NFT, which are not important for integrity can be part of the app specific module. + +### Types + +We propose two main types: + +* `Class` -- describes NFT class. We can think about it as a smart contract address. +* `NFT` -- object representing unique, non fungible asset. Each NFT is associated with a Class. + +#### Class + +NFT **Class** is comparable to an ERC-721 smart contract (provides description of a smart contract), under which a collection of NFTs can be created and managed. + +```protobuf +message Class { + string id = 1; + string name = 2; + string symbol = 3; + string description = 4; + string uri = 5; + string uri_hash = 6; + google.protobuf.Any data = 7; +} +``` + +* `id` is used as the primary index for storing the class; _required_ +* `name` is a descriptive name of the NFT class; _optional_ +* `symbol` is the symbol usually shown on exchanges for the NFT class; _optional_ +* `description` is a detailed description of the NFT class; _optional_ +* `uri` is a URI for the class metadata stored off chain. It should be a JSON file that contains metadata about the NFT class and NFT data schema ([OpenSea example](https://docs.opensea.io/docs/contract-level-metadata)); _optional_ +* `uri_hash` is a hash of the document pointed by uri; _optional_ +* `data` is app specific metadata of the class; _optional_ + +#### NFT + +We define a general model for `NFT` as follows. + +```protobuf +message NFT { + string class_id = 1; + string id = 2; + string uri = 3; + string uri_hash = 4; + google.protobuf.Any data = 10; +} +``` + +* `class_id` is the identifier of the NFT class where the NFT belongs; _required_ +* `id` is an identifier of the NFT, unique within the scope of its class. It is specified by the creator of the NFT and may be expanded to use DID in the future. `class_id` combined with `id` uniquely identifies an NFT and is used as the primary index for storing the NFT; _required_ + + ```text + {class_id}/{id} --> NFT (bytes) + ``` + +* `uri` is a URI for the NFT metadata stored off chain. Should point to a JSON file that contains metadata about this NFT (Ref: [ERC721 standard and OpenSea extension](https://docs.opensea.io/docs/metadata-standards)); _required_ +* `uri_hash` is a hash of the document pointed by uri; _optional_ +* `data` is an app specific data of the NFT. CAN be used by composing modules to specify additional properties of the NFT; _optional_ + +This ADR doesn't specify values that `data` can take; however, best practices recommend upper-level NFT modules clearly specify their contents. Although the value of this field doesn't provide the additional context required to manage NFT records, which means that the field can technically be removed from the specification, the field's existence allows basic informational/UI functionality. + +### `Keeper` Interface + +```go +type Keeper interface { + NewClass(ctx sdk.Context,class Class) + UpdateClass(ctx sdk.Context,class Class) + + Mint(ctx sdk.Context,nft NFT,receiver sdk.AccAddress) // updates totalSupply + BatchMint(ctx sdk.Context, tokens []NFT,receiver sdk.AccAddress) error + + Burn(ctx sdk.Context, classId string, nftId string) // updates totalSupply + BatchBurn(ctx sdk.Context, classID string, nftIDs []string) error + + Update(ctx sdk.Context, nft NFT) + BatchUpdate(ctx sdk.Context, tokens []NFT) error + + Transfer(ctx sdk.Context, classId string, nftId string, receiver sdk.AccAddress) + BatchTransfer(ctx sdk.Context, classID string, nftIDs []string, receiver sdk.AccAddress) error + + GetClass(ctx sdk.Context, classId string) Class + GetClasses(ctx sdk.Context) []Class + + GetNFT(ctx sdk.Context, classId string, nftId string) NFT + GetNFTsOfClassByOwner(ctx sdk.Context, classId string, owner sdk.AccAddress) []NFT + GetNFTsOfClass(ctx sdk.Context, classId string) []NFT + + GetOwner(ctx sdk.Context, classId string, nftId string) sdk.AccAddress + GetBalance(ctx sdk.Context, classId string, owner sdk.AccAddress) uint64 + GetTotalSupply(ctx sdk.Context, classId string) uint64 +} +``` + +Other business logic implementations should be defined in composing modules that import `x/nft` and use its `Keeper`. + +### `Msg` Service + +```protobuf +service Msg { + rpc Send(MsgSend) returns (MsgSendResponse); +} + +message MsgSend { + string class_id = 1; + string id = 2; + string sender = 3; + string reveiver = 4; +} +message MsgSendResponse {} +``` + +`MsgSend` can be used to transfer the ownership of an NFT to another address. + +The implementation outline of the server is as follows: + +```go +type msgServer struct{ + k Keeper +} + +func (m msgServer) Send(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { + // check current ownership + assertEqual(msg.Sender, m.k.GetOwner(msg.ClassId, msg.Id)) + + // transfer ownership + m.k.Transfer(msg.ClassId, msg.Id, msg.Receiver) + + return &types.MsgSendResponse{}, nil +} +``` + +The query service methods for the `x/nft` module are: + +```protobuf +service Query { + // Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721 + rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/balance/{owner}/{class_id}"; + } + + // Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721 + rpc Owner(QueryOwnerRequest) returns (QueryOwnerResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/owner/{class_id}/{id}"; + } + + // Supply queries the number of NFTs from the given class, same as totalSupply of ERC721. + rpc Supply(QuerySupplyRequest) returns (QuerySupplyResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/supply/{class_id}"; + } + + // NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in ERC721Enumerable + rpc NFTs(QueryNFTsRequest) returns (QueryNFTsResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts"; + } + + // NFT queries an NFT based on its class and id. + rpc NFT(QueryNFTRequest) returns (QueryNFTResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts/{class_id}/{id}"; + } + + // Class queries an NFT class based on its id + rpc Class(QueryClassRequest) returns (QueryClassResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes/{class_id}"; + } + + // Classes queries all NFT classes + rpc Classes(QueryClassesRequest) returns (QueryClassesResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes"; + } +} + +// QueryBalanceRequest is the request type for the Query/Balance RPC method +message QueryBalanceRequest { + string class_id = 1; + string owner = 2; +} + +// QueryBalanceResponse is the response type for the Query/Balance RPC method +message QueryBalanceResponse { + uint64 amount = 1; +} + +// QueryOwnerRequest is the request type for the Query/Owner RPC method +message QueryOwnerRequest { + string class_id = 1; + string id = 2; +} + +// QueryOwnerResponse is the response type for the Query/Owner RPC method +message QueryOwnerResponse { + string owner = 1; +} + +// QuerySupplyRequest is the request type for the Query/Supply RPC method +message QuerySupplyRequest { + string class_id = 1; +} + +// QuerySupplyResponse is the response type for the Query/Supply RPC method +message QuerySupplyResponse { + uint64 amount = 1; +} + +// QueryNFTstRequest is the request type for the Query/NFTs RPC method +message QueryNFTsRequest { + string class_id = 1; + string owner = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +// QueryNFTsResponse is the response type for the Query/NFTs RPC methods +message QueryNFTsResponse { + repeated cosmos.nft.v1beta1.NFT nfts = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryNFTRequest is the request type for the Query/NFT RPC method +message QueryNFTRequest { + string class_id = 1; + string id = 2; +} + +// QueryNFTResponse is the response type for the Query/NFT RPC method +message QueryNFTResponse { + cosmos.nft.v1beta1.NFT nft = 1; +} + +// QueryClassRequest is the request type for the Query/Class RPC method +message QueryClassRequest { + string class_id = 1; +} + +// QueryClassResponse is the response type for the Query/Class RPC method +message QueryClassResponse { + cosmos.nft.v1beta1.Class class = 1; +} + +// QueryClassesRequest is the request type for the Query/Classes RPC method +message QueryClassesRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryClassesResponse is the response type for the Query/Classes RPC method +message QueryClassesResponse { + repeated cosmos.nft.v1beta1.Class classes = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} +``` + +### Interoperability + +Interoperability is all about reusing assets between modules and chains. The former one is achieved by ADR-33: Protobuf client - server communication. At the time of writing ADR-33 is not finalized. The latter is achieved by IBC. Here we will focus on the IBC side. +IBC is implemented per module. Here, we aligned that NFTs will be recorded and managed in the x/nft. This requires creation of a new IBC standard and implementation of it. + +For IBC interoperability, NFT custom modules MUST use the NFT object type understood by the IBC client. So, for x/nft interoperability, custom NFT implementations (example: x/cryptokitty) should use the canonical x/nft module and proxy all NFT balance keeping functionality to x/nft or else re-implement all functionality using the NFT object type understood by the IBC client. In other words: x/nft becomes the standard NFT registry for all Cosmos NFTs (example: x/cryptokitty will register a kitty NFT in x/nft and use x/nft for book keeping). This was [discussed](https://github.com/cosmos/cosmos-sdk/discussions/9065#discussioncomment-873206) in the context of using x/bank as a general asset balance book. Not using x/nft will require implementing another module for IBC. + +## Consequences + +### Backward Compatibility + +No backward incompatibilities. + +### Forward Compatibility + +This specification conforms to the ERC-721 smart contract specification for NFT identifiers. Note that ERC-721 defines uniqueness based on (contract address, uint256 tokenId), and we conform to this implicitly because a single module is currently aimed to track NFT identifiers. Note: use of the (mutable) data field to determine uniqueness is not safe.s + +### Positive + +* NFT identifiers available on Cosmos Hub. +* Ability to build different NFT modules for the Cosmos Hub, e.g., ERC-721. +* NFT module which supports interoperability with IBC and other cross-chain infrastructures like Gravity Bridge + +### Negative + +* New IBC app is required for x/nft +* CW721 adapter is required + +### Neutral + +* Other functions need more modules. For example, a custody module is needed for NFT trading function, a collectible module is needed for defining NFT properties. + +## Further Discussions + +For other kinds of applications on the Hub, more app-specific modules can be developed in the future: + +* `x/nft/custody`: custody of NFTs to support trading functionality. +* `x/nft/marketplace`: selling and buying NFTs using sdk.Coins. +* `x/fractional`: a module to split an ownership of an asset (NFT or other assets) for multiple stakeholder. `x/group` should work for most of the cases. + +Other networks in the Cosmos ecosystem could design and implement their own NFT modules for specific NFT applications and use cases. + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/discussions/9065 +* x/nft: initialize module: https://github.com/cosmos/cosmos-sdk/pull/9174 +* [ADR 033](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-033-protobuf-inter-module-comm.md) diff --git a/docs/integrate/architecture/adr-044-protobuf-updates-guidelines.md b/docs/integrate/architecture/adr-044-protobuf-updates-guidelines.md new file mode 100644 index 000000000..245adcffe --- /dev/null +++ b/docs/integrate/architecture/adr-044-protobuf-updates-guidelines.md @@ -0,0 +1,129 @@ +# ADR 044: Guidelines for Updating Protobuf Definitions + +## Changelog + +* 28.06.2021: Initial Draft +* 02.12.2021: Add `Since:` comment for new fields +* 21.07.2022: Remove the rule of no new `Msg` in the same proto version. + +## Status + +Draft + +## Abstract + +This ADR provides guidelines and recommended practices when updating Protobuf definitions. These guidelines are targeting module developers. + +## Context + +The Cosmos SDK maintains a set of [Protobuf definitions](https://github.com/cosmos/cosmos-sdk/tree/main/proto/cosmos). It is important to correctly design Protobuf definitions to avoid any breaking changes within the same version. The reasons are to not break tooling (including indexers and explorers), wallets and other third-party integrations. + +When making changes to these Protobuf definitions, the Cosmos SDK currently only follows [Buf's](https://docs.buf.build/) recommendations. We noticed however that Buf's recommendations might still result in breaking changes in the SDK in some cases. For example: + +* Adding fields to `Msg`s. Adding fields is a not a Protobuf spec-breaking operation. However, when adding new fields to `Msg`s, the unknown field rejection will throw an error when sending the new `Msg` to an older node. +* Marking fields as `reserved`. Protobuf proposes the `reserved` keyword for removing fields without the need to bump the package version. However, by doing so, client backwards compatibility is broken as Protobuf doesn't generate anything for `reserved` fields. See [#9446](https://github.com/cosmos/cosmos-sdk/issues/9446) for more details on this issue. + +Moreover, module developers often face other questions around Protobuf definitions such as "Can I rename a field?" or "Can I deprecate a field?" This ADR aims to answer all these questions by providing clear guidelines about allowed updates for Protobuf definitions. + +## Decision + +We decide to keep [Buf's](https://docs.buf.build/) recommendations with the following exceptions: + +* `UNARY_RPC`: the Cosmos SDK currently does not support streaming RPCs. +* `COMMENT_FIELD`: the Cosmos SDK allows fields with no comments. +* `SERVICE_SUFFIX`: we use the `Query` and `Msg` service naming convention, which doesn't use the `-Service` suffix. +* `PACKAGE_VERSION_SUFFIX`: some packages, such as `cosmos.crypto.ed25519`, don't use a version suffix. +* `RPC_REQUEST_STANDARD_NAME`: Requests for the `Msg` service don't have the `-Request` suffix to keep backwards compatibility. + +On top of Buf's recommendations we add the following guidelines that are specific to the Cosmos SDK. + +### Updating Protobuf Definition Without Bumping Version + +#### 1. Module developers MAY add new Protobuf definitions + +Module developers MAY add new `message`s, new `Service`s, new `rpc` endpoints, and new fields to existing messages. This recommendation follows the Protobuf specification, but is added in this document for clarity, as the SDK requires one additional change. + +The SDK requires the Protobuf comment of the new addition to contain one line with the following format: + +```protobuf +// Since: cosmos-sdk {, ...} +``` + +Where each `version` denotes a minor ("0.45") or patch ("0.44.5") version from which the field is available. This will greatly help client libraries, who can optionally use reflection or custom code generation to show/hide these fields depending on the targetted node version. + +As examples, the following comments are valid: + +```protobuf +// Since: cosmos-sdk 0.44 + +// Since: cosmos-sdk 0.42.11, 0.44.5 +``` + +and the following ones are NOT valid: + +```protobuf +// Since cosmos-sdk v0.44 + +// since: cosmos-sdk 0.44 + +// Since: cosmos-sdk 0.42.11 0.44.5 + +// Since: Cosmos SDK 0.42.11, 0.44.5 +``` + +#### 2. Fields MAY be marked as `deprecated`, and nodes MAY implement a protocol-breaking change for handling these fields + +Protobuf supports the [`deprecated` field option](https://developers.google.com/protocol-buffers/docs/proto#options), and this option MAY be used on any field, including `Msg` fields. If a node handles a Protobuf message with a non-empty deprecated field, the node MAY change its behavior upon processing it, even in a protocol-breaking way. When possible, the node MUST handle backwards compatibility without breaking the consensus (unless we increment the proto version). + +As an example, the Cosmos SDK v0.42 to v0.43 update contained two Protobuf-breaking changes, listed below. Instead of bumping the package versions from `v1beta1` to `v1`, the SDK team decided to follow this guideline, by reverting the breaking changes, marking those changes as deprecated, and modifying the node implementation when processing messages with deprecated fields. More specifically: + +* The Cosmos SDK recently removed support for [time-based software upgrades](https://github.com/cosmos/cosmos-sdk/pull/8849). As such, the `time` field has been marked as deprecated in `cosmos.upgrade.v1beta1.Plan`. Moreover, the node will reject any proposal containing an upgrade Plan whose `time` field is non-empty. +* The Cosmos SDK now supports [governance split votes](adr-037-gov-split-vote.md). When querying for votes, the returned `cosmos.gov.v1beta1.Vote` message has its `option` field (used for 1 vote option) deprecated in favor of its `options` field (allowing multiple vote options). Whenever possible, the SDK still populates the deprecated `option` field, that is, if and only if the `len(options) == 1` and `options[0].Weight == 1.0`. + +#### 3. Fields MUST NOT be renamed + +Whereas the official Protobuf recommendations do not prohibit renaming fields, as it does not break the Protobuf binary representation, the SDK explicitly forbids renaming fields in Protobuf structs. The main reason for this choice is to avoid introducing breaking changes for clients, which often rely on hard-coded fields from generated types. Moreover, renaming fields will lead to client-breaking JSON representations of Protobuf definitions, used in REST endpoints and in the CLI. + +### Incrementing Protobuf Package Version + +TODO, needs architecture review. Some topics: + +* Bumping versions frequency +* When bumping versions, should the Cosmos SDK support both versions? + * i.e. v1beta1 -> v1, should we have two folders in the Cosmos SDK, and handlers for both versions? +* mention ADR-023 Protobuf naming + +## Consequences + +> This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ADR must explain how the author proposes to deal with these incompatibilities. ADR submissions without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +* less pain to tool developers +* more compatibility in the ecosystem +* ... + +### Negative + +{negative consequences} + +### Neutral + +* more rigor in Protobuf review + +## Further Discussions + +This ADR is still in the DRAFT stage, and the "Incrementing Protobuf Package Version" will be filled in once we make a decision on how to correctly do it. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +* [#9445](https://github.com/cosmos/cosmos-sdk/issues/9445) Release proto definitions v1 +* [#9446](https://github.com/cosmos/cosmos-sdk/issues/9446) Address v1beta1 proto breaking changes diff --git a/docs/integrate/architecture/adr-045-check-delivertx-middlewares.md b/docs/integrate/architecture/adr-045-check-delivertx-middlewares.md new file mode 100644 index 000000000..756fa5a2d --- /dev/null +++ b/docs/integrate/architecture/adr-045-check-delivertx-middlewares.md @@ -0,0 +1,312 @@ +# ADR 045: BaseApp `{Check,Deliver}Tx` as Middlewares + +## Changelog + +* 20.08.2021: Initial draft. +* 07.12.2021: Update `tx.Handler` interface ([\#10693](https://github.com/cosmos/cosmos-sdk/pull/10693)). +* 17.05.2022: ADR is abandoned, as middlewares are deemed too hard to reason about. + +## Status + +ABANDONED. Replacement is being discussed in [#11955](https://github.com/cosmos/cosmos-sdk/issues/11955). + +## Abstract + +This ADR replaces the current BaseApp `runTx` and antehandlers design with a middleware-based design. + +## Context + +BaseApp's implementation of ABCI `{Check,Deliver}Tx()` and its own `Simulate()` method call the `runTx` method under the hood, which first runs antehandlers, then executes `Msg`s. However, the [transaction Tips](https://github.com/cosmos/cosmos-sdk/issues/9406) and [refunding unused gas](https://github.com/cosmos/cosmos-sdk/issues/2150) use cases require custom logic to be run after the `Msg`s execution. There is currently no way to achieve this. + +An naive solution would be to add post-`Msg` hooks to BaseApp. However, the Cosmos SDK team thinks in parallel about the bigger picture of making app wiring simpler ([#9181](https://github.com/cosmos/cosmos-sdk/discussions/9182)), which includes making BaseApp more lightweight and modular. + +## Decision + +We decide to transform Baseapp's implementation of ABCI `{Check,Deliver}Tx` and its own `Simulate` methods to use a middleware-based design. + +The two following interfaces are the base of the middleware design, and are defined in `types/tx`: + +```go +type Handler interface { + CheckTx(ctx context.Context, req Request, checkReq RequestCheckTx) (Response, ResponseCheckTx, error) + DeliverTx(ctx context.Context, req Request) (Response, error) + SimulateTx(ctx context.Context, req Request (Response, error) +} + +type Middleware func(Handler) Handler +``` + +where we define the following arguments and return types: + +```go +type Request struct { + Tx sdk.Tx + TxBytes []byte +} + +type Response struct { + GasWanted uint64 + GasUsed uint64 + // MsgResponses is an array containing each Msg service handler's response + // type, packed in an Any. This will get proto-serialized into the `Data` field + // in the ABCI Check/DeliverTx responses. + MsgResponses []*codectypes.Any + Log string + Events []abci.Event +} + +type RequestCheckTx struct { + Type abci.CheckTxType +} + +type ResponseCheckTx struct { + Priority int64 +} +``` + +Please note that because CheckTx handles separate logic related to mempool priotization, its signature is different than DeliverTx and SimulateTx. + +BaseApp holds a reference to a `tx.Handler`: + +```go +type BaseApp struct { + // other fields + txHandler tx.Handler +} +``` + +Baseapp's ABCI `{Check,Deliver}Tx()` and `Simulate()` methods simply call `app.txHandler.{Check,Deliver,Simulate}Tx()` with the relevant arguments. For example, for `DeliverTx`: + +```go +func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { + var abciRes abci.ResponseDeliverTx + ctx := app.getContextForTx(runTxModeDeliver, req.Tx) + res, err := app.txHandler.DeliverTx(ctx, tx.Request{TxBytes: req.Tx}) + if err != nil { + abciRes = sdkerrors.ResponseDeliverTx(err, uint64(res.GasUsed), uint64(res.GasWanted), app.trace) + return abciRes + } + + abciRes, err = convertTxResponseToDeliverTx(res) + if err != nil { + return sdkerrors.ResponseDeliverTx(err, uint64(res.GasUsed), uint64(res.GasWanted), app.trace) + } + + return abciRes +} + +// convertTxResponseToDeliverTx converts a tx.Response into a abci.ResponseDeliverTx. +func convertTxResponseToDeliverTx(txRes tx.Response) (abci.ResponseDeliverTx, error) { + data, err := makeABCIData(txRes) + if err != nil { + return abci.ResponseDeliverTx{}, nil + } + + return abci.ResponseDeliverTx{ + Data: data, + Log: txRes.Log, + Events: txRes.Events, + }, nil +} + +// makeABCIData generates the Data field to be sent to ABCI Check/DeliverTx. +func makeABCIData(txRes tx.Response) ([]byte, error) { + return proto.Marshal(&sdk.TxMsgData{MsgResponses: txRes.MsgResponses}) +} +``` + +The implementations are similar for `BaseApp.CheckTx` and `BaseApp.Simulate`. + +`baseapp.txHandler`'s three methods' implementations can obviously be monolithic functions, but for modularity we propose a middleware composition design, where a middleware is simply a function that takes a `tx.Handler`, and returns another `tx.Handler` wrapped around the previous one. + +### Implementing a Middleware + +In practice, middlewares are created by Go function that takes as arguments some parameters needed for the middleware, and returns a `tx.Middleware`. + +For example, for creating an arbitrary `MyMiddleware`, we can implement: + +```go +// myTxHandler is the tx.Handler of this middleware. Note that it holds a +// reference to the next tx.Handler in the stack. +type myTxHandler struct { + // next is the next tx.Handler in the middleware stack. + next tx.Handler + // some other fields that are relevant to the middleware can be added here +} + +// NewMyMiddleware returns a middleware that does this and that. +func NewMyMiddleware(arg1, arg2) tx.Middleware { + return func (txh tx.Handler) tx.Handler { + return myTxHandler{ + next: txh, + // optionally, set arg1, arg2... if they are needed in the middleware + } + } +} + +// Assert myTxHandler is a tx.Handler. +var _ tx.Handler = myTxHandler{} + +func (h myTxHandler) CheckTx(ctx context.Context, req Request, checkReq RequestcheckTx) (Response, ResponseCheckTx, error) { + // CheckTx specific pre-processing logic + + // run the next middleware + res, checkRes, err := txh.next.CheckTx(ctx, req, checkReq) + + // CheckTx specific post-processing logic + + return res, checkRes, err +} + +func (h myTxHandler) DeliverTx(ctx context.Context, req Request) (Response, error) { + // DeliverTx specific pre-processing logic + + // run the next middleware + res, err := txh.next.DeliverTx(ctx, tx, req) + + // DeliverTx specific post-processing logic + + return res, err +} + +func (h myTxHandler) SimulateTx(ctx context.Context, req Request) (Response, error) { + // SimulateTx specific pre-processing logic + + // run the next middleware + res, err := txh.next.SimulateTx(ctx, tx, req) + + // SimulateTx specific post-processing logic + + return res, err +} +``` + +### Composing Middlewares + +While BaseApp simply holds a reference to a `tx.Handler`, this `tx.Handler` itself is defined using a middleware stack. The Cosmos SDK exposes a base (i.e. innermost) `tx.Handler` called `RunMsgsTxHandler`, which executes messages. + +Then, the app developer can compose multiple middlewares on top on the base `tx.Handler`. Each middleware can run pre-and-post-processing logic around its next middleware, as described in the section above. Conceptually, as an example, given the middlewares `A`, `B`, and `C` and the base `tx.Handler` `H` the stack looks like: + +```text +A.pre + B.pre + C.pre + H # The base tx.handler, for example `RunMsgsTxHandler` + C.post + B.post +A.post +``` + +We define a `ComposeMiddlewares` function for composing middlewares. It takes the base handler as first argument, and middlewares in the "outer to inner" order. For the above stack, the final `tx.Handler` is: + +```go +txHandler := middleware.ComposeMiddlewares(H, A, B, C) +``` + +The middleware is set in BaseApp via its `SetTxHandler` setter: + +```go +// simapp/app.go + +txHandler := middleware.ComposeMiddlewares(...) +app.SetTxHandler(txHandler) +``` + +The app developer can define their own middlewares, or use the Cosmos SDK's pre-defined middlewares from `middleware.NewDefaultTxHandler()`. + +### Middlewares Maintained by the Cosmos SDK + +While the app developer can define and compose the middlewares of their choice, the Cosmos SDK provides a set of middlewares that caters for the ecosystem's most common use cases. These middlewares are: + +| Middleware | Description | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RunMsgsTxHandler | This is the base `tx.Handler`. It replaces the old baseapp's `runMsgs`, and executes a transaction's `Msg`s. | +| TxDecoderMiddleware | This middleware takes in transaction raw bytes, and decodes them into a `sdk.Tx`. It replaces the `baseapp.txDecoder` field, so that BaseApp stays as thin as possible. Since most middlewares read the contents of the `sdk.Tx`, the TxDecoderMiddleware should be run first in the middleware stack. | +| {Antehandlers} | Each antehandler is converted to its own middleware. These middlewares perform signature verification, fee deductions and other validations on the incoming transaction. | +| IndexEventsTxMiddleware | This is a simple middleware that chooses which events to index in Tendermint. Replaces `baseapp.indexEvents` (which unfortunately still exists in baseapp too, because it's used to index Begin/EndBlock events) | +| RecoveryTxMiddleware | This index recovers from panics. It replaces baseapp.runTx's panic recovery described in [ADR-022](adr-022-custom-panic-handling.md). | +| GasTxMiddleware | This replaces the [`Setup`](https://github.com/cosmos/cosmos-sdk/blob/v0.43.0/x/auth/ante/setup.go) Antehandler. It sets a GasMeter on sdk.Context. Note that before, GasMeter was set on sdk.Context inside the antehandlers, and there was some mess around the fact that antehandlers had their own panic recovery system so that the GasMeter could be read by baseapp's recovery system. Now, this mess is all removed: one middleware sets GasMeter, another one handles recovery. | + +### Similarities and Differences between Antehandlers and Middlewares + +The middleware-based design builds upon the existing antehandlers design described in [ADR-010](adr-010-modular-antehandler.md). Even though the final decision of ADR-010 was to go with the "Simple Decorators" approach, the middleware design is actually very similar to the other [Decorator Pattern](adr-010-modular-antehandler.md#decorator-pattern) proposal, also used in [weave](https://github.com/iov-one/weave). + +#### Similarities with Antehandlers + +* Designed as chaining/composing small modular pieces. +* Allow code reuse for `{Check,Deliver}Tx` and for `Simulate`. +* Set up in `app.go`, and easily customizable by app developers. +* Order is important. + +#### Differences with Antehandlers + +* The Antehandlers are run before `Msg` execution, whereas middlewares can run before and after. +* The middleware approach uses separate methods for `{Check,Deliver,Simulate}Tx`, whereas the antehandlers pass a `simulate bool` flag and uses the `sdkCtx.Is{Check,Recheck}Tx()` flags to determine in which transaction mode we are. +* The middleware design lets each middleware hold a reference to the next middleware, whereas the antehandlers pass a `next` argument in the `AnteHandle` method. +* The middleware design use Go's standard `context.Context`, whereas the antehandlers use `sdk.Context`. + +## Consequences + +### Backwards Compatibility + +Since this refactor removes some logic away from BaseApp and into middlewares, it introduces API-breaking changes for app developers. Most notably, instead of creating an antehandler chain in `app.go`, app developers need to create a middleware stack: + +```diff +- anteHandler, err := ante.NewAnteHandler( +- ante.HandlerOptions{ +- AccountKeeper: app.AccountKeeper, +- BankKeeper: app.BankKeeper, +- SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), +- FeegrantKeeper: app.FeeGrantKeeper, +- SigGasConsumer: ante.DefaultSigVerificationGasConsumer, +- }, +-) ++txHandler, err := authmiddleware.NewDefaultTxHandler(authmiddleware.TxHandlerOptions{ ++ Debug: app.Trace(), ++ IndexEvents: indexEvents, ++ LegacyRouter: app.legacyRouter, ++ MsgServiceRouter: app.msgSvcRouter, ++ LegacyAnteHandler: anteHandler, ++ TxDecoder: encodingConfig.TxConfig.TxDecoder, ++}) +if err != nil { + panic(err) +} +- app.SetAnteHandler(anteHandler) ++ app.SetTxHandler(txHandler) +``` + +Other more minor API breaking changes will also be provided in the CHANGELOG. As usual, the Cosmos SDK will provide a release migration document for app developers. + +This ADR does not introduce any state-machine-, client- or CLI-breaking changes. + +### Positive + +* Allow custom logic to be run before an after `Msg` execution. This enables the [tips](https://github.com/cosmos/cosmos-sdk/issues/9406) and [gas refund](https://github.com/cosmos/cosmos-sdk/issues/2150) uses cases, and possibly other ones. +* Make BaseApp more lightweight, and defer complex logic to small modular components. +* Separate paths for `{Check,Deliver,Simulate}Tx` with different returns types. This allows for improved readability (replace `if sdkCtx.IsRecheckTx() && !simulate {...}` with separate methods) and more flexibility (e.g. returning a `priority` in `ResponseCheckTx`). + +### Negative + +* It is hard to understand at first glance the state updates that would occur after a middleware runs given the `sdk.Context` and `tx`. A middleware can have an arbitrary number of nested middleware being called within its function body, each possibly doing some pre- and post-processing before calling the next middleware on the chain. Thus to understand what a middleware is doing, one must also understand what every other middleware further along the chain is also doing, and the order of middlewares matters. This can get quite complicated to understand. +* API-breaking changes for app developers. + +### Neutral + +No neutral consequences. + +## Further Discussions + +* [#9934](https://github.com/cosmos/cosmos-sdk/discussions/9934) Decomposing BaseApp's other ABCI methods into middlewares. +* Replace `sdk.Tx` interface with the concrete protobuf Tx type in the `tx.Handler` methods signature. + +## Test Cases + +We update the existing baseapp and antehandlers tests to use the new middleware API, but keep the same test cases and logic, to avoid introducing regressions. Existing CLI tests will also be left untouched. + +For new middlewares, we introduce unit tests. Since middlewares are purposefully small, unit tests suit well. + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/issues/9585 +* Implementation: [#9920 BaseApp refactor](https://github.com/cosmos/cosmos-sdk/pull/9920) and [#10028 Antehandlers migration](https://github.com/cosmos/cosmos-sdk/pull/10028) diff --git a/docs/integrate/architecture/adr-046-module-params.md b/docs/integrate/architecture/adr-046-module-params.md new file mode 100644 index 000000000..369cd043d --- /dev/null +++ b/docs/integrate/architecture/adr-046-module-params.md @@ -0,0 +1,184 @@ +# ADR 046: Module Params + +## Changelog + +* Sep 22, 2021: Initial Draft + +## Status + +Proposed + +## Abstract + +This ADR describes an alternative approach to how Cosmos SDK modules use, interact, +and store their respective parameters. + +## Context + +Currently, in the Cosmos SDK, modules that require the use of parameters use the +`x/params` module. The `x/params` works by having modules define parameters, +typically via a simple `Params` structure, and registering that structure in +the `x/params` module via a unique `Subspace` that belongs to the respective +registering module. The registering module then has unique access to its respective +`Subspace`. Through this `Subspace`, the module can get and set its `Params` +structure. + +In addition, the Cosmos SDK's `x/gov` module has direct support for changing +parameters on-chain via a `ParamChangeProposal` governance proposal type, where +stakeholders can vote on suggested parameter changes. + +There are various tradeoffs to using the `x/params` module to manage individual +module parameters. Namely, managing parameters essentially comes for "free" in +that developers only need to define the `Params` struct, the `Subspace`, and the +various auxiliary functions, e.g. `ParamSetPairs`, on the `Params` type. However, +there are some notable drawbacks. These drawbacks include the fact that parameters +are serialized in state via JSON which is extremely slow. In addition, parameter +changes via `ParamChangeProposal` governance proposals have no way of reading from +or writing to state. In other words, it is currently not possible to have any +state transitions in the application during an attempt to change param(s). + +## Decision + +We will build off of the alignment of `x/gov` and `x/authz` work per +[#9810](https://github.com/cosmos/cosmos-sdk/pull/9810). Namely, module developers +will create one or more unique parameter data structures that must be serialized +to state. The Param data structures must implement `sdk.Msg` interface with respective +Protobuf Msg service method which will validate and update the parameters with all +necessary changes. The `x/gov` module via the work done in +[#9810](https://github.com/cosmos/cosmos-sdk/pull/9810), will dispatch Param +messages, which will be handled by Protobuf Msg services. + +Note, it is up to developers to decide how to structure their parameters and +the respective `sdk.Msg` messages. Consider the parameters currently defined in +`x/auth` using the `x/params` module for parameter management: + +```protobuf +message Params { + uint64 max_memo_characters = 1; + uint64 tx_sig_limit = 2; + uint64 tx_size_cost_per_byte = 3; + uint64 sig_verify_cost_ed25519 = 4; + uint64 sig_verify_cost_secp256k1 = 5; +} +``` + +Developers can choose to either create a unique data structure for every field in +`Params` or they can create a single `Params` structure as outlined above in the +case of `x/auth`. + +In the former, `x/params`, approach, a `sdk.Msg` would need to be created for every single +field along with a handler. This can become burdensome if there are a lot of +parameter fields. In the latter case, there is only a single data structure and +thus only a single message handler, however, the message handler might have to be +more sophisticated in that it might need to understand what parameters are being +changed vs what parameters are untouched. + +Params change proposals are made using the `x/gov` module. Execution is done through +`x/authz` authorization to the root `x/gov` module's account. + +Continuing to use `x/auth`, we demonstrate a more complete example: + +```go +type Params struct { + MaxMemoCharacters uint64 + TxSigLimit uint64 + TxSizeCostPerByte uint64 + SigVerifyCostED25519 uint64 + SigVerifyCostSecp256k1 uint64 +} + +type MsgUpdateParams struct { + MaxMemoCharacters uint64 + TxSigLimit uint64 + TxSizeCostPerByte uint64 + SigVerifyCostED25519 uint64 + SigVerifyCostSecp256k1 uint64 +} + +type MsgUpdateParamsResponse struct {} + +func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // verification logic... + + // persist params + params := ParamsFromMsg(msg) + ms.SaveParams(ctx, params) + + return &types.MsgUpdateParamsResponse{}, nil +} + +func ParamsFromMsg(msg *types.MsgUpdateParams) Params { + // ... +} +``` + +A gRPC `Service` query should also be provided, for example: + +```protobuf +service Query { + // ... + + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos//v1beta1/params"; + } +} + +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false]; +} +``` + +## Consequences + +As a result of implementing the module parameter methodology, we gain the ability +for module parameter changes to be stateful and extensible to fit nearly every +application's use case. We will be able to emit events (and trigger hooks registered +to that events using the work proposed in [event hooks](https://github.com/cosmos/cosmos-sdk/discussions/9656)), +call other Msg service methods or perform migration. +In addition, there will be significant gains in performance when it comes to reading +and writing parameters from and to state, especially if a specific set of parameters +are read on a consistent basis. + +However, this methodology will require developers to implement more types and +Msg service metohds which can become burdensome if many parameters exist. In addition, +developers are required to implement persistance logics of module parameters. +However, this should be trivial. + +### Backwards Compatibility + +The new method for working with module parameters is naturally not backwards +compatible with the existing `x/params` module. However, the `x/params` will +remain in the Cosmos SDK and will be marked as deprecated with no additional +functionality being added apart from potential bug fixes. Note, the `x/params` +module may be removed entirely in a future release. + +### Positive + +* Module parameters are serialized more efficiently +* Modules are able to react on parameters changes and perform additional actions. +* Special events can be emitted, allowing hooks to be triggered. + +### Negative + +* Module parameters becomes slightly more burdensome for module developers: + * Modules are now responsible for persisting and retrieving parameter state + * Modules are now required to have unique message handlers to handle parameter + changes per unique parameter data structure. + +### Neutral + +* Requires [#9810](https://github.com/cosmos/cosmos-sdk/pull/9810) to be reviewed + and merged. + + + +## References + +* https://github.com/cosmos/cosmos-sdk/pull/9810 +* https://github.com/cosmos/cosmos-sdk/issues/9438 +* https://github.com/cosmos/cosmos-sdk/discussions/9913 diff --git a/docs/integrate/architecture/adr-047-extend-upgrade-plan.md b/docs/integrate/architecture/adr-047-extend-upgrade-plan.md new file mode 100644 index 000000000..3a4f3aac4 --- /dev/null +++ b/docs/integrate/architecture/adr-047-extend-upgrade-plan.md @@ -0,0 +1,250 @@ +# ADR 047: Extend Upgrade Plan + +## Changelog + +* Nov, 23, 2021: Initial Draft + +## Status + +PROPOSED Not Implemented + +## Abstract + +This ADR expands the existing x/upgrade `Plan` proto message to include new fields for defining pre-run and post-run processes within upgrade tooling. +It also defines a structure for providing downloadable artifacts involved in an upgrade. + +## Context + +The `upgrade` module in conjunction with Cosmovisor are designed to facilitate and automate a blockchain's transition from one version to another. + +Users submit a software upgrade governance proposal containing an upgrade `Plan`. +The [Plan](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/proto/cosmos/upgrade/v1beta1/upgrade.proto#L12) currently contains the following fields: +* `name`: A short string identifying the new version. +* `height`: The chain height at which the upgrade is to be performed. +* `info`: A string containing information about the upgrade. + +The `info` string can be anything. +However, Cosmovisor will try to use the `info` field to automatically download a new version of the blockchain executable. +For the auto-download to work, Cosmovisor expects it to be either a stringified JSON object (with a specific structure defined through documentation), or a URL that will return such JSON. +The JSON object identifies URLs used to download the new blockchain executable for different platforms (OS and Architecture, e.g. "linux/amd64"). +Such a URL can either return the executable file directly or can return an archive containing the executable and possibly other assets. + +If the URL returns an archive, it is decompressed into `{DAEMON_HOME}/cosmovisor/{upgrade name}`. +Then, if `{DAEMON_HOME}/cosmovisor/{upgrade name}/bin/{DAEMON_NAME}` does not exist, but `{DAEMON_HOME}/cosmovisor/{upgrade name}/{DAEMON_NAME}` does, the latter is copied to the former. +If the URL returns something other than an archive, it is downloaded to `{DAEMON_HOME}/cosmovisor/{upgrade name}/bin/{DAEMON_NAME}`. + +If an upgrade height is reached and the new version of the executable version isn't available, Cosmovisor will stop running. + +Both `DAEMON_HOME` and `DAEMON_NAME` are [environment variables used to configure Cosmovisor](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.0.0/cosmovisor/README.md#command-line-arguments-and-environment-variables). + +Currently, there is no mechanism that makes Cosmovisor run a command after the upgraded chain has been restarted. + +The current upgrade process has this timeline: + +1. An upgrade governance proposal is submitted and approved. +1. The upgrade height is reached. +1. The `x/upgrade` module writes the `upgrade_info.json` file. +1. The chain halts. +1. Cosmovisor backs up the data directory (if set up to do so). +1. Cosmovisor downloads the new executable (if not already in place). +1. Cosmovisor executes the `${DAEMON_NAME} pre-upgrade`. +1. Cosmovisor restarts the app using the new version and same args originally provided. + +## Decision + +### Protobuf Updates + +We will update the `x/upgrade.Plan` message for providing upgrade instructions. +The upgrade instructions will contain a list of artifacts available for each platform. +It allows for the definition of a pre-run and post-run commands. +These commands are not consensus guaranteed; they will be executed by Cosmosvisor (or other) during its upgrade handling. + +```protobuf +message Plan { + // ... (existing fields) + + UpgradeInstructions instructions = 6; +} +``` + +The new `UpgradeInstructions instructions` field MUST be optional. + +```protobuf +message UpgradeInstructions { + string pre_run = 1; + string post_run = 2; + repeated Artifact artifacts = 3; + string description = 4; +} +``` + +All fields in the `UpgradeInstructions` are optional. +* `pre_run` is a command to run prior to the upgraded chain restarting. + If defined, it will be executed after halting and downloading the new artifact but before restarting the upgraded chain. + The working directory this command runs from MUST be `{DAEMON_HOME}/cosmovisor/{upgrade name}`. + This command MUST behave the same as the current [pre-upgrade](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/docs/migrations/pre-upgrade.md) command. + It does not take in any command-line arguments and is expected to terminate with the following exit codes: + + | Exit status code | How it is handled in Cosmosvisor | + |------------------|---------------------------------------------------------------------------------------------------------------------| + | `0` | Assumes `pre-upgrade` command executed successfully and continues the upgrade. | + | `1` | Default exit code when `pre-upgrade` command has not been implemented. | + | `30` | `pre-upgrade` command was executed but failed. This fails the entire upgrade. | + | `31` | `pre-upgrade` command was executed but failed. But the command is retried until exit code `1` or `30` are returned. | + If defined, then the app supervisors (e.g. Cosmovisor) MUST NOT run `app pre-run`. +* `post_run` is a command to run after the upgraded chain has been started. If defined, this command MUST be only executed at most once by an upgrading node. + The output and exit code SHOULD be logged but SHOULD NOT affect the running of the upgraded chain. + The working directory this command runs from MUST be `{DAEMON_HOME}/cosmovisor/{upgrade name}`. +* `artifacts` define items to be downloaded. + It SHOULD have only one entry per platform. +* `description` contains human-readable information about the upgrade and might contain references to external resources. + It SHOULD NOT be used for structured processing information. + +```protobuf +message Artifact { + string platform = 1; + string url = 2; + string checksum = 3; + string checksum_algo = 4; +} +``` + +* `platform` is a required string that SHOULD be in the format `{OS}/{CPU}`, e.g. `"linux/amd64"`. + The string `"any"` SHOULD also be allowed. + An `Artifact` with a `platform` of `"any"` SHOULD be used as a fallback when a specific `{OS}/{CPU}` entry is not found. + That is, if an `Artifact` exists with a `platform` that matches the system's OS and CPU, that should be used; + otherwise, if an `Artifact` exists with a `platform` of `any`, that should be used; + otherwise no artifact should be downloaded. +* `url` is a required URL string that MUST conform to [RFC 1738: Uniform Resource Locators](https://www.ietf.org/rfc/rfc1738.txt). + A request to this `url` MUST return either an executable file or an archive containing either `bin/{DAEMON_NAME}` or `{DAEMON_NAME}`. + The URL should not contain checksum - it should be specified by the `checksum` attribute. +* `checksum` is a checksum of the expected result of a request to the `url`. + It is not required, but is recommended. + If provided, it MUST be a hex encoded checksum string. + Tools utilizing these `UpgradeInstructions` MUST fail if a `checksum` is provided but is different from the checksum of the result returned by the `url`. +* `checksum_algo` is a string identify the algorithm used to generate the `checksum`. + Recommended algorithms: `sha256`, `sha512`. + Algorithms also supported (but not recommended): `sha1`, `md5`. + If a `checksum` is provided, a `checksum_algo` MUST also be provided. + +A `url` is not required to contain a `checksum` query parameter. +If the `url` does contain a `checksum` query parameter, the `checksum` and `checksum_algo` fields MUST also be populated, and their values MUST match the value of the query parameter. +For example, if the `url` is `"https://example.com?checksum=md5:d41d8cd98f00b204e9800998ecf8427e"`, then the `checksum` field must be `"d41d8cd98f00b204e9800998ecf8427e"` and the `checksum_algo` field must be `"md5"`. + +### Upgrade Module Updates + +If an upgrade `Plan` does not use the new `UpgradeInstructions` field, existing functionality will be maintained. +The parsing of the `info` field as either a URL or `binaries` JSON will be deprecated. +During validation, if the `info` field is used as such, a warning will be issued, but not an error. + +We will update the creation of the `upgrade-info.json` file to include the `UpgradeInstructions`. + +We will update the optional validation available via CLI to account for the new `Plan` structure. +We will add the following validation: + +1. If `UpgradeInstructions` are provided: + 1. There MUST be at least one entry in `artifacts`. + 1. All of the `artifacts` MUST have a unique `platform`. + 1. For each `Artifact`, if the `url` contains a `checksum` query parameter: + 1. The `checksum` query parameter value MUST be in the format of `{checksum_algo}:{checksum}`. + 1. The `{checksum}` from the query parameter MUST equal the `checksum` provided in the `Artifact`. + 1. The `{checksum_algo}` from the query parameter MUST equal the `checksum_algo` provided in the `Artifact`. +1. The following validation is currently done using the `info` field. We will apply similar validation to the `UpgradeInstructions`. + For each `Artifact`: + 1. The `platform` MUST have the format `{OS}/{CPU}` or be `"any"`. + 1. The `url` field MUST NOT be empty. + 1. The `url` field MUST be a proper URL. + 1. A `checksum` MUST be provided either in the `checksum` field or as a query parameter in the `url`. + 1. If the `checksum` field has a value and the `url` also has a `checksum` query parameter, the two values MUST be equal. + 1. The `url` MUST return either a file or an archive containing either `bin/{DAEMON_NAME}` or `{DAEMON_NAME}`. + 1. If a `checksum` is provided (in the field or as a query param), the checksum of the result of the `url` MUST equal the provided checksum. + +Downloading of an `Artifact` will happen the same way that URLs from `info` are currently downloaded. + +### Cosmovisor Updates + +If the `upgrade-info.json` file does not contain any `UpgradeInstructions`, existing functionality will be maintained. + +We will update Cosmovisor to look for and handle the new `UpgradeInstructions` in `upgrade-info.json`. +If the `UpgradeInstructions` are provided, we will do the following: + +1. The `info` field will be ignored. +1. The `artifacts` field will be used to identify the artifact to download based on the `platform` that Cosmovisor is running in. +1. If a `checksum` is provided (either in the field or as a query param in the `url`), and the downloaded artifact has a different checksum, the upgrade process will be interrupted and Cosmovisor will exit with an error. +1. If a `pre_run` command is defined, it will be executed at the same point in the process where the `app pre-upgrade` command would have been executed. + It will be executed using the same environment as other commands run by Cosmovisor. +1. If a `post_run` command is defined, it will be executed after executing the command that restarts the chain. + It will be executed in a background process using the same environment as the other commands. + Any output generated by the command will be logged. + Once complete, the exit code will be logged. + +We will deprecate the use of the `info` field for anything other than human readable information. +A warning will be logged if the `info` field is used to define the assets (either by URL or JSON). + +The new upgrade timeline is very similar to the current one. Changes are in bold: + +1. An upgrade governance proposal is submitted and approved. +1. The upgrade height is reached. +1. The `x/upgrade` module writes the `upgrade_info.json` file **(now possibly with `UpgradeInstructions`)**. +1. The chain halts. +1. Cosmovisor backs up the data directory (if set up to do so). +1. Cosmovisor downloads the new executable (if not already in place). +1. Cosmovisor executes **the `pre_run` command if provided**, or else the `${DAEMON_NAME} pre-upgrade` command. +1. Cosmovisor restarts the app using the new version and same args originally provided. +1. **Cosmovisor immediately runs the `post_run` command in a detached process.** + +## Consequences + +### Backwards Compatibility + +Since the only change to existing definitions is the addition of the `instructions` field to the `Plan` message, and that field is optional, there are no backwards incompatibilities with respects to the proto messages. +Additionally, current behavior will be maintained when no `UpgradeInstructions` are provided, so there are no backwards incompatibilities with respects to either the upgrade module or Cosmovisor. + +### Forwards Compatibility + +In order to utilize the `UpgradeInstructions` as part of a software upgrade, both of the following must be true: + +1. The chain must already be using a sufficiently advanced version of the Cosmos SDK. +1. The chain's nodes must be using a sufficiently advanced version of Cosmovisor. + +### Positive + +1. The structure for defining artifacts is clearer since it is now defined in the proto instead of in documentation. +1. Availability of a pre-run command becomes more obvious. +1. A post-run command becomes possible. + +### Negative + +1. The `Plan` message becomes larger. This is negligible because A) the `x/upgrades` module only stores at most one upgrade plan, and B) upgrades are rare enough that the increased gas cost isn't a concern. +1. There is no option for providing a URL that will return the `UpgradeInstructions`. +1. The only way to provide multiple assets (executables and other files) for a platform is to use an archive as the platform's artifact. + +### Neutral + +1. Existing functionality of the `info` field is maintained when the `UpgradeInstructions` aren't provided. + +## Further Discussions + +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r698708349): + Consider different names for `UpgradeInstructions instructions` (either the message type or field name). +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r754655072): + 1. Consider putting the `string platform` field inside `UpgradeInstructions` and make `UpgradeInstructions` a repeated field in `Plan`. + 1. Consider using a `oneof` field in the `Plan` which could either be `UpgradeInstructions` or else a URL that should return the `UpgradeInstructions`. + 1. Consider allowing `info` to either be a JSON serialized version of `UpgradeInstructions` or else a URL that returns that. +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r755462876): + Consider not including the `UpgradeInstructions.description` field, using the `info` field for that purpose instead. +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r754643691): + Consider allowing multiple artifacts to be downloaded for any given `platform` by adding a `name` field to the `Artifact` message. +1. [PR #10502 Comment](https://github.com/cosmos/cosmos-sdk/pull/10602#discussion_r781438288) + Allow the new `UpgradeInstructions` to be provided via URL. +1. [PR #10502 Comment](https://github.com/cosmos/cosmos-sdk/pull/10602#discussion_r781438288) + Allow definition of a `signer` for assets (as an alternative to using a `checksum`). + +## References + +* [Current upgrade.proto](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/proto/cosmos/upgrade/v1beta1/upgrade.proto) +* [Upgrade Module README](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/x/upgrade/spec/README.md) +* [Cosmovisor README](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.0.0/cosmovisor/README.md) +* [Pre-upgrade README](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/docs/migrations/pre-upgrade.md) +* [Draft/POC PR #10032](https://github.com/cosmos/cosmos-sdk/pull/10032) +* [RFC 1738: Uniform Resource Locators](https://www.ietf.org/rfc/rfc1738.txt) diff --git a/docs/integrate/architecture/adr-048-consensus-fees.md b/docs/integrate/architecture/adr-048-consensus-fees.md new file mode 100644 index 000000000..f1c6065cd --- /dev/null +++ b/docs/integrate/architecture/adr-048-consensus-fees.md @@ -0,0 +1,204 @@ +# ADR 048: Multi Tire Gas Price System + +## Changelog + +* Dec 1, 2021: Initial Draft + +## Status + +Rejected + +## Abstract + +This ADR describes a flexible mechanism to maintain a consensus level gas prices, in which one can choose a multi-tier gas price system or EIP-1559 like one through configuration. + +## Context + +Currently, each validator configures it's own `minimal-gas-prices` in `app.yaml`. But setting a proper minimal gas price is critical to protect network from dos attack, and it's hard for all the validators to pick a sensible value, so we propose to maintain a gas price in consensus level. + +Since tendermint 0.34.20 has supported mempool prioritization, we can take advantage of that to implement more sophisticated gas fee system. + +## Multi-Tier Price System + +We propose a multi-tier price system on consensus to provide maximum flexibility: + +* Tier 1: a constant gas price, which could only be modified occasionally through governance proposal. +* Tier 2: a dynamic gas price which is adjusted according to previous block load. +* Tier 3: a dynamic gas price which is adjusted according to previous block load at a higher speed. + +The gas price of higher tier should bigger than the lower tier. + +The transaction fees are charged with the exact gas price calculated on consensus. + +The parameter schema is like this: + +```protobuf +message TierParams { + uint32 priority = 1 // priority in tendermint mempool + Coin initial_gas_price = 2 // + uint32 parent_gas_target = 3 // the target saturation of block + uint32 change_denominator = 4 // decides the change speed + Coin min_gas_price = 5 // optional lower bound of the price adjustment + Coin max_gas_price = 6 // optional upper bound of the price adjustment +} + +message Params { + repeated TierParams tiers = 1; +} +``` + +### Extension Options + +We need to allow user to specify the tier of service for the transaction, to support it in an extensible way, we add an extension option in `AuthInfo`: + +```protobuf +message ExtensionOptionsTieredTx { + uint32 fee_tier = 1 +} +``` + +The value of `fee_tier` is just the index to the `tiers` parameter list. + +We also change the semantic of existing `fee` field of `Tx`, instead of charging user the exact `fee` amount, we treat it as a fee cap, while the actual amount of fee charged is decided dynamically. If the `fee` is smaller than dynamic one, the transaction won't be included in current block and ideally should stay in the mempool until the consensus gas price drop. The mempool can eventually prune old transactions. + +### Tx Prioritization + +Transactions are prioritized based on the tier, the higher the tier, the higher the priority. + +Within the same tier, follow the default Tendermint order (currently FIFO). Be aware of that the mempool tx ordering logic is not part of consensus and can be modified by malicious validator. + +This mechanism can be easily composed with prioritization mechanisms: + +* we can add extra tiers out of a user control: + * Example 1: user can set tier 0, 10 or 20, but the protocol will create tiers 0, 1, 2 ... 29. For example IBC transactions will go to tier `user_tier + 5`: if user selected tier 1, then the transaction will go to tier 15. + * Example 2: we can reserve tier 4, 5, ... only for special transaction types. For example, tier 5 is reserved for evidence tx. So if submits a bank.Send transaction and set tier 5, it will be delegated to tier 3 (the max tier level available for any transaction). + * Example 3: we can enforce that all transactions of a sepecific type will go to specific tier. For example, tier 100 will be reserved for evidence transactions and all evidence transactions will always go to that tier. + +### `min-gas-prices` + +Deprecate the current per-validator `min-gas-prices` configuration, since it would confusing for it to work together with the consensus gas price. + +### Adjust For Block Load + +For tier 2 and tier 3 transactions, the gas price is adjusted according to previous block load, the logic could be similar to EIP-1559: + +```python +def adjust_gas_price(gas_price, parent_gas_used, tier): + if parent_gas_used == tier.parent_gas_target: + return gas_price + elif parent_gas_used > tier.parent_gas_target: + gas_used_delta = parent_gas_used - tier.parent_gas_target + gas_price_delta = max(gas_price * gas_used_delta // tier.parent_gas_target // tier.change_speed, 1) + return gas_price + gas_price_delta + else: + gas_used_delta = parent_gas_target - parent_gas_used + gas_price_delta = gas_price * gas_used_delta // parent_gas_target // tier.change_speed + return gas_price - gas_price_delta +``` + +### Block Segment Reservation + +Ideally we should reserve block segments for each tier, so the lower tiered transactions won't be completely squeezed out by higher tier transactions, which will force user to use higher tier, and the system degraded to a single tier. + +We need help from tendermint to implement this. + +## Implementation + +We can make each tier's gas price strategy fully configurable in protocol parameters, while providing a sensible default one. + +Pseudocode in python-like syntax: + +```python +interface TieredTx: + def tier(self) -> int: + pass + +def tx_tier(tx): + if isinstance(tx, TieredTx): + return tx.tier() + else: + # default tier for custom transactions + return 0 + # NOTE: we can add more rules here per "Tx Prioritization" section + +class TierParams: + 'gas price strategy parameters of one tier' + priority: int # priority in tendermint mempool + initial_gas_price: Coin + parent_gas_target: int + change_speed: Decimal # 0 means don't adjust for block load. + +class Params: + 'protocol parameters' + tiers: List[TierParams] + +class State: + 'consensus state' + # total gas used in last block, None when it's the first block + parent_gas_used: Optional[int] + # gas prices of last block for all tiers + gas_prices: List[Coin] + +def begin_block(): + 'Adjust gas prices' + for i, tier in enumerate(Params.tiers): + if State.parent_gas_used is None: + # initialized gas price for the first block + State.gas_prices[i] = tier.initial_gas_price + else: + # adjust gas price according to gas used in previous block + State.gas_prices[i] = adjust_gas_price(State.gas_prices[i], State.parent_gas_used, tier) + +def mempoolFeeTxHandler_checkTx(ctx, tx): + # the minimal-gas-price configured by validator, zero in deliver_tx context + validator_price = ctx.MinGasPrice() + consensus_price = State.gas_prices[tx_tier(tx)] + min_price = max(validator_price, consensus_price) + + # zero means infinity for gas price cap + if tx.gas_price() > 0 and tx.gas_price() < min_price: + return 'insufficient fees' + return next_CheckTx(ctx, tx) + +def txPriorityHandler_checkTx(ctx, tx): + res, err := next_CheckTx(ctx, tx) + # pass priority to tendermint + res.Priority = Params.tiers[tx_tier(tx)].priority + return res, err + +def end_block(): + 'Update block gas used' + State.parent_gas_used = block_gas_meter.consumed() +``` + +### Dos attack protection + +To fully saturate the blocks and prevent other transactions from executing, attacker need to use transactions of highest tier, the cost would be significantly higher than the default tier. + +If attacker spam with lower tier transactions, user can mitigate by sending higher tier transactions. + +## Consequences + +### Backwards Compatibility + +* New protocol parameters. +* New consensus states. +* New/changed fields in transaction body. + +### Positive + +* The default tier keeps the same predictable gas price experience for client. +* The higher tier's gas price can adapt to block load. +* No priority conflict with custom priority based on transaction types, since this proposal only occupy three priority levels. +* Possibility to compose different priority rules with tiers + +### Negative + +* Wallets & tools need to update to support the new `tier` parameter, and semantic of `fee` field is changed. + +### Neutral + +## References + +* https://eips.ethereum.org/EIPS/eip-1559 +* https://iohk.io/en/blog/posts/2021/11/26/network-traffic-and-tiered-pricing/ diff --git a/docs/integrate/architecture/adr-049-state-sync-hooks.md b/docs/integrate/architecture/adr-049-state-sync-hooks.md new file mode 100644 index 000000000..c7353aa3b --- /dev/null +++ b/docs/integrate/architecture/adr-049-state-sync-hooks.md @@ -0,0 +1,174 @@ +# ADR 049: State Sync Hooks + +## Changelog + +* Jan 19, 2022: Initial Draft +* Apr 29, 2022: Safer extension snapshotter interface + +## Status + +Implemented + +## Abstract + +This ADR outlines a hooks-based mechanism for application modules to provide additional state (outside of the IAVL tree) to be used +during state sync. + +## Context + +New clients use state-sync to download snapshots of module state from peers. Currently, the snapshot consists of a +stream of `SnapshotStoreItem` and `SnapshotIAVLItem`, which means that application modules that define their state outside of the IAVL +tree cannot include their state as part of the state-sync process. + +Note, Even though the module state data is outside of the tree, for determinism we require that the hash of the external data should +be posted in the IAVL tree. + +## Decision + +A simple proposal based on our existing implementation is that, we can add two new message types: `SnapshotExtensionMeta` +and `SnapshotExtensionPayload`, and they are appended to the existing multi-store stream with `SnapshotExtensionMeta` +acting as a delimiter between extensions. As the chunk hashes should be able to ensure data integrity, we don't need +a delimiter to mark the end of the snapshot stream. + +Besides, we provide `Snapshotter` and `ExtensionSnapshotter` interface for modules to implement snapshotters, which will handle both taking +snapshot and the restoration. Each module could have mutiple snapshotters, and for modules with additional state, they should +implement `ExtensionSnapshotter` as extension snapshotters. When setting up the application, the snapshot `Manager` should call +`RegisterExtensions([]ExtensionSnapshotter…)` to register all the extension snapshotters. + +```protobuf +// SnapshotItem is an item contained in a rootmulti.Store snapshot. +// On top of the exsiting SnapshotStoreItem and SnapshotIAVLItem, we add two new options for the item. +message SnapshotItem { + // item is the specific type of snapshot item. + oneof item { + SnapshotStoreItem store = 1; + SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; + SnapshotExtensionMeta extension = 3; + SnapshotExtensionPayload extension_payload = 4; + } +} + +// SnapshotExtensionMeta contains metadata about an external snapshotter. +// One module may need multiple snapshotters, so each module may have multiple SnapshotExtensionMeta. +message SnapshotExtensionMeta { + // the name of the ExtensionSnapshotter, and it is registered to snapshotter manager when setting up the application + // name should be unique for each ExtensionSnapshotter as we need to alphabetically order their snapshots to get + // deterministic snapshot stream. + string name = 1; + // this is used by each ExtensionSnapshotter to decide the format of payloads included in SnapshotExtensionPayload message + // it is used within the snapshotter/namespace, not global one for all modules + uint32 format = 2; +} + +// SnapshotExtensionPayload contains payloads of an external snapshotter. +message SnapshotExtensionPayload { + bytes payload = 1; +} +``` + +When we create a snapshot stream, the `multistore` snapshot is always placed at the beginning of the binary stream, and other extension snapshots are alphabetically ordered by the name of the corresponding `ExtensionSnapshotter`. + +The snapshot stream would look like as follows: + +```go +// multi-store snapshot +{SnapshotStoreItem | SnapshotIAVLItem, ...} +// extension1 snapshot +SnapshotExtensionMeta +{SnapshotExtensionPayload, ...} +// extension2 snapshot +SnapshotExtensionMeta +{SnapshotExtensionPayload, ...} +``` + +We add an `extensions` field to snapshot `Manager` for extension snapshotters. The `multistore` snapshotter is a special one and it doesn't need a name because it is always placed at the beginning of the binary stream. + +```go +type Manager struct { + store *Store + multistore types.Snapshotter + extensions map[string]types.ExtensionSnapshotter + mtx sync.Mutex + operation operation + chRestore chan<- io.ReadCloser + chRestoreDone <-chan restoreDone + restoreChunkHashes [][]byte + restoreChunkIndex uint32 +} +``` + +For extension snapshotters that implement the `ExtensionSnapshotter` interface, their names should be registered to the snapshot `Manager` by +calling `RegisterExtensions` when setting up the application. The snapshotters will handle both taking snapshot and restoration. + +```go +// RegisterExtensions register extension snapshotters to manager +func (m *Manager) RegisterExtensions(extensions ...types.ExtensionSnapshotter) error +``` + +On top of the existing `Snapshotter` interface for the `multistore`, we add `ExtensionSnapshotter` interface for the extension snapshotters. Three more function signatures: `SnapshotFormat()`, `SupportedFormats()` and `SnapshotName()` are added to `ExtensionSnapshotter`. + +```go +// ExtensionPayloadReader read extension payloads, +// it returns io.EOF when reached either end of stream or the extension boundaries. +type ExtensionPayloadReader = func() ([]byte, error) + +// ExtensionPayloadWriter is a helper to write extension payloads to underlying stream. +type ExtensionPayloadWriter = func([]byte) error + +// ExtensionSnapshotter is an extension Snapshotter that is appended to the snapshot stream. +// ExtensionSnapshotter has an unique name and manages it's own internal formats. +type ExtensionSnapshotter interface { + // SnapshotName returns the name of snapshotter, it should be unique in the manager. + SnapshotName() string + + // SnapshotFormat returns the default format used to take a snapshot. + SnapshotFormat() uint32 + + // SupportedFormats returns a list of formats it can restore from. + SupportedFormats() []uint32 + + // SnapshotExtension writes extension payloads into the underlying protobuf stream. + SnapshotExtension(height uint64, payloadWriter ExtensionPayloadWriter) error + + // RestoreExtension restores an extension state snapshot, + // the payload reader returns `io.EOF` when reached the extension boundaries. + RestoreExtension(height uint64, format uint32, payloadReader ExtensionPayloadReader) error + +} +``` + +## Consequences + +As a result of this implementation, we are able to create snapshots of binary chunk stream for the state that we maintain outside of the IAVL Tree, CosmWasm blobs for example. And new clients are able to fetch sanpshots of state for all modules that have implemented the corresponding interface from peer nodes. + + +### Backwards Compatibility + +This ADR introduces new proto message types, add an `extensions` field in snapshot `Manager`, and add new `ExtensionSnapshotter` interface, so this is not backwards compatible if we have extensions. + +But for applications that does not have the state data outside of the IAVL tree for any module, the snapshot stream is backwards-compatible. + +### Positive + +* State maintained outside of IAVL tree like CosmWasm blobs can create snapshots by implementing extension snapshotters, and being fetched by new clients via state-sync. + +### Negative + +### Neutral + +* All modules that maintain state outside of IAVL tree need to implement `ExtensionSnapshotter` and the snapshot `Manager` need to call `RegisterExtensions` when setting up the application. + +## Further Discussions + +While an ADR is in the DRAFT or PROPOSED stage, this section should contain a summary of issues to be solved in future iterations (usually referencing comments from a pull-request discussion). +Later, this section can optionally list ideas or improvements the author or reviewers found during the analysis of this ADR. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +* https://github.com/cosmos/cosmos-sdk/pull/10961 +* https://github.com/cosmos/cosmos-sdk/issues/7340 +* https://hackmd.io/gJoyev6DSmqqkO667WQlGw diff --git a/docs/integrate/architecture/adr-050-sign-mode-textual-annex1.md b/docs/integrate/architecture/adr-050-sign-mode-textual-annex1.md new file mode 100644 index 000000000..13deec921 --- /dev/null +++ b/docs/integrate/architecture/adr-050-sign-mode-textual-annex1.md @@ -0,0 +1,358 @@ +# ADR 050: SIGN_MODE_TEXTUAL: Annex 1 Value Renderers + +## Changelog + +* Dec 06, 2021: Initial Draft +* Feb 07, 2022: Draft read and concept-ACKed by the Ledger team. +* Dec 01, 2022: Remove `Object: ` prefix on Any header screen. +* Dec 13, 2022: Sign over bytes hash when bytes length > 32. +* Mar 27, 2023: Update `Any` value renderer to omit message header screen. + +## Status + +Accepted. Implementation started. Small value renderers details still need to be polished. + +## Abstract + +This Annex describes value renderers, which are used for displaying Protobuf values in a human-friendly way using a string array. + +## Value Renderers + +Value Renderers describe how values of different Protobuf types should be encoded as a string array. Value renderers can be formalized as a set of bijective functions `func renderT(value T) []string`, where `T` is one of the below Protobuf types for which this spec is defined. + +### Protobuf `number` + +* Applies to: + * protobuf numeric integer types (`int{32,64}`, `uint{32,64}`, `sint{32,64}`, `fixed{32,64}`, `sfixed{32,64}`) + * strings whose `customtype` is `github.com/cosmos/cosmos-sdk/types.Int` or `github.com/cosmos/cosmos-sdk/types.Dec` + * bytes whose `customtype` is `github.com/cosmos/cosmos-sdk/types.Int` or `github.com/cosmos/cosmos-sdk/types.Dec` +* Trailing decimal zeroes are always removed +* Formatting with `'`s for every three integral digits. +* Usage of `.` to denote the decimal delimiter. + +#### Examples + +* `1000` (uint64) -> `1'000` +* `"1000000.00"` (string representing a Dec) -> `1'000'000` +* `"1000000.10"` (string representing a Dec) -> `1'000'000.1` + +### `coin` + +* Applies to `cosmos.base.v1beta1.Coin`. +* Denoms are converted to `display` denoms using `Metadata` (if available). **This requires a state query**. The definition of `Metadata` can be found in the [bank protobuf definition](https://buf.build/cosmos/cosmos-sdk/docs/main:cosmos.bank.v1beta1#cosmos.bank.v1beta1.Metadata). If the `display` field is empty or nil, then we do not perform any denom conversion. +* Amounts are converted to `display` denom amounts and rendered as `number`s above + * We do not change the capitalization of the denom. In practice, `display` denoms are stored in lowercase in state (e.g. `10 atom`), however they are often showed in UPPERCASE in everyday life (e.g. `10 ATOM`). Value renderers keep the case used in state, but we may recommend chains changing the denom metadata to be uppercase for better user display. +* One space between the denom and amount (e.g. `10 atom`). +* In the future, IBC denoms could maybe be converted to DID/IIDs, if we can find a robust way for doing this (ex. `cosmos:cosmos:hub:bank:denom:atom`) + +#### Examples + +* `1000000000uatom` -> `["1'000 atom"]`, because atom is the metadata's display denom. + +### `coins` + +* an array of `coin` is display as the concatenation of each `coin` encoded as the specification above, the joined together with the delimiter `", "` (a comma and a space, no quotes around). +* the list of coins is ordered by unicode code point of the display denom: `A-Z` < `a-z`. For example, the string `aAbBcC` would be sorted `ABCabc`. + * if the coins list had 0 items in it then it'll be rendered as `zero` + +### Example + +* `["3cosm", "2000000uatom"]` -> `2 atom, 3 COSM` (assuming the display denoms are `atom` and `COSM`) +* `["10atom", "20Acoin"]` -> `20 Acoin, 10 atom` (assuming the display denoms are `atom` and `Acoin`) +* `[]` -> `zero` + +### `repeated` + +* Applies to all `repeated` fields, except `cosmos.tx.v1beta1.TxBody#Messages`, which has a particular encoding (see [ADR-050](adr-050-sign-mode-textual.md)). +* A repeated type has the following template: + +``` +: + (/): + + (/): + +End of . +``` + +where: + +* `field_name` is the Protobuf field name of the repeated field +* `field_kind`: + * if the type of the repeated field is a message, `field_kind` is the message name + * if the type of the repeated field is an enum, `field_kind` is the enum name + * in any other case, `field_kind` is the protobuf primitive type (e.g. "string" or "bytes") +* `int` is the length of the array +* `index` is one based index of the repeated field + +#### Examples + +Given the proto definition: + +```protobuf +message AllowedMsgAllowance { + repeated string allowed_messages = 1; +} +``` + +and initializing with: + +```go +x := []AllowedMsgAllowance{"cosmos.bank.v1beta1.MsgSend", "cosmos.gov.v1.MsgVote"} +``` + +we have the following value-rendered encoding: + +``` +Allowed messages: 2 strings +Allowed messages (1/2): cosmos.bank.v1beta1.MsgSend +Allowed messages (2/2): cosmos.gov.v1.MsgVote +End of Allowed messages +``` + +### `message` + +* Applies to all Protobuf messages that do not have a custom encoding. +* Field names follow [sentence case](https://en.wiktionary.org/wiki/sentence_case) + * replace each `_` with a space + * capitalize first letter of the sentence +* Field names are ordered by their Protobuf field number +* Screen title is the field name, and screen content is the value. +* Nesting: + * if a field contains a nested message, we value-render the underlying message using the template: + + ``` + : <1st line of value-rendered message> + > // Notice the `>` prefix. + ``` + + * `>` character is used to denote nesting. For each additional level of nesting, add `>`. + +#### Examples + +Given the following Protobuf messages: + +```protobuf +enum VoteOption { + VOTE_OPTION_UNSPECIFIED = 0; + VOTE_OPTION_YES = 1; + VOTE_OPTION_ABSTAIN = 2; + VOTE_OPTION_NO = 3; + VOTE_OPTION_NO_WITH_VETO = 4; +} + +message WeightedVoteOption { + VoteOption option = 1; + string weight = 2 [(cosmos_proto.scalar) = "cosmos.Dec"]; +} + +message Vote { + uint64 proposal_id = 1; + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + reserved 3; + repeated WeightedVoteOption options = 4; +} +``` + +we get the following encoding for the `Vote` message: + +``` +Vote object +> Proposal id: 4 +> Voter: cosmos1abc...def +> Options: 2 WeightedVoteOptions +> Options (1/2): WeightedVoteOption object +>> Option: VOTE_OPTION_YES +>> Weight: 0.7 +> Options (2/2): WeightedVoteOption object +>> Option: VOTE_OPTION_NO +>> Weight: 0.3 +> End of Options +``` + +### Enums + +* Show the enum variant name as string. + +#### Examples + +See example above with `message Vote{}`. + +### `google.protobuf.Any` + +* Applies to `google.protobuf.Any` +* Rendered as: + +``` + +> +``` + +There is however one exception: when the underlying message is a Protobuf message that does not have a custom encoding, then the message header screen is omitted, and one level of indentation is removed. + +Messages that have a custom encoding, including `google.protobuf.Timestamp`, `google.protobuf.Duration`, `google.protobuf.Any`, `cosmos.base.v1beta1.Coin`, and messages that have an app-defined custom encoding, will preserve their header and indentation level. + +#### Examples + +Message header screen is stripped, one-level of indentation removed: +``` +/cosmos.gov.v1.Vote +> Proposal id: 4 +> Vote: cosmos1abc...def +> Options: 2 WeightedVoteOptions +> Options (1/2): WeightedVoteOption object +>> Option: Yes +>> Weight: 0.7 +> Options (2/2): WeightedVoteOption object +>> Option: No +>> Weight: 0.3 +> End of Options +``` + +Message with custom encoding: +``` +/cosmos.base.v1beta1.Coin +> 10uatom +``` + +### `google.protobuf.Timestamp` + +Rendered using [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) (a +simplification of ISO 8601), which is the current recommendation for portable +time values. The rendering always uses "Z" (UTC) as the timezone. It uses only +the necessary fractional digits of a second, omitting the fractional part +entirely if the timestamp has no fractional seconds. (The resulting timestamps +are not automatically sortable by standard lexicographic order, but we favor +the legibility of the shorter string.) + +#### Examples + +The timestamp with 1136214245 seconds and 700000000 nanoseconds is rendered +as `2006-01-02T15:04:05.7Z`. +The timestamp with 1136214245 seconds and zero nanoseconds is rendered +as `2006-01-02T15:04:05Z`. + +### `google.protobuf.Duration` + +The duration proto expresses a raw number of seconds and nanoseconds. +This will be rendered as longer time units of days, hours, and minutes, +plus any remaining seconds, in that order. +Leading and trailing zero-quantity units will be omitted, but all +units in between nonzero units will be shown, e.g. ` 3 days, 0 hours, 0 minutes, 5 seconds`. + +Even longer time units such as months or years are imprecise. +Weeks are precise, but not commonly used - `91 days` is more immediately +legible than `13 weeks`. Although `days` can be problematic, +e.g. noon to noon on subsequent days can be 23 or 25 hours depending on +daylight savings transitions, there is significant advantage in using +strict 24-hour days over using only hours (e.g. `91 days` vs `2184 hours`). + +When nanoseconds are nonzero, they will be shown as fractional seconds, +with only the minimum number of digits, e.g `0.5 seconds`. + +A duration of exactly zero is shown as `0 seconds`. + +Units will be given as singular (no trailing `s`) when the quantity is exactly one, +and will be shown in plural otherwise. + +Negative durations will be indicated with a leading minus sign (`-`). + +Examples: + +* `1 day` +* `30 days` +* `-1 day, 12 hours` +* `3 hours, 0 minutes, 53.025 seconds` + +### bytes + +* Bytes of length shorter or equal to 35 are rendered in hexadecimal, all capital letters, without the `0x` prefix. +* Bytes of length greater than 35 are hashed using SHA256. The rendered text is `SHA-256=`, followed by the 32-byte hash, in hexadecimal, all capital letters, without the `0x` prefix. +* The hexadecimal string is finally separated into groups of 4 digits, with a space `' '` as separator. If the bytes length is odd, the 2 remaining hexadecimal characters are at the end. + +The number 35 was chosen because it is the longest length where the hashed-and-prefixed representation is longer than the original data directly formatted, using the 3 rules above. More specifically: +- a 35-byte array will have 70 hex characters, plus 17 space characters, resulting in 87 characters. +- byte arrays starting from length 36 will be be hashed to 32 bytes, which is 64 hex characters plus 15 spaces, and with the `SHA-256=` prefix, it takes 87 characters. +Also, secp256k1 public keys have length 33, so their Textual representation is not their hashed value, which we would like to avoid. + +Note: Data longer than 35 bytes are not rendered in a way that can be inverted. See ADR-050's [section about invertability](adr-050-sign-mode-textual.md#invertible-rendering) for a discussion. + +#### Examples + +Inputs are displayed as byte arrays. + +* `[0]`: `00` +* `[0,1,2]`: `0001 02` +* `[0,1,2,..,34]`: `0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F 2021 22` +* `[0,1,2,..,35]`: `SHA-256=5D7E 2D9B 1DCB C85E 7C89 0036 A2CF 2F9F E7B6 6554 F2DF 08CE C6AA 9C0A 25C9 9C21` + +### address bytes + +We currently use `string` types in protobuf for addresses so this may not be needed, but if any address bytes are used in sign mode textual they should be rendered with bech32 formatting + +### strings + +Strings are rendered as-is. + +### Default Values + +* Default Protobuf values for each field are skipped. + +#### Example + +```protobuf +message TestData { + string signer = 1; + string metadata = 2; +} +``` + +```go +myTestData := TestData{ + Signer: "cosmos1abc" +} +``` + +We get the following encoding for the `TestData` message: + +``` +TestData object +> Signer: cosmos1abc +``` + +### bool + +Boolean values are rendered as `True` or `False`. + +### [ABANDONED] Custom `msg_title` instead of Msg `type_url` + +_This paragraph is in the Annex for informational purposes only, and will be removed in a next update of the ADR._ + +
+ Click to see abandoned idea. + +* all protobuf messages to be used with `SIGN_MODE_TEXTUAL` CAN have a short title associated with them that can be used in format strings whenever the type URL is explicitly referenced via the `cosmos.msg.v1.textual.msg_title` Protobuf message option. +* if this option is not specified for a Msg, then the Protobuf fully qualified name will be used. + +```protobuf +message MsgSend { + option (cosmos.msg.v1.textual.msg_title) = "bank send coins"; +} +``` + +* they MUST be unique per message, per chain + +#### Examples + +* `cosmos.gov.v1.MsgVote` -> `governance v1 vote` + +#### Best Pratices + +We recommend to use this option only for `Msg`s whose Protobuf fully qualified name can be hard to understand. As such, the two examples above (`MsgSend` and `MsgVote`) are not good examples to be used with `msg_title`. We still allow `msg_title` for chains who might have `Msg`s with complex or non-obvious names. + +In those cases, we recommend to drop the version (e.g. `v1`) in the string if there's only one version of the module on chain. This way, the bijective mapping can figure out which message each string corresponds to. If multiple Protobuf versions of the same module exist on the same chain, we recommend keeping the first `msg_title` with version, and the second `msg_title` with version (e.g. `v2`): + +* `mychain.mymodule.v1.MsgDo` -> `mymodule do something` +* `mychain.mymodule.v2.MsgDo` -> `mymodule v2 do something` + +
diff --git a/docs/integrate/architecture/adr-050-sign-mode-textual-annex2.md b/docs/integrate/architecture/adr-050-sign-mode-textual-annex2.md new file mode 100644 index 000000000..9bd0f3f47 --- /dev/null +++ b/docs/integrate/architecture/adr-050-sign-mode-textual-annex2.md @@ -0,0 +1,122 @@ +# ADR 050: SIGN_MODE_TEXTUAL: Annex 2 XXX + +## Changelog + +* Oct 3, 2022: Initial Draft + +## Status + +DRAFT + +## Abstract + +This annex provides normative guidance on how devices should render a +`SIGN_MODE_TEXTUAL` document. + +## Context + +`SIGN_MODE_TEXTUAL` allows a legible version of a transaction to be signed +on a hardware security device, such as a Ledger. Early versions of the +design rendered transactions directly to lines of ASCII text, but this +proved awkward from its in-band signaling, and for the need to display +Unicode text within the transaction. + +## Decision + +`SIGN_MODE_TEXTUAL` renders to an abstract representation, leaving it +up to device-specific software how to present this representation given the +capabilities, limitations, and conventions of the deivce. + +We offer the following normative guidance: + +1. The presentation should be as legible as possible to the user, given +the capabilities of the device. If legibility could be sacrificed for other +properties, we would recommend just using some other signing mode. +Legibility should focus on the common case - it is okay for unusual cases +to be less legible. + +2. The presentation should be invertible if possible without substantial +sacrifice of legibility. Any change to the rendered data should result +in a visible change to the presentation. This extends the integrity of the +signing to user-visible presentation. + +3. The presentation should follow normal conventions of the device, +without sacrificing legibility or invertibility. + +As an illustration of these principles, here is an example algorithm +for presentation on a device which can display a single 80-character +line of printable ASCII characters: + +* The presentation is broken into lines, and each line is presented in +sequence, with user controls for going forward or backward a line. + +* Expert mode screens are only presented if the device is in expert mode. + +* Each line of the screen starts with a number of `>` characters equal +to the screen's indentation level, followed by a `+` character if this +isn't the first line of the screen, followed by a space if either a +`>` or a `+` has been emitted, +or if this header is followed by a `>`, `+`, or space. + +* If the line ends with whitespace or an `@` character, an additional `@` +character is appended to the line. + +* The following ASCII control characters or backslash (`\`) are converted +to a backslash followed by a letter code, in the manner of string literals +in many languages: + + * a: U+0007 alert or bell + * b: U+0008 backspace + * f: U+000C form feed + * n: U+000A line feed + * r: U+000D carriage return + * t: U+0009 horizontal tab + * v: U+000B vertical tab + * `\`: U+005C backslash + +* All other ASCII control characters, plus non-ASCII Unicode code points, +are shown as either: + + * `\u` followed by 4 uppercase hex chacters for code points + in the basic multilingual plane (BMP). + + * `\U` followed by 8 uppercase hex characters for other code points. + +* The screen will be broken into multiple lines to fit the 80-character +limit, considering the above transformations in a way that attempts to +minimize the number of lines generated. Expanded control or Unicode characters +are never split across lines. + +Example output: + +``` +An introductory line. +key1: 123456 +key2: a string that ends in whitespace @ +key3: a string that ends in a single ampersand - @@ + >tricky key4<: note the leading space in the presentation +introducing an aggregate +> key5: false +> key6: a very long line of text, please co\u00F6perate and break into +>+ multiple lines. +> Can we do further nesting? +>> You bet we can! +``` + +The inverse mapping gives us the only input which could have +generated this output (JSON notation for string data): + +``` +Indent Text +------ ---- +0 "An introductory line." +0 "key1: 123456" +0 "key2: a string that ends in whitespace " +0 "key3: a string that ends in a single ampersand - @" +0 ">tricky key4<: note the leading space in the presentation" +0 "introducing an aggregate" +1 "key5: false" +1 "key6: a very long line of text, please coöperate and break into multiple lines." +1 "Can we do further nesting?" +2 "You bet we can!" +``` diff --git a/docs/integrate/architecture/adr-050-sign-mode-textual.md b/docs/integrate/architecture/adr-050-sign-mode-textual.md new file mode 100644 index 000000000..efa4ace48 --- /dev/null +++ b/docs/integrate/architecture/adr-050-sign-mode-textual.md @@ -0,0 +1,369 @@ +# ADR 050: SIGN_MODE_TEXTUAL + +## Changelog + +* Dec 06, 2021: Initial Draft. +* Feb 07, 2022: Draft read and concept-ACKed by the Ledger team. +* May 16, 2022: Change status to Accepted. +* Aug 11, 2022: Require signing over tx raw bytes. +* Sep 07, 2022: Add custom `Msg`-renderers. +* Sep 18, 2022: Structured format instead of lines of text +* Nov 23, 2022: Specify CBOR encoding. +* Dec 01, 2022: Link to examples in separate JSON file. +* Dec 06, 2022: Re-ordering of envelope screens. +* Dec 14, 2022: Mention exceptions for invertability. +* Jan 23, 2023: Switch Screen.Text to Title+Content. +* Mar 07, 2023: Change SignDoc from array to struct containing array. +* Mar 20, 2023: Introduce a spec version initialized to 0. + +## Status + +Accepted. Implementation started. Small value renderers details still need to be polished. + +Spec version: 0. + +## Abstract + +This ADR specifies SIGN_MODE_TEXTUAL, a new string-based sign mode that is targetted at signing with hardware devices. + +## Context + +Protobuf-based SIGN_MODE_DIRECT was introduced in [ADR-020](adr-020-protobuf-transaction-encoding.md) and is intended to replace SIGN_MODE_LEGACY_AMINO_JSON in most situations, such as mobile wallets and CLI keyrings. However, the [Ledger](https://www.ledger.com/) hardware wallet is still using SIGN_MODE_LEGACY_AMINO_JSON for displaying the sign bytes to the user. Hardware wallets cannot transition to SIGN_MODE_DIRECT as: + +* SIGN_MODE_DIRECT is binary-based and thus not suitable for display to end-users. Technically, hardware wallets could simply display the sign bytes to the user. But this would be considered as blind signing, and is a security concern. +* hardware cannot decode the protobuf sign bytes due to memory constraints, as the Protobuf definitions would need to be embedded on the hardware device. + +In an effort to remove Amino from the SDK, a new sign mode needs to be created for hardware devices. [Initial discussions](https://github.com/cosmos/cosmos-sdk/issues/6513) propose a text-based sign mode, which this ADR formally specifies. + +## Decision + +In SIGN_MODE_TEXTUAL, a transaction is rendered into a textual representation, +which is then sent to a secure device or subsystem for the user to review and sign. +Unlike `SIGN_MODE_DIRECT`, the transmitted data can be simply decoded into legible text +even on devices with limited processing and display. + +The textual representation is a sequence of _screens_. +Each screen is meant to be displayed in its entirety (if possible) even on a small device like a Ledger. +A screen is roughly equivalent to a short line of text. +Large screens can be displayed in several pieces, +much as long lines of text are wrapped, +so no hard guidance is given, though 40 characters is a good target. +A screen is used to display a single key/value pair for scalar values +(or composite values with a compact notation, such as `Coins`) +or to introduce or conclude a larger grouping. + +The text can contain the full range of Unicode code points, including control characters and nul. +The device is responsible for deciding how to display characters it cannot render natively. +See [annex 2](adr-050-sign-mode-textual-annex2.md) for guidance. + +Screens have a non-negative indentation level to signal composite or nested structures. +Indentation level zero is the top level. +Indentation is displayed via some device-specific mechanism. +Message quotation notation is an appropriate model, such as +leading `>` characters or vertical bars on more capable displays. + +Some screens are marked as _expert_ screens, +meant to be displayed only if the viewer chooses to opt in for the extra detail. +Expert screens are meant for information that is rarely useful, +or needs to be present only for signature integrity (see below). + +### Invertible Rendering + +We require that the rendering of the transaction be invertible: +there must be a parsing function such that for every transaction, +when rendered to the textual representation, +parsing that representation yeilds a proto message equivalent +to the original under proto equality. + +Note that this inverse function does not need to perform correct +parsing or error signaling for the whole domain of textual data. +Merely that the range of valid transactions be invertible under +the composition of rendering and parsing. + +Note that the existence of an inverse function ensures that the +rendered text contains the full information of the original transaction, +not a hash or subset. + +We make an exception for invertibility for data which are too large to +meaningfully display, such as byte strings longer than 32 bytes. We may then +selectively render them with a cryptographically-strong hash. In these cases, +it is still computationally infeasible to find a different transaction which +has the same rendering. However, we must ensure that the hash computation is +simple enough to be reliably executed independently, so at least the hash is +itself reasonably verifiable when the raw byte string is not. + +### Chain State + +The rendering function (and parsing function) may depend on the current chain state. +This is useful for reading parameters, such as coin display metadata, +or for reading user-specific preferences such as language or address aliases. +Note that if the observed state changes between signature generation +and the transaction's inclusion in a block, the delivery-time rendering +might differ. If so, the signature will be invalid and the transaction +will be rejected. + +### Signature and Security + +For security, transaction signatures should have three properties: + +1. Given the transaction, signatures, and chain state, it must be possible to validate that the signatures matches the transaction, +to verify that the signers must have known their respective secret keys. + +2. It must be computationally infeasible to find a substantially different transaction for which the given signatures are valid, given the same chain state. + +3. The user should be able to give informed consent to the signed data via a simple, secure device with limited display capabilities. + +The correctness and security of `SIGN_MODE_TEXTUAL` is guaranteed by demonstrating an inverse function from the rendering to transaction protos. +This means that it is impossible for a different protocol buffer message to render to the same text. + +### Transaction Hash Malleability + +When client software forms a transaction, the "raw" transaction (`TxRaw`) is serialized as a proto +and a hash of the resulting byte sequence is computed. +This is the `TxHash`, and is used by various services to track the submitted transaction through its lifecycle. +Various misbehavior is possible if one can generate a modified transaction with a different TxHash +but for which the signature still checks out. + +SIGN_MODE_TEXTUAL prevents this transaction malleability by including the TxHash as an expert screen +in the rendering. + +### SignDoc + +The SignDoc for `SIGN_MODE_TEXTUAL` is formed from a data structure like: + +```go +type Screen struct { + Title string // possibly size limited to, advised to 64 characters + Content string // possibly size limited to, advised to 255 characters + Indent uint8 // size limited to something small like 16 or 32 + Expert bool +} + +type SignDocTextual struct { + Screens []Screen +} +``` + +We do not plan to use protobuf serialization to form the sequence of bytes +that will be tranmitted and signed, in order to keep the decoder simple. +We will use [CBOR](https://cbor.io) ([RFC 8949](https://www.rfc-editor.org/rfc/rfc8949.html)) instead. +The encoding is defined by the following CDDL ([RFC 8610](https://www.rfc-editor.org/rfc/rfc8610)): + +``` +;;; CDDL (RFC 8610) Specification of SignDoc for SIGN_MODE_TEXTUAL. +;;; Must be encoded using CBOR deterministic encoding (RFC 8949, section 4.2.1). + +;; A Textual document is a struct containing one field: an array of screens. +sign_doc = { + screens_key: [* screen], +} + +;; The key is an integer to keep the encoding small. +screens_key = 1 + +;; A screen consists of a text string, an indentation, and the expert flag, +;; represented as an integer-keyed map. All entries are optional +;; and MUST be omitted from the encoding if empty, zero, or false. +;; Text defaults to the empty string, indent defaults to zero, +;; and expert defaults to false. +screen = { + ? title_key: tstr, + ? content_key: tstr, + ? indent_key: uint, + ? expert_key: bool, +} + +;; Keys are small integers to keep the encoding small. +title_key = 1 +content_key = 2 +indent_key = 3 +expert_key = 4 +``` + +Defining the sign_doc as directly an array of screens has also been considered. However, given the possibility of future iterations of this specification, using a single-keyed struct has been chosen over the former proposal, as structs allow for easier backwards-compatibility. + +## Details + +In the examples that follow, screens will be shown as lines of text, +indentation is indicated with a leading '>', +and expert screens are marked with a leading `*`. + +### Encoding of the Transaction Envelope + +We define "transaction envelope" as all data in a transaction that is not in the `TxBody.Messages` field. Transaction envelope includes fee, signer infos and memo, but don't include `Msg`s. `//` denotes comments and are not shown on the Ledger device. + +``` +Chain ID: +Account number: +Sequence: +Address: +*Public Key: +This transaction has Message(s) // Pluralize "Message" only when int>1 +> Message (/): // See value renderers for Any rendering. +End of Message +Memo: // Skipped if no memo set. +Fee: // See value renderers for coins rendering. +*Fee payer: // Skipped if no fee_payer set. +*Fee granter: // Skipped if no fee_granter set. +Tip: // Skippted if no tip. +Tipper: +*Gas Limit: +*Timeout Height: // Skipped if no timeout_height set. +*Other signer: SignerInfo // Skipped if the transaction only has 1 signer. +*> Other signer (/): +*End of other signers +*Extension options: Any: // Skipped if no body extension options +*> Extension options (/): +*End of extension options +*Non critical extension options: Any: // Skipped if no body non critical extension options +*> Non critical extension options (/): +*End of Non critical extension options +*Hash of raw bytes: // Hex encoding of bytes defined, to prevent tx hash malleability. +``` + +### Encoding of the Transaction Body + +Transaction Body is the `Tx.TxBody.Messages` field, which is an array of `Any`s, where each `Any` packs a `sdk.Msg`. Since `sdk.Msg`s are widely used, they have a slightly different encoding than usual array of `Any`s (Protobuf: `repeated google.protobuf.Any`) described in Annex 1. + +``` +This transaction has message: // Optional 's' for "message" if there's is >1 sdk.Msgs. +// For each Msg, print the following 2 lines: +Msg (/): // E.g. Msg (1/2): bank v1beta1 send coins + +End of transaction messages +``` + +#### Example + +Given the following Protobuf message: + +```protobuf +message Grant { + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; +} + +message MsgGrant { + option (cosmos.msg.v1.signer) = "granter"; + + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} +``` + +and a transaction containing 1 such `sdk.Msg`, we get the following encoding: + +``` +This transaction has 1 message: +Msg (1/1): authz v1beta1 grant +Granter: cosmos1abc...def +Grantee: cosmos1ghi...jkl +End of transaction messages +``` + +### Custom `Msg` Renderers + +Application developers may choose to not follow default renderer value output for their own `Msg`s. In this case, they can implement their own custom `Msg` renderer. This is similar to [EIP4430](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4430.md), where the smart contract developer chooses the description string to be shown to the end user. + +This is done by setting the `cosmos.msg.textual.v1.expert_custom_renderer` Protobuf option to a non-empty string. This option CAN ONLY be set on a Protobuf message representing transaction message object (implementing `sdk.Msg` interface). + +```protobuf +message MsgFooBar { + // Optional comments to describe in human-readable language the formatting + // rules of the custom renderer. + option (cosmos.msg.textual.v1.expert_custom_renderer) = ""; + + // proto fields +} +``` + +When this option is set on a `Msg`, a registered function will transform the `Msg` into an array of one or more strings, which MAY use the key/value format (described in point #3) with the expert field prefix (described in point #5) and arbitrary indentation (point #6). These strings MAY be rendered from a `Msg` field using a default value renderer, or they may be generated from several fields using custom logic. + +The `` is a string convention chosen by the application developer and is used to identify the custom `Msg` renderer. For example, the documentation or specification of this custom algorithm can reference this identifier. This identifier CAN have a versioned suffix (e.g. `_v1`) to adapt for future changes (which would be consensus-breaking). We also recommend adding Protobuf comments to describe in human language the custom logic used. + +Moreover, the renderer must provide 2 functions: one for formatting from Protobuf to string, and one for parsing string to Protobuf. These 2 functions are provided by the application developer. To satisfy point #1, the parse function MUST be the inverse of the formatting function. This property will not be checked by the SDK at runtime. However, we strongly recommend the application developer to include a comprehensive suite in their app repo to test invertibility, as to not introduce security bugs. + +### Require signing over the `TxBody` and `AuthInfo` raw bytes + +Recall that the transaction bytes merklelized on chain are the Protobuf binary serialization of [TxRaw](hhttps://buf.build/cosmos/cosmos-sdk/docs/main:cosmos.tx.v1beta1#cosmos.tx.v1beta1.TxRaw), which contains the `body_bytes` and `auth_info_bytes`. Moreover, the transaction hash is defined as the SHA256 hash of the `TxRaw` bytes. We require that the user signs over these bytes in SIGN_MODE_TEXTUAL, more specifically over the following string: + +``` +*Hash of raw bytes: +``` + +where: + +* `++` denotes concatenation, +* `HEX` is the hexadecimal representation of the bytes, all in capital letters, no `0x` prefix, +* and `len()` is encoded as a Big-Endian uint64. + +This is to prevent transaction hash malleability. The point #1 about invertiblity assures that transaction `body` and `auth_info` values are not malleable, but the transaction hash still might be malleable with point #1 only, because the SIGN_MODE_TEXTUAL strings don't follow the byte ordering defined in `body_bytes` and `auth_info_bytes`. Without this hash, a malicious validator or exchange could intercept a transaction, modify its transaction hash _after_ the user signed it using SIGN_MODE_TEXTUAL (by tweaking the byte ordering inside `body_bytes` or `auth_info_bytes`), and then submit it to Tendermint. + +By including this hash in the SIGN_MODE_TEXTUAL signing payload, we keep the same level of guarantees as [SIGN_MODE_DIRECT](adr-020-protobuf-transaction-encoding.md). + +These bytes are only shown in expert mode, hence the leading `*`. + +## Updates to the current specification + +The current specification is not set in stone, and future iterations are to be expected. We distinguish two categories of updates to this specification: + +1. Updates that require changes of the hardware device embedded application. +2. Updates that only modify the envelope and the value renderers. + +Updates in the 1st category include changes of the `Screen` struct or its corresponding CBOR encoding. This type of updates require a modification of the hardware signer application, to be able to decode and parse the new types. Backwards-compatibility must also be guaranteed, so that the new hardware application works with existing versions of the SDK. These updates require the coordination of multiple parties: SDK developers, hardware application developers (currently: Zondax), and client-side developers (e.g. CosmJS). Furthermore, a new submission of the hardware device application may be necessary, which, dependending on the vendor, can take some time. As such, we recommend to avoid this type of updates as much as possible. + +Updates in the 2nd category include changes to any of the value renderers or to the transaction envelope. For example, the ordering of fields in the envelope can be swapped, or the timestamp formatting can be modified. Since SIGN_MODE_TEXTUAL sends `Screen`s to the hardware device, this type of change do not need a hardware wallet application update. They are however state-machine-breaking, and must be documented as such. They require the coordination of SDK developers with client-side developers (e.g. CosmJS), so that the updates are released on both sides close to each other in time. + +We define a spec version, which is an integer that must be incremented on each update of either category. This spec version will be exposed by the SDK's implementation, and can be communicated to clients. For example, SDK v0.48 might use the spec version 1, and SDK v0.49 might use 2; thanks to this versioning, clients can know how to craft SIGN_MODE_TEXTUAL transactions based on the target SDK version. + +The current spec version is defined in the "Status" section, on the top of this document. It is initialized to `0` to allow flexibility in choosing how to define future versions, as it would allow adding a field either in the SignDoc Go struct or in Protobuf in a backwards-compatible way. + +## Additional Formatting by the Hardware Device + +See [annex 2](adr-050-sign-mode-textual-annex2.md). + +## Examples + +1. A minimal MsgSend: [see transaction](https://github.com/cosmos/cosmos-sdk/blob/094abcd393379acbbd043996024d66cd65246fb1/tx/textual/internal/testdata/e2e.json#L2-L70). +2. A transaction with a bit of everything: [see transaction](https://github.com/cosmos/cosmos-sdk/blob/094abcd393379acbbd043996024d66cd65246fb1/tx/textual/internal/testdata/e2e.json#L71-L270). + +The examples below are stored in a JSON file with the following fields: +- `proto`: the representation of the transaction in ProtoJSON, +- `screens`: the transaction rendered into SIGN_MODE_TEXTUAL screens, +- `cbor`: the sign bytes of the transaction, which is the CBOR encoding of the screens. + +## Consequences + +### Backwards Compatibility + +SIGN_MODE_TEXTUAL is purely additive, and doesn't break any backwards compatibility with other sign modes. + +### Positive + +* Human-friendly way of signing in hardware devices. +* Once SIGN_MODE_TEXTUAL is shipped, SIGN_MODE_LEGACY_AMINO_JSON can be deprecated and removed. On the longer term, once the ecosystem has totally migrated, Amino can be totally removed. + +### Negative + +* Some fields are still encoded in non-human-readable ways, such as public keys in hexadecimal. +* New ledger app needs to be released, still unclear + +### Neutral + +* If the transaction is complex, the string array can be arbitrarily long, and some users might just skip some screens and blind sign. + +## Further Discussions + +* Some details on value renderers need to be polished, see [Annex 1](adr-050-sign-mode-textual-annex1.md). +* Are ledger apps able to support both SIGN_MODE_LEGACY_AMINO_JSON and SIGN_MODE_TEXTUAL at the same time? +* Open question: should we add a Protobuf field option to allow app developers to overwrite the textual representation of certain Protobuf fields and message? This would be similar to Ethereum's [EIP4430](https://github.com/ethereum/EIPs/pull/4430), where the contract developer decides on the textual representation. +* Internationalization. + +## References + +* [Annex 1](adr-050-sign-mode-textual-annex1.md) + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/issues/6513 +* Living document used in the working group: https://hackmd.io/fsZAO-TfT0CKmLDtfMcKeA?both +* Working group meeting notes: https://hackmd.io/7RkGfv_rQAaZzEigUYhcXw +* Ethereum's "Described Transactions" https://github.com/ethereum/EIPs/pull/4430 diff --git a/docs/integrate/architecture/adr-053-go-module-refactoring.md b/docs/integrate/architecture/adr-053-go-module-refactoring.md new file mode 100644 index 000000000..d15c39019 --- /dev/null +++ b/docs/integrate/architecture/adr-053-go-module-refactoring.md @@ -0,0 +1,110 @@ +# ADR 053: Go Module Refactoring + +## Changelog + +* 2022-04-27: First Draft + +## Status + +PROPOSED + +## Abstract + +The current SDK is built as a single monolithic go module. This ADR describes +how we refactor the SDK into smaller independently versioned go modules +for ease of maintenance. + +## Context + +Go modules impose certain requirements on software projects with respect to +stable version numbers (anything above 0.x) in that [any API breaking changes +necessitate a major version](https://go.dev/doc/modules/release-workflow#breaking) +increase which technically creates a new go module +(with a v2, v3, etc. suffix). + +[Keeping modules API compatible](https://go.dev/blog/module-compatibility) in +this way requires a fair amount of fair thought and discipline. + +The Cosmos SDK is a fairly large project which originated before go modules +came into existence and has always been under a v0.x release even though +it has been used in production for years now, not because it isn't production +quality software, but rather because the API compatibility guarantees required +by go modules are fairly complex to adhere to with such a large project. +Up to now, it has generally been deemed more important to be able to break the +API if needed rather than require all users update all package import paths +to accommodate breaking changes causing v2, v3, etc. releases. This is in +addition to the other complexities related to protobuf generated code that will +be addressed in a separate ADR. + +Nevertheless, the desire for semantic versioning has been [strong in the +community](https://github.com/cosmos/cosmos-sdk/discussions/10162) and the +single go module release process has made it very hard to +release small changes to isolated features in a timely manner. Release cycles +often exceed six months which means small improvements done in a day or +two get bottle-necked by everything else in the monolithic release cycle. + +## Decision + +To improve the current situation, the SDK is being refactored into multiple +go modules within the current repository. There has been a [fair amount of +debate](https://github.com/cosmos/cosmos-sdk/discussions/10582#discussioncomment-1813377) +as to how to do this, with some developers arguing for larger vs smaller +module scopes. There are pros and cons to both approaches (which will be +discussed below in the [Consequences](#consequences) section), but the +approach being adopted is the following: + +* a go module should generally be scoped to a specific coherent set of +functionality (such as math, errors, store, etc.) +* when code is removed from the core SDK and moved to a new module path, every +effort should be made to avoid API breaking changes in the existing code using +aliases and wrapper types (as done in https://github.com/cosmos/cosmos-sdk/pull/10779 +and https://github.com/cosmos/cosmos-sdk/pull/11788) +* new go modules should be moved to a standalone domain (`cosmossdk.io`) before +being tagged as `v1.0.0` to accommodate the possibility that they may be +better served by a standalone repository in the future +* all go modules should follow the guidelines in https://go.dev/blog/module-compatibility +before `v1.0.0` is tagged and should make use of `internal` packages to limit +the exposed API surface +* the new go module's API may deviate from the existing code where there are +clear improvements to be made or to remove legacy dependencies (for instance on +amino or gogo proto), as long the old package attempts +to avoid API breakage with aliases and wrappers +* care should be taken when simply trying to turn an existing package into a +new go module: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository. +In general, it seems safer to just create a new module path (appending v2, v3, etc. +if necessary), rather than trying to make an old package a new module. + +## Consequences + +### Backwards Compatibility + +If the above guidelines are followed to use aliases or wrapper types pointing +in existing APIs that point back to the new go modules, there should be no or +very limited breaking changes to existing APIs. + +### Positive + +* standalone pieces of software will reach `v1.0.0` sooner +* new features to specific functionality will be released sooner + +### Negative + +* there will be more go module versions to update in the SDK itself and +per-project, although most of these will hopefully be indirect + +### Neutral + +## Further Discussions + +Further discussions are occurring in primarily in +https://github.com/cosmos/cosmos-sdk/discussions/10582 and within +the Cosmos SDK Framework Working Group. + +## References + +* https://go.dev/doc/modules/release-workflow +* https://go.dev/blog/module-compatibility +* https://github.com/cosmos/cosmos-sdk/discussions/10162 +* https://github.com/cosmos/cosmos-sdk/discussions/10582 +* https://github.com/cosmos/cosmos-sdk/pull/10779 +* https://github.com/cosmos/cosmos-sdk/pull/11788 diff --git a/docs/integrate/architecture/adr-054-semver-compatible-modules.md b/docs/integrate/architecture/adr-054-semver-compatible-modules.md new file mode 100644 index 000000000..ed2a5f3f6 --- /dev/null +++ b/docs/integrate/architecture/adr-054-semver-compatible-modules.md @@ -0,0 +1,728 @@ +# ADR 054: Semver Compatible SDK Modules + +## Changelog + +* 2022-04-27: First draft + +## Status + +DRAFT + +## Abstract + +In order to move the Cosmos SDK to a system of decoupled semantically versioned +modules which can be composed in different combinations (ex. staking v3 with +bank v1 and distribution v2), we need to reassess how we organize the API surface +of modules to avoid problems with go semantic import versioning and +circular dependencies. This ADR explores various approaches we can take to +addressing these issues. + +## Context + +There has been [a fair amount of desire](https://github.com/cosmos/cosmos-sdk/discussions/10162) +in the community for semantic versioning in the SDK and there has been significant +movement to splitting SDK modules into [standalone go modules](https://github.com/cosmos/cosmos-sdk/issues/11899). +Both of these will ideally allow the ecosystem to move faster because we won't +be waiting for all dependencies to update synchronously. For instance, we could +have 3 versions of the core SDK compatible with the latest 2 releases of +CosmWasm as well as 4 different versions of staking . This sort of setup would +allow early adopters to aggressively integrate new versions, while allowing +more conservative users to be selective about which versions they're ready for. + +In order to achieve this, we need to solve the following problems: + +1. because of the way [go semantic import versioning](https://research.swtch.com/vgo-import) (SIV) + works, moving to SIV naively will actually make it harder to achieve these goals +2. circular dependencies between modules need to be broken to actually release + many modules in the SDK independently +3. pernicious minor version incompatibilities introduced through correctly + [evolving protobuf schemas](https://developers.google.com/protocol-buffers/docs/proto3#updating) + without correct [unknown field filtering](adr-020-protobuf-transaction-encoding.md#unknown-field-filtering) + +Note that all the following discussion assumes that the proto file versioning and state machine versioning of a module +are distinct in that: + +* proto files are maintained in a non-breaking way (using something + like [buf breaking](https://docs.buf.build/breaking/overview) + to ensure all changes are backwards compatible) +* proto file versions get bumped much less frequently, i.e. we might maintain `cosmos.bank.v1` through many versions + of the bank module state machine +* state machine breaking changes are more common and ideally this is what we'd want to semantically version with + go modules, ex. `x/bank/v2`, `x/bank/v3`, etc. + +### Problem 1: Semantic Import Versioning Compatibility + +Consider we have a module `foo` which defines the following `MsgDoSomething` and that we've released its state +machine in go module `example.com/foo`: + +```protobuf +package foo.v1; + +message MsgDoSomething { + string sender = 1; + uint64 amount = 2; +} + +service Msg { + DoSomething(MsgDoSomething) returns (MsgDoSomethingResponse); +} +``` + +Now consider that we make a revision to this module and add a new `condition` field to `MsgDoSomething` and also +add a new validation rule on `amount` requiring it to be non-zero, and that following go semantic versioning we +release the next state machine version of `foo` as `example.com/foo/v2`. + +```protobuf +// Revision 1 +package foo.v1; + +message MsgDoSomething { + string sender = 1; + + // amount must be a non-zero integer. + uint64 amount = 2; + + // condition is an optional condition on doing the thing. + // + // Since: Revision 1 + Condition condition = 3; +} +``` + +Approaching this naively, we would generate the protobuf types for the initial +version of `foo` in `example.com/foo/types` and we would generate the protobuf +types for the second version in `example.com/foo/v2/types`. + +Now let's say we have a module `bar` which talks to `foo` using this keeper +interface which `foo` provides: + +```go +type FooKeeper interface { + DoSomething(MsgDoSomething) error +} +``` + +#### Scenario A: Backward Compatibility: Newer Foo, Older Bar + +Imagine we have a chain which uses both `foo` and `bar` and wants to upgrade to +`foo/v2`, but the `bar` module has not upgraded to `foo/v2`. + +In this case, the chain will not be able to upgrade to `foo/v2` until `bar` +has upgraded its references to `example.com/foo/types.MsgDoSomething` to +`example.com/foo/v2/types.MsgDoSomething`. + +Even if `bar`'s usage of `MsgDoSomething` has not changed at all, the upgrade +will be impossible without this change because `example.com/foo/types.MsgDoSomething` +and `example.com/foo/v2/types.MsgDoSomething` are fundamentally different +incompatible structs in the go type system. + +#### Scenario B: Forward Compatibility: Older Foo, Newer Bar + +Now let's consider the reverse scenario, where `bar` upgrades to `foo/v2` +by changing the `MsgDoSomething` reference to `example.com/foo/v2/types.MsgDoSomething` +and releases that as `bar/v2` with some other changes that a chain wants. +The chain, however, has decided that it thinks the changes in `foo/v2` are too +risky and that it'd prefer to stay on the initial version of `foo`. + +In this scenario, it is impossible to upgrade to `bar/v2` without upgrading +to `foo/v2` even if `bar/v2` would have worked 100% fine with `foo` other +than changing the import path to `MsgDoSomething` (meaning that `bar/v2` +doesn't actually use any new features of `foo/v2`). + +Now because of the way go semantic import versioning works, we are locked +into either using `foo` and `bar` OR `foo/v2` and `bar/v2`. We cannot have +`foo` + `bar/v2` OR `foo/v2` + `bar`. The go type system doesn't allow this +even if both versions of these modules are otherwise compatible with each +other. + +#### Naive Mitigation + +A naive approach to fixing this would be to not regenerate the protobuf types +in `example.com/foo/v2/types` but instead just update `example.com/foo/types` +to reflect the changes needed for `v2` (adding `condition` and requiring +`amount` to be non-zero). Then we could release a patch of `example.com/foo/types` +with this update and use that for `foo/v2`. But this change is state machine +breaking for `v1`. It requires changing the `ValidateBasic` method to reject +the case where `amount` is zero, and it adds the `condition` field which +should be rejected based +on [ADR 020 unknown field filtering](adr-020-protobuf-transaction-encoding.md#unknown-field-filtering). +So adding these changes as a patch on `v1` is actually incorrect based on semantic +versioning. Chains that want to stay on `v1` of `foo` should not +be importing these changes because they are incorrect for `v1.` + +### Problem 2: Circular dependencies + +None of the above approaches allow `foo` and `bar` to be separate modules +if for some reason `foo` and `bar` depend on each other in different ways. +For instance, we can't have `foo` import `bar/types` while `bar` imports +`foo/types`. + +We have several cases of circular module dependencies in the SDK +(ex. staking, distribution and slashing) that are legitimate from a state machine +perspective. Without separating the API types out somehow, there would be +no way to independently semantically version these modules without some other +mitigation. + +### Problem 3: Handling Minor Version Incompatibilities + +Imagine that we solve the first two problems but now have a scenario where +`bar/v2` wants the option to use `MsgDoSomething.condition` which only `foo/v2` +supports. If `bar/v2` works with `foo` `v1` and sets `condition` to some non-nil +value, then `foo` will silently ignore this field resulting in a silent logic +possibly dangerous logic error. If `bar/v2` were able to check whether `foo` was +on `v1` or `v2` and dynamically, it could choose to only use `condition` when +`foo/v2` is available. Even if `bar/v2` were able to perform this check, however, +how do we know that it is always performing the check properly. Without +some sort of +framework-level [unknown field filtering](adr-020-protobuf-transaction-encoding.md#unknown-field-filtering), +it is hard to know whether these pernicious hard to detect bugs are getting into +our app and a client-server layer such as [ADR 033: Inter-Module Communication](adr-033-protobuf-inter-module-comm.md) +may be needed to do this. + +## Solutions + +### Approach A) Separate API and State Machine Modules + +One solution (first proposed in https://github.com/cosmos/cosmos-sdk/discussions/10582) is to isolate all protobuf +generated code into a separate module +from the state machine module. This would mean that we could have state machine +go modules `foo` and `foo/v2` which could use a types or API go module say +`foo/api`. This `foo/api` go module would be perpetually on `v1.x` and only +accept non-breaking changes. This would then allow other modules to be +compatible with either `foo` or `foo/v2` as long as the inter-module API only +depends on the types in `foo/api`. It would also allow modules `foo` and `bar` +to depend on each other in that both of them could depend on `foo/api` and +`bar/api` without `foo` directly depending on `bar` and vice versa. + +This is similar to the naive mitigation described above except that it separates +the types into separate go modules which in and of itself could be used to +break circular module dependencies. It has the same problems as the naive solution, +otherwise, which we could rectify by: + +1. removing all state machine breaking code from the API module (ex. `ValidateBasic` and any other interface methods) +2. embedding the correct file descriptors for unknown field filtering in the binary + +#### Migrate all interface methods on API types to handlers + +To solve 1), we need to remove all interface implementations from generated +types and instead use a handler approach which essentially means that given +a type `X`, we have some sort of resolver which allows us to resolve interface +implementations for that type (ex. `sdk.Msg` or `authz.Authorization`). For +example: + +```go +func (k Keeper) DoSomething(msg MsgDoSomething) error { + var validateBasicHandler ValidateBasicHandler + err := k.resolver.Resolve(&validateBasic, msg) + if err != nil { + return err + } + + err = validateBasicHandler.ValidateBasic() + ... +} +``` + +In the case of some methods on `sdk.Msg`, we could replace them with declarative +annotations. For instance, `GetSigners` can already be replaced by the protobuf +annotation `cosmos.msg.v1.signer`. In the future, we may consider some sort +of protobuf validation framework (like https://github.com/bufbuild/protoc-gen-validate +but more Cosmos-specific) to replace `ValidateBasic`. + +#### Pinned FileDescriptor's + +To solve 2), state machine modules must be able to specify what the version of +the protobuf files was that they were built against. For instance if the API +module for `foo` upgrades to `foo/v2`, the original `foo` module still needs +a copy of the original protobuf files it was built with so that ADR 020 +unknown field filtering will reject `MsgDoSomething` when `condition` is +set. + +The simplest way to do this may be to embed the protobuf `FileDescriptor`s into +the module itself so that these `FileDescriptor`s are used at runtime rather +than the ones that are built into the `foo/api` which may be different. Using +[buf build](https://docs.buf.build/build/usage#output-format), [go embed](https://pkg.go.dev/embed), +and a build script we can probably come up with a solution for embedding +`FileDescriptor`s into modules that is fairly straightforward. + +#### Potential limitations to generated code + +One challenge with this approach is that it places heavy restrictions on what +can go in API modules and requires that most of this is state machine breaking. +All or most of the code in the API module would be generated from protobuf +files, so we can probably control this with how code generation is done, but +it is a risk to be aware of. + +For instance, we do code generation for the ORM that in the future could +contain optimizations that are state machine breaking. We +would either need to ensure very carefully that the optimizations aren't +actually state machine breaking in generated code or separate this generated code +out from the API module into the state machine module. Both of these mitigations +are potentially viable but the API module approach does require an extra level +of care to avoid these sorts of issues. + +#### Minor Version Incompatibilities + +This approach in and of itself does little to address any potential minor +version incompatibilities and the +requisite [unknown field filtering](adr-020-protobuf-transaction-encoding.md#unknown-field-filtering). +Likely some sort of client-server routing layer which does this check such as +[ADR 033: Inter-Module communication](adr-033-protobuf-inter-module-comm.md) +is required to make sure that this is done properly. We could then allow +modules to perform a runtime check given a `MsgClient`, ex: + +```go +func (k Keeper) CallFoo() error { + if k.interModuleClient.MinorRevision(k.fooMsgClient) >= 2 { + k.fooMsgClient.DoSomething(&MsgDoSomething{Condition: ...}) + } else { + ... + } +} +``` + +To do the unknown field filtering itself, the ADR 033 router would need to use +the [protoreflect API](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect) +to ensure that no fields unknown to the receiving module are set. This could +result in an undesirable performance hit depending on how complex this logic is. + +### Approach B) Changes to Generated Code + +An alternate approach to solving the versioning problem is to change how protobuf code is generated and move modules +mostly or completely in the direction of inter-module communication as described +in [ADR 033](adr-033-protobuf-inter-module-comm.md). +In this paradigm, a module could generate all the types it needs internally - including the API types of other modules - +and talk to other modules via a client-server boundary. For instance, if `bar` needs to talk to `foo`, it could +generate its own version of `MsgDoSomething` as `bar/internal/foo/v1.MsgDoSomething` and just pass this to the +inter-module router which would somehow convert it to the version which foo needs (ex. `foo/internal.MsgDoSomething`). + +Currently, two generated structs for the same protobuf type cannot exist in the same go binary without special +build flags (see https://developers.google.com/protocol-buffers/docs/reference/go/faq#fix-namespace-conflict). +A relatively simple mitigation to this issue would be to set up the protobuf code to not register protobuf types +globally if they are generated in an `internal/` package. This will require modules to register their types manually +with the app-level level protobuf registry, this is similar to what modules already do with the `InterfaceRegistry` +and amino codec. + +If modules _only_ do ADR 033 message passing then a naive and non-performant solution for +converting `bar/internal/foo/v1.MsgDoSomething` +to `foo/internal.MsgDoSomething` would be marshaling and unmarshaling in the ADR 033 router. This would break down if +we needed to expose protobuf types in `Keeper` interfaces because the whole point is to try to keep these types +`internal/` so that we don't end up with all the import version incompatibilities we've described above. However, +because of the issue with minor version incompatibilities and the need +for [unknown field filtering](adr-020-protobuf-transaction-encoding.md#unknown-field-filtering), +sticking with the `Keeper` paradigm instead of ADR 033 may be unviable to begin with. + +A more performant solution (that could maybe be adapted to work with `Keeper` interfaces) would be to only expose +getters and setters for generated types and internally store data in memory buffers which could be passed from +one implementation to another in a zero-copy way. + +For example, imagine this protobuf API with only getters and setters is exposed for `MsgSend`: + +```go +type MsgSend interface { + proto.Message + GetFromAddress() string + GetToAddress() string + GetAmount() []v1beta1.Coin + SetFromAddress(string) + SetToAddress(string) + SetAmount([]v1beta1.Coin) +} + +func NewMsgSend() MsgSend { return &msgSendImpl{memoryBuffers: ...} } +``` + +Under the hood, `MsgSend` could be implemented based on some raw memory buffer in the same way +that [Cap'n Proto](https://capnproto.org) +and [FlatBuffers](https://google.github.io/flatbuffers/) so that we could convert between one version of `MsgSend` +and another without serialization (i.e. zero-copy). This approach would have the added benefits of allowing zero-copy +message passing to modules written in other languages such as Rust and accessed through a VM or FFI. It could also make +unknown field filtering in inter-module communication simpler if we require that all new fields are added in sequential +order, ex. just checking that no field `> 5` is set. + +Also, we wouldn't have any issues with state machine breaking code on generated types because all the generated +code used in the state machine would actually live in the state machine module itself. Depending on how interface +types and protobuf `Any`s are used in other languages, however, it may still be desirable to take the handler +approach described in approach A. Either way, types implementing interfaces would still need to be registered +with an `InterfaceRegistry` as they are now because there would be no way to retrieve them via the global registry. + +In order to simplify access to other modules using ADR 033, a public API module (maybe even one +[remotely generated by Buf](https://docs.buf.build/bsr/remote-generation/go)) could be used by client modules instead +of requiring to generate all client types internally. + +The big downsides of this approach are that it requires big changes to how people use protobuf types and would be a +substantial rewrite of the protobuf code generator. This new generated code, however, could still be made compatible +with +the [`google.golang.org/protobuf/reflect/protoreflect`](https://pkg.go.dev/google.golang.org/protobuf/reflect/protoreflect) +API in order to work with all standard golang protobuf tooling. + +It is possible that the naive approach of marshaling/unmarshaling in the ADR 033 router is an acceptable intermediate +solution if the changes to the code generator are seen as too complex. However, since all modules would likely need +to migrate to ADR 033 anyway with this approach, it might be better to do this all at once. + +### Approach C) Don't address these issues + +If the above solutions are seen as too complex, we can also decide not to do anything explicit to enable better module +version compatibility, and break circular dependencies. + +In this case, when developers are confronted with the issues described above they can require dependencies to update in +sync (what we do now) or attempt some ad-hoc potentially hacky solution. + +One approach is to ditch go semantic import versioning (SIV) altogether. Some people have commented that go's SIV +(i.e. changing the import path to `foo/v2`, `foo/v3`, etc.) is too restrictive and that it should be optional. The +golang maintainers disagree and only officially support semantic import versioning. We could, however, take the +contrarian perspective and get more flexibility by using 0.x-based versioning basically forever. + +Module version compatibility could then be achieved using go.mod replace directives to pin dependencies to specific +compatible 0.x versions. For instance if we knew `foo` 0.2 and 0.3 were both compatible with `bar` 0.3 and 0.4, we +could use replace directives in our go.mod to stick to the versions of `foo` and `bar` we want. This would work as +long as the authors of `foo` and `bar` avoid incompatible breaking changes between these modules. + +Or, if developers choose to use semantic import versioning, they can attempt the naive solution described above +and would also need to use special tags and replace directives to make sure that modules are pinned to the correct +versions. + +Note, however, that all of these ad-hoc approaches, would be vulnerable to the minor version compatibility issues +described above unless [unknown field filtering](adr-020-protobuf-transaction-encoding.md#unknown-field-filtering) +is properly addressed. + +### Approach D) Avoid protobuf generated code in public APIs + +An alternative approach would be to avoid protobuf generated code in public module APIs. This would help avoid the +discrepancy between state machine versions and client API versions at the module to module boundaries. It would mean +that we wouldn't do inter-module message passing based on ADR 033, but rather stick to the existing keeper approach +and take it one step further by avoiding any protobuf generated code in the keeper interface methods. + +Using this approach, our `foo.Keeper.DoSomething` method wouldn't have the generated `MsgDoSomething` struct (which +comes from the protobuf API), but instead positional parameters. Then in order for `foo/v2` to support the `foo/v1` +keeper it would simply need to implement both the v1 and v2 keeper APIs. The `DoSomething` method in v2 could have the +additional `condition` parameter, but this wouldn't be present in v1 at all so there would be no danger of a client +accidentally setting this when it isn't available. + +So this approach would avoid the challenge around minor version incompatibilities because the existing module keeper +API would not get new fields when they are added to protobuf files. + +Taking this approach, however, would likely require making all protobuf generated code internal in order to prevent +it from leaking into the keeper API. This means we would still need to modify the protobuf code generator to not +register `internal/` code with the global registry, and we would still need to manually register protobuf +`FileDescriptor`s (this is probably true in all scenarios). It may, however, be possible to avoid needing to refactor +interface methods on generated types to handlers. + +Also, this approach doesn't address what would be done in scenarios where modules still want to use the message router. +Either way, we probably still want a way to pass messages from one module to another router safely even if it's just for +use cases like `x/gov`, `x/authz`, CosmWasm, etc. That would still require most of the things outlined in approach (B), +although we could advise modules to prefer keepers for communicating with other modules. + +The biggest downside of this approach is probably that it requires a strict refactoring of keeper interfaces to avoid +generated code leaking into the API. This may result in cases where we need to duplicate types that are already defined +in proto files and then write methods for converting between the golang and protobuf version. This may end up in a lot +of unnecessary boilerplate and that may discourage modules from actually adopting it and achieving effective version +compatibility. Approaches (A) and (B), although heavy handed initially, aim to provide a system which once adopted +more or less gives the developer version compatibility for free with minimal boilerplate. Approach (D) may not be able +to provide such a straightforward system since it requires a golang API to be defined alongside a protobuf API in a +way that requires duplication and differing sets of design principles (protobuf APIs encourage additive changes +while golang APIs would forbid it). + +Other downsides to this approach are: +* no clear roadmap to supporting modules in other languages like Rust +* doesn't get us any closer to proper object capability security (one of the goals of ADR 033) +* ADR 033 needs to be done properly anyway for the set of use cases which do need it + +## Decision + +The latest **DRAFT** proposal is: + +1. we are alignment on adopting [ADR 033](adr-033-protobuf-inter-module-comm.md) not just as an addition to the + framework, but as a core replacement to the keeper paradigm entirely. +2. the ADR 033 inter-module router will accommodate any variation of approach (A) or (B) given the following rules: + a. if the client type is the same as the server type then pass it directly through, + b. if both client and server use the zero-copy generated code wrappers (which still need to be defined), then pass + the memory buffers from one wrapper to the other, or + c. marshal/unmarshal types between client and server. + +This approach will allow for both maximal correctness and enable a clear path to enabling modules within in other +languages, possibly executed within a WASM VM. + +### Minor API Revisions + +To declare minor API revisions of proto files, we propose the following guidelines (which were already documented +in [cosmos.app.v1alpha module options](../proto/cosmos/app/v1alpha1/module.proto)): +* proto packages which are revised from their initial version (considered revision `0`) should include a `package` +* comment in some .proto file containing the test `Revision N` at the start of a comment line where `N` is the current +revision number. +* all fields, messages, etc. added in a version beyond the initial revision should add a comment at the start of a +comment line of the form `Since: Revision N` where `N` is the non-zero revision it was added. + +It is advised that there is a 1:1 correspondence between a state machine module and versioned set of proto files +which are versioned either as a buf module a go API module or both. If the buf schema registry is used, the version of +this buf module should always be `1.N` where `N` corresponds to the package revision. Patch releases should be used when +only documentation comments are updated. It is okay to include proto packages named `v2`, `v3`, etc. in this same +`1.N` versioned buf module (ex. `cosmos.bank.v2`) as long as all these proto packages consist of a single API intended +to be served by a single SDK module. + +### Introspecting Minor API Revisions + +In order for modules to introspect the minor API revision of peer modules, we propose adding the following method +to `cosmossdk.io/core/intermodule.Client`: + +```go +ServiceRevision(ctx context.Context, serviceName string) uint64 +``` + +Modules could all this using the service name statically generated by the go grpc code generator: + +```go +intermoduleClient.ServiceRevision(ctx, bankv1beta1.Msg_ServiceDesc.ServiceName) +``` + +In the future, we may decide to extend the code generator used for protobuf services to add a field +to client types which does this check more concisely, ex: + +```go +package bankv1beta1 + +type MsgClient interface { + Send(context.Context, MsgSend) (MsgSendResponse, error) + ServiceRevision(context.Context) uint64 +} +``` + +### Unknown Field Filtering + +To correctly perform [unknown field filtering](adr-020-protobuf-transaction-encoding.md#unknown-field-filtering), +the inter-module router can do one of the following: + +* use the `protoreflect` API for messages which support that +* for gogo proto messages, marshal and use the existing `codec/unknownproto` code +* for zero-copy messages, do a simple check on the highest set field number (assuming we can require that fields are + adding consecutively in increasing order) + +### `FileDescriptor` Registration + +Because a single go binary may contain different versions of the same generated protobuf code, we cannot rely on the +global protobuf registry to contain the correct `FileDescriptor`s. Because `appconfig` module configuration is itself +written in protobuf, we would like to load the `FileDescriptor`s for a module before loading a module itself. So we +will provide ways to register `FileDescriptor`s at module registration time before instantiation. We propose the +following `cosmossdk.io/core/appmodule.Option` constructors for the various cases of how `FileDescriptor`s may be +packaged: + +```go +package appmodule + +// this can be used when we are using google.golang.org/protobuf compatible generated code +// Ex: +// ProtoFiles(bankv1beta1.File_cosmos_bank_v1beta1_module_proto) +func ProtoFiles(file []protoreflect.FileDescriptor) Option {} + +// this can be used when we are using gogo proto generated code. +func GzippedProtoFiles(file [][]byte) Option {} + +// this can be used when we are using buf build to generated a pinned file descriptor +func ProtoImage(protoImage []byte) Option {} +``` + +This approach allows us to support several ways protobuf files might be generated: +* proto files generated internally to a module (use `ProtoFiles`) +* the API module approach with pinned file descriptors (use `ProtoImage`) +* gogo proto (use `GzippedProtoFiles`) + +### Module Dependency Declaration + +One risk of ADR 033 is that dependencies are called at runtime which are not present in the loaded set of SDK modules. +Also we want modules to have a way to define a minimum dependency API revision that they require. Therefore, all +modules should declare their set of dependencies upfront. These dependencies could be defined when a module is +instantiated, but ideally we know what the dependencies are before instantiation and can statically look at an app +config and determine whether the set of modules. For example, if `bar` requires `foo` revision `>= 1`, then we +should be able to know this when creating an app config with two versions of `bar` and `foo`. + +We propose defining these dependencies in the proto options of the module config object itself. + +### Interface Registration + +We will also need to define how interface methods are defined on types that are serialized as `google.protobuf.Any`'s. +In light of the desire to support modules in other languages, we may want to think of solutions that will accommodate +other languages such as plugins described briefly in [ADR 033](adr-033-protobuf-inter-module-comm.md#internal-methods). + +### Testing + +In order to ensure that modules are indeed with multiple versions of their dependencies, we plan to provide specialized +unit and integration testing infrastructure that automatically tests multiple versions of dependencies. + +#### Unit Testing + +Unit tests should be conducted inside SDK modules by mocking their dependencies. In a full ADR 033 scenario, +this means that all interaction with other modules is done via the inter-module router, so mocking of dependencies +means mocking their msg and query server implementations. We will provide both a test runner and fixture to make this +streamlined. The key thing that the test runner should do to test compatibility is to test all combinations of +dependency API revisions. This can be done by taking the file descriptors for the dependencies, parsing their comments +to determine the revisions various elements were added, and then created synthetic file descriptors for each revision +by subtracting elements that were added later. + +Here is a proposed API for the unit test runner and fixture: + +```go +package moduletesting + +import ( + "context" + "testing" + + "cosmossdk.io/core/intermodule" + "cosmossdk.io/depinject" + "google.golang.org/grpc" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protodesc" +) + +type TestFixture interface { + context.Context + intermodule.Client // for making calls to the module we're testing + BeginBlock() + EndBlock() +} + +type UnitTestFixture interface { + TestFixture + grpc.ServiceRegistrar // for registering mock service implementations +} + +type UnitTestConfig struct { + ModuleConfig proto.Message // the module's config object + DepinjectConfig depinject.Config // optional additional depinject config options + DependencyFileDescriptors []protodesc.FileDescriptorProto // optional dependency file descriptors to use instead of the global registry +} + +// Run runs the test function for all combinations of dependency API revisions. +func (cfg UnitTestConfig) Run(t *testing.T, f func(t *testing.T, f UnitTestFixture)) { + // ... +} +``` + +Here is an example for testing bar calling foo which takes advantage of conditional service revisions in the expected +mock arguments: + +```go +func TestBar(t *testing.T) { + UnitTestConfig{ModuleConfig: &foomodulev1.Module{}}.Run(t, func (t *testing.T, f moduletesting.UnitTestFixture) { + ctrl := gomock.NewController(t) + mockFooMsgServer := footestutil.NewMockMsgServer() + foov1.RegisterMsgServer(f, mockFooMsgServer) + barMsgClient := barv1.NewMsgClient(f) + if f.ServiceRevision(foov1.Msg_ServiceDesc.ServiceName) >= 1 { + mockFooMsgServer.EXPECT().DoSomething(gomock.Any(), &foov1.MsgDoSomething{ + ..., + Condition: ..., // condition is expected in revision >= 1 + }).Return(&foov1.MsgDoSomethingResponse{}, nil) + } else { + mockFooMsgServer.EXPECT().DoSomething(gomock.Any(), &foov1.MsgDoSomething{...}).Return(&foov1.MsgDoSomethingResponse{}, nil) + } + res, err := barMsgClient.CallFoo(f, &MsgCallFoo{}) + ... + }) +} +``` + +The unit test runner would make sure that no dependency mocks return arguments which are invalid for the service +revision being tested to ensure that modules don't incorrectly depend on functionality not present in a given revision. + +#### Integration Testing + +An integration test runner and fixture would also be provided which instead of using mocks would test actual module +dependencies in various combinations. Here is the proposed API: + +```go +type IntegrationTestFixture interface { + TestFixture +} + +type IntegrationTestConfig struct { + ModuleConfig proto.Message // the module's config object + DependencyMatrix map[string][]proto.Message // all the dependent module configs +} + +// Run runs the test function for all combinations of dependency modules. +func (cfg IntegationTestConfig) Run(t *testing.T, f func (t *testing.T, f IntegrationTestFixture)) { + // ... +} +``` + +And here is an example with foo and bar: + +```go +func TestBarIntegration(t *testing.T) { + IntegrationTestConfig{ + ModuleConfig: &barmodulev1.Module{}, + DependencyMatrix: map[string][]proto.Message{ + "runtime": []proto.Message{ // test against two versions of runtime + &runtimev1.Module{}, + &runtimev2.Module{}, + }, + "foo": []proto.Message{ // test against three versions of foo + &foomodulev1.Module{}, + &foomodulev2.Module{}, + &foomodulev3.Module{}, + } + } + }.Run(t, func (t *testing.T, f moduletesting.IntegrationTestFixture) { + barMsgClient := barv1.NewMsgClient(f) + res, err := barMsgClient.CallFoo(f, &MsgCallFoo{}) + ... + }) +} +``` + +Unlike unit tests, integration tests actually pull in other module dependencies. So that modules can be written +without direct dependencies on other modules and because golang has no concept of development dependencies, integration +tests should be written in separate go modules, ex. `example.com/bar/v2/test`. Because this paradigm uses go semantic +versioning, it is possible to build a single go module which imports 3 versions of bar and 2 versions of runtime and +can test these all together in the six various combinations of dependencies. + +## Consequences + +### Backwards Compatibility + +Modules which migrate fully to ADR 033 will not be compatible with existing modules which use the keeper paradigm. +As a temporary workaround we may create some wrapper types that emulate the current keeper interface to minimize +the migration overhead. + +### Positive + +* we will be able to deliver interoperable semantically versioned modules which should dramatically increase the + ability of the Cosmos SDK ecosystem to iterate on new features +* it will be possible to write Cosmos SDK modules in other languages in the near future + +### Negative + +* all modules will need to be refactored somewhat dramatically + +### Neutral + +* the `cosmossdk.io/core/appconfig` framework will play a more central role in terms of how modules are defined, this + is likely generally a good thing but does mean additional changes for users wanting to stick to the pre-depinject way + of wiring up modules +* `depinject` is somewhat less needed or maybe even obviated because of the full ADR 033 approach. If we adopt the + core API proposed in https://github.com/cosmos/cosmos-sdk/pull/12239, then a module would probably always instantiate + itself with a method `ProvideModule(appmodule.Service) (appmodule.AppModule, error)`. There is no complex wiring of + keeper dependencies in this scenario and dependency injection may not have as much of (or any) use case. + +## Further Discussions + +The decision described above is considered in draft mode and is pending final buy-in from the team and key stakeholders. +Key outstanding discussions if we do adopt that direction are: + +* how do module clients introspect dependency module API revisions +* how do modules determine a minor dependency module API revision requirement +* how do modules appropriately test compatibility with different dependency versions +* how to register and resolve interface implementations +* how do modules register their protobuf file descriptors depending on the approach they take to generated code (the + API module approach may still be viable as a supported strategy and would need pinned file descriptors) + +## References + +* https://github.com/cosmos/cosmos-sdk/discussions/10162 +* https://github.com/cosmos/cosmos-sdk/discussions/10582 +* https://github.com/cosmos/cosmos-sdk/discussions/10368 +* https://github.com/cosmos/cosmos-sdk/pull/11340 +* https://github.com/cosmos/cosmos-sdk/issues/11899 +* [ADR 020](adr-020-protobuf-transaction-encoding.md) +* [ADR 033](adr-033-protobuf-inter-module-comm.md) diff --git a/docs/integrate/architecture/adr-055-orm.md b/docs/integrate/architecture/adr-055-orm.md new file mode 100644 index 000000000..be7255f09 --- /dev/null +++ b/docs/integrate/architecture/adr-055-orm.md @@ -0,0 +1,113 @@ +# ADR 055: ORM + +## Changelog + +* 2022-04-27: First draft + +## Status + +ACCEPTED Implemented + +## Abstract + +In order to make it easier for developers to build Cosmos SDK modules and for clients to query, index and verify proofs +against state data, we have implemented an ORM (object-relational mapping) layer for the Cosmos SDK. + +## Context + +Historically modules in the Cosmos SDK have always used the key-value store directly and created various handwritten +functions for managing key format as well as constructing secondary indexes. This consumes a significant amount of +time when building a module and is error-prone. Because key formats are non-standard, sometimes poorly documented, +and subject to change, it is hard for clients to generically index, query and verify merkle proofs against state data. + +The known first instance of an "ORM" in the Cosmos ecosystem was in [weave](https://github.com/iov-one/weave/tree/master/orm). +A later version was built for [regen-ledger](https://github.com/regen-network/regen-ledger/tree/157181f955823149e1825263a317ad8e16096da4/orm) for +use in the group module and later [ported to the SDK](https://github.com/cosmos/cosmos-sdk/tree/35d3312c3be306591fcba39892223f1244c8d108/x/group/internal/orm) +just for that purpose. + +While these earlier designs made it significantly easier to write state machines, they still required a lot of manual +configuration, didn't expose state format directly to clients, and were limited in their support of different types +of index keys, composite keys, and range queries. + +Discussions about the design continued in https://github.com/cosmos/cosmos-sdk/discussions/9156 and more +sophisticated proofs of concept were created in https://github.com/allinbits/cosmos-sdk-poc/tree/master/runtime/orm +and https://github.com/cosmos/cosmos-sdk/pull/10454. + +## Decision + +These prior efforts culminated in the creation of the Cosmos SDK `orm` go module which uses protobuf annotations +for specifying ORM table definitions. This ORM is based on the new `google.golang.org/protobuf/reflect/protoreflect` +API and supports: + +* sorted indexes for all simple protobuf types (except `bytes`, `enum`, `float`, `double`) as well as `Timestamp` and `Duration` +* unsorted `bytes` and `enum` indexes +* composite primary and secondary keys +* unique indexes +* auto-incrementing `uint64` primary keys +* complex prefix and range queries +* paginated queries +* complete logical decoding of KV-store data + +Almost all the information needed to decode state directly is specified in .proto files. Each table definition specifies +an ID which is unique per .proto file and each index within a table is unique within that table. Clients then only need +to know the name of a module and the prefix ORM data for a specific .proto file within that module in order to decode +state data directly. This additional information will be exposed directly through app configs which will be explained +in a future ADR related to app wiring. + +The ORM makes optimizations around storage space by not repeating values in the primary key in the key value +when storing primary key records. For example, if the object `{"a":0,"b":1}` has the primary key `a`, it will +be stored in the key value store as `Key: '0', Value: {"b":1}` (with more efficient protobuf binary encoding). +Also, the generated code from https://github.com/cosmos/cosmos-proto does optimizations around the +`google.golang.org/protobuf/reflect/protoreflect` API to improve performance. + +A code generator is included with the ORM which creates type safe wrappers around the ORM's dynamic `Table` +implementation and is the recommended way for modules to use the ORM. + +The ORM tests provide a simplified bank module demonstration which illustrates: +* [ORM proto options](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/internal/testpb/bank.proto) +* [Generated Code](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/internal/testpb/bank.cosmos_orm.go) +* [Example Usage in a Module Keeper](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/model/ormdb/module_test.go) + +## Consequences + +### Backwards Compatibility + +State machine code that adopts the ORM will need migrations as the state layout is generally backwards incompatible. +These state machines will also need to migrate to https://github.com/cosmos/cosmos-proto at least for state data. + +### Positive + +* easier to build modules +* easier to add secondary indexes to state +* possible to write a generic indexer for ORM state +* easier to write clients that do state proofs +* possible to automatically write query layers rather than needing to manually implement gRPC queries + +### Negative + +* worse performance than handwritten keys (for now). See [Further Discussions](#further-discussions) +for potential improvements + +### Neutral + +## Further Discussions + +Further discussions will happen within the Cosmos SDK Framework Working Group. Current planned and ongoing work includes: + +* automatically generate client-facing query layer +* client-side query libraries that transparently verify light client proofs +* index ORM data to SQL databases +* improve performance by: + * optimizing existing reflection based code to avoid unnecessary gets when doing deletes & updates of simple tables + * more sophisticated code generation such as making fast path reflection even faster (avoiding `switch` statements), + or even fully generating code that equals handwritten performance + + +## References + +* https://github.com/iov-one/weave/tree/master/orm). +* https://github.com/regen-network/regen-ledger/tree/157181f955823149e1825263a317ad8e16096da4/orm +* https://github.com/cosmos/cosmos-sdk/tree/35d3312c3be306591fcba39892223f1244c8d108/x/group/internal/orm +* https://github.com/cosmos/cosmos-sdk/discussions/9156 +* https://github.com/allinbits/cosmos-sdk-poc/tree/master/runtime/orm +* https://github.com/cosmos/cosmos-sdk/pull/10454 diff --git a/docs/integrate/architecture/adr-057-app-wiring.md b/docs/integrate/architecture/adr-057-app-wiring.md new file mode 100644 index 000000000..0a23f3933 --- /dev/null +++ b/docs/integrate/architecture/adr-057-app-wiring.md @@ -0,0 +1,340 @@ +# ADR 057: App Wiring + +## Changelog + +* 2022-05-04: Initial Draft +* 2022-08-19: Updates + +## Status + +PROPOSED Implemented + +## Abstract + +In order to make it easier to build Cosmos SDK modules and apps, we propose a new app wiring system based on +dependency injection and declarative app configurations to replace the current `app.go` code. + +## Context + +A number of factors have made the SDK and SDK apps in their current state hard to maintain. A symptom of the current +state of complexity is [`simapp/app.go`](https://github.com/cosmos/cosmos-sdk/blob/c3edbb22cab8678c35e21fe0253919996b780c01/simapp/app.go) +which contains almost 100 lines of imports and is otherwise over 600 lines of mostly boilerplate code that is +generally copied to each new project. (Not to mention the additional boilerplate which gets copied in `simapp/simd`.) + +The large amount of boilerplate needed to bootstrap an app has made it hard to release independently versioned go +modules for Cosmos SDK modules as described in [ADR 053: Go Module Refactoring](adr-053-go-module-refactoring.md). + +In addition to being very verbose and repetitive, `app.go` also exposes a large surface area for breaking changes +as most modules instantiate themselves with positional parameters which forces breaking changes anytime a new parameter +(even an optional one) is needed. + +Several attempts were made to improve the current situation including [ADR 033: Internal-Module Communication](adr-033-protobuf-inter-module-comm.md) +and [a proof-of-concept of a new SDK](https://github.com/allinbits/cosmos-sdk-poc). The discussions around these +designs led to the current solution described here. + +## Decision + +In order to improve the current situation, a new "app wiring" paradigm has been designed to replace `app.go` which +involves: + +* declaration configuration of the modules in an app which can be serialized to JSON or YAML +* a dependency-injection (DI) framework for instantiating apps from the that configuration + +### Dependency Injection + +When examining the code in `app.go` most of the code simply instantiates modules with dependencies provided either +by the framework (such as store keys) or by other modules (such as keepers). It is generally pretty obvious given +the context what the correct dependencies actually should be, so dependency-injection is an obvious solution. Rather +than making developers manually resolve dependencies, a module will tell the DI container what dependency it needs +and the container will figure out how to provide it. + +We explored several existing DI solutions in golang and felt that the reflection-based approach in [uber/dig](https://github.com/uber-go/dig) +was closest to what we needed but not quite there. Assessing what we needed for the SDK, we designed and built +the Cosmos SDK [depinject module](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/depinject), which has the following +features: + +* dependency resolution and provision through functional constructors, ex: `func(need SomeDep) (AnotherDep, error)` +* dependency injection `In` and `Out` structs which support `optional` dependencies +* grouped-dependencies (many-per-container) through the `ManyPerContainerType` tag interface +* module-scoped dependencies via `ModuleKey`s (where each module gets a unique dependency) +* one-per-module dependencies through the `OnePerModuleType` tag interface +* sophisticated debugging information and container visualization via GraphViz + +Here are some examples of how these would be used in an SDK module: + +* `StoreKey` could be a module-scoped dependency which is unique per module +* a module's `AppModule` instance (or the equivalent) could be a `OnePerModuleType` +* CLI commands could be provided with `ManyPerContainerType`s + +Note that even though dependency resolution is dynamic and based on reflection, which could be considered a pitfall +of this approach, the entire dependency graph should be resolved immediately on app startup and only gets resolved +once (except in the case of dynamic config reloading which is a separate topic). This means that if there are any +errors in the dependency graph, they will get reported immediately on startup so this approach is only slightly worse +than fully static resolution in terms of error reporting and much better in terms of code complexity. + +### Declarative App Config + +In order to compose modules into an app, a declarative app configuration will be used. This configuration is based off +of protobuf and its basic structure is very simple: + +```protobuf +package cosmos.app.v1; + +message Config { + repeated ModuleConfig modules = 1; +} + +message ModuleConfig { + string name = 1; + google.protobuf.Any config = 2; +} +``` + +(See also https://github.com/cosmos/cosmos-sdk/blob/6e18f582bf69e3926a1e22a6de3c35ea327aadce/proto/cosmos/app/v1alpha1/config.proto) + +The configuration for every module is itself a protobuf message and modules will be identified and loaded based +on the protobuf type URL of their config object (ex. `cosmos.bank.module.v1.Module`). Modules are given a unique short `name` +to share resources across different versions of the same module which might have a different protobuf package +versions (ex. `cosmos.bank.module.v2.Module`). All module config objects should define the `cosmos.app.v1alpha1.module` +descriptor option which will provide additional useful metadata for the framework and which can also be indexed +in module registries. + +An example app config in YAML might look like this: + +```yaml +modules: + - name: baseapp + config: + "@type": cosmos.baseapp.module.v1.Module + begin_blockers: [staking, auth, bank] + end_blockers: [bank, auth, staking] + init_genesis: [bank, auth, staking] + - name: auth + config: + "@type": cosmos.auth.module.v1.Module + bech32_prefix: "foo" + - name: bank + config: + "@type": cosmos.bank.module.v1.Module + - name: staking + config: + "@type": cosmos.staking.module.v1.Module +``` + +In the above example, there is a hypothetical `baseapp` module which contains the information around ordering of +begin blockers, end blockers, and init genesis. Rather than lifting these concerns up to the module config layer, +they are themselves handled by a module which could allow a convenient way of swapping out different versions of +baseapp (for instance to target different versions of tendermint), without needing to change the rest of the config. +The `baseapp` module would then provide to the server framework (which sort of sits outside the ABCI app) an instance +of `abci.Application`. + +In this model, an app is *modules all the way down* and the dependency injection/app config layer is very much +protocol-agnostic and can adapt to even major breaking changes at the protocol layer. + +### Module & Protobuf Registration + +In order for the two components of dependency injection and declarative configuration to work together as described, +we need a way for modules to actually register themselves and provide dependencies to the container. + +One additional complexity that needs to be handled at this layer is protobuf registry initialization. Recall that +in both the current SDK `codec` and the proposed [ADR 054: Protobuf Semver Compatible Codegen](https://github.com/cosmos/cosmos-sdk/pull/11802), +protobuf types need to be explicitly registered. Given that the app config itself is based on protobuf and +uses protobuf `Any` types, protobuf registration needs to happen before the app config itself can be decoded. Because +we don't know which protobuf `Any` types will be needed a priori and modules themselves define those types, we need +to decode the app config in separate phases: + +1. parse app config JSON/YAML as raw JSON and collect required module type URLs (without doing proto JSON decoding) +2. build a [protobuf type registry](https://pkg.go.dev/google.golang.org/protobuf@v1.28.0/reflect/protoregistry) based + on file descriptors and types provided by each required module +3. decode the app config as proto JSON using the protobuf type registry + +Because in [ADR 054: Protobuf Semver Compatible Codegen](https://github.com/cosmos/cosmos-sdk/pull/11802), each module +should use `internal` generated code which is not registered with the global protobuf registry, this code should provide +an alternate way to register protobuf types with a type registry. In the same way that `.pb.go` files currently have a +`var File_foo_proto protoreflect.FileDescriptor` for the file `foo.proto`, generated code should have a new member +`var Types_foo_proto TypeInfo` where `TypeInfo` is an interface or struct with all the necessary info to register both +the protobuf generated types and file descriptor. + +So a module must provide dependency injection providers and protobuf types, and takes as input its module +config object which uniquely identifies the module based on its type URL. + +With this in mind, we define a global module register which allows module implementations to register themselves +with the following API: + +```go +// Register registers a module with the provided type name (ex. cosmos.bank.module.v1.Module) +// and the provided options. +func Register(configTypeName protoreflect.FullName, option ...Option) { ... } + +type Option { /* private methods */ } + +// Provide registers dependency injection provider functions which work with the +// cosmos-sdk container module. These functions can also accept an additional +// parameter for the module's config object. +func Provide(providers ...interface{}) Option { ... } + +// Types registers protobuf TypeInfo's with the protobuf registry. +func Types(types ...TypeInfo) Option { ... } +``` + +Ex: + +```go +func init() { + appmodule.Register("cosmos.bank.module.v1.Module", + appmodule.Types( + types.Types_tx_proto, + types.Types_query_proto, + types.Types_types_proto, + ), + appmodule.Provide( + provideBankModule, + ) + ) +} + +type Inputs struct { + container.In + + AuthKeeper auth.Keeper + DB ormdb.ModuleDB +} + +type Outputs struct { + Keeper bank.Keeper + AppModule appmodule.AppModule +} + +func ProvideBankModule(config *bankmodulev1.Module, Inputs) (Outputs, error) { ... } +``` + +Note that in this module, a module configuration object *cannot* register different dependency providers at runtime +based on the configuration. This is intentional because it allows us to know globally which modules provide which +dependencies, and it will also allow us to do code generation of the whole app initialization. This +can help us figure out issues with missing dependencies in an app config if the needed modules are loaded at runtime. +In cases where required modules are not loaded at runtime, it may be possible to guide users to the correct module if +through a global Cosmos SDK module registry. + +The `*appmodule.Handler` type referenced above is a replacement for the legacy `AppModule` framework, and +described in [ADR 063: Core Module API](./adr-063-core-module-api.md). + +### New `app.go` + +With this setup, `app.go` might now look something like this: + +```go +package main + +import ( + // Each go package which registers a module must be imported just for side-effects + // so that module implementations are registered. + _ "github.com/cosmos/cosmos-sdk/x/auth/module" + _ "github.com/cosmos/cosmos-sdk/x/bank/module" + _ "github.com/cosmos/cosmos-sdk/x/staking/module" + "github.com/cosmos/cosmos-sdk/core/app" +) + +// go:embed app.yaml +var appConfigYAML []byte + +func main() { + app.Run(app.LoadYAML(appConfigYAML)) +} +``` + +### Application to existing SDK modules + +So far we have described a system which is largely agnostic to the specifics of the SDK such as store keys, `AppModule`, +`BaseApp`, etc. Improvements to these parts of the framework that integrate with the general app wiring framework +defined here are described in [ADR 061: Core Module API](./adr-063-core-module-api.md). + +### Registration of Inter-Module Hooks + +### Registration of Inter-Module Hooks + +Some modules define a hooks interface (ex. `StakingHooks`) which allows one module to call back into another module +when certain events happen. + +With the app wiring framework, these hooks interfaces can be defined as a `OnePerModuleType`s and then the module +which consumes these hooks can collect these hooks as a map of module name to hook type (ex. `map[string]FooHooks`). Ex: + +```go +func init() { + appmodule.Register( + &foomodulev1.Module{}, + appmodule.Invoke(InvokeSetFooHooks), + ... + ) +} +func InvokeSetFooHooks( + keeper *keeper.Keeper, + fooHooks map[string]FooHooks, +) error { + for k in sort.Strings(maps.Keys(fooHooks)) { + keeper.AddFooHooks(fooHooks[k]) + } +} +``` + +Optionally, the module consuming hooks can allow app's to define an order for calling these hooks based on module name +in its config object. + +An alternative way for registering hooks via reflection was considered where all keeper types are inspected to see if +they implement the hook interface by the modules exposing hooks. This has the downsides of: + +* needing to expose all the keepers of all modules to the module providing hooks, +* not allowing for encapsulating hooks on a different type which doesn't expose all keeper methods, +* harder to know statically which module expose hooks or are checking for them. + +With the approach proposed here, hooks registration will be obviously observable in `app.go` if `depinject` codegen +(described below) is used. + +### Code Generation + +The `depinject` framework will optionally allow the app configuration and dependency injection wiring to be code +generated. This will allow: + +* dependency injection wiring to be inspected as regular go code just like the existing `app.go`, +* dependency injection to be opt-in with manual wiring 100% still possible. + +Code generation requires that all providers and invokers and their parameters are exported and in non-internal packages. + +## Consequences + +### Backwards Compatibility + +Modules which work with the new app wiring system do not need to drop their existing `AppModule` and `NewKeeper` +registration paradigms. These two methods can live side-by-side for as long as is needed. + +### Positive + +* wiring up new apps will be simpler, more succinct and less error-prone +* it will be easier to develop and test standalone SDK modules without needing to replicate all of simapp +* it may be possible to dynamically load modules and upgrade chains without needing to do a coordinated stop and binary + upgrade using this mechanism +* easier plugin integration +* dependency injection framework provides more automated reasoning about dependencies in the project, with a graph visualization. + +### Negative + +* it may be confusing when a dependency is missing although error messages, the GraphViz visualization, and global + module registration may help with that + +### Neutral + +* it will require work and education + +## Further Discussions + +The protobuf type registration system described in this ADR has not been implemented and may need to be reconsidered in +light of code generation. It may be better to do this type registration with a DI provider. + +## References + +* https://github.com/cosmos/cosmos-sdk/blob/c3edbb22cab8678c35e21fe0253919996b780c01/simapp/app.go +* https://github.com/allinbits/cosmos-sdk-poc +* https://github.com/uber-go/dig +* https://github.com/google/wire +* https://pkg.go.dev/github.com/cosmos/cosmos-sdk/container +* https://github.com/cosmos/cosmos-sdk/pull/11802 +* [ADR 063](./adr-063-core-module-api.md) diff --git a/docs/integrate/architecture/adr-058-auto-generated-cli.md b/docs/integrate/architecture/adr-058-auto-generated-cli.md new file mode 100644 index 000000000..b295ff4b2 --- /dev/null +++ b/docs/integrate/architecture/adr-058-auto-generated-cli.md @@ -0,0 +1,98 @@ +# ADR 058: Auto-Generated CLI + +## Changelog + +* 2022-05-04: Initial Draft + +## Status + +ACCEPTED Partially Implemented + +## Abstract + +In order to make it easier for developers to write Cosmos SDK modules, we provide infrastructure which automatically +generates CLI commands based on protobuf definitions. + +## Context + +Current Cosmos SDK modules generally implement a CLI command for every transaction and every query supported by the +module. These are handwritten for each command and essentially amount to providing some CLI flags or positional +arguments for specific fields in protobuf messages. + +In order to make sure CLI commands are correctly implemented as well as to make sure that the application works +in end-to-end scenarios, we do integration tests using CLI commands. While these tests are valuable on some-level, +they can be hard to write and maintain, and run slowly. [Some teams have contemplated](https://github.com/regen-network/regen-ledger/issues/1041) +moving away from CLI-style integration tests (which are really end-to-end tests) towards narrower integration tests +which exercise `MsgClient` and `QueryClient` directly. This might involve replacing the current end-to-end CLI +tests with unit tests as there still needs to be some way to test these CLI commands for full quality assurance. + +## Decision + +To make module development simpler, we provide infrastructure - in the new [`client/v2`](https://github.com/cosmos/cosmos-sdk/tree/main/client/v2) +go module - for automatically generating CLI commands based on protobuf definitions to either replace or complement +handwritten CLI commands. This will mean that when developing a module, it will be possible to skip both writing and +testing CLI commands as that can all be taken care of by the framework. + +The basic design for automatically generating CLI commands is to: + +* create one CLI command for each `rpc` method in a protobuf `Query` or `Msg` service +* create a CLI flag for each field in the `rpc` request type +* for `query` commands call gRPC and print the response as protobuf JSON or YAML (via the `-o`/`--output` flag) +* for `tx` commands, create a transaction and apply common transaction flags + +In order to make the auto-generated CLI as easy to use (or easier) than handwritten CLI, we need to do custom handling +of specific protobuf field types so that the input format is easy for humans: + +* `Coin`, `Coins`, `DecCoin`, and `DecCoins` should be input using the existing format (i.e. `1000uatom`) +* it should be possible to specify an address using either the bech32 address string or a named key in the keyring +* `Timestamp` and `Duration` should accept strings like `2001-01-01T00:00:00Z` and `1h3m` respectively +* pagination should be handled with flags like `--page-limit`, `--page-offset`, etc. +* it should be possible to customize any other protobuf type either via its message name or a `cosmos_proto.scalar` annotation + +At a basic level it should be possible to generate a command for a single `rpc` method as well as all the commands for +a whole protobuf `service` definition. It should be possible to mix and match auto-generated and handwritten commands. + +## Consequences + +### Backwards Compatibility + +Existing modules can mix and match auto-generated and handwritten CLI commands so it is up to them as to whether they +make breaking changes by replacing handwritten commands with slightly different auto-generated ones. + +For now the SDK will maintain the existing set of CLI commands for backwards compatibility but new commands will use +this functionality. + +### Positive + +* module developers will not need to write CLI commands +* module developers will not need to test CLI commands +* [lens](https://github.com/strangelove-ventures/lens) may benefit from this + +### Negative + +### Neutral + +## Further Discussions + +We would like to be able to customize: + +* short and long usage strings for commands +* aliases for flags (ex. `-a` for `--amount`) +* which fields are positional parameters rather than flags + +It is an [open discussion](https://github.com/cosmos/cosmos-sdk/pull/11725#issuecomment-1108676129) +as to whether these customizations options should line in: + +* the .proto files themselves, +* separate config files (ex. YAML), or +* directly in code + +Providing the options in .proto files would allow a dynamic client to automatically generate +CLI commands on the fly. However, that may pollute the .proto files themselves with information that is only relevant +for a small subset of users. + +## References + +* https://github.com/regen-network/regen-ledger/issues/1041 +* https://github.com/cosmos/cosmos-sdk/tree/main/client/v2 +* https://github.com/cosmos/cosmos-sdk/pull/11725#issuecomment-1108676129 diff --git a/docs/integrate/architecture/adr-059-test-scopes.md b/docs/integrate/architecture/adr-059-test-scopes.md new file mode 100644 index 000000000..060344593 --- /dev/null +++ b/docs/integrate/architecture/adr-059-test-scopes.md @@ -0,0 +1,254 @@ +# ADR 059: Test Scopes + +## Changelog + +* 2022-08-02: Initial Draft +* 2023-03-02: Add precision for integration tests +* 2023-03-23: Add precision for E2E tests + +## Status + +PROPOSED Partially Implemented + +## Abstract + +Recent work in the SDK aimed at breaking apart the monolithic root go module has highlighted +shortcomings and inconsistencies in our testing paradigm. This ADR clarifies a common +language for talking about test scopes and proposes an ideal state of tests at each scope. + +## Context + +[ADR-053: Go Module Refactoring](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-053-go-module-refactoring.md) expresses our desire for an SDK composed of many +independently versioned Go modules, and [ADR-057: App Wiring](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-057-app-wiring.md) offers a methodology +for breaking apart inter-module dependencies through the use of dependency injection. As +described in [EPIC: Separate all SDK modules into standalone go modules](https://github.com/cosmos/cosmos-sdk/issues/11899), module +dependencies are particularly complected in the test phase, where simapp is used as +the key test fixture in setting up and running tests. It is clear that the successful +completion of Phases 3 and 4 in that EPIC require the resolution of this dependency problem. + +In [EPIC: Unit Testing of Modules via Mocks](https://github.com/cosmos/cosmos-sdk/issues/12398) it was thought this Gordian knot could be +unwound by mocking all dependencies in the test phase for each module, but seeing how these +refactors were complete rewrites of test suites discussions began around the fate of the +existing integration tests. One perspective is that they ought to be thrown out, another is +that integration tests have some utility of their own and a place in the SDK's testing story. + +Another point of confusion has been the current state of CLI test suites, [x/auth](https://github.com/cosmos/cosmos-sdk/blob/0f7e56c6f9102cda0ca9aba5b6f091dbca976b5a/x/auth/client/testutil/suite.go#L44-L49) for +example. In code these are called integration tests, but in reality function as end to end +tests by starting up a tendermint node and full application. [EPIC: Rewrite and simplify +CLI tests](https://github.com/cosmos/cosmos-sdk/issues/12696) identifies the ideal state of CLI tests using mocks, but does not address the +place end to end tests may have in the SDK. + +From here we identify three scopes of testing, **unit**, **integration**, **e2e** (end to +end), seek to define the boundaries of each, their shortcomings (real and imposed), and their +ideal state in the SDK. + +### Unit tests + +Unit tests exercise the code contained in a single module (e.g. `/x/bank`) or package +(e.g. `/client`) in isolation from the rest of the code base. Within this we identify two +levels of unit tests, *illustrative* and *journey*. The definitions below lean heavily on +[The BDD Books - Formulation](https://leanpub.com/bddbooks-formulation) section 1.3. + +*Illustrative* tests exercise an atomic part of a module in isolation - in this case we +might do fixture setup/mocking of other parts of the module. + +Tests which exercise a whole module's function with dependencies mocked, are *journeys*. +These are almost like integration tests in that they exercise many things together but still +use mocks. + +Example 1 journey vs illustrative tests - [depinject's BDD style tests](https://github.com/cosmos/cosmos-sdk/blob/main/depinject/features/bindings.feature), show how we can +rapidly build up many illustrative cases demonstrating behavioral rules without [very much code](https://github.com/cosmos/cosmos-sdk/blob/main/depinject/binding_test.go) while maintaining high level readability. + +Example 2 [depinject table driven tests](https://github.com/cosmos/cosmos-sdk/blob/main/depinject/provider_desc_test.go) + +Example 3 [Bank keeper tests](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/bank/keeper/keeper_test.go#L94-L105) - A mock implementation of `AccountKeeper` is supplied to the keeper constructor. + +#### Limitations + +Certain modules are tightly coupled beyond the test phase. A recent dependency report for +`bank -> auth` found 274 total usages of `auth` in `bank`, 50 of which are in +production code and 224 in test. This tight coupling may suggest that either the modules +should be merged, or refactoring is required to abstract references to the core types tying +the modules together. It could also indicate that these modules should be tested together +in integration tests beyond mocked unit tests. + +In some cases setting up a test case for a module with many mocked dependencies can be quite +cumbersome and the resulting test may only show that the mocking framework works as expected +rather than working as a functional test of interdependent module behavior. + +### Integration tests + +Integration tests define and exercise relationships between an arbitrary number of modules +and/or application subsystems. + +Wiring for integration tests is provided by `depinject` and some [helper code](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/testutil/sims/app_helpers.go#L95) starts up +a running application. A section of the running application may then be tested. Certain +inputs during different phases of the application life cycle are expected to produce +invariant outputs without too much concern for component internals. This type of black box +testing has a larger scope than unit testing. + +Example 1 [client/grpc_query_test/TestGRPCQuery](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/client/grpc_query_test.go#L111-L129) - This test is misplaced in `/client`, +but tests the life cycle of (at least) `runtime` and `bank` as they progress through +startup, genesis and query time. It also exercises the fitness of the client and query +server without putting bytes on the wire through the use of [QueryServiceTestHelper](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/baseapp/grpcrouter_helpers.go#L31). + +Example 2 `x/evidence` Keeper integration tests - Starts up an application composed of [8 +modules](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/evidence/testutil/app.yaml#L1) with [5 keepers](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/evidence/keeper/keeper_test.go#L101-L106) used in the integration test suite. One test in the suite +exercises [HandleEquivocationEvidence](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/evidence/keeper/infraction_test.go#L42) which contains many interactions with the staking +keeper. + +Example 3 - Integration suite app configurations may also be specified via golang (not +YAML as above) [statically](https://github.com/cosmos/cosmos-sdk/blob/main/x/nft/testutil/app_config.go) or [dynamically](https://github.com/cosmos/cosmos-sdk/blob/8c23f6f957d1c0bedd314806d1ac65bea59b084c/tests/integration/bank/keeper/keeper_test.go#L129-L134). + +#### Limitations + +Setting up a particular input state may be more challenging since the application is +starting from a zero state. Some of this may be addressed by good test fixture +abstractions with testing of their own. Tests may also be more brittle, and larger +refactors could impact application initialization in unexpected ways with harder to +understand errors. This could also be seen as a benefit, and indeed the SDK's current +integration tests were helpful in tracking down logic errors during earlier stages +of app-wiring refactors. + +### Simulations + +Simulations (also called generative testing) are a special case of integration tests where +deterministically random module operations are executed against a running simapp, building +blocks on the chain until a specified height is reached. No *specific* assertions are +made for the state transitions resulting from module operations but any error will halt and +fail the simulation. Since `crisis` is included in simapp and the simulation runs +EndBlockers at the end of each block any module invariant violations will also fail +the simulation. + +Modules must implement [AppModuleSimulation.WeightedOperations](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/types/module/simulation.go#L31) to define their +simulation operations. Note that not all modules implement this which may indicate a +gap in current simulation test coverage. + +Modules not returning simulation operations: + +* `auth` +* `evidence` +* `mint` +* `params` + +A separate binary, [runsim](https://github.com/cosmos/tools/tree/master/cmd/runsim), is responsible for kicking off some of these tests and +managing their life cycle. + +#### Limitations + +* [A success](https://github.com/cosmos/cosmos-sdk/runs/7606931983?check_suite_focus=true) may take a long time to run, 7-10 minutes per simulation in CI. +* [Timeouts](https://github.com/cosmos/cosmos-sdk/runs/7606932295?check_suite_focus=true) sometimes occur on apparent successes without any indication why. +* Useful error messages not provided on [failure](https://github.com/cosmos/cosmos-sdk/runs/7606932548?check_suite_focus=true) from CI, requiring a developer to run + the simulation locally to reproduce. + +### E2E tests + +End to end tests exercise the entire system as we understand it in as close an approximation +to a production environment as is practical. Presently these tests are located at +[tests/e2e](https://github.com/cosmos/cosmos-sdk/tree/main/tests/e2e) and rely on [testutil/network](https://github.com/cosmos/cosmos-sdk/tree/main/testutil/network) to start up an in-process Tendermint node. + +An application should be built as minimally as possible to exercise the desired functionality. +The SDK uses an application will only the required modules for the tests. The application developer is adviced to use its own application for e2e tests. + +#### Limitations + +In general the limitations of end to end tests are orchestration and compute cost. +Scaffolding is required to start up and run a prod-like environment and the this +process takes much longer to start and run than unit or integration tests. + +Global locks present in Tendermint code cause stateful starting/stopping to sometimes hang +or fail intermittently when run in a CI environment. + +The scope of e2e tests has been complected with command line interface testing. + +## Decision + +We accept these test scopes and identify the following decisions points for each. + +| Scope | App Type | Mocks? | +| ----------- | ------------------- | ------ | +| Unit | None | Yes | +| Integration | integration helpers | Some | +| Simulation | minimal app | No | +| E2E | minimal app | No | + +The decision above is valid for the SDK. An application developer should test their application with their full application instead of the minimal app. + +### Unit Tests + +All modules must have mocked unit test coverage. + +Illustrative tests should outnumber journeys in unit tests. + +Unit tests should outnumber integration tests. + +Unit tests must not introduce additional dependencies beyond those already present in +production code. + +When module unit test introduction as per [EPIC: Unit testing of modules via mocks](https://github.com/cosmos/cosmos-sdk/issues/12398) +results in a near complete rewrite of an integration test suite the test suite should be +retained and moved to `/tests/integration`. We accept the resulting test logic +duplication but recommend improving the unit test suite through the addition of +illustrative tests. + +### Integration Tests + +All integration tests shall be located in `/tests/integration`, even those which do not +introduce extra module dependencies. + +To help limit scope and complexity, it is recommended to use the smallest possible number of +modules in application startup, i.e. don't depend on simapp. + +Integration tests should outnumber e2e tests. + +### Simulations + +Simulations shall use a minimal application (usually via app wiring). They are located under `/x/{moduleName}/simulation`. + +### E2E Tests + +Existing e2e tests shall be migrated to integration tests by removing the dependency on the +test network and in-process Tendermint node to ensure we do not lose test coverage. + +The e2e rest runner shall transition from in process Tendermint to a runner powered by +Docker via [dockertest](https://github.com/ory/dockertest). + +E2E tests exercising a full network upgrade shall be written. + +The CLI testing aspect of existing e2e tests shall be rewritten using the network mocking +demonstrated in [PR#12706](https://github.com/cosmos/cosmos-sdk/pull/12706). + +## Consequences + +### Positive + +* test coverage is increased +* test organization is improved +* reduced dependency graph size in modules +* simapp removed as a dependency from modules +* inter-module dependencies introduced in test code are removed +* reduced CI run time after transitioning away from in process Tendermint + +### Negative + +* some test logic duplication between unit and integration tests during transition +* test written using dockertest DX may be a bit worse + +### Neutral + +* some discovery required for e2e transition to dockertest + +## Further Discussions + +It may be useful if test suites could be run in integration mode (with mocked tendermint) or +with e2e fixtures (with real tendermint and many nodes). Integration fixtures could be used +for quicker runs, e2e fixures could be used for more battle hardening. + +A PoC `x/gov` was completed in PR [#12847](https://github.com/cosmos/cosmos-sdk/pull/12847) +is in progress for unit tests demonstrating BDD [Rejected]. +Observing that a strength of BDD specifications is their readability, and a con is the +cognitive load while writing and maintaining, current consensus is to reserve BDD use +for places in the SDK where complex rules and module interactions are demonstrated. +More straightforward or low level test cases will continue to rely on go table tests. + +Levels are network mocking in integration and e2e tests are still being worked on and formalized. diff --git a/docs/integrate/architecture/adr-060-abci-1.0.md b/docs/integrate/architecture/adr-060-abci-1.0.md new file mode 100644 index 000000000..3f29be784 --- /dev/null +++ b/docs/integrate/architecture/adr-060-abci-1.0.md @@ -0,0 +1,238 @@ +# ADR 60: ABCI 1.0 Integration (Phase I) + +## Changelog + +* 2022-08-10: Initial Draft (@alexanderbez, @tac0turtle) +* Nov 12, 2022: Update `PrepareProposal` and `ProcessProposal` semantics per the + initial implementation [PR](https://github.com/cosmos/cosmos-sdk/pull/13453) (@alexanderbez) + +## Status + +ACCEPTED + +## Abstract + +This ADR describes the initial adoption of [ABCI 1.0](https://github.com/tendermint/tendermint/blob/master/spec/abci%2B%2B/README.md), +the next evolution of ABCI, within the Cosmos SDK. ABCI 1.0 aims to provide +application developers with more flexibility and control over application and +consensus semantics, e.g. in-application mempools, in-process oracles, and +order-book style matching engines. + +## Context + +Tendermint will release ABCI 1.0. Notably, at the time of this writing, +Tendermint is releasing v0.37.0 which will include `PrepareProposal` and `ProcessProposal`. + +The `PrepareProposal` ABCI method is concerned with a block proposer requesting +the application to evaluate a series of transactions to be included in the next +block, defined as a slice of `TxRecord` objects. The application can either +accept, reject, or completely ignore some or all of these transactions. This is +an important consideration to make as the application can essentially define and +control its own mempool allowing it to define sophisticated transaction priority +and filtering mechanisms, by completely ignoring the `TxRecords` Tendermint +sends it, favoring its own transactions. This essentially means that the Tendermint +mempool acts more like a gossip data structure. + +The second ABCI method, `ProcessProposal`, is used to process the block proposer's +proposal as defined by `PrepareProposal`. It is important to note the following +with respect to `ProcessProposal`: + +* Execution of `ProcessProposal` must be deterministic. +* There must be coherence between `PrepareProposal` and `ProcessProposal`. In + other words, for any two correct processes *p* and *q*, if *q*'s Tendermint + calls `RequestProcessProposal` on *up*, *q*'s Application returns + ACCEPT in `ResponseProcessProposal`. + +It is important to note that in ABCI 1.0 integration, the application +is NOT responsible for locking semantics -- Tendermint will still be responsible +for that. In the future, however, the application will be responsible for locking, +which allows for parallel execution possibilities. + +## Decision + +We will integrate ABCI 1.0, which will be introduced in Tendermint +v0.37.0, in the next major release of the Cosmos SDK. We will integrate ABCI 1.0 +methods on the `BaseApp` type. We describe the implementations of the two methods +individually below. + +Prior to describing the implementation of the two new methods, it is important to +note that the existing ABCI methods, `CheckTx`, `DeliverTx`, etc, still exist and +serve the same functions as they do now. + +### `PrepareProposal` + +Prior to evaluating the decision for how to implement `PrepareProposal`, it is +important to note that `CheckTx` will still be executed and will be responsible +for evaluating transaction validity as it does now, with one very important +*additive* distinction. + +When executing transactions in `CheckTx`, the application will now add valid +transactions, i.e. passing the AnteHandler, to its own mempool data structure. +In order to provide a flexible approach to meet the varying needs of application +developers, we will define both a mempool interface and a data structure utilizing +Golang generics, allowing developers to focus only on transaction +ordering. Developers requiring absolute full control can implement their own +custom mempool implementation. + +We define the general mempool interface as follows (subject to change): + +```go +type Mempool interface { + // Insert attempts to insert a Tx into the app-side mempool returning + // an error upon failure. + Insert(sdk.Context, sdk.Tx) error + + // Select returns an Iterator over the app-side mempool. If txs are specified, + // then they shall be incorporated into the Iterator. The Iterator must + // closed by the caller. + Select(sdk.Context, [][]byte) Iterator + + // CountTx returns the number of transactions currently in the mempool. + CountTx() int + + // Remove attempts to remove a transaction from the mempool, returning an error + // upon failure. + Remove(sdk.Tx) error +} + +// Iterator defines an app-side mempool iterator interface that is as minimal as +// possible. The order of iteration is determined by the app-side mempool +// implementation. +type Iterator interface { + // Next returns the next transaction from the mempool. If there are no more + // transactions, it returns nil. + Next() Iterator + + // Tx returns the transaction at the current position of the iterator. + Tx() sdk.Tx +} +``` + +We will define an implementation of `Mempool`, defined by `nonceMempool`, that +will cover most basic application use-cases. Namely, it will prioritize transactions +by transaction sender, allowing for multiple transactions from the same sender. + +The default app-side mempool implementation, `nonceMempool`, will operate on a +single skip list data structure. Specifically, transactions with the lowest nonce +globally are prioritized. Transactions with the same nonce are prioritized by +sender address. + +```go +type nonceMempool struct { + txQueue *huandu.SkipList +} +``` + +Previous discussions1 have come to the agreement that Tendermint will +perform a request to the application, via `RequestPrepareProposal`, with a certain +amount of transactions reaped from Tendermint's local mempool. The exact amount +of transactions reaped will be determined by a local operator configuration. +This is referred to as the "one-shot approach" seen in discussions. + +When Tendermint reaps transactions from the local mempool and sends them to the +application via `RequestPrepareProposal`, the application will have to evaluate +the transactions. Specifically, it will need to inform Tendermint if it should +reject and or include each transaction. Note, the application can even *replace* +transactions entirely with other transactions. + +When evaluating transactions from `RequestPrepareProposal`, the application will +ignore *ALL* transactions sent to it in the request and instead reap up to +`RequestPrepareProposal.max_tx_bytes` from it's own mempool. + +Since an application can technically insert or inject transactions on `Insert` +during `CheckTx` execution, it is recommended that applications ensure transaction +validity when reaping transactions during `PrepareProposal`. However, what validity +exactly means is entirely determined by the application. + +The Cosmos SDK will provide a default `PrepareProposal` implementation that simply +select up to `MaxBytes` *valid* transactions. + +However, applications can override this default implementation with their own +implementation and set that on `BaseApp` via `SetPrepareProposal`. + + +### `ProcessProposal` + +The `ProcessProposal` ABCI method is relatively straightforward. It is responsible +for ensuring validity of the proposed block containing transactions that were +selected from the `PrepareProposal` step. However, how an application determines +validity of a proposed block depends on the application and its varying use cases. +For most applications, simply calling the `AnteHandler` chain would suffice, but +there could easily be other applications that need more control over the validation +process of the proposed block, such as ensuring txs are in a certain order or +that certain transactions are included. While this theoretically could be achieved +with a custom `AnteHandler` implementation, it's not the cleanest UX or the most +efficient solution. + +Instead, we will define an additional ABCI interface method on the existing +`Application` interface, similar to the existing ABCI methods such as `BeginBlock` +or `EndBlock`. This new interface method will be defined as follows: + +```go +ProcessProposal(sdk.Context, abci.RequestProcessProposal) error {} +``` + +Note, we must call `ProcessProposal` with a new internal branched state on the +`Context` argument as we cannot simply just use the existing `checkState` because +`BaseApp` already has a modified `checkState` at this point. So when executing +`ProcessProposal`, we create a similar branched state, `processProposalState`, +off of `deliverState`. Note, the `processProposalState` is never committed and +is completely discarded after `ProcessProposal` finishes execution. + +The Cosmos SDK will provide a default implementation of `ProcessProposal` in which +all transactions are validated using the CheckTx flow, i.e. the AnteHandler, and +will always return ACCEPT unless any transaction cannot be decoded. + +### `DeliverTx` + +Since transactions are not truly removed from the app-side mempool during +`PrepareProposal`, since `ProcessProposal` can fail or take multiple rounds and +we do not want to lose transactions, we need to finally remove the transaction +from the app-side mempool during `DeliverTx` since during this phase, the +transactions are being included in the proposed block. + +Alternatively, we can keep the transactions as truly being removed during the +reaping phase in `PrepareProposal` and add them back to the app-side mempool in +case `ProcessProposal` fails. + +## Consequences + +### Backwards Compatibility + +ABCI 1.0 is naturally not backwards compatible with prior versions of the Cosmos SDK +and Tendermint. For example, an application that requests `RequestPrepareProposal` +to the same application that does not speak ABCI 1.0 will naturally fail. + +However, in the first phase of the integration, the existing ABCI methods as we +know them today will still exist and function as they currently do. + +### Positive + +* Applications now have full control over transaction ordering and priority. +* Lays the groundwork for the full integration of ABCI 1.0, which will unlock more + app-side use cases around block construction and integration with the Tendermint + consensus engine. + +### Negative + +* Requires that the "mempool", as a general data structure that collects and stores + uncommitted transactions will be duplicated between both Tendermint and the + Cosmos SDK. +* Additional requests between Tendermint and the Cosmos SDK in the context of + block execution. Albeit, the overhead should be negligible. +* Not backwards compatible with previous versions of Tendermint and the Cosmos SDK. + +## Further Discussions + +It is possible to design the app-side implementation of the `Mempool[T MempoolTx]` +in many different ways using different data structures and implementations. All +of which have different tradeoffs. The proposed solution keeps things simple +and covers cases that would be required for most basic applications. There are +tradeoffs that can be made to improve performance of reaping and inserting into +the provided mempool implementation. + +## References + +* https://github.com/tendermint/tendermint/blob/master/spec/abci%2B%2B/README.md +* [1] https://github.com/tendermint/tendermint/issues/7750#issuecomment-1076806155 +* [2] https://github.com/tendermint/tendermint/issues/7750#issuecomment-1075717151 diff --git a/docs/integrate/architecture/adr-061-liquid-staking.md b/docs/integrate/architecture/adr-061-liquid-staking.md new file mode 100644 index 000000000..fcfeda0d3 --- /dev/null +++ b/docs/integrate/architecture/adr-061-liquid-staking.md @@ -0,0 +1,82 @@ +# ADR ADR-061: Liquid Staking + +## Changelog + +* 2022-09-10: Initial Draft (@zmanian) + +## Status + +ACCEPTED + +## Abstract + +Add a semi-fungible liquid staking primitive to the default Cosmos SDK staking module. This upgrades proof of stake to enable safe designs with lower overall monetary issuance and integration with numerous liquid staking protocols like Stride, Persistence, Quicksilver, Lido etc. + +## Context + +The original release of the Cosmos Hub featured the implementation of a ground breaking proof of stake mechanism featuring delegation, slashing, in protocol reward distribution and adaptive issuance. This design was state of the art for 2016 and has been deployed without major changes by many L1 blockchains. + +As both Proof of Stake and blockchain use cases have matured, this design has aged poorly and should no longer be considered a good baseline Proof of Stake issuance. In the world of application specific blockchains, there cannot be a one size fits all blockchain but the Cosmos SDK does endeavour to provide a good baseline implementation and one that is suitable for the Cosmos Hub. + +The most important deficiency of the legacy staking design is that it composes poorly with on chain protocols for trading, lending, derivatives that are referred to collectively as DeFi. The legacy staking implementation starves these applications of liquidity by increasing the risk free rate adaptively. It basically makes DeFi and staking security somewhat incompatible. + +The Osmosis team has adopted the idea of Superfluid and Interfluid staking where assets that are participating in DeFi appliactions can also be used in proof of stake. This requires tight integration with an enshrined set of DeFi applications and thus is unsuitable for the Cosmos SDK. + +It's also important to note that Interchain Accounts are available in the default IBC implementation and can be used to [rehypothecate](https://www.investopedia.com/terms/h/hypothecation.asp#toc-what-is-rehypothecation) delegations. Thus liquid staking is already possible and these changes merely improve the UX of liquid staking. Centralized exchanges also rehypothecate staked assets, posing challenges for decentralization. This ADR takes the position that adoption of in-protocol liquid staking is the preferable outcome and provides new levers to incentivize decentralization of stake. + +These changes to the staking module have been in development for more than a year and have seen substantial industry adoption who plan to build staking UX. The internal economics at Informal team has also done a review of the impacts of these changes and this review led to the development of the exempt delegation system. This system provides governance with a tuneable parameter for modulating the risks of principal agent problem called the exemption factor. + +## Decision + +We implement the semi-fungible liquid staking system and exemption factor system within the cosmos sdk. Though registered as fungible assets, these tokenized shares have extremely limited fungibility, only among the specific delegation record that was created when shares were tokenized. These assets can be used for OTC trades but composability with DeFi is limited. The primary expected use case is improving the user experience of liquid staking providers. + +A new governance parameter is introduced that defines the ratio of exempt to issued tokenized shares. This is called the exemption factor. A larger exemption factor allows more tokenized shares to be issued for a smaller amount of exempt delegations. If governance is comfortable with how the liquid staking market is evolving, it makes sense to increase this value. + +Min self delegation is removed from the staking system with the expectation that it will be replaced by the exempt delegations system. The exempt delegation system allows multiple accounts to demonstrate economic alignment with the validator operator as team members, partners etc. without co-mingling funds. Delegation exemption will likely be required to grow the validators' business under widespread adoption of liquid staking once governance has adjusted the exemption factor. + +When shares are tokenized, the underlying shares are transferred to a module account and rewards go to the module account for the TokenizedShareRecord. + +There is no longer a mechanism to override the validators vote for TokenizedShares. + + +### `MsgTokenizeShares` + +The MsgTokenizeShares message is used to create tokenize delegated tokens. This message can be executed by any delegator who has positive amount of delegation and after execution the specific amount of delegation disappear from the account and share tokens are provided. Share tokens are denominated in the validator and record id of the underlying delegation. + +A user may tokenize some or all of their delegation. + +They will receive shares with the denom of `cosmosvaloper1xxxx/5` where 5 is the record id for the validator operator. + +MsgTokenizeShares fails if the account is a VestingAccount. Users will have to move vested tokens to a new account and endure the unbonding period. We view this as an acceptable tradeoff vs. the complex book keeping required to track vested tokens. + +The total amount of outstanding tokenized shares for the validator is checked against the sum of exempt delegations multiplied by the exemption factor. If the tokenized shares exceeds this limit, execution fails. + +MsgTokenizeSharesResponse provides the number of tokens generated and their denom. + + +### `MsgRedeemTokensforShares` + +The MsgRedeemTokensforShares message is used to redeem the delegation from share tokens. This message can be executed by any user who owns share tokens. After execution delegations will appear to the user. + +### `MsgTransferTokenizeShareRecord` + +The MsgTransferTokenizeShareRecord message is used to transfer the ownership of rewards generated from the tokenized amount of delegation. The tokenize share record is created when a user tokenize his/her delegation and deleted when the full amount of share tokens are redeemed. + +This is designed to work with liquid staking designs that do not redeem the tokenized shares and may instead want to keep the shares tokenized. + + +### `MsgExemptDelegation` + +The MsgExemptDelegation message is used to exempt a delegation to a validator. If the exemption factor is greater than 0, this will allow more delegation shares to be issued from the validator. + +This design allows the chain to force an amount of self-delegation by validators participating in liquid staking schemes. + +## Consequences + +### Backwards Compatibility + +By setting the exemption factor to zero, this module works like legacy staking. The only substantial change is the removal of min-self-bond and without any tokenized shares, there is no incentive to exempt delegation. + +### Positive + +This approach should enable integration with liquid staking providers and improved user experience. It provides a pathway to security under non-exponential issuance policies in the baseline staking module. diff --git a/docs/integrate/architecture/adr-062-collections-state-layer.md b/docs/integrate/architecture/adr-062-collections-state-layer.md new file mode 100644 index 000000000..8ebaddda7 --- /dev/null +++ b/docs/integrate/architecture/adr-062-collections-state-layer.md @@ -0,0 +1,117 @@ +# ADR 062: Collections, a simplified storage layer for cosmos-sdk modules. + +## Changelog + +* 30/11/2022: PROPOSED + +## Status + +PROPOSED - Implemented + +## Abstract + +We propose a simplified module storage layer which leverages golang generics to allow module developers to handle module +storage in a simple and straightforward manner, whilst offering safety, extensibility and standardisation. + +## Context + +Module developers are forced into manually implementing storage functionalities in their modules, those functionalities include +but are not limited to: + +- Defining key to bytes formats. +- Defining value to bytes formats. +- Defining secondary indexes. +- Defining query methods to expose outside to deal with storage. +- Defining local methods to deal with storage writing. +- Dealing with genesis imports and exports. +- Writing tests for all the above. + + +This brings in a lot of problems: +- It blocks developers from focusing on the most important part: writing business logic. +- Key to bytes formats are complex and their definition is error-prone, for example: + - how do I format time to bytes in such a way that bytes are sorted? + - how do I ensure when I don't have namespace collisions when dealing with secondary indexes? +- The lack of standardisation makes life hard for clients, and the problem is exacerbated when it comes to providing proofs for objects present in state. Clients are forced to maintain a list of object paths to gather proofs. + +### Current Solution: ORM + +The current SDK proposed solution to this problem is [ORM](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-055-orm.md). +Whilst ORM offers a lot of good functionality aimed at solving these specific problems, it has some downsides: +- It requires migrations. +- It uses the newest protobuf golang API, whilst the SDK still mainly uses gogoproto. +- Integrating ORM into a module would require the developer to deal with two different golang frameworks (golang protobuf + gogoproto) representing the same API objects. +- It has a high learning curve, even for simple storage layers as it requires developers to have knowledge around protobuf options, custom cosmos-sdk storage extensions, and tooling download. Then after this they still need to learn the code-generated API. + +### CosmWasm Solution: cw-storage-plus + +The collections API takes inspiration from [cw-storage-plus](https://docs.cosmwasm.com/docs/1.0/smart-contracts/state/cw-plus/), +which has demonstrated to be a powerful tool for dealing with storage in CosmWasm contracts. +It's simple, does not require extra tooling, it makes it easy to deal with complex storage structures (indexes, snapshot, etc). +The API is straightforward and explicit. + +## Decision + +We propose to port the `collections` API, whose implementation lives in [NibiruChain/collections](https://github.com/NibiruChain/collections) to cosmos-sdk. + +Collections implements four different storage handlers types: + +- `Map`: which deals with simple `key=>object` mappings. +- `KeySet`: which acts as a `Set` and only retains keys and no object (usecase: allow-lists). +- `Item`: which always contains only one object (usecase: Params) +- `Sequence`: which implements a simple always increasing number (usecase: Nonces) +- `IndexedMap`: builds on top of `Map` and `KeySet` and allows to create relationships with `Objects` and `Objects` secondary keys. + +All the collection APIs build on top of the simple `Map` type. + +Collections is fully generic, meaning that anything can be used as `Key` and `Value`. It can be a protobuf object or not. + +Collections types, in fact, delegate the duty of serialisation of keys and values to a secondary collections API component called `ValueEncoders` and `KeyEncoders`. + +`ValueEncoders` take care of converting a value to bytes (relevant only for `Map`). And offers a plug and play layer which allows us to change how we encode objects, +which is relevant for swapping serialisation frameworks and enhancing performance. +`Collections` already comes in with default `ValueEncoders`, specifically for: protobuf objects, special SDK types (sdk.Int, sdk.Dec). + +`KeyEncoders` take care of converting keys to bytes, `collections` already comes in with some default `KeyEncoders` for some privimite golang types +(uint64, string, time.Time, ...) and some widely used sdk types (sdk.Acc/Val/ConsAddress, sdk.Int/Dec, ...). +These default implementations also offer safety around proper lexicographic ordering and namespace-collision. + +Examples of the collections API can be found here: +- introduction: https://github.com/NibiruChain/collections/tree/main/examples +- usage in nibiru: [x/oracle](https://github.com/NibiruChain/nibiru/blob/master/x/oracle/keeper/keeper.go#L32), [x/perp](https://github.com/NibiruChain/nibiru/blob/master/x/perp/keeper/keeper.go#L31) +- cosmos-sdk's x/staking migrated: https://github.com/testinginprod/cosmos-sdk/pull/22 + + +## Consequences + +### Backwards Compatibility + +The design of `ValueEncoders` and `KeyEncoders` allows modules to retain the same `byte(key)=>byte(value)` mappings, making +the upgrade to the new storage layer non-state breaking. + + +### Positive + +- ADR aimed at removing code from the SDK rather than adding it. Migrating just `x/staking` to collections would yield to a net decrease in LOC (even considering the addition of collections itself). +- Simplifies and standardises storage layers across modules in the SDK. +- Does not require to have to deal with protobuf. +- It's pure golang code. +- Generalisation over `KeyEncoders` and `ValueEncoders` allows us to not tie ourself to the data serialisation framework. +- `KeyEncoders` and `ValueEncoders` can be extended to provide schema reflection. + +### Negative + +- Golang generics are not as battle-tested as other Golang features, despite being used in production right now. +- Collection types instantiation needs to be improved. + +### Neutral + +{neutral consequences} + +## Further Discussions + +- Automatic genesis import/export (not implemented because of API breakage) +- Schema reflection + + +## References diff --git a/docs/integrate/architecture/adr-063-core-module-api.md b/docs/integrate/architecture/adr-063-core-module-api.md new file mode 100644 index 000000000..034b01fab --- /dev/null +++ b/docs/integrate/architecture/adr-063-core-module-api.md @@ -0,0 +1,507 @@ +# ADR 063: Core Module API + +## Changelog + +* 2022-08-18 First Draft +* 2022-12-08 First Draft +* 2023-01-24 Updates + +## Status + +ACCEPTED Partially Implemented + +## Abstract + +A new core API is proposed as a way to develop cosmos-sdk applications that will eventually replace the existing +`AppModule` and `sdk.Context` frameworks a set of core services and extension interfaces. This core API aims to: + +* be simpler +* more extensible +* more stable than the current framework +* enable deterministic events and queries, +* support event listeners +* [ADR 033: Protobuf-based Inter-Module Communication](adr-033-protobuf-inter-module-comm.md) clients. + +## Context + +Historically modules have exposed their functionality to the framework via the `AppModule` and `AppModuleBasic` +interfaces which have the following shortcomings: + +* both `AppModule` and `AppModuleBasic` need to be defined and registered which is counter-intuitive +* apps need to implement the full interfaces, even parts they don't need (although there are workarounds for this), +* interface methods depend heavily on unstable third party dependencies, in particular Comet, +* legacy required methods have littered these interfaces for far too long + +In order to interact with the state machine, modules have needed to do a combination of these things: + +* get store keys from the app +* call methods on `sdk.Context` which contains more or less the full set of capability available to modules. + +By isolating all the state machine functionality into `sdk.Context`, the set of functionalities available to +modules are tightly coupled to this type. If there are changes to upstream dependencies (such as Comet) +or new functionalities are desired (such as alternate store types), the changes need impact `sdk.Context` and all +consumers of it (basically all modules). Also, all modules now receive `context.Context` and need to convert these +to `sdk.Context`'s with a non-ergonomic unwrapping function. + +Any breaking changes to these interfaces, such as ones imposed by third-party dependencies like Comet, have the +side effect of forcing all modules in the ecosystem to update in lock-step. This means it is almost impossible to have +a version of the module which can be run with 2 or 3 different versions of the SDK or 2 or 3 different versions of +another module. This lock-step coupling slows down overall development within the ecosystem and causes updates to +components to be delayed longer than they would if things were more stable and loosely coupled. + +## Decision + +The `core` API proposes a set of core APIs that modules can rely on to interact with the state machine and expose their +functionalities to it that are designed in a principled way such that: + +* tight coupling of dependencies and unrelated functionalities is minimized or eliminated +* APIs can have long-term stability guarantees +* the SDK framework is extensible in a safe and straightforward way + +The design principles of the core API are as follows: + +* everything that a module wants to interact with in the state machine is a service +* all services coordinate state via `context.Context` and don't try to recreate the "bag of variables" approach of `sdk.Context` +* all independent services are isolated in independent packages with minimal APIs and minimal dependencies +* the core API should be minimalistic and designed for long-term support (LTS) +* a "runtime" module will implement all the "core services" defined by the core API and can handle all module + functionalities exposed by core extension interfaces +* other non-core and/or non-LTS services can be exposed by specific versions of runtime modules or other modules +following the same design principles, this includes functionality that interacts with specific non-stable versions of +third party dependencies such as Comet +* the core API doesn't implement *any* functionality, it just defines types +* go stable API compatibility guidelines are followed: https://go.dev/blog/module-compatibility + +A "runtime" module is any module which implements the core functionality of composing an ABCI app, which is currently +handled by `BaseApp` and the `ModuleManager`. Runtime modules which implement the core API are *intentionally* separate +from the core API in order to enable more parallel versions and forks of the runtime module than is possible with the +SDK's current tightly coupled `BaseApp` design while still allowing for a high degree of composability and +compatibility. + +Modules which are built only against the core API don't need to know anything about which version of runtime, +`BaseApp` or Comet in order to be compatible. Modules from the core mainline SDK could be easily composed +with a forked version of runtime with this pattern. + +This design is intended to enable matrices of compatible dependency versions. Ideally a given version of any module +is compatible with multiple versions of the runtime module and other compatible modules. This will allow dependencies +to be selectively updated based on battle-testing. More conservative projects may want to update some dependencies +slower than more fast moving projects. + +### Core Services + +The following "core services" are defined by the core API. All valid runtime module implementations should provide +implementations of these services to modules via both [dependency injection](adr-057-app-wiring.md) and +manual wiring. The individual services described below are all bundled in a convenient `appmodule.Service` +"bundle service" so that for simplicity modules can declare a dependency on a single service. + +#### Store Services + +Store services will be defined in the `cosmossdk.io/core/store` package. + +The generic `store.KVStore` interface is the same as current SDK `KVStore` interface. Store keys have been refactored +into store services which, instead of expecting the context to know about stores, invert the pattern and allow +retrieving a store from a generic context. There are three store services for the three types of currently supported +stores - regular kv-store, memory, and transient: + +```go +type KVStoreService interface { + OpenKVStore(context.Context) KVStore +} + +type MemoryStoreService interface { + OpenMemoryStore(context.Context) KVStore +} +type TransientStoreService interface { + OpenTransientStore(context.Context) KVStore +} +``` + +Modules can use these services like this: + +```go +func (k msgServer) Send(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { + store := k.kvStoreSvc.OpenKVStore(ctx) +} +``` + +Just as with the current runtime module implementation, modules will not need to explicitly name these store keys, +but rather the runtime module will choose an appropriate name for them and modules just need to request the +type of store they need in their dependency injection (or manual) constructors. + +#### Event Service + +The event `Service` will be defined in the `cosmossdk.io/core/event` package. + +The event `Service` allows modules to emit typed and legacy untyped events: + +```go +package event + +type Service interface { + // EmitProtoEvent emits events represented as a protobuf message (as described in ADR 032). + // + // Callers SHOULD assume that these events may be included in consensus. These events + // MUST be emitted deterministically and adding, removing or changing these events SHOULD + // be considered state-machine breaking. + EmitProtoEvent(ctx context.Context, event protoiface.MessageV1) error + + // EmitKVEvent emits an event based on an event and kv-pair attributes. + // + // These events will not be part of consensus and adding, removing or changing these events is + // not a state-machine breaking change. + EmitKVEvent(ctx context.Context, eventType string, attrs ...KVEventAttribute) error + + // EmitProtoEventNonConsensus emits events represented as a protobuf message (as described in ADR 032), without + // including it in blockchain consensus. + // + // These events will not be part of consensus and adding, removing or changing events is + // not a state-machine breaking change. + EmitProtoEventNonConsensus(ctx context.Context, event protoiface.MessageV1) error +} +``` + +Typed events emitted with `EmitProto` should be assumed to be part of blockchain consensus (whether they are part of +the block or app hash is left to the runtime to specify). + +Events emitted by `EmitKVEvent` and `EmitProtoEventNonConsensus` are not considered to be part of consensus and cannot be observed +by other modules. If there is a client-side need to add events in patch releases, these methods can be used. + +#### Logger + +A logger (`cosmossdk.io/log`) must be supplied using `depinject`, and will +be made available for modules to use via `depinject.In`. +Modules using it should follow the current pattern in the SDK by adding the module name before using it. + +```go +type ModuleInputs struct { + depinject.In + + Logger log.Logger +} + +func ProvideModule(in ModuleInputs) ModuleOutputs { + keeper := keeper.NewKeeper( + in.logger, + ) +} + +func NewKeeper(logger log.Logger) Keeper { + return Keeper{ + logger: logger.With(log.ModuleKey, "x/"+types.ModuleName), + } +} +``` + +``` + +### Core `AppModule` extension interfaces + + +Modules will provide their core services to the runtime module via extension interfaces built on top of the +`cosmossdk.io/core/appmodule.AppModule` tag interface. This tag interface requires only two empty methods which +allow `depinject` to identify implementors as `depinject.OnePerModule` types and as app module implementations: + +```go +type AppModule interface { + depinject.OnePerModuleType + + // IsAppModule is a dummy method to tag a struct as implementing an AppModule. + IsAppModule() +} +``` + +Other core extension interfaces will be defined in `cosmossdk.io/core` should be supported by valid runtime +implementations. + +#### `MsgServer` and `QueryServer` registration + +`MsgServer` and `QueryServer` registration is done by implementing the `HasServices` extension interface: + +```go +type HasServices interface { + AppModule + + RegisterServices(grpc.ServiceRegistrar) +} + +``` + +Because of the `cosmos.msg.v1.service` protobuf option, required for `Msg` services, the same `ServiceRegitrar` can be +used to register both `Msg` and query services. + +#### Genesis + +The genesis `Handler` functions - `DefaultGenesis`, `ValidateGenesis`, `InitGenesis` and `ExportGenesis` - are specified +against the `GenesisSource` and `GenesisTarget` interfaces which will abstract over genesis sources which may be a single +JSON object or collections of JSON objects that can be efficiently streamed. + +```go +// GenesisSource is a source for genesis data in JSON format. It may abstract over a +// single JSON object or separate files for each field in a JSON object that can +// be streamed over. Modules should open a separate io.ReadCloser for each field that +// is required. When fields represent arrays they can efficiently be streamed +// over. If there is no data for a field, this function should return nil, nil. It is +// important that the caller closes the reader when done with it. +type GenesisSource = func(field string) (io.ReadCloser, error) + +// GenesisTarget is a target for writing genesis data in JSON format. It may +// abstract over a single JSON object or JSON in separate files that can be +// streamed over. Modules should open a separate io.WriteCloser for each field +// and should prefer writing fields as arrays when possible to support efficient +// iteration. It is important the caller closers the writer AND checks the error +// when done with it. It is expected that a stream of JSON data is written +// to the writer. +type GenesisTarget = func(field string) (io.WriteCloser, error) +``` + +All genesis objects for a given module are expected to conform to the semantics of a JSON object. +Each field in the JSON object should be read and written separately to support streaming genesis. +The [ORM](adr-055-orm.md) and [collections](adr-062-collections-state-layer.md) both support +streaming genesis and modules using these frameworks generally do not need to write any manual +genesis code. + +To support genesis, modules should implement the `HasGenesis` extension interface: + +```go +type HasGenesis interface { + AppModule + + // DefaultGenesis writes the default genesis for this module to the target. + DefaultGenesis(GenesisTarget) error + + // ValidateGenesis validates the genesis data read from the source. + ValidateGenesis(GenesisSource) error + + // InitGenesis initializes module state from the genesis source. + InitGenesis(context.Context, GenesisSource) error + + // ExportGenesis exports module state to the genesis target. + ExportGenesis(context.Context, GenesisTarget) error +} +``` + +#### Begin and End Blockers + +Modules that have functionality that runs before transactions (begin blockers) or after transactions +(end blockers) should implement the has `HasBeginBlocker` and/or `HasEndBlocker` interfaces: + +```go +type HasBeginBlocker interface { + AppModule + BeginBlock(context.Context) error +} + +type HasEndBlocker interface { + AppModule + EndBlock(context.Context) error +} +``` + +The `BeginBlock` and `EndBlock` methods will take a `context.Context`, because: + +* most modules don't need Comet information other than `BlockInfo` so we can eliminate dependencies on specific +Comet versions +* for the few modules that need Comet block headers and/or return validator updates, specific versions of the +runtime module will provide specific functionality for interacting with the specific version(s) of Comet +supported + +In order for `BeginBlock`, `EndBlock` and `InitGenesis` to send back validator updates and retrieve full Comet +block headers, the runtime module for a specific version of Comet could provide services like this: + +```go +type ValidatorUpdateService interface { + SetValidatorUpdates(context.Context, []abci.ValidatorUpdate) +} +``` + +Header Service defines a way to get header information about a block. This information is generalized for all implementations: + +```go + +type Service interface { + GetHeaderInfo(context.Context) Info +} + +type Info struct { + Height int64 // Height returns the height of the block + Hash []byte // Hash returns the hash of the block header + Time time.Time // Time returns the time of the block + ChainID string // ChainId returns the chain ID of the block +} +``` + +Comet Service provides a way to get comet specific information: + +```go +type Service interface { + GetCometInfo(context.Context) Info +} + +type CometInfo struct { + Evidence []abci.Misbehavior // Misbehavior returns the misbehavior of the block + // ValidatorsHash returns the hash of the validators + // For Comet, it is the hash of the next validators + ValidatorsHash []byte + ProposerAddress []byte // ProposerAddress returns the address of the block proposer + DecidedLastCommit abci.CommitInfo // DecidedLastCommit returns the last commit info +} +``` + +If a user would like to provide a module other information they would need to implement another service like: + +```go +type RollKit Interface { + ... +} +``` + +We know these types will change at the Comet level and that also a very limited set of modules actually need this +functionality, so they are intentionally kept out of core to keep core limited to the necessary, minimal set of stable +APIs. + +#### Remaining Parts of AppModule + +The current `AppModule` framework handles a number of additional concerns which aren't addressed by this core API. +These include: + +* gas +* block headers +* upgrades +* registration of gogo proto and amino interface types +* cobra query and tx commands +* gRPC gateway +* crisis module invariants +* simulations + +Additional `AppModule` extension interfaces either inside or outside of core will need to be specified to handle +these concerns. + +In the case of gogo proto and amino interfaces, the registration of these generally should happen as early +as possible during initialization and in [ADR 057: App Wiring](./adr-057-app-wiring.md), protobuf type registration +happens before dependency injection (although this could alternatively be done dedicated DI providers). + +gRPC gateway registration should probably be handled by the runtime module, but the core API shouldn't depend on gRPC +gateway types as 1) we are already using an older version and 2) it's possible the framework can do this registration +automatically in the future. So for now, the runtime module should probably provide some sort of specific type for doing +this registration ex: + +```go +type GrpcGatewayInfo struct { + Handlers []GrpcGatewayHandler +} + +type GrpcGatewayHandler func(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error +``` + +which modules can return in a provider: + +```go +func ProvideGrpcGateway() GrpcGatewayInfo { + return GrpcGatewayinfo { + Handlers: []Handler {types.RegisterQueryHandlerClient} + } +} +``` + +Crisis module invariants and simulations are subject to potential redesign and should be managed with types +defined in the crisis and simulation modules respectively. + +Extension interface for CLI commands will be provided via the `cosmossdk.io/client/v2` module and its +[autocli](adr-058-auto-generated-cli.md) framework. + +#### Example Usage + +Here is an example of setting up a hypothetical `foo` v2 module which uses the [ORM](adr-055-orm.md) for its state +management and genesis. + +```go + +type Keeper struct { + db orm.ModuleDB + evtSrv event.Service +} + +func (k Keeper) RegisterServices(r grpc.ServiceRegistrar) { + foov1.RegisterMsgServer(r, k) + foov1.RegisterQueryServer(r, k) +} + +func (k Keeper) BeginBlock(context.Context) error { + return nil +} + +func ProvideApp(config *foomodulev2.Module, evtSvc event.EventService, db orm.ModuleDB) (Keeper, appmodule.AppModule){ + k := &Keeper{db: db, evtSvc: evtSvc} + return k, k +} +``` + +### Runtime Compatibility Version + +The `core` module will define a static integer var, `cosmossdk.io/core.RuntimeCompatibilityVersion`, which is +a minor version indicator of the core module that is accessible at runtime. Correct runtime module implementations +should check this compatibility version and return an error if the current `RuntimeCompatibilityVersion` is higher +than the version of the core API that this runtime version can support. When new features are adding to the `core` +module API that runtime modules are required to support, this version should be incremented. + +### Testing + +A mock implementation of all services should be provided in core to allow for unit testing of modules +without needing to depend on any particular version of runtime. Mock services should +allow tests to observe service behavior or provide a non-production implementation - for instance memory +stores can be used to mock stores. + +For integration testing, a mock runtime implementation should be provided that allows composing different app modules +together for testing without a dependency on runtime or Comet. + +## Consequences + +### Backwards Compatibility + +Early versions of runtime modules should aim to support as much as possible modules built with the existing +`AppModule`/`sdk.Context` framework. As the core API is more widely adopted, later runtime versions may choose to +drop support and only support the core API plus any runtime module specific APIs (like specific versions of Comet). + +The core module itself should strive to remain at the go semantic version `v1` as long as possible and follow design +principles that allow for strong long-term support (LTS). + +Older versions of the SDK can support modules built against core with adaptors that convert wrap core `AppModule` +implementations in implementations of `AppModule` that conform to that version of the SDK's semantics as well +as by providing service implementations by wrapping `sdk.Context`. + +### Positive + +* better API encapsulation and separation of concerns +* more stable APIs +* more framework extensibility +* deterministic events and queries +* event listeners +* inter-module msg and query execution support +* more explicit support for forking and merging of module versions (including runtime) + +### Negative + +### Neutral + +* modules will need to be refactored to use this API +* some replacements for `AppModule` functionality still need to be defined in follow-ups + (type registration, commands, invariants, simulations) and this will take additional design work + +## Further Discussions + +* gas +* block headers +* upgrades +* registration of gogo proto and amino interface types +* cobra query and tx commands +* gRPC gateway +* crisis module invariants +* simulations + +## References + +* [ADR 033: Protobuf-based Inter-Module Communication](adr-033-protobuf-inter-module-comm.md) +* [ADR 057: App Wiring](./adr-057-app-wiring.md) +* [ADR 055: ORM](adr-055-orm.md) +* [ADR 028: Public Key Addresses](adr-028-public-key-addresses.md) +* [Keeping Your Modules Compatible](https://go.dev/blog/module-compatibility) diff --git a/docs/integrate/architecture/adr-064-abci-2.0.md b/docs/integrate/architecture/adr-064-abci-2.0.md new file mode 100644 index 000000000..9a4718050 --- /dev/null +++ b/docs/integrate/architecture/adr-064-abci-2.0.md @@ -0,0 +1,461 @@ +# ADR 64: ABCI 2.0 Integration (Phase II) + +## Changelog + +* 2023-01-17: Initial Draft (@alexanderbez) +* 2023-04-06: Add upgrading section (@alexanderbez) +* 2023-04-10: Simplify vote extension state persistence (@alexanderbez) + +## Status + +ACCEPTED + +## Abstract + +This ADR outlines the continuation of the efforts to implement ABCI++ in the Cosmos +SDK outlined in [ADR 060: ABCI 1.0 (Phase I)](adr-060-abci-1.0.md). + +Specifically, this ADR outlines the design and implementation of ABCI 2.0, which +includes `ExtendVote`, `VerifyVoteExtension` and `FinalizeBlock`. + +## Context + +ABCI 2.0 continues the promised updates from ABCI++, specifically three additional +ABCI methods that the application can implement in order to gain further control, +insight and customization of the consensus process, unlocking many novel use-cases +that previously not possible. We describe these three new methods below: + +### `ExtendVote` + +This method allows each validator process to extend the pre-commit phase of the +CometBFT consensus process. Specifically, it allows the application to perform +custom business logic that extends the pre-commit vote and supply additional data +as part of the vote, although they are signed separately by the same key. + +The data, called vote extension, will be broadcast and received together with the +vote it is extending, and will be made available to the application in the next +height. Specifically, the proposer of the next block will receive the vote extensions +in `RequestPrepareProposal.local_last_commit.votes`. + +If the application does not have vote extension information to provide, it +returns a 0-length byte array as its vote extension. + +**NOTE**: + +* Although each validator process submits its own vote extension, ONLY the *proposer* + of the *next* block will receive all the vote extensions included as part of the + pre-commit phase of the previous block. This means only the proposer will + implicitly have access to all the vote extensions, via `RequestPrepareProposal`, + and that not all vote extensions may be included, since a validator does not + have to wait for all pre-commits, only 2/3. +* The pre-commit vote is signed independently from the vote extension. + +### `VerifyVoteExtension` + +This method allows validators to validate the vote extension data attached to +each pre-commit message it receives. If the validation fails, the whole pre-commit +message will be deemed invalid and ignored by CometBFT. + +CometBFT uses `VerifyVoteExtension` when validating a pre-commit vote. Specifically, +for a pre-commit, CometBFT will: + +* Reject the message if it doesn't contain a signed vote AND a signed vote extension +* Reject the message if the vote's signature OR the vote extension's signature fails to verify +* Reject the message if `VerifyVoteExtension` was rejected by the app + +Otherwise, CometBFT will accept the pre-commit message. + +Note, this has important consequences on liveness, i.e., if vote extensions repeatedly +cannot be verified by correct validators, CometBFT may not be able to finalize +a block even if sufficiently many (+2/3) validators send pre-commit votes for +that block. Thus, `VerifyVoteExtension` should be used with special care. + +CometBFT recommends that an application that detects an invalid vote extension +SHOULD accept it in `ResponseVerifyVoteExtension` and ignore it in its own logic. + +### `FinalizeBlock` + +This method delivers a decided block to the application. The application must +execute the transactions in the block deterministically and update its state +accordingly. Cryptographic commitments to the block and transaction results, +returned via the corresponding parameters in `ResponseFinalizeBlock`, are +included in the header of the next block. CometBFT calls it when a new block +is decided. + +In other words, `FinalizeBlock` encapsulates the current ABCI execution flow of +`BeginBlock`, one or more `DeliverTx`, and `EndBlock` into a single ABCI method. +CometBFT will no longer execute requests for these legacy methods and instead +will just simply call `FinalizeBlock`. + +## Decision + +We will discuss changes to the Cosmos SDK to implement ABCI 2.0 in two distinct +phases, `VoteExtensions` and `FinalizeBlock`. + +### `VoteExtensions` + +Similarly for `PrepareProposal` and `ProcessProposal`, we propose to introduce +two new handlers that an application can implement in order to provide and verify +vote extensions. + +We propose the following new handlers for applications to implement: + +```go +type ExtendVoteHandler func(sdk.Context, abci.RequestExtendVote) abci.ResponseExtendVote +type VerifyVoteExtensionHandler func(sdk.Context, abci.RequestVerifyVoteExtension) abci.ResponseVerifyVoteExtension +``` + +A new execution state, `voteExtensionState`, will be introduced and provided as +the `Context` that is supplied to both handlers. It will contain relevant metadata +such as the block height and block hash. Note, `voteExtensionState` is never +committed and will exist as ephemeral state only in the context of a single block. + +If an application decides to implement `ExtendVoteHandler`, it must return a +non-nil `ResponseExtendVote.VoteExtension`. + +Recall, an implementation of `ExtendVoteHandler` does NOT need to be deterministic, +however, given a set of vote extensions, `VerifyVoteExtensionHandler` must be +deterministic, otherwise the chain may suffer from liveness faults. In addition, +recall CometBFT proceeds in rounds for each height, so if a decision cannot be +made about about a block proposal at a given height, CometBFT will proceed to the +next round and thus will execute `ExtendVote` and `VerifyVoteExtension` again for +the new round for each validator until 2/3 valid pre-commits can be obtained. + +Given the broad scope of potential implementations and use-cases of vote extensions, +and how to verify them, most applications should choose to implement the handlers +through a single handler type, which can have any number of dependencies injected +such as keepers. In addition, this handler type could contain some notion of +volatile vote extension state management which would assist in vote extension +verification. This state management could be ephemeral or could be some form of +on-disk persistence. + +Example: + +```go +// VoteExtensionHandler implements an Oracle vote extension handler. +type VoteExtensionHandler struct { + cdc Codec + mk MyKeeper + state VoteExtState // This could be a map or a DB connection object +} + +// ExtendVoteHandler can do something with h.mk and possibly h.state to create +// a vote extension, such as fetching a series of prices for supported assets. +func (h VoteExtensionHandler) ExtendVoteHandler(ctx sdk.Context, req abci.RequestExtendVote) abci.ResponseExtendVote { + prices := GetPrices(ctx, h.mk.Assets()) + bz, err := EncodePrices(h.cdc, prices) + if err != nil { + panic(fmt.Errorf("failed to encode prices for vote extension: %w", err)) + } + + // store our vote extension at the given height + // + // NOTE: Vote extensions can be overridden since we can timeout in a round. + SetPrices(h.state, req, bz) + + return abci.ResponseExtendVote{VoteExtension: bz} +} + +// VerifyVoteExtensionHandler can do something with h.state and req to verify +// the req.VoteExtension field, such as ensuring the provided oracle prices are +// within some valid range of our prices. +func (h VoteExtensionHandler) VerifyVoteExtensionHandler(ctx sdk.Context, req abci.RequestVerifyVoteExtension) abci.ResponseVerifyVoteExtension { + prices, err := DecodePrices(h.cdc, req.VoteExtension) + if err != nil { + log("failed to decode vote extension", "err", err) + return abci.ResponseVerifyVoteExtension{Status: REJECT} + } + + if err := ValidatePrices(h.state, req, prices); err != nil { + log("failed to validate vote extension", "prices", prices, "err", err) + return abci.ResponseVerifyVoteExtension{Status: REJECT} + } + + // store updated vote extensions at the given height + // + // NOTE: Vote extensions can be overridden since we can timeout in a round. + SetPrices(h.state, req, req.VoteExtension) + + return abci.ResponseVerifyVoteExtension{Status: ACCEPT} +} +``` + +#### Vote Extension Propagation & Verification + +As mentioned previously, vote extensions for height `H` are only made available +to the proposer at height `H+1` during `PrepareProposal`. However, in order to +make vote extensions useful, all validators should have access to the agreed upon +vote extensions at height `H` during `H+1`. + +Since CometBFT includes all the vote extension signatures in `RequestPrepareProposal`, +we propose that the proposing validator manually "inject" the vote extensions +along with their respective signatures via a special transaction, `VoteExtsTx`, +into the block proposal during `PrepareProposal`. The `VoteExtsTx` will be +populated with a single `ExtendedCommitInfo` object which is received directly +from `RequestPrepareProposal`. + +For convention, the `VoteExtsTx` transaction should be the first transaction in +the block proposal, although chains can implement their own preferences. For +safety purposes, we also propose that the proposer itself verify all the vote +extension signatures it receives in `RequestPrepareProposal`. + +A validator, upon a `RequestProcessProposal`, will receive the injected `VoteExtsTx` +which includes the vote extensions along with their signatures. If no such transaction +exists, the validator MUST REJECT the proposal. + +When a validator inspects a `VoteExtsTx`, it will evaluate each `SignedVoteExtension`. +For each signed vote extension, the validator will generate the signed bytes and +verify the signature. At least 2/3 valid signatures, based on voting power, must +be received in order for the block proposal to be valid, otherwise the validator +MUST REJECT the proposal. + +In order to have the ability to validate signatures, `BaseApp` must have access +to the `x/staking` module, since this module stores an index from consensus +address to public key. However, we will avoid a direct dependency on `x/staking` +and instead rely on an interface instead. In addition, the Cosmos SDK will expose +a default signature verification method which applications can use: + +```go +type ValidatorStore interface { + GetValidatorByConsAddr(sdk.Context, cryptotypes.Address) (cryptotypes.PubKey, error) +} + +// ValidateVoteExtensions is a function that an application can execute in +// ProcessProposal to verify vote extension signatures. +func (app *BaseApp) ValidateVoteExtensions(ctx sdk.Context, currentHeight int64, extCommit abci.ExtendedCommitInfo) error { + for _, vote := range extCommit.Votes { + if !vote.SignedLastBlock || len(vote.VoteExtension) == 0 { + continue + } + + valConsAddr := cmtcrypto.Address(vote.Validator.Address) + + validator, err := app.validatorStore.GetValidatorByConsAddr(ctx, valConsAddr) + if err != nil { + return fmt.Errorf("failed to get validator %s for vote extension", valConsAddr) + } + + cmtPubKey, err := validator.CmtConsPublicKey() + if err != nil { + return fmt.Errorf("failed to convert public key: %w", err) + } + + if len(vote.ExtensionSignature) == 0 { + return fmt.Errorf("received a non-empty vote extension with empty signature for validator %s", valConsAddr) + } + + cve := cmtproto.CanonicalVoteExtension{ + Extension: vote.VoteExtension, + Height: currentHeight - 1, // the vote extension was signed in the previous height + Round: int64(extCommit.Round), + ChainId: app.GetChainID(), + } + + extSignBytes, err := cosmosio.MarshalDelimited(&cve) + if err != nil { + return fmt.Errorf("failed to encode CanonicalVoteExtension: %w", err) + } + + if !cmtPubKey.VerifySignature(extSignBytes, vote.ExtensionSignature) { + return errors.New("received vote with invalid signature") + } + + return nil + } +} +``` + +Once at least 2/3 signatures, by voting power, are received and verified, the +validator can use the vote extensions to derive additional data or come to some +decision based on the vote extensions. + +> NOTE: It is very important to state, that neither the vote propagation technique +> nor the vote extension verification mechanism described above is required for +> applications to implement. In other words, a proposer is not required to verify +> and propagate vote extensions along with their signatures nor are proposers +> required to verify those signatures. An application can implement it's own +> PKI mechanism and use that to sign and verify vote extensions. + +#### Vote Extension Persistence + +In certain contexts, it may be useful or necessary for applications to persist +data derived from vote extensions. In order to facilitate this use case, we +propose to allow application developers to manually retrieve the `finalizeState` +context (see [`FinalizeBlock`](#finalizeblock-1) below). Using this context, +state can be directly written to `finalizeState`, which will be used during +`FinalizeBlock` and eventually committed to the application state. Note, since +`ProcessProposal` can timeout and thus require another round of consensus, we +will reset `finalizeState` in the beginning of `ProcessProposal`. + +A `ProcessProposal` handler could look like the following: + +```go +func (h MyHandler) ProcessProposalHandler() sdk.ProcessProposalHandler { + return func(ctx sdk.Context, req abci.RequestProcessProposal) abci.ResponseProcessProposal { + for _, txBytes := range req.Txs { + _, err := h.app.ProcessProposalVerifyTx(txBytes) + if err != nil { + return abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_REJECT} + } + } + + fCtx := h.app.GetFinalizeState() + + // Any state changes that occur on the provided fCtx WILL be written to state! + h.myKeeper.SetVoteExtResult(fCtx, ...) + + return abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_ACCEPT} + } +} +``` + +### `FinalizeBlock` + +The existing ABCI methods `BeginBlock`, `DeliverTx`, and `EndBlock` have existed +since the dawn of ABCI-based applications. Thus, applications, tooling, and developers +have grown used to these methods and their use-cases. Specifically, `BeginBlock` +and `EndBlock` have grown to be pretty integral and powerful within ABCI-based +applications. E.g. an application might want to run distribution and inflation +related operations prior to executing transactions and then have staking related +changes to happen after executing all transactions. + +We propose to keep `BeginBlock` and `EndBlock` within the SDK's core module +interfaces only so application developers can continue to build against existing +execution flows. However, we will remove `BeginBlock`, `DeliverTx` and `EndBlock` +from the SDK's `BaseApp` implementation and thus the ABCI surface area. + +What will then exist is a single `FinalizeBlock` execution flow. Specifically, in +`FinalizeBlock` we will execute the application's `BeginBlock`, followed by +execution of all the transactions, finally followed by execution of the application's +`EndBlock`. + +Note, we will still keep the existing transaction execution mechanics within +`BaseApp`, but all notions of `DeliverTx` will be removed, i.e. `deliverState` +will be replace with `finalizeState`, which will be committed on `Commit`. + +However, there are current parameters and fields that exist in the existing +`BeginBlock` and `EndBlock` ABCI types, such as votes that are used in distribution +and byzantine validators used in evidence handling. These parameters exist in the +`FinalizeBlock` request type, and will need to be passed to the application's +implementations of `BeginBlock` and `EndBlock`. + +This means the Cosmos SDK's core module interfaces will need to be updated to +reflect these parameters. The easiest and most straightforward way to achieve +this is to just pass `RequestFinalizeBlock` to `BeginBlock` and `EndBlock`. +Alternatively, we can create dedicated proxy types in the SDK that reflect these +legacy ABCI types, e.g. `LegacyBeginBlockRequest` and `LegacyEndBlockRequest`. Or, +we can come up with new types and names altogether. + +```go +func (app *BaseApp) FinalizeBlock(req abci.RequestFinalizeBlock) abci.ResponseFinalizeBlock { + // merge any state changes from ProcessProposal into the FinalizeBlock state + app.MergeProcessProposalState() + + beginBlockResp := app.beginBlock(ctx, req) + appendBlockEventAttr(beginBlockResp.Events, "begin_block") + + txExecResults := make([]abci.ExecTxResult, 0, len(req.Txs)) + for _, tx := range req.Txs { + result := app.runTx(runTxModeFinalize, tx) + txExecResults = append(txExecResults, result) + } + + endBlockResp := app.endBlock(ctx, req) + appendBlockEventAttr(beginBlockResp.Events, "end_block") + + return abci.ResponseFinalizeBlock{ + TxResults: txExecResults, + Events: joinEvents(beginBlockResp.Events, endBlockResp.Events), + ValidatorUpdates: endBlockResp.ValidatorUpdates, + ConsensusParamUpdates: endBlockResp.ConsensusParamUpdates, + AppHash: nil, + } +} +``` + +#### Events + +Many tools, indexers and ecosystem libraries rely on the existence `BeginBlock` +and `EndBlock` events. Since CometBFT now only exposes `FinalizeBlockEvents`, we +find that it will still be useful for these clients and tools to still query for +and rely on existing events, especially since applications will still define +`BeginBlock` and `EndBlock` implementations. + +In order to facilitate existing event functionality, we propose that all `BeginBlock` +and `EndBlock` events have a dedicated `EventAttribute` with `key=block` and +`value=begin_block|end_block`. The `EventAttribute` will be appended to each event +in both `BeginBlock` and `EndBlock` events`. + + +### Upgrading + +CometBFT defines a consensus parameter, [`VoteExtensionsEnableHeight`](https://github.com/cometbft/cometbft/blob/v0.38.0-alpha.1/spec/abci/abci%2B%2B_app_requirements.md#abciparamsvoteextensionsenableheight), +which specifies the height at which vote extensions are enabled and **required**. +If the value is set to zero, which is the default, then vote extensions are +disabled and an application is not required to implement and use vote extensions. + +However, if the value `H` is positive, at all heights greater than the configured +height `H` vote extensions must be present (even if empty). When the configured +height `H` is reached, `PrepareProposal` will not include vote extensions yet, +but `ExtendVote` and `VerifyVoteExtension` will be called. Then, when reaching +height `H+1`, `PrepareProposal` will include the vote extensions from height `H`. + +It is very important to note, for all heights after H: + +* Vote extensions CANNOT be disabled +* They are mandatory, i.e. all pre-commit messages sent MUST have an extension + attached (even if empty) + +When an application updates to the Cosmos SDK version with CometBFT v0.38 support, +in the upgrade handler it must ensure to set the consensus parameter +`VoteExtensionsEnableHeight` to the correct value. E.g. if an application is set +to perform an upgrade at height `H`, then the value of `VoteExtensionsEnableHeight` +should be set to any value `>=H+1`. This means that at the upgrade height, `H`, +vote extensions will not be enabled yet, but at height `H+1` they will be enabled. + +## Consequences + +### Backwards Compatibility + +ABCI 2.0 is naturally not backwards compatible with prior versions of the Cosmos SDK +and CometBFT. For example, an application that requests `RequestFinalizeBlock` +to the same application that does not speak ABCI 2.0 will naturally fail. + +In addition, `BeginBlock`, `DeliverTx` and `EndBlock` will be removed from the +application ABCI interfaces and along with the inputs and outputs being modified +in the module interfaces. + +### Positive + +* `BeginBlock` and `EndBlock` semantics remain, so burden on application developers + should be limited. +* Less communication overhead as multiple ABCI requests are condensed into a single + request. +* Sets the groundwork for optimistic execution. +* Vote extensions allow for an entirely new set of application primitives to be + developed, such as in-process price oracles and encrypted mempools. + +### Negative + +* Some existing Cosmos SDK core APIs may need to be modified and thus broken. +* Signature verification in `ProcessProposal` of 100+ vote extension signatures + will add significant performance overhead to `ProcessProposal`. Granted, the + signature verification process can happen concurrently using an error group + with `GOMAXPROCS` goroutines. + +### Neutral + +* Having to manually "inject" vote extensions into the block proposal during + `PrepareProposal` is an awkward approach and takes up block space unnecessarily. +* The requirement of `ResetProcessProposalState` can create a footgun for + application developers if they're not careful, but this is necessary in order + for applications to be able to commit state from vote extension computation. + +## Further Discussions + +Future discussions include design and implementation of ABCI 3.0, which is a +continuation of ABCI++ and the general discussion of optimistic execution. + +## References + +* [ADR 060: ABCI 1.0 (Phase I)](adr-060-abci-1.0.md) diff --git a/docs/integrate/architecture/adr-065-store-v2.md b/docs/integrate/architecture/adr-065-store-v2.md new file mode 100644 index 000000000..67c1830fd --- /dev/null +++ b/docs/integrate/architecture/adr-065-store-v2.md @@ -0,0 +1,290 @@ +# ADR-065: Store V2 + +## Changelog + +* Feb 14, 2023: Initial Draft (@alexanderbez) + +## Status + +DRAFT + +## Abstract + +The storage and state primitives that Cosmos SDK based applications have used have +by and large not changed since the launch of the inaugural Cosmos Hub. The demands +and needs of Cosmos SDK based applications, from both developer and client UX +perspectives, have evolved and outgrown the ecosystem since these primitives +were first introduced. + +Over time as these applications have gained significant adoption, many critical +shortcomings and flaws have been exposed in the state and storage primitives of +the Cosmos SDK. + +In order to keep up with the evolving demands and needs of both clients and developers, +a major overhaul to these primitives are necessary. + +## Context + +The Cosmos SDK provides application developers with various storage primitives +for dealing with application state. Specifically, each module contains its own +merkle commitment data structure -- an IAVL tree. In this data structure, a module +can store and retrieve key-value pairs along with Merkle commitments, i.e. proofs, +to those key-value pairs indicating that they do or do not exist in the global +application state. This data structure is the base layer `KVStore`. + +In addition, the SDK provides abstractions on top of this Merkle data structure. +Namely, a root multi-store (RMS) is a collection of each module's `KVStore`. +Through the RMS, the application can serve queries and provide proofs to clients +in addition to provide a module access to its own unique `KVStore` though the use +of `StoreKey`, which is an OCAP primitive. + +There are further layers of abstraction that sit between the RMS and the underlying +IAVL `KVStore`. A `GasKVStore` is responsible for tracking gas IO consumption for +state machine reads and writes. A `CacheKVStore` is responsible for providing a +way to cache reads and buffer writes to make state transitions atomic, e.g. +transaction execution or governance proposal execution. + +There are a few critical drawbacks to these layers of abstraction and the overall +design of storage in the Cosmos SDK: + +* Since each module has its own IAVL `KVStore`, commitments are not [atomic](https://github.com/cosmos/cosmos-sdk/issues/14625) + * Note, we can still allow modules to have their own IAVL `KVStore`, but the + IAVL library will need to support the ability to pass a DB instance as an + argument to various IAVL APIs. +* Since IAVL is responsible for both state storage and commitment, running an + archive node becomes increasingly expensive as disk space grows exponentially. +* As the size of a network increases, various performance bottlenecks start to + emerge in many areas such as query performance, network upgrades, state + migrations, and general application performance. +* Developer UX is poor as it does not allow application developers to experiment + with different types of approaches to storage and commitments, along with the + complications of many layers of abstractions referenced above. + +See the [Storage Discussion](https://github.com/cosmos/cosmos-sdk/discussions/13545) for more information. + +## Alternatives + +There was a previous attempt to refactor the storage layer described in [ADR-040](adr-040-storage-and-smt-state-commitments.md). +However, this approach mainly stems on the short comings of IAVL and various performance +issues around it. While there was a (partial) implementation of [ADR-040](adr-040-storage-and-smt-state-commitments.md), +it was never adopted for a variety of reasons, such as the reliance on using an +SMT, which was more in a research phase, and some design choices that couldn't +be fully agreed upon, such as the snap-shotting mechanism that would result in +massive state bloat. + +## Decision + +We propose to build upon some of the great ideas introduced in [ADR-040](adr-040-storage-and-smt-state-commitments.md), +while being a bit more flexible with the underlying implementations and overall +less intrusive. Specifically, we propose to: + +* Separate the concerns of state commitment (**SC**), needed for consensus, and + state storage (**SS**), needed for state machine and clients. +* Reduce layers of abstractions necessary between the RMS and underlying stores. +* Provide atomic module store commitments by providing a batch database object + to core IAVL APIs. +* Reduce complexities in the `CacheKVStore` implementation while also improving + performance[3]. + +Furthermore, we will keep the IAVL is the backing [commitment](https://cryptography.fandom.com/wiki/Commitment_scheme) +store for the time being. While we might not fully settle on the use of IAVL in +the long term, we do not have strong empirical evidence to suggest a better +alternative. Given that the SDK provides interfaces for stores, it should be sufficient +to change the backing commitment store in the future should evidence arise to +warrant a better alternative. However there is promising work being done to IAVL +that should result in significant performance improvement [1,2]. + +### Separating SS and SC + +By separating SS and SC, it will allow for us to optimize against primary use cases +and access patterns to state. Specifically, The SS layer will be responsible for +direct access to data in the form of (key, value) pairs, whereas the SC layer (IAVL) +will be responsible for committing to data and providing Merkle proofs. + +Note, the underlying physical storage database will be the same between both the +SS and SC layers. So to avoid collisions between (key, value) pairs, both layers +will be namespaced. + +#### State Commitment (SC) + +Given that the existing solution today acts as both SS and SC, we can simply +repurpose it to act solely as the SC layer without any significant changes to +access patterns or behavior. In other words, the entire collection of existing +IAVL-backed module `KVStore`s will act as the SC layer. + +However, in order for the SC layer to remain lightweight and not duplicate a +majority of the data held in the SS layer, we encourage node operators to keep +tight pruning strategies. + +#### State Storage (SS) + +In the RMS, we will expose a *single* `KVStore` backed by the same physical +database that backs the SC layer. This `KVStore` will be explicitly namespaced +to avoid collisions and will act as the primary storage for (key, value) pairs. + +While we most likely will continue the use of `cosmos-db`, or some local interface, +to allow for flexibility and iteration over preferred physical storage backends +as research and benchmarking continues. However, we propose to hardcode the use +of RocksDB as the primary physical storage backend. + +Since the SS layer will be implemented as a `KVStore`, it will support the +following functionality: + +* Range queries +* CRUD operations +* Historical queries and versioning +* Pruning + +The RMS will keep track of all buffered writes using a dedicated and internal +`MemoryListener` for each `StoreKey`. For each block height, upon `Commit`, the +SS layer will write all buffered (key, value) pairs under a [RocksDB user-defined timestamp](https://github.com/facebook/rocksdb/wiki/User-defined-Timestamp-%28Experimental%29) column +family using the block height as the timestamp, which is an unsigned integer. +This will allow a client to fetch (key, value) pairs at historical and current +heights along with making iteration and range queries relatively performant as +the timestamp is the key suffix. + +Note, we choose not to use a more general approach of allowing any embedded key/value +database, such as LevelDB or PebbleDB, using height key-prefixed keys to +effectively version state because most of these databases use variable length +keys which would effectively make actions likes iteration and range queries less +performant. + +Since operators might want pruning strategies to differ in SS compared to SC, +e.g. having a very tight pruning strategy in SC while having a looser pruning +strategy for SS, we propose to introduce an additional pruning configuration, +with parameters that are identical to what exists in the SDK today, and allow +operators to control the pruning strategy of the SS layer independently of the +SC layer. + +Note, the SC pruning strategy must be congruent with the operator's state sync +configuration. This is so as to allow state sync snapshots to execute successfully, +otherwise, a snapshot could be triggered on a height that is not available in SC. + +#### State Sync + +The state sync process should be largely unaffected by the separation of the SC +and SS layers. However, if a node syncs via state sync, the SS layer of the node +will not have the state synced height available, since the IAVL import process is +not setup in way to easily allow direct key/value insertion. A modification of +the IAVL import process would be necessary to facilitate having the state sync +height available. + +Note, this is not problematic for the state machine itself because when a query +is made, the RMS will automatically direct the query correctly (see [Queries](#queries)). + +#### Queries + +To consolidate the query routing between both the SC and SS layers, we propose to +have a notion of a "query router" that is constructed in the RMS. This query router +will be supplied to each `KVStore` implementation. The query router will route +queries to either the SC layer or the SS layer based on a few parameters. If +`prove: true`, then the query must be routed to the SC layer. Otherwise, if the +query height is available in the SS layer, the query will be served from the SS +layer. Otherwise, we fall back on the SC layer. + +If no height is provided, the SS layer will assume the latest height. The SS +layer will store a reverse index to lookup `LatestVersion -> timestamp(version)` +which is set on `Commit`. + +#### Proofs + +Since the SS layer is naturally a storage layer only, without any commitments +to (key, value) pairs, it cannot provide Merkle proofs to clients during queries. + +Since the pruning strategy against the SC layer is configured by the operator, +we can therefore have the RMS route the query SC layer if the version exists and +`prove: true`. Otherwise, the query will fall back to the SS layer without a proof. + +We could explore the idea of using state snapshots to rebuild an in-memory IAVL +tree in real time against a version closest to the one provided in the query. +However, it is not clear what the performance implications will be of this approach. + +### Atomic Commitment + +We propose to modify the existing IAVL APIs to accept a batch DB object instead +of relying on an internal batch object in `nodeDB`. Since each underlying IAVL +`KVStore` shares the same DB in the SC layer, this will allow commits to be +atomic. + +Specifically, we propose to: + +* Remove the `dbm.Batch` field from `nodeDB` +* Update the `SaveVersion` method of the `MutableTree` IAVL type to accept a batch object +* Update the `Commit` method of the `CommitKVStore` interface to accept a batch object +* Create a batch object in the RMS during `Commit` and pass this object to each + `KVStore` +* Write the database batch after all stores have committed successfully + +Note, this will require IAVL to be updated to not rely or assume on any batch +being present during `SaveVersion`. + +## Consequences + +As a result of a new store V2 package, we should expect to see improved performance +for queries and transactions due to the separation of concerns. We should also +expect to see improved developer UX around experimentation of commitment schemes +and storage backends for further performance, in addition to a reduced amount of +abstraction around KVStores making operations such as caching and state branching +more intuitive. + +However, due to the proposed design, there are drawbacks around providing state +proofs for historical queries. + +### Backwards Compatibility + +This ADR proposes changes to the storage implementation in the Cosmos SDK through +an entirely new package. Interfaces may be borrowed and extended from existing +types that exist in `store`, but no existing implementations or interfaces will +be broken or modified. + +### Positive + +* Improved performance of independent SS and SC layers +* Reduced layers of abstraction making storage primitives easier to understand +* Atomic commitments for SC +* Redesign of storage types and interfaces will allow for greater experimentation + such as different physical storage backends and different commitment schemes + for different application modules + +### Negative + +* Providing proofs for historical state is challenging + +### Neutral + +* Keeping IAVL as the primary commitment data structure, although drastic + performance improvements are being made + +## Further Discussions + +### Module Storage Control + +Many modules store secondary indexes that are typically solely used to support +client queries, but are actually not needed for the state machine's state +transitions. What this means is that these indexes technically have no reason to +exist in the SC layer at all, as they take up unnecessary space. It is worth +exploring what an API would look like to allow modules to indicate what (key, value) +pairs they want to be persisted in the SC layer, implicitly indicating the SS +layer as well, as opposed to just persisting the (key, value) pair only in the +SS layer. + +### Historical State Proofs + +It is not clear what the importance or demand is within the community of providing +commitment proofs for historical state. While solutions can be devised such as +rebuilding trees on the fly based on state snapshots, it is not clear what the +performance implications are for such solutions. + +### Physical DB Backends + +This ADR proposes usage of RocksDB to utilize user-defined timestamps as a +versioning mechanism. However, other physical DB backends are available that may +offer alternative ways to implement versioning while also providing performance +improvements over RocksDB. E.g. PebbleDB supports MVCC timestamps as well, but +we'll need to explore how PebbleDB handles compaction and state growth over time. + +## References + +* [1] https://github.com/cosmos/iavl/pull/676 +* [2] https://github.com/cosmos/iavl/pull/664 +* [3] https://github.com/cosmos/cosmos-sdk/issues/14990 diff --git a/docs/integrate/architecture/adr-template.md b/docs/integrate/architecture/adr-template.md new file mode 100644 index 000000000..dcf07343c --- /dev/null +++ b/docs/integrate/architecture/adr-template.md @@ -0,0 +1,83 @@ +# ADR {ADR-NUMBER}: {TITLE} + +## Changelog + +* {date}: {changelog} + +## Status + +{DRAFT | PROPOSED} Not Implemented + +> Please have a look at the [PROCESS](PROCESS.md#adr-status) page. +> Use DRAFT if the ADR is in a draft stage (draft PR) or PROPOSED if it's in review. + +## Abstract + +> "If you can't explain it simply, you don't understand it well enough." Provide +> a simplified and layman-accessible explanation of the ADR. +> A short (~200 word) description of the issue being addressed. + +## Context + +> This section describes the forces at play, including technological, political, +> social, and project local. These forces are probably in tension, and should be +> called out as such. The language in this section is value-neutral. It is simply +> describing facts. It should clearly explain the problem and motivation that the +> proposal aims to resolve. +> {context body} + +## Alternatives + +> This section describes alternative designs to the chosen design. This section +> is important and if an adr does not have any alternatives then it should be +> considered that the ADR was not thought through. + +## Decision + +> This section describes our response to these forces. It is stated in full +> sentences, with active voice. "We will ..." +> {decision body} + +## Consequences + +> This section describes the resulting context, after applying the decision. All +> consequences should be listed here, not just the "positive" ones. A particular +> decision may have positive, negative, and neutral consequences, but all of them +> affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section +> describing these incompatibilities and their severity. The ADR must explain +> how the author proposes to deal with these incompatibilities. ADR submissions +> without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +> {positive consequences} + +### Negative + +> {negative consequences} + +### Neutral + +> {neutral consequences} + +## Further Discussions + +> While an ADR is in the DRAFT or PROPOSED stage, this section should contain a +> summary of issues to be solved in future iterations (usually referencing comments +> from a pull-request discussion). +> +> Later, this section can optionally list ideas or improvements the author or +> reviewers found during the analysis of this ADR. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus +changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +* {reference link} diff --git a/docs/integrate/building-apps/00-app-go.md b/docs/integrate/building-apps/00-app-go.md new file mode 100644 index 000000000..054f06b9b --- /dev/null +++ b/docs/integrate/building-apps/00-app-go.md @@ -0,0 +1,15 @@ +--- +sidebar_position: 1 +dislayed_sidebar: integrateSidebar +--- + +# Overview of `app.go` + +This section is intended to provide an overview of the `SimApp` `app.go` file and is still a work in progress. +For now please instead read the [tutorials](https://tutorials.cosmos.network) for a deep dive on how to build a chain. + +## Complete `app.go` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L107-L738 +``` diff --git a/docs/integrate/building-apps/01-app-go-v2.md b/docs/integrate/building-apps/01-app-go-v2.md new file mode 100644 index 000000000..6d8dc6faf --- /dev/null +++ b/docs/integrate/building-apps/01-app-go-v2.md @@ -0,0 +1,132 @@ +--- +sidebar_position: 1 +dislayed_sidebar: integrateSidebar +--- + +# Overview of `app_v2.go` + +:::note Synopsis + +The Cosmos SDK allows much easier wiring of an `app.go` thanks to App Wiring and [`depinject`](../libraries/01-depinject.md). +Learn more about the rationale of App Wiring in [ADR-057](../architecture/adr-057-app-wiring.md). + +::: + +:::note + +### Pre-requisite Readings + +* [ADR 057: App Wiring](../architecture/adr-057-app-wiring.md) +* [Depinject Documentation](../libraries/01-depinject.md) +* [Modules depinject-ready](../building-modules/15-depinject.md) + +::: + +This section is intended to provide an overview of the `SimApp` `app_v2.go` file with App Wiring. + +## `app_config.go` + +The `app_config.go` file is the single place to configure all modules parameters. + +1. Create the `AppConfig` variable: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L91-L93 + ``` + +2. Configure the `runtime` module: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L94-L158 + ``` + +3. Configure the modules defined in the `BeginBlocker` and `EndBlocker` and the `tx` module: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L159-L177 + ``` + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L192-L194 + ``` + +### Complete `app_config.go` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L52-L254 +``` + +### Alternative formats + +:::tip +The example above shows how to create an `AppConfig` using Go. However, it is also possible to create an `AppConfig` using YAML, or JSON. +The configuration can then be embed with `go:embed` and read with [`appconfig.LoadYAML`](https://pkg.go.dev/cosmossdk.io/core/appconfig#LoadYAML), or [`appconfig.LoadJSON`](https://pkg.go.dev/cosmossdk.io/core/appconfig#LoadJSON), in `app_v2.go`. + +```go +//go:embed app_config.yaml +var ( + appConfigYaml []byte + appConfig = appconfig.LoadYAML(appConfigYaml) +) +``` + +::: + +```yaml +modules: + - name: runtime + config: + "@type": cosmos.app.runtime.v1alpha1.Module + app_name: SimApp + begin_blockers: [staking, auth, bank] + end_blockers: [bank, auth, staking] + init_genesis: [bank, auth, staking] + - name: auth + config: + "@type": cosmos.auth.module.v1.Module + bech32_prefix: cosmos + - name: bank + config: + "@type": cosmos.bank.module.v1.Module + - name: staking + config: + "@type": cosmos.staking.module.v1.Module + - name: tx + config: + "@type": cosmos.tx.module.v1.Module +``` + +A more complete example of `app.yaml` can be found [here](https://github.com/cosmos/cosmos-sdk/blob/91b1d83f1339e235a1dfa929ecc00084101a19e3/simapp/app.yaml). + +## `app_v2.go` + +`app_v2.go` is the place where `SimApp` is constructed. `depinject.Inject` facilitates that by automatically wiring the app modules and keepers, provided an application configuration `AppConfig` is provided. `SimApp` is constructed, when calling the injected `*runtime.AppBuilder`, with `appBuilder.Build(...)`. +In short `depinject` and the [`runtime` package](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/runtime) abstract the wiring of the app, and the `AppBuilder` is the place where the app is constructed. [`runtime`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/runtime) takes care of registering the codecs, KV store, subspaces and instantiating `baseapp`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L158-L291 +``` + +:::warning +When using `depinject.Inject`, the injected types must be pointers. +::: + +### Advanced Configuration + +In advanced cases, it is possible to inject extra (module) configuration in a way that is not (yet) supported by `AppConfig`. +In this case, use `depinject.Configs` for combining the extra configuration and `AppConfig`, and `depinject.Supply` to providing that extra configuration. +More information on how work `depinject.Configs` and `depinject.Supply` can be found in the [`depinject` documentation](https://pkg.go.dev/cosmossdk.io/depinject). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L186-L216 +``` + +### Complete `app_v2.go` + +:::tip +Note that in the complete `SimApp` `app_v2.go` file, testing utilities are also defined, but they could as well be defined in a separate file. +::: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L75-L395 +``` diff --git a/docs/integrate/building-apps/02-app-mempool.md b/docs/integrate/building-apps/02-app-mempool.md new file mode 100644 index 000000000..4919207c8 --- /dev/null +++ b/docs/integrate/building-apps/02-app-mempool.md @@ -0,0 +1,165 @@ +--- +sidebar_position: 1 +dislayed_sidebar: integrateSidebar +--- + +# Application mempool + +:::note Synopsis +This sections describes how the app-side mempool can be used and replaced. +::: + +Since `v0.47` the application has its own mempool to allow much more granular +block building than previous versions. This change was enabled by +[ABCI 1.0](https://github.com/cometbft/cometbft/blob/v0.37.0/spec/abci). +Notably it introduces the `PrepareProposal` and `ProcessProposal` steps of ABCI++. + +:::note + +### Pre-requisite Readings + +* [BaseApp](../../develop/advanced-concepts/00-baseapp.md) + +::: + +## Prepare Proposal + +`PrepareProposal` handles construction of the block, meaning that when a proposer +is preparing to propose a block, it requests the application to evaluate a +`RequestPrepareProposal`, which contains a series of transactions from CometBFT's +mempool. At this point, the application has complete control over the proposal. +It can modify, delete, and inject transactions from it's own app-side mempool into +the proposal or even ignore all the transactions altogether. What the application +does with the transactions provided to it by `RequestPrepareProposal` have no +effect on CometBFT's mempool. + +Note, that the application defines the semantics of the `PrepareProposal` and it +MAY be non-deterministic and is only executed by the current block proposer. + +Now, reading mempool twice in the previous sentence is confusing, lets break it down. +CometBFT has a mempool that handles gossiping transactions to other nodes +in the network. How these transactions are ordered is determined by CometBFT's +mempool, typically FIFO. However, since the application is able to fully inspect +all transactions, it can provide greater control over transaction ordering. +Allowing the application to handle ordering enables the application to define how +it would like the block constructed. + +Currently, there is a default `PrepareProposal` implementation provided by the application. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L868-L916 +``` + +This default implementation can be overridden by the application developer in +favor of a custom implementation in [`app.go`](01-app-go-v2.md): + +```go +prepareOpt := func(app *baseapp.BaseApp) { + abciPropHandler := baseapp.NewDefaultProposalHandler(mempool, app) + app.SetPrepareProposal(abciPropHandler.PrepareProposalHandler()) +} + +baseAppOptions = append(baseAppOptions, prepareOpt) +``` + +## Process Proposal + +`ProcessProposal` handles the validation of a proposal from `PrepareProposal`, +which also includes a block header. Meaning, that after a block has been proposed +the other validators have the right to vote on a block. The validator in the +default implementation of `PrepareProposal` runs basic validity checks on each +transaction. + +Note, `ProcessProposal` MAY NOT be non-deterministic, i.e. it must be deterministic. +This means if `ProcessProposal` panics or fails and we reject, all honest validator +processes will prevote nil and the CometBFT round will proceed again until a valid +proposal is proposed. + +Here is the implementation of the default implementation: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L927-L942 +``` + +Like `PrepareProposal` this implementation is the default and can be modified by the application developer in [`app.go`](01-app-go-v2.md): + +```go +processOpt := func(app *baseapp.BaseApp) { + abciPropHandler := baseapp.NewDefaultProposalHandler(mempool, app) + app.SetProcessProposal(abciPropHandler.ProcessProposalHandler()) +} + +baseAppOptions = append(baseAppOptions, processOpt) +``` + +## Mempool + +Now that we have walked through the `PrepareProposal` & `ProcessProposal`, we can move on to walking through the mempool. + +There are countless designs that an application developer can write for a mempool, the SDK opted to provide only simple mempool implementations. +Namely, the SDK provides the following mempools: + +* [No-op Mempool](#no-op-mempool) +* [Sender Nonce Mempool](#sender-nonce-mempool) +* [Priority Nonce Mempool](#priority-nonce-mempool) + +The default SDK is a [No-op Mempool](#no-op-mempool), but it can be replaced by the application developer in [`app.go`](01-app-go-v2.md): + +```go +nonceMempool := mempool.NewSenderNonceMempool() +mempoolOpt := baseapp.SetMempool(nonceMempool) +baseAppOptions = append(baseAppOptions, mempoolOpt) +``` + +### No-op Mempool + +A no-op mempool is a mempool where transactions are completely discarded and ignored when BaseApp interacts with the mempool. +When this mempool is used, it assumed that an application will rely on CometBFT's transaction ordering defined in `RequestPrepareProposal`, +which is FIFO-ordered by default. + +### Sender Nonce Mempool + +The nonce mempool is a mempool that keeps transactions from an sorted by nonce in order to avoid the issues with nonces. +It works by storing the transaction in a list sorted by the transaction nonce. When the proposer asks for transactions to be included in a block it randomly selects a sender and gets the first transaction in the list. It repeats this until the mempool is empty or the block is full. + +It is configurable with the following parameters: + +#### MaxTxs + +It is an integer value that sets the mempool in one of three modes, *bounded*, *unbounded*, or *disabled*. + +* **negative**: Disabled, mempool does not insert new transaction and return early. +* **zero**: Unbounded mempool has no transaction limit and will never fail with `ErrMempoolTxMaxCapacity`. +* **positive**: Bounded, it fails with `ErrMempoolTxMaxCapacity` when `maxTx` value is the same as `CountTx()` + +#### Seed + +Set the seed for the random number generator used to select transactions from the mempool. + +### Priority Nonce Mempool + +The [priority nonce mempool](https://github.com/cosmos/cosmos-sdk/blob/main/types/mempool/priority_nonce_spec.md) is a mempool implementation that stores txs in a partially ordered set by 2 dimensions: + +* priority +* sender-nonce (sequence number) + +Internally it uses one priority ordered [skip list](https://pkg.go.dev/github.com/huandu/skiplist) and one skip list per sender ordered by sender-nonce (sequence number). When there are multiple txs from the same sender, they are not always comparable by priority to other sender txs and must be partially ordered by both sender-nonce and priority. + +It is configurable with the following parameters: + +#### MaxTxs + +It is an integer value that sets the mempool in one of three modes, *bounded*, *unbounded*, or *disabled*. + +* **negative**: Disabled, mempool does not insert new transaction and return early. +* **zero**: Unbounded mempool has no transaction limit and will never fail with `ErrMempoolTxMaxCapacity`. +* **positive**: Bounded, it fails with `ErrMempoolTxMaxCapacity` when `maxTx` value is the same as `CountTx()` + +#### Callback + +The priority nonce mempool provides mempool options allowing the application sets callback(s). + +* **OnRead**: Set a callback to be called when a transaction is read from the mempool. +* **TxReplacement**: Sets a callback to be called when duplicated transaction nonce detected during mempool insert. Application can define a transaction replacement rule based on tx priority or certain transaction fields. + +More information on the SDK mempool implementation can be found in the [godocs](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types/mempool). diff --git a/docs/integrate/building-apps/03-app-upgrade.md b/docs/integrate/building-apps/03-app-upgrade.md new file mode 100644 index 000000000..804f98515 --- /dev/null +++ b/docs/integrate/building-apps/03-app-upgrade.md @@ -0,0 +1,70 @@ +--- +sidebar_position: 1 +dislayed_sidebar: integrateSidebar +--- + +# Application upgrade + +:::note +This document describes how to upgrade your application. If you are looking specifically for the changes to perform between SDK versions, see the [SDK migrations documentation](https://docs.cosmos.network/main/migrations/intro). +::: + +:::warning +This section is currently incomplete. Track the progress of this document [here](https://github.com/cosmos/cosmos-sdk/issues/11504). +::: + +## Pre-Upgrade Handling + +Cosmovisor supports custom pre-upgrade handling. Use pre-upgrade handling when you need to implement application config changes that are required in the newer version before you perform the upgrade. + +Using Cosmovisor pre-upgrade handling is optional. If pre-upgrade handling is not implemented, the upgrade continues. + +For example, make the required new-version changes to `app.toml` settings during the pre-upgrade handling. The pre-upgrade handling process means that the file does not have to be manually updated after the upgrade. + +Before the application binary is upgraded, Cosmovisor calls a `pre-upgrade` command that can be implemented by the application. + +The `pre-upgrade` command does not take in any command-line arguments and is expected to terminate with the following exit codes: + +| Exit status code | How it is handled in Cosmosvisor | +|------------------|---------------------------------------------------------------------------------------------------------------------| +| `0` | Assumes `pre-upgrade` command executed successfully and continues the upgrade. | +| `1` | Default exit code when `pre-upgrade` command has not been implemented. | +| `30` | `pre-upgrade` command was executed but failed. This fails the entire upgrade. | +| `31` | `pre-upgrade` command was executed but failed. But the command is retried until exit code `1` or `30` are returned. | + +## Sample + +Here is a sample structure of the `pre-upgrade` command: + +```go +func preUpgradeCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "pre-upgrade", + Short: "Pre-upgrade command", + Long: "Pre-upgrade command to implement custom pre-upgrade handling", + Run: func(cmd *cobra.Command, args []string) { + + err := HandlePreUpgrade() + + if err != nil { + os.Exit(30) + } + + os.Exit(0) + + }, + } + + return cmd +} +``` + +Ensure that the pre-upgrade command has been registered in the application: + +```go +rootCmd.AddCommand( + // .. + preUpgradeCommand(), + // .. + ) +``` diff --git a/docs/integrate/building-apps/_category_.json b/docs/integrate/building-apps/_category_.json new file mode 100644 index 000000000..342732cce --- /dev/null +++ b/docs/integrate/building-apps/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Building Apps", + "position": 0, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/building-modules/01-intro.md b/docs/integrate/building-modules/01-intro.md new file mode 100644 index 000000000..226c2caf6 --- /dev/null +++ b/docs/integrate/building-modules/01-intro.md @@ -0,0 +1,94 @@ +--- +sidebar_position: 1 +--- + +# Introduction to Cosmos SDK Modules + +:::note Synopsis +Modules define most of the logic of Cosmos SDK applications. Developers compose modules together using the Cosmos SDK to build their custom application-specific blockchains. This document outlines the basic concepts behind SDK modules and how to approach module management. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../../develop/high-level-concepts/00-overview-app.md) +* [Lifecycle of a Cosmos SDK transaction](../../develop/high-level-concepts/01-tx-lifecycle.md) + +::: + +## Role of Modules in a Cosmos SDK Application + +The Cosmos SDK can be thought of as the Ruby-on-Rails of blockchain development. It comes with a core that provides the basic functionalities every blockchain application needs, like a [boilerplate implementation of the ABCI](../../develop/advanced-concepts/00-baseapp.md) to communicate with the underlying consensus engine, a [`multistore`](../../develop/advanced-concepts/04-store.md#multistore) to persist state, a [server](../../develop/advanced-concepts/03-node.md) to form a full-node and [interfaces](09-module-interfaces.md) to handle queries. + +On top of this core, the Cosmos SDK enables developers to build modules that implement the business logic of their application. In other words, SDK modules implement the bulk of the logic of applications, while the core does the wiring and enables modules to be composed together. The end goal is to build a robust ecosystem of open-source Cosmos SDK modules, making it increasingly easier to build complex blockchain applications. + +Cosmos SDK modules can be seen as little state-machines within the state-machine. They generally define a subset of the state using one or more `KVStore`s in the [main multistore](../../develop/advanced-concepts/04-store.md), as well as a subset of [message types](02-messages-and-queries.md#messages). These messages are routed by one of the main components of Cosmos SDK core, [`BaseApp`](../../develop/advanced-concepts/00-baseapp.md), to a module Protobuf [`Msg` service](03-msg-services.md) that defines them. + +```text + + + | + | Transaction relayed from the full-node's consensus engine + | to the node's application via DeliverTx + | + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | + | Message routed to the correct + | module to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to the underlying consensus engine (e.g. CometBFT) + | (0=Ok, 1=Err) + v +``` + +As a result of this architecture, building a Cosmos SDK application usually revolves around writing modules to implement the specialized logic of the application and composing them with existing modules to complete the application. Developers will generally work on modules that implement logic needed for their specific use case that do not exist yet, and will use existing modules for more generic functionalities like staking, accounts, or token management. + +## How to Approach Building Modules as a Developer + +While there are no definitive guidelines for writing modules, here are some important design principles developers should keep in mind when building them: + +* **Composability**: Cosmos SDK applications are almost always composed of multiple modules. This means developers need to carefully consider the integration of their module not only with the core of the Cosmos SDK, but also with other modules. The former is achieved by following standard design patterns outlined [here](#main-components-of-cosmos-sdk-modules), while the latter is achieved by properly exposing the store(s) of the module via the [`keeper`](06-keeper.md). +* **Specialization**: A direct consequence of the **composability** feature is that modules should be **specialized**. Developers should carefully establish the scope of their module and not batch multiple functionalities into the same module. This separation of concerns enables modules to be re-used in other projects and improves the upgradability of the application. **Specialization** also plays an important role in the [object-capabilities model](../../develop/advanced-concepts/10-ocap.md) of the Cosmos SDK. +* **Capabilities**: Most modules need to read and/or write to the store(s) of other modules. However, in an open-source environment, it is possible for some modules to be malicious. That is why module developers need to carefully think not only about how their module interacts with other modules, but also about how to give access to the module's store(s). The Cosmos SDK takes a capabilities-oriented approach to inter-module security. This means that each store defined by a module is accessed by a `key`, which is held by the module's [`keeper`](06-keeper.md). This `keeper` defines how to access the store(s) and under what conditions. Access to the module's store(s) is done by passing a reference to the module's `keeper`. + +## Main Components of Cosmos SDK Modules + +Modules are by convention defined in the `./x/` subfolder (e.g. the `bank` module will be defined in the `./x/bank` folder). They generally share the same core components: + +* A [`keeper`](06-keeper.md), used to access the module's store(s) and update the state. +* A [`Msg` service](02-messages-and-queries.md#messages), used to process messages when they are routed to the module by [`BaseApp`](../../develop/advanced-concepts/00-baseapp.md#message-routing) and trigger state-transitions. +* A [query service](04-query-services.md), used to process user queries when they are routed to the module by [`BaseApp`](../../develop/advanced-concepts/00-baseapp.md#query-routing). +* Interfaces, for end users to query the subset of the state defined by the module and create `message`s of the custom types defined in the module. + +In addition to these components, modules implement the `AppModule` interface in order to be managed by the [`module manager`](01-module-manager.md). + +Please refer to the [structure document](11-structure.md) to learn about the recommended structure of a module's directory. diff --git a/docs/integrate/building-modules/01-module-manager.md b/docs/integrate/building-modules/01-module-manager.md new file mode 100644 index 000000000..01e8dd727 --- /dev/null +++ b/docs/integrate/building-modules/01-module-manager.md @@ -0,0 +1,273 @@ +--- +sidebar_position: 1 +--- + +# Module Manager + +:::note Synopsis +Cosmos SDK modules need to implement the [`AppModule` interfaces](#application-module-interfaces), in order to be managed by the application's [module manager](#module-manager). The module manager plays an important role in [`message` and `query` routing](../../develop/advanced-concepts/00-baseapp.md#msg-service-router), and allows application developers to set the order of execution of a variety of functions like [`BeginBlocker` and `EndBlocker`](../../develop/high-level-concepts/00-overview-app#beginblocker-and-endblocker). +::: + +:::note + +### Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](01-intro.md) + +::: + +## Application Module Interfaces + +Application module interfaces exist to facilitate the composition of modules together to form a functional Cosmos SDK application. +There are 4 main application module interfaces: + +* [`AppModuleBasic`](#appmodulebasic) for independent module functionalities. +* [`AppModule`](#appmodule) for inter-dependent module functionalities (except genesis-related functionalities). +* [`AppModuleGenesis`](#appmodulegenesis) for inter-dependent genesis-related module functionalities. +* `GenesisOnlyAppModule`: Defines an `AppModule` that only has import/export functionality + +The above interfaces are mostly embedding smaller interfaces (extension interfaces), that defines specific functionalities: + +* `HasName`: Allows the module to provide its own name for legacy purposes. +* [`HasGenesisBasics`](#hasgenesisbasics): The legacy interface for stateless genesis methods. +* [`HasGenesis`](#hasgenesis): The extension interface for stateful genesis methods. +* [`HasInvariants`](#hasinvariants): The extension interface for registering invariants. +* [`HasServices`](#hasservices): The extension interface for modules to register services. +* [`HasConsensusVersion`](#hasconsensusversion): The extension interface for declaring a module consensus version. +* [`BeginBlockAppModule`](#beginblockappmodule): The extension interface that contains information about the `AppModule` and `BeginBlock`. +* [`EndBlockAppModule`](#endblockappmodule): The extension interface that contains information about the `AppModule` and `EndBlock`. +* [`HasPrecommit`](#hasprecommit): The extension interface that contains information about the `AppModule` and `Precommit`. +* [`HasPrepareCheckState`](#haspreparecheckstate): The extension interface that contains information about the `AppModule` and `PrepareCheckState`. + +The `AppModuleBasic` interface exists to define independent methods of the module, i.e. those that do not depend on other modules in the application. This allows for the construction of the basic application structure early in the application definition, generally in the `init()` function of the [main application file](../../develop/high-level-concepts/00-overview-app.md#core-application-file). + +The `AppModule` interface exists to define inter-dependent module methods. Many modules need to interact with other modules, typically through [`keeper`s](06-keeper.md), which means there is a need for an interface where modules list their `keeper`s and other methods that require a reference to another module's object. `AppModule` interface extension, such as `BeginBlockAppModule` and `EndBlockAppModule`, also enables the module manager to set the order of execution between module's methods like `BeginBlock` and `EndBlock`, which is important in cases where the order of execution between modules matters in the context of the application. + +The usage of extension interfaces allows modules to define only the functionalities they need. For example, a module that does not need an `EndBlock` does not need to define the `EndBlockAppModule` interface and thus the `EndBlock` method. `AppModule` and `AppModuleGenesis` are voluntarily small interfaces, that can take advantage of the `Module` patterns without having to define many placeholder functions. + +### `AppModuleBasic` + +The `AppModuleBasic` interface defines the independent methods modules need to implement. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L49-L59 +``` + +Let us go through the methods: + +* `RegisterLegacyAminoCodec(*codec.LegacyAmino)`: 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`. +* `RegisterInterfaces(codectypes.InterfaceRegistry)`: Registers a module's interface types and their concrete implementations as `proto.Message`. +* `RegisterGRPCGatewayRoutes(client.Context, *runtime.ServeMux)`: Registers gRPC routes for the module. +* `GetTxCmd()`: Returns the root [`Tx` command](09-module-interfaces.md#transaction-commands) for the module. The subcommands of this root command are used by end-users to generate new transactions containing [`message`s](02-messages-and-queries.md#queries) defined in the module. +* `GetQueryCmd()`: Return the root [`query` command](09-module-interfaces.md#query-commands) for the module. The subcommands of this root command are used by end-users to generate new queries to the subset of the state defined by the module. + +All the `AppModuleBasic` of an application are managed by the [`BasicManager`](#basicmanager). + +### `HasName` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L61-L66 +``` + +* `HasName` is an interface that has a method `Name()`. This method returns the name of the module as a `string`. + +### `HasGenesisBasics` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L68-L72 +``` + +Let us go through the methods: + +* `DefaultGenesis(codec.JSONCodec)`: Returns a default [`GenesisState`](08-genesis.md) for the module, marshalled to `json.RawMessage`. The default `GenesisState` need to be defined by the module developer and is primarily used for testing. +* `ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`: Used to validate the `GenesisState` defined by a module, given in its `json.RawMessage` form. It will usually unmarshall the `json` before running a custom [`ValidateGenesis`](08-genesis.md#validategenesis) function defined by the module developer. + +### `AppModuleGenesis` + +The `AppModuleGenesis` interface is a simple embedding of the `AppModuleBasic` and `HasGenesis` interfaces. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L156-L160 +``` + +It does not have its own manager, and exists separately from [`AppModule`](#appmodule) only for modules that exist only to implement genesis functionalities, so that they can be managed without having to implement all of `AppModule`'s methods. + +### `HasGenesis` + +The `HasGenesis` interface is an extension interface of `HasGenesisBasics`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L162-L167 +``` + +Let us go through the two added methods: + +* `InitGenesis(sdk.Context, codec.JSONCodec, json.RawMessage)`: Initializes the subset of the state managed by the module. It is called at genesis (i.e. when the chain is first started). +* `ExportGenesis(sdk.Context, codec.JSONCodec)`: Exports the latest subset of the state managed by the module to be used in a new genesis file. `ExportGenesis` is called for each module when a new chain is started from the state of an existing chain. + +### `AppModule` + +The `AppModule` interface defines a module. Modules can declare their functionalities by implementing extensions interfaces. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L169-L173 +``` + +`AppModule`s are managed by the [module manager](#manager), which checks which extension interfaces are implemented by the module. + +:::note +Previously the `AppModule` interface was containing all the methods that are defined in the extensions interfaces. This was leading to much boilerplate for modules that did not need all the functionalities. +::: + +### `HasInvariants` + +This interface defines one method. It allows to checks if a module can register invariants. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L175-L179 +``` + +* `RegisterInvariants(sdk.InvariantRegistry)`: Registers the [`invariants`](07-invariants.md) of the module. If an invariant deviates from its predicted value, the [`InvariantRegistry`](07-invariants.md#invariant-registry) triggers appropriate logic (most often the chain will be halted). + +### `HasServices` + +This interface defines one method. It allows to checks if a module can register invariants. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L181-L185 +``` + +* `RegisterServices(Configurator)`: Allows a module to register services. + +### `HasConsensusVersion` + +This interface defines one method for checking a module consensus version. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L187-L194 +``` + +* `ConsensusVersion() uint64`: Returns the consensus version of the module. + +### `BeginBlockAppModule` + +The `BeginBlockAppModule` is an extension interface from `AppModule`. All modules that have an `BeginBlock` method implement this interface. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L196-L200 +``` + +* `BeginBlock(sdk.Context, abci.RequestBeginBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the beginning of each block. Implement empty if no logic needs to be triggered at the beginning of each block for this module. + +### `EndBlockAppModule` + +The `EndBlockAppModule` is an extension interface from `AppModule`. All modules that have an `EndBlock` method implement this interface. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L202-L206 +``` + +* `EndBlock(sdk.Context, abci.RequestEndBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the end of each block. This is also where the module can inform the underlying consensus engine of validator set changes (e.g. the `staking` module). Implement empty if no logic needs to be triggered at the end of each block for this module. + +### `HasPrecommit` + +`HasPrecommit` is an extension interface from `AppModule`. All modules that have a `Precommit` method implement this interface. + +* `Precommit(sdk.Context)`: This method gives module developers the option to implement logic that is automatically triggered during [`Commit'](../../develop/advanced-concepts/00-baseapp.md#commit) of each block using the [`deliverState`](../../develop/advanced-concepts/00-baseapp.md#state-updates) of the block to be committed. Implement empty if no logic needs to be triggered during `Commit` of each block for this module. + +### `HasPrepareCheckState` + +`HasPrepareCheckState` is an extension interface from `AppModule`. All modules that have a `PrepareCheckState` method implement this interface. + +* `PrepareCheckState(sdk.Context)`: This method gives module developers the option to implement logic that is automatically triggered during [`Commit'](../../develop/advanced-concepts/00-baseapp.md) of each block using the [`checkState`](../../develop/advanced-concepts/00-baseapp.md#state-updates) of the next block. Implement empty if no logic needs to be triggered during `Commit` of each block for this module. + +### Implementing the Application Module Interfaces + +Typically, the various application module interfaces are implemented in a file called `module.go`, located in the module's folder (e.g. `./x/module/module.go`). + +Almost every module needs to implement the `AppModuleBasic` and `AppModule` interfaces. If the module is only used for genesis, it will implement `AppModuleGenesis` instead of `AppModule`. The concrete type that implements the interface can add parameters that are required for the implementation of the various methods of the interface. For example, the `Route()` function often calls a `NewMsgServerImpl(k keeper)` function defined in `keeper/msg_server.go` and therefore needs to pass the module's [`keeper`](06-keeper.md) as a parameter. + +```go +// example +type AppModule struct { + AppModuleBasic + keeper Keeper +} +``` + +In the example above, you can see that the `AppModule` concrete type references an `AppModuleBasic`, and not an `AppModuleGenesis`. That is because `AppModuleGenesis` only needs to be implemented in modules that focus on genesis-related functionalities. In most modules, the concrete `AppModule` type will have a reference to an `AppModuleBasic` and implement the two added methods of `AppModuleGenesis` directly in the `AppModule` type. + +If no parameter is required (which is often the case for `AppModuleBasic`), just declare an empty concrete type like so: + +```go +type AppModuleBasic struct{} +``` + +## Module Managers + +Module managers are used to manage collections of `AppModuleBasic` and `AppModule`. + +### `BasicManager` + +The `BasicManager` is a structure that lists all the `AppModuleBasic` of an application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L74-L84 +``` + +It implements the following methods: + +* `NewBasicManager(modules ...AppModuleBasic)`: Constructor function. It takes a list of the application's `AppModuleBasic` and builds a new `BasicManager`. This function is generally called in the `init()` function of [`app.go`](../../develop/high-level-concepts/00-overview-app.md#core-application-file) to quickly initialize the independent elements of the application's modules (click [here](https://github.com/cosmos/gaia/blob/main/app/app.go#L59-L74) to see an example). +* `RegisterLegacyAminoCodec(cdc *codec.LegacyAmino)`: Registers the [`codec.LegacyAmino`s](../../develop/advanced-concepts/06-encoding.md#amino) of each of the application's `AppModuleBasic`. This function is usually called early on in the [application's construction](../../develop/high-level-concepts/00-overview-app.md#constructor). +* `RegisterInterfaces(registry codectypes.InterfaceRegistry)`: Registers interface types and implementations of each of the application's `AppModuleBasic`. +* `DefaultGenesis(cdc codec.JSONCodec)`: Provides default genesis information for modules in the application by calling the [`DefaultGenesis(cdc codec.JSONCodec)`](08-genesis.md#defaultgenesis) function of each module. It only calls the modules that implements the `HasGenesisBasics` interfaces. +* `ValidateGenesis(cdc codec.JSONCodec, txEncCfg client.TxEncodingConfig, genesis map[string]json.RawMessage)`: Validates the genesis information modules by calling the [`ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`](08-genesis.md#validategenesis) function of modules implementing the `HasGenesisBasics` interface. +* `RegisterGRPCGatewayRoutes(clientCtx client.Context, rtr *runtime.ServeMux)`: Registers gRPC routes for modules. +* `AddTxCommands(rootTxCmd *cobra.Command)`: Adds modules' transaction commands to the application's [`rootTxCommand`](../../develop/advanced-concepts/07-cli.md#transaction-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../../develop/advanced-concepts/07-cli.md). +* `AddQueryCommands(rootQueryCmd *cobra.Command)`: Adds modules' query commands to the application's [`rootQueryCommand`](../../develop/advanced-concepts/07-cli.md#query-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../../develop/advanced-concepts/07-cli.md). + +### `Manager` + +The `Manager` is a structure that holds all the `AppModule` of an application, and defines the order of execution between several key components of these modules: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L246-L273 +``` + +The module manager is used throughout the application whenever an action on a collection of modules is required. It implements the following methods: + +* `NewManager(modules ...AppModule)`: Constructor function. It takes a list of the application's `AppModule`s and builds a new `Manager`. It is generally called from the application's main [constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). +* `SetOrderInitGenesis(moduleNames ...string)`: Sets the order in which the [`InitGenesis`](08-genesis.md#initgenesis) function of each module will be called when the application is first started. This function is generally called from the application's main [constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). + To initialize modules successfully, module dependencies should be considered. For example, the `genutil` module must occur after `staking` module so that the pools are properly initialized with tokens from genesis accounts, the `genutils` module must also occur after `auth` so that it can access the params from auth, IBC's `capability` module should be initialized before all other modules so that it can initialize any capabilities. +* `SetOrderExportGenesis(moduleNames ...string)`: Sets the order in which the [`ExportGenesis`](08-genesis.md#exportgenesis) function of each module will be called in case of an export. This function is generally called from the application's main [constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). +* `SetOrderBeginBlockers(moduleNames ...string)`: Sets the order in which the `BeginBlock()` function of each module will be called at the beginning of each block. This function is generally called from the application's main [constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). +* `SetOrderEndBlockers(moduleNames ...string)`: Sets the order in which the `EndBlock()` function of each module will be called at the end of each block. This function is generally called from the application's main [constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). +* `SetOrderPrecommiters(moduleNames ...string)`: Sets the order in which the `Precommit()` function of each module will be called during commit of each block. This function is generally called from the application's main [constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). +* `SetOrderPrepareCheckStaters(moduleNames ...string)`: Sets the order in which the `PrepareCheckState()` function of each module will be called during commit of each block. This function is generally called from the application's main [constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). +* `SetOrderMigrations(moduleNames ...string)`: Sets the order of migrations to be run. If not set then migrations will be run with an order defined in `DefaultMigrationsOrder`. +* `RegisterInvariants(ir sdk.InvariantRegistry)`: Registers the [invariants](07-invariants.md) of module implementing the `HasInvariants` interface. +* `RegisterRoutes(router sdk.Router, queryRouter sdk.QueryRouter, legacyQuerierCdc *codec.LegacyAmino)`: Registers legacy [`Msg`](02-messages-and-queries.md#messages) and [`querier`](04-query-services.md) routes. +* `RegisterServices(cfg Configurator)`: Registers the services of modules implementing the `HasServices` interface. +* `InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, genesisData map[string]json.RawMessage)`: Calls the [`InitGenesis`](08-genesis.md#initgenesis) function of each module when the application is first started, in the order defined in `OrderInitGenesis`. Returns an `abci.ResponseInitChain` to the underlying consensus engine, which can contain validator updates. +* `ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec)`: Calls the [`ExportGenesis`](08-genesis.md#exportgenesis) function of each module, in the order defined in `OrderExportGenesis`. The export constructs a genesis file from a previously existing state, and is mainly used when a hard-fork upgrade of the chain is required. +* `ExportGenesisForModules(ctx sdk.Context, cdc codec.JSONCodec, modulesToExport []string)`: Behaves the same as `ExportGenesis`, except takes a list of modules to export. +* `BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock)`: At the beginning of each block, this function is called from [`BaseApp`](../../develop/advanced-concepts/00-baseapp.md#beginblock) and, in turn, calls the [`BeginBlock`](05-beginblock-endblock.md) function of each modules implementing the `BeginBlockAppModule` interface, in the order defined in `OrderBeginBlockers`. It creates a child [context](../../develop/advanced-concepts/02-context.md) with an event manager to aggregate [events](../../develop/advanced-concepts/08-events.md) emitted from all modules. The function returns an `abci.ResponseBeginBlock` which contains the aforementioned events. +* `EndBlock(ctx sdk.Context, req abci.RequestEndBlock)`: At the end of each block, this function is called from [`BaseApp`](../../develop/advanced-concepts/00-baseapp.md#endblock) and, in turn, calls the [`EndBlock`](05-beginblock-endblock.md) function of each modules implementing the `EndBlockAppModule` interface, in the order defined in `OrderEndBlockers`. It creates a child [context](../../develop/advanced-concepts/02-context.md) with an event manager to aggregate [events](../../develop/advanced-concepts/08-events.md) emitted from all modules. The function returns an `abci.ResponseEndBlock` which contains the aforementioned events, as well as validator set updates (if any). +* `Precommit(ctx sdk.Context)`: During [`Commit`](../../develop/advanced-concepts/00-baseapp.md#commit), this function is called from `BaseApp` immediately before the [`deliverState`](../../develop/advanced-concepts/00-baseapp.md#state-updates) is written to the underlying [`rootMultiStore`](../../develop/advanced-concepts/04-store.md#commitkvstore) and, in turn calls the `Precommit` function of each modules implementing the `HasPrecommit` interface, in the order defined in `OrderPrecommiters`. It creates a child [context](../../develop/advanced-concepts/02-context.md) where the underlying `CacheMultiStore` is that of the newly committed block's [`deliverState`](../../develop/advanced-concepts/00-baseapp.md#state-updates). +* `PrepareCheckState(ctx sdk.Context)`: During [`Commit`](../../develop/advanced-concepts/00-baseapp.md#commit), this function is called from `BaseApp` immediately after the [`deliverState`](../../develop/advanced-concepts/00-baseapp.md#state-updates) is written to the underlying [`rootMultiStore`](../../develop/advanced-concepts/04-store.md#commitmultistore) and, in turn calls the `PrepareCheckState` function of each module implementing the `HasPrepareCheckState` interface, in the order defined in `OrderPrepareCheckStaters`. It creates a child [context](../../develop/advanced-concepts/02-context.md) where the underlying `CacheMultiStore` is that of the next block's [`checkState`](../../develop/advanced-concepts/00-baseapp.md#state-updates). Writes to this state will be present in the [`checkState`](../../develop/advanced-concepts/00-baseapp.md#state-updates) of the next block, and therefore this method can be used to prepare the `checkState` for the next block. + +Here's an example of a concrete integration within an `simapp`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L386-L432 +``` + +This is the same example from `runtime` (the package that powers app v2): + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/runtime/module.go#L77 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/runtime/module.go#L87 +``` diff --git a/docs/integrate/building-modules/02-messages-and-queries.md b/docs/integrate/building-modules/02-messages-and-queries.md new file mode 100644 index 000000000..9d6956515 --- /dev/null +++ b/docs/integrate/building-modules/02-messages-and-queries.md @@ -0,0 +1,126 @@ +--- +sidebar_position: 1 +--- + +# Messages and Queries + +:::note Synopsis +`Msg`s and `Queries` are the two primary objects handled by modules. Most of the core components defined in a module, like `Msg` services, `keeper`s and `Query` services, exist to process `message`s and `queries`. +::: + +:::note + +### Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](01-intro.md) + +::: + +## Messages + +`Msg`s are objects whose end-goal is to trigger state-transitions. They are wrapped in [transactions](../../develop/advanced-concepts/01-transactions.md), which may contain one or more of them. + +When a transaction is relayed from the underlying consensus engine to the Cosmos SDK application, it is first decoded by [`BaseApp`](../../develop/advanced-concepts/00-baseapp.md). Then, each message contained in the transaction is extracted and routed to the appropriate module via `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's [`Msg` service](03-msg-services.md). For a more detailed explanation of the lifecycle of a transaction, click [here](../../develop/high-level-concepts/01-tx-lifecycle.md). + +### `Msg` Services + +Defining Protobuf `Msg` services is the recommended way to handle messages. A Protobuf `Msg` service should be created for each module, typically in `tx.proto` (see more info about [conventions and naming](../../develop/advanced-concepts/06-encoding.md#faq)). It must have an RPC service method defined for each message in the module. + +See an example of a `Msg` service definition from `x/bank` module: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L13-L36 +``` + +Each `Msg` service method must have exactly one argument, which must implement the `sdk.Msg` interface, and a Protobuf response. The naming convention is to call the RPC argument `Msg` and the RPC response `MsgResponse`. For example: + +```protobuf + rpc Send(MsgSend) returns (MsgSendResponse); +``` + +`sdk.Msg` interface is a simplified version of the Amino `LegacyMsg` interface described [below](#legacy-amino-legacymsg-s) with the `GetSigners()` method. For backwards compatibility with [Amino `LegacyMsg`s](#egacy-amino-legacymsg-s), existing `LegacyMsg` types should be used as the request parameter for `service` RPC definitions. Newer `sdk.Msg` types, which only support `service` definitions, should use canonical `Msg...` name. + +The Cosmos SDK uses Protobuf definitions to generate client and server code: + +* `MsgServer` interface defines the server API for the `Msg` service and its implementation is described as part of the [`Msg` services](03-msg-services.md) documentation. +* Structures are generated for all RPC request and response types. + +A `RegisterMsgServer` method is also generated and should be used to register the module's `MsgServer` implementation in `RegisterServices` method from the [`AppModule` interface](01-module-manager.md#appmodule). + +In order for clients (CLI and grpc-gateway) to have these URLs registered, the Cosmos SDK provides the function `RegisterMsgServiceDesc(registry codectypes.InterfaceRegistry, sd *grpc.ServiceDesc)` that should be called inside module's [`RegisterInterfaces`](01-module-manager.md#appmodulebasic) method, using the proto-generated `&_Msg_serviceDesc` as `*grpc.ServiceDesc` argument. + +### Legacy Amino `LegacyMsg`s + +The following way of defining messages is deprecated and using [`Msg` services](#msg-services) is preferred. + +Amino `LegacyMsg`s can be defined as protobuf messages. The messages definition usually includes a list of parameters needed to process the message that will be provided by end-users when they want to create a new transaction containing said message. + +A `LegacyMsg` is typically accompanied by a standard constructor function, that is called from one of the [module's interface](09-module-interfaces.md). `message`s also need to implement the `sdk.Msg` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L14-L26 +``` + +It extends `proto.Message` and contains the following methods: + +* `GetSignBytes() []byte`: Return the canonical byte representation of the message. Used to generate a signature. +* `GetSigners() []AccAddress`: Return the list of signers. The Cosmos SDK will make sure that each `message` contained in a transaction is signed by all the signers listed in the list returned by this method. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdsign.go#L20-L36 +``` + +See an example implementation of a `message` from the `gov` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/types/v1/msgs.go#L121-L153 +``` + +## Queries + +A `query` is a request for information made by end-users of applications through an interface and processed by a full-node. A `query` is received by a full-node through its consensus engine and relayed to the application via the ABCI. It is then routed to the appropriate module via `BaseApp`'s `QueryRouter` so that it can be processed by the module's query service (./04-query-services.md). For a deeper look at the lifecycle of a `query`, click [here](../../develop/high-level-concepts/02-query-lifecycle.md). + +### gRPC Queries + +Queries should be defined using [Protobuf services](https://developers.google.com/protocol-buffers/docs/proto#services). A `Query` service should be created per module in `query.proto`. This service lists endpoints starting with `rpc`. + +Here's an example of such a `Query` service definition: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/auth/v1beta1/query.proto#L14-L89 +``` + +As `proto.Message`s, generated `Response` types implement by default `String()` method of [`fmt.Stringer`](https://pkg.go.dev/fmt#Stringer). + +A `RegisterQueryServer` method is also generated and should be used to register the module's query server in the `RegisterServices` method from the [`AppModule` interface](01-module-manager.md#appmodule). + +### Legacy Queries + +Before the introduction of Protobuf and gRPC in the Cosmos SDK, there was usually no specific `query` object defined by module developers, contrary to `message`s. Instead, the Cosmos SDK took the simpler approach of using a simple `path` to define each `query`. The `path` contains the `query` type and all the arguments needed to process it. For most module queries, the `path` should look like the following: + +```text +queryCategory/queryRoute/queryType/arg1/arg2/... +``` + +where: + +* `queryCategory` is the category of the `query`, typically `custom` for module queries. It is used to differentiate between different kinds of queries within `BaseApp`'s [`Query` method](../../develop/advanced-concepts/00-baseapp.md#query). +* `queryRoute` is used by `BaseApp`'s [`queryRouter`](../../develop/advanced-concepts/00-baseapp.md#grpc-query-router) to map the `query` to its module. Usually, `queryRoute` should be the name of the module. +* `queryType` is used by the module's [`querier`](04-query-services.md#query-services) to map the `query` to the appropriate `querier function` within the module. +* `args` are the actual arguments needed to process the `query`. They are filled out by the end-user. Note that for bigger queries, you might prefer passing arguments in the `Data` field of the request `req` instead of the `path`. + +The `path` for each `query` must be defined by the module developer in the module's [command-line interface file](09-module-interfaces.md#query-commands).Overall, there are 3 mains components module developers need to implement in order to make the subset of the state defined by their module queryable: + +* A [`querier`](04-query-services.md#query-services), to process the `query` once it has been [routed to the module](../../develop/advanced-concepts/00-baseapp.md#grpc-query-router). +* [Query commands](09-module-interfaces.md#query-commands) in the module's CLI file, where the `path` for each `query` is specified. +* `query` return types. Typically defined in a file `types/querier.go`, they specify the result type of each of the module's `queries`. These custom types must implement the `String()` method of [`fmt.Stringer`](https://pkg.go.dev/fmt#Stringer). + +### Store Queries + +Store queries query directly for store keys. They use `clientCtx.QueryABCI(req abci.RequestQuery)` to return the full `abci.ResponseQuery` with inclusion Merkle proofs. + +See following examples: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/abci.go#L881-L902 +``` diff --git a/docs/integrate/building-modules/03-msg-services.md b/docs/integrate/building-modules/03-msg-services.md new file mode 100644 index 000000000..d9336b42c --- /dev/null +++ b/docs/integrate/building-modules/03-msg-services.md @@ -0,0 +1,121 @@ +--- +sidebar_position: 1 +--- + +# `Msg` Services + +:::note Synopsis +A Protobuf `Msg` service processes [messages](02-messages-and-queries.md#messages). Protobuf `Msg` services are specific to the module in which they are defined, and only process messages defined within the said module. They are called from `BaseApp` during [`DeliverTx`](../../develop/advanced-concepts/00-baseapp.md#delivertx). +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](01-module-manager.md) +* [Messages and Queries](02-messages-and-queries.md) + +::: + +## Implementation of a module `Msg` service + +Each module should define a Protobuf `Msg` service, which will be responsible for processing requests (implementing `sdk.Msg`) and returning responses. + +As further described in [ADR 031](../architecture/adr-031-msg-service.md), this approach has the advantage of clearly specifying return types and generating server and client code. + +Protobuf generates a `MsgServer` interface based on a definition of `Msg` service. It is the role of the module developer to implement this interface, by implementing the state transition logic that should happen upon receival of each `sdk.Msg`. As an example, here is the generated `MsgServer` interface for `x/bank`, which exposes two `sdk.Msg`s: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/types/tx.pb.go#L550-L568 +``` + +When possible, the existing module's [`Keeper`](06-keeper.md) should implement `MsgServer`, otherwise a `msgServer` struct that embeds the `Keeper` can be created, typically in `./keeper/msg_server.go`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/msg_server.go#L15-L17 +``` + +`msgServer` methods can retrieve the `sdk.Context` from the `context.Context` parameter method using the `sdk.UnwrapSDKContext`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/msg_server.go#L28 +``` + +`sdk.Msg` processing usually follows these 3 steps: + +### Validation + +The message server must perform all validation required (both *stateful* and *stateless*) to make sure the `message` is valid. +The `signer` is charged for the gas cost of this validation. + +For example, a `msgServer` method for a `transfer` message should check that the sending account has enough funds to actually perform the transfer. + +It is recommended to implement all validation checks in a separate function that passes state values as arguments. This implementation simplifies testing. As expected, expensive validation functions charge additional gas. Example: + +```go +ValidateMsgA(msg MsgA, now Time, gm GasMeter) error { + if now.Before(msg.Expire) { + return sdkerrrors.ErrInvalidRequest.Wrap("msg expired") + } + gm.ConsumeGas(1000, "signature verification") + return signatureVerificaton(msg.Prover, msg.Data) +} +``` + +:::warning +Previously, the `ValidateBasic` method was used to perform simple and stateless validation checks. +This way of validating is deprecated, this means the `msgServer` must perform all validation checks. +::: + +### State Transition + +After the validation is successful, the `msgServer` method uses the [`keeper`](06-keeper.md) functions to access the state and perform a state transition. + +### Events + +Before returning, `msgServer` methods generally emit one or more [events](../../develop/advanced-concepts/08-events.md) by using the `EventManager` held in the `ctx`. Use the new `EmitTypedEvent` function that uses protobuf-based event types: + +```go +ctx.EventManager().EmitTypedEvent( + &group.EventABC{Key1: Value1, Key2, Value2}) +``` + +or the older `EmitEvent` function: + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, // e.g. sdk.EventTypeMessage for a message, types.CustomEventType for a custom event defined in the module + sdk.NewAttribute(key1, value1), + sdk.NewAttribute(key2, value2), + ), +) +``` + +These events are relayed back to the underlying consensus engine and can be used by service providers to implement services around the application. Click [here](../../develop/advanced-concepts/08-events.md) to learn more about events. + +The invoked `msgServer` method returns a `proto.Message` response and an `error`. These return values are then wrapped into an `*sdk.Result` or an `error` using `sdk.WrapServiceResult(ctx sdk.Context, res proto.Message, err error)`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/msg_service_router.go#L131 +``` + +This method takes care of marshaling the `res` parameter to protobuf and attaching any events on the `ctx.EventManager()` to the `sdk.Result`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/base/abci/v1beta1/abci.proto#L88-L109 +``` + +This diagram shows a typical structure of a Protobuf `Msg` service, and how the message propagates through the module. + +![Transaction flow](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/transaction_flow.svg) + +## Telemetry + +New [telemetry metrics](../../develop/advanced-concepts/11-telemetry.md) can be created from `msgServer` methods when handling messages. + +This is an example from the `x/auth/vesting` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/vesting/msg_server.go#L68-L80 +``` diff --git a/docs/integrate/building-modules/04-query-services.md b/docs/integrate/building-modules/04-query-services.md new file mode 100644 index 000000000..37576c02b --- /dev/null +++ b/docs/integrate/building-modules/04-query-services.md @@ -0,0 +1,59 @@ +--- +sidebar_position: 1 +--- + +# Query Services + +:::note Synopsis +A Protobuf Query service processes [`queries`](02-messages-and-queries.md#queries). Query services are specific to the module in which they are defined, and only process `queries` defined within said module. They are called from `BaseApp`'s [`Query` method](../../develop/advanced-concepts/00-baseapp.md#query). +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](01-module-manager.md) +* [Messages and Queries](02-messages-and-queries.md) + +::: + +## Implementation of a module query service + +### gRPC Service + +When defining a Protobuf `Query` service, a `QueryServer` interface is generated for each module with all the service methods: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +These custom queries methods should be implemented by a module's keeper, typically in `./keeper/grpc_query.go`. The first parameter of these methods is a generic `context.Context`. Therefore, the Cosmos SDK provides a function `sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +Here's an example implementation for the bank module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/grpc_query.go +``` + +### Calling queries from the State Machine + +The Cosmos SDK v0.47 introduces a new `cosmos.query.v1.module_query_safe` Protobuf annotation which is used to state that a query that is safe to be called from within the state machine, for example: + +* a Keeper's query function can be called from another module's Keeper, +* ADR-033 intermodule query calls, +* CosmWasm contracts can also directly interact with these queries. + +If the `module_query_safe` annotation set to `true`, it means: + +* The query is deterministic: given a block height it will return the same response upon multiple calls, and doesn't introduce any state-machine breaking changes across SDK patch versions. +* Gas consumption never fluctuates across calls and across patch versions. + +If you are a module developer and want to use `module_query_safe` annotation for your own query, you have to ensure the following things: + +* the query is deterministic and won't introduce state-machine-breaking changes without coordinated upgrades +* it has its gas tracked, to avoid the attack vector where no gas is accounted for + on potentially high-computation queries. diff --git a/docs/integrate/building-modules/05-beginblock-endblock.md b/docs/integrate/building-modules/05-beginblock-endblock.md new file mode 100644 index 000000000..df1b63705 --- /dev/null +++ b/docs/integrate/building-modules/05-beginblock-endblock.md @@ -0,0 +1,47 @@ +--- +sidebar_position: 1 +--- + +# BeginBlocker and EndBlocker + +:::note Synopsis +`BeginBlocker` and `EndBlocker` are optional methods module developers can implement in their module. They will be triggered at the beginning and at the end of each block respectively, when the [`BeginBlock`](../../develop/advanced-concepts/00-baseapp.md#beginblock) and [`EndBlock`](../../develop/advanced-concepts/00-baseapp.md#endblock) ABCI messages are received from the underlying consensus engine. +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](01-module-manager.md) + +::: + +## BeginBlocker and EndBlocker + +`BeginBlocker` and `EndBlocker` are a way for module developers to add automatic execution of logic to their module. This is a powerful tool that should be used carefully, as complex automatic functions can slow down or even halt the chain. + +When needed, `BeginBlocker` and `EndBlocker` are implemented as part of the [`BeginBlockAppModule` and `BeginBlockAppModule` interfaces](01-module-manager.md#appmodule). This means either can be left-out if not required. The `BeginBlock` and `EndBlock` methods of the interface implemented in `module.go` generally defer to `BeginBlocker` and `EndBlocker` methods respectively, which are usually implemented in `abci.go`. + +The actual implementation of `BeginBlocker` and `EndBlocker` in `abci.go` are very similar to that of a [`Msg` service](03-msg-services.md): + +* They generally use the [`keeper`](06-keeper.md) and [`ctx`](../../develop/advanced-concepts/02-context.md) to retrieve information about the latest state. +* If needed, they use the `keeper` and `ctx` to trigger state-transitions. +* If needed, they can emit [`events`](../../develop/advanced-concepts/08-events.md) via the `ctx`'s `EventManager`. + +A specificity of the `EndBlocker` is that it can return validator updates to the underlying consensus engine in the form of an [`[]abci.ValidatorUpdates`](https://docs.cometbft.com/v0.37/spec/abci/abci++_methods#endblock). This is the preferred way to implement custom validator changes. + +It is possible for developers to define the order of execution between the `BeginBlocker`/`EndBlocker` functions of each of their application's modules via the module's manager `SetOrderBeginBlocker`/`SetOrderEndBlocker` methods. For more on the module manager, click [here](01-module-manager.md#manager). + +See an example implementation of `BeginBlocker` from the `distribution` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/abci.go#L14-L38 +``` + +and an example implementation of `EndBlocker` from the `staking` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/abci.go#L22-L27 +``` + + diff --git a/docs/integrate/building-modules/06-keeper.md b/docs/integrate/building-modules/06-keeper.md new file mode 100644 index 000000000..e97e25e10 --- /dev/null +++ b/docs/integrate/building-modules/06-keeper.md @@ -0,0 +1,93 @@ +--- +sidebar_position: 1 +--- + +# Keepers + +:::note Synopsis +`Keeper`s refer to a Cosmos SDK abstraction whose role is to manage access to the subset of the state defined by various modules. `Keeper`s are module-specific, i.e. the subset of state defined by a module can only be accessed by a `keeper` defined in said module. If a module needs to access the subset of state defined by another module, a reference to the second module's internal `keeper` needs to be passed to the first one. This is done in `app.go` during the instantiation of module keepers. +::: + +:::note + +### Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](01-intro.md) + +::: + +## Motivation + +The Cosmos SDK is a framework that makes it easy for developers to build complex decentralized applications from scratch, mainly by composing modules together. As the ecosystem of open-source modules for the Cosmos SDK expands, it will become increasingly likely that some of these modules contain vulnerabilities, as a result of the negligence or malice of their developer. + +The Cosmos SDK adopts an [object-capabilities-based approach](../../develop/advanced-concepts/10-ocap.md) to help developers better protect their application from unwanted inter-module interactions, and `keeper`s are at the core of this approach. A `keeper` can be considered quite literally to be the gatekeeper of a module's store(s). Each store (typically an [`IAVL` Store](../../develop/advanced-concepts/04-store.md#iavl-store)) defined within a module comes with a `storeKey`, which grants unlimited access to it. The module's `keeper` holds this `storeKey` (which should otherwise remain unexposed), and defines [methods](#implementing-methods) for reading and writing to the store(s). + +The core idea behind the object-capabilities approach is to only reveal what is necessary to get the work done. In practice, this means that instead of handling permissions of modules through access-control lists, module `keeper`s are passed a reference to the specific instance of the other modules' `keeper`s that they need to access (this is done in the [application's constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function)). As a consequence, a module can only interact with the subset of state defined in another module via the methods exposed by the instance of the other module's `keeper`. This is a great way for developers to control the interactions that their own module can have with modules developed by external developers. + +## Type Definition + +`keeper`s are generally implemented in a `/keeper/keeper.go` file located in the module's folder. By convention, the type `keeper` of a module is simply named `Keeper` and usually follows the following structure: + +```go +type Keeper struct { + // External keepers, if any + + // Store key(s) + + // codec + + // authority +} +``` + +For example, here is the type definition of the `keeper` from the `staking` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/keeper.go#L23-L31 +``` + +Let us go through the different parameters: + +* An expected `keeper` is a `keeper` external to a module that is required by the internal `keeper` of said module. External `keeper`s are listed in the internal `keeper`'s type definition as interfaces. These interfaces are themselves defined in an `expected_keepers.go` file in the root of the module's folder. In this context, interfaces are used to reduce the number of dependencies, as well as to facilitate the maintenance of the module itself. +* `storeKey`s grant access to the store(s) of the [multistore](../../develop/advanced-concepts/04-store.md) managed by the module. They should always remain unexposed to external modules. +* `cdc` is the [codec](../../develop/advanced-concepts/06-encoding.md) used to marshall and unmarshall structs to/from `[]byte`. The `cdc` can be any of `codec.BinaryCodec`, `codec.JSONCodec` or `codec.Codec` based on your requirements. It can be either a proto or amino codec as long as they implement these interfaces. The authority listed is a module account or user account that has the right to change module level parameters. Previously this was handled by the param module, which has been deprecated. + +Of course, it is possible to define different types of internal `keeper`s for the same module (e.g. a read-only `keeper`). Each type of `keeper` comes with its own constructor function, which is called from the [application's constructor function](../../develop/high-level-concepts/00-overview-app.md). This is where `keeper`s are instantiated, and where developers make sure to pass correct instances of modules' `keeper`s to other modules that require them. + +## Implementing Methods + +`Keeper`s primarily expose getter and setter methods for the store(s) managed by their module. These methods should remain as simple as possible and strictly be limited to getting or setting the requested value, as validity checks should have already been performed by the [`Msg` server](03-msg-services.md) when `keeper`s' methods are called. + +Typically, a *getter* method will have the following signature + +```go +func (k Keeper) Get(ctx sdk.Context, key string) returnType +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. Then it's preferred to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. If it exists, get the `[]byte` value stored at location `[]byte(key)` using the `Get(key []byte)` method of the store. +3. Unmarshall the retrieved value from `[]byte` to `returnType` using the codec `cdc`. Return the value. + +Similarly, a *setter* method will have the following signature + +```go +func (k Keeper) Set(ctx sdk.Context, key string, value valueType) +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. It's preferred to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. Marshal `value` to `[]byte` using the codec `cdc`. +3. Set the encoded value in the store at location `key` using the `Set(key []byte, value []byte)` method of the store. + +For more, see an example of `keeper`'s [methods implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/keeper.go). + +The [module `KVStore`](../../develop/advanced-concepts/04-store.md#kvstore-and-commitkvstore-interfaces) also provides an `Iterator()` method which returns an `Iterator` object to iterate over a domain of keys. + +This is an example from the `auth` module to iterate accounts: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/account.go#L94-L108 +``` diff --git a/docs/integrate/building-modules/07-invariants.md b/docs/integrate/building-modules/07-invariants.md new file mode 100644 index 000000000..f2cf9b964 --- /dev/null +++ b/docs/integrate/building-modules/07-invariants.md @@ -0,0 +1,92 @@ +--- +sidebar_position: 1 +--- + +# Invariants + +:::note Synopsis +An invariant is a property of the application that should always be true. In the context of the Cosmos SDK, an `Invariant` is a function that checks for a particular invariant. These functions are useful to detect bugs early on and act upon them to limit their potential consequences (e.g. by halting the chain). They are also useful in the development process of the application to detect bugs via simulations. +::: + +:::note + +### Pre-requisite Readings + +* [Keepers](06-keeper.md) + +::: + +## Implementing `Invariant`s + +An `Invariant` is a function that checks for a particular invariant within a module. Module `Invariant`s must follow the `Invariant` type: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/invariant.go#L9 +``` + +The `string` return value is the invariant message, which can be used when printing logs, and the `bool` return value is the actual result of the invariant check. + +In practice, each module implements `Invariant`s in a `keeper/invariants.go` file within the module's folder. The standard is to implement one `Invariant` function per logical grouping of invariants with the following model: + +```go +// Example for an Invariant that checks balance-related invariants + +func BalanceInvariants(k Keeper) sdk.Invariant { + return func(ctx sdk.Context) (string, bool) { + // Implement checks for balance-related invariants + } +} +``` + +Additionally, module developers should generally implement an `AllInvariants` function that runs all the `Invariant`s functions of the module: + +```go +// AllInvariants runs all invariants of the module. +// In this example, the module implements two Invariants: BalanceInvariants and DepositsInvariants + +func AllInvariants(k Keeper) sdk.Invariant { + + return func(ctx sdk.Context) (string, bool) { + res, stop := BalanceInvariants(k)(ctx) + if stop { + return res, stop + } + + return DepositsInvariant(k)(ctx) + } +} +``` + +Finally, module developers need to implement the `RegisterInvariants` method as part of the [`AppModule` interface](01-module-manager.md#appmodule). Indeed, the `RegisterInvariants` method of the module, implemented in the `module/module.go` file, typically only defers the call to a `RegisterInvariants` method implemented in the `keeper/invariants.go` file. The `RegisterInvariants` method registers a route for each `Invariant` function in the [`InvariantRegistry`](#invariant-registry): + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/invariants.go#L12-L22 +``` + +For more, see an example of [`Invariant`s implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/invariants.go). + +## Invariant Registry + +The `InvariantRegistry` is a registry where the `Invariant`s of all the modules of an application are registered. There is only one `InvariantRegistry` per **application**, meaning module developers need not implement their own `InvariantRegistry` when building a module. **All module developers need to do is to register their modules' invariants in the `InvariantRegistry`, as explained in the section above**. The rest of this section gives more information on the `InvariantRegistry` itself, and does not contain anything directly relevant to module developers. + +At its core, the `InvariantRegistry` is defined in the Cosmos SDK as an interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/invariant.go#L14-L17 +``` + +Typically, this interface is implemented in the `keeper` of a specific module. The most used implementation of an `InvariantRegistry` can be found in the `crisis` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/crisis/keeper/keeper.go#L57-L61 +``` + +The `InvariantRegistry` is therefore typically instantiated by instantiating the `keeper` of the `crisis` module in the [application's constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). + +`Invariant`s can be checked manually via [`message`s](02-messages-and-queries.md), but most often they are checked automatically at the end of each block. Here is an example from the `crisis` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/crisis/abci.go#L12-L21 +``` + +In both cases, if one of the `Invariant`s returns false, the `InvariantRegistry` can trigger special logic (e.g. have the application panic and print the `Invariant`s message in the log). diff --git a/docs/integrate/building-modules/08-genesis.md b/docs/integrate/building-modules/08-genesis.md new file mode 100644 index 000000000..6337f3790 --- /dev/null +++ b/docs/integrate/building-modules/08-genesis.md @@ -0,0 +1,80 @@ +--- +sidebar_position: 1 +--- + +# Module Genesis + +:::note Synopsis +Modules generally handle a subset of the state and, as such, they need to define the related subset of the genesis file as well as methods to initialize, verify and export it. +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](01-module-manager.md) +* [Keepers](06-keeper.md) + +::: + +## Type Definition + +The subset of the genesis state defined from a given module is generally defined in a `genesis.proto` file ([more info](../../develop/advanced-concepts/06-encoding.md#gogoproto) on how to define protobuf messages). The struct defining the module's subset of the genesis state is usually called `GenesisState` and contains all the module-related values that need to be initialized during the genesis process. + +See an example of `GenesisState` protobuf message definition from the `auth` module: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/auth/v1beta1/genesis.proto +``` + +Next we present the main genesis-related methods that need to be implemented by module developers in order for their module to be used in Cosmos SDK applications. + +### `DefaultGenesis` + +The `DefaultGenesis()` method is a simple method that calls the constructor function for `GenesisState` with the default value for each parameter. See an example from the `auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/module.go#L55-L59 +``` + +### `ValidateGenesis` + +The `ValidateGenesis(data GenesisState)` method is called to verify that the provided `genesisState` is correct. It should perform validity checks on each of the parameters listed in `GenesisState`. See an example from the `auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/types/genesis.go#L61-L74 +``` + +## Other Genesis Methods + +Other than the methods related directly to `GenesisState`, module developers are expected to implement two other methods as part of the [`AppModuleGenesis` interface](01-module-manager.md#appmodulegenesis) (only if the module needs to initialize a subset of state in genesis). These methods are [`InitGenesis`](#initgenesis) and [`ExportGenesis`](#exportgenesis). + +### `InitGenesis` + +The `InitGenesis` method is executed during [`InitChain`](../../develop/advanced-concepts/00-baseapp.md#initchain) when the application is first started. Given a `GenesisState`, it initializes the subset of the state managed by the module by using the module's [`keeper`](06-keeper.md) setter function on each parameter within the `GenesisState`. + +The [module manager](01-module-manager.md#manager) of the application is responsible for calling the `InitGenesis` method of each of the application's modules in order. This order is set by the application developer via the manager's `SetOrderGenesisMethod`, which is called in the [application's constructor function](../../develop/high-level-concepts/00-overview-app.md#constructor-function). + +See an example of `InitGenesis` from the `auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/genesis.go#L8-L35 +``` + +### `ExportGenesis` + +The `ExportGenesis` method is executed whenever an export of the state is made. It takes the latest known version of the subset of the state managed by the module and creates a new `GenesisState` out of it. This is mainly used when the chain needs to be upgraded via a hard fork. + +See an example of `ExportGenesis` from the `auth` module. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/genesis.go#L37-L49 +``` + +### GenesisTxHandler + +`GenesisTxHandler` is a way for modules to submit state transitions prior to the first block. This is used by `x/genutil` to submit the genesis transactions for the validators to be added to staking. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/advanced-concepts/genesis/txhandler.go#L3-L6 +``` diff --git a/docs/integrate/building-modules/09-module-interfaces.md b/docs/integrate/building-modules/09-module-interfaces.md new file mode 100644 index 000000000..03cb750bd --- /dev/null +++ b/docs/integrate/building-modules/09-module-interfaces.md @@ -0,0 +1,161 @@ +--- +sidebar_position: 1 +--- + +# Module Interfaces + +:::note Synopsis +This document details how to build CLI and REST interfaces for a module. Examples from various Cosmos SDK modules are included. +::: + +:::note + +### Pre-requisite Readings + +* [Building Modules Intro](01-intro.md) + +::: + +## CLI + +One of the main interfaces for an application is the [command-line interface](../../develop/advanced-concepts/07-cli.md). This entrypoint adds commands from the application's modules enabling end-users to create [**messages**](02-messages-and-queries.md#messages) wrapped in transactions and [**queries**](02-messages-and-queries.md#queries). The CLI files are typically found in the module's `./client/cli` folder. + +### Transaction Commands + +In order to create messages that trigger state changes, end-users must create [transactions](../../develop/advanced-concepts/01-transactions.md) that wrap and deliver the messages. A transaction command creates a transaction that includes one or more messages. + +Transaction commands typically have their own `tx.go` file that lives within the module's `./client/cli` folder. The commands are specified in getter functions and the name of the function should include the name of the command. + +Here is an example from the `x/bank` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/client/cli/tx.go#L35-L71 +``` + +In the example, `NewSendTxCmd()` creates and returns the transaction command for a transaction that wraps and delivers `MsgSend`. `MsgSend` is the message used to send tokens from one account to another. + +In general, the getter function does the following: + +* **Constructs the command:** Read the [Cobra Documentation](https://pkg.go.dev/github.com/spf13/cobra) for more detailed information on how to create commands. + * **Use:** Specifies the format of the user input required to invoke the command. In the example above, `send` is the name of the transaction command and `[from_key_or_address]`, `[to_address]`, and `[amount]` are the arguments. + * **Args:** The number of arguments the user provides. In this case, there are exactly three: `[from_key_or_address]`, `[to_address]`, and `[amount]`. + * **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + * **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new transaction. + * The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientTxContext(cmd)`. The `clientCtx` contains information relevant to transaction handling, including information about the user. In this example, the `clientCtx` is used to retrieve the address of the sender by calling `clientCtx.GetFromAddress()`. + * If applicable, the command's arguments are parsed. In this example, the arguments `[to_address]` and `[amount]` are both parsed. + * A [message](02-messages-and-queries.md) is created using the parsed arguments and information from the `clientCtx`. The constructor function of the message type is called directly. In this case, `types.NewMsgSend(fromAddr, toAddr, amount)`. Its good practice to call, if possible, the necessary [message validation methods](Validation) before broadcasting the message. + * Depending on what the user wants, the transaction is either generated offline or signed and broadcasted to the preconfigured node using `tx.GenerateOrBroadcastTxCLI(clientCtx, flags, msg)`. +* **Adds transaction flags:** All transaction commands must add a set of transaction [flags](#flags). The transaction flags are used to collect additional information from the user (e.g. the amount of fees the user is willing to pay). The transaction flags are added to the constructed command using `AddTxFlagsToCmd(cmd)`. +* **Returns the command:** Finally, the transaction command is returned. + +Each module must implement `NewTxCmd()`, which aggregates all of the transaction commands of the module. Here is an example from the `x/bank` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/client/cli/tx.go#L17-L33 +``` + +Each module must also implement the `GetTxCmd()` method for `AppModuleBasic` that simply returns `NewTxCmd()`. This allows the root command to easily aggregate all of the transaction commands for each module. Here is an example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/module.go#L79-L82 +``` + +### Query Commands + +[Queries](02-messages-and-queries.md#queries) allow users to gather information about the application or network state; they are routed by the application and processed by the module in which they are defined. Query commands typically have their own `query.go` file in the module's `./client/cli` folder. Like transaction commands, they are specified in getter functions. Here is an example of a query command from the `x/auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/client/cli/query.go#L86-L128 +``` + +In the example, `GetAccountCmd()` creates and returns a query command that returns the state of an account based on the provided account address. + +In general, the getter function does the following: + +* **Constructs the command:** Read the [Cobra Documentation](https://pkg.go.dev/github.com/spf13/cobra) for more detailed information on how to create commands. + * **Use:** Specifies the format of the user input required to invoke the command. In the example above, `account` is the name of the query command and `[address]` is the argument. + * **Args:** The number of arguments the user provides. In this case, there is exactly one: `[address]`. + * **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + * **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new query. + * The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientQueryContext(cmd)`. The `clientCtx` contains information relevant to query handling. + * If applicable, the command's arguments are parsed. In this example, the argument `[address]` is parsed. + * A new `queryClient` is initialized using `NewQueryClient(clientCtx)`. The `queryClient` is then used to call the appropriate [query](02-messages-and-queries.md#grpc-queries). + * The `clientCtx.PrintProto` method is used to format the `proto.Message` object so that the results can be printed back to the user. +* **Adds query flags:** All query commands must add a set of query [flags](#flags). The query flags are added to the constructed command using `AddQueryFlagsToCmd(cmd)`. +* **Returns the command:** Finally, the query command is returned. + +Each module must implement `GetQueryCmd()`, which aggregates all of the query commands of the module. Here is an example from the `x/auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/client/cli/query.go#L33-L53 +``` + +Each module must also implement the `GetQueryCmd()` method for `AppModuleBasic` that returns the `GetQueryCmd()` function. This allows for the root command to easily aggregate all of the query commands for each module. Here is an example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/module.go#L84-L87 +``` + +### Flags + +[Flags](../../develop/advanced-concepts/07-cli.md#flags) allow users to customize commands. `--fees` and `--gas-prices` are examples of flags that allow users to set the [fees](../../develop/high-level-concepts/04-gas-fees.md) and gas prices for their transactions. + +Flags that are specific to a module are typically created in a `flags.go` file in the module's `./client/cli` folder. When creating a flag, developers set the value type, the name of the flag, the default value, and a description about the flag. Developers also have the option to mark flags as _required_ so that an error is thrown if the user does not include a value for the flag. + +Here is an example that adds the `--from` flag to a command: + +```go +cmd.Flags().String(FlagFrom, "", "Name or address of private key with which to sign") +``` + +In this example, the value of the flag is a `String`, the name of the flag is `from` (the value of the `FlagFrom` constant), the default value of the flag is `""`, and there is a description that will be displayed when a user adds `--help` to the command. + +Here is an example that marks the `--from` flag as _required_: + +```go +cmd.MarkFlagRequired(FlagFrom) +``` + +For more detailed information on creating flags, visit the [Cobra Documentation](https://github.com/spf13/cobra). + +As mentioned in [transaction commands](#transaction-commands), there is a set of flags that all transaction commands must add. This is done with the `AddTxFlagsToCmd` method defined in the Cosmos SDK's `./client/flags` package. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/flags/flags.go#L108-L138 +``` + +Since `AddTxFlagsToCmd(cmd *cobra.Command)` includes all of the basic flags required for a transaction command, module developers may choose not to add any of their own (specifying arguments instead may often be more appropriate). + +Similarly, there is a `AddQueryFlagsToCmd(cmd *cobra.Command)` to add common flags to a module query command. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/flags/flags.go#L95-L106 +``` + +## gRPC + +[gRPC](https://grpc.io/) is a Remote Procedure Call (RPC) framework. RPC is the preferred way for external clients like wallets and exchanges to interact with a blockchain. + +In addition to providing an ABCI query pathway, the Cosmos SDK provides a gRPC proxy server that routes gRPC query requests to ABCI query requests. + +In order to do that, modules must implement `RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux)` on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. + +Here's an example from the `x/auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/module.go#L71-L76 +``` + +## gRPC-gateway REST + +Applications need to support web services that use HTTP requests (e.g. a web wallet like [Keplr](https://keplr.app)). [grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) translates REST calls into gRPC calls, which might be useful for clients that do not use gRPC. + +Modules that want to expose REST queries should add `google.api.http` annotations to their `rpc` methods, such as in the example below from the `x/auth` module: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/auth/v1beta1/query.proto#L14-L89 +``` + +gRPC gateway is started in-process along with the application and CometBFT. It can be enabled or disabled by setting gRPC Configuration `enable` in [`app.toml`](../../user/run-node/02-interact-node.md#configuring-the-node-using-apptoml). + +The Cosmos SDK provides a command for generating [Swagger](https://swagger.io/) documentation (`protoc-gen-swagger`). Setting `swagger` in [`app.toml`](../../user/run-node/02-interact-node.md#configuring-the-node-using-apptoml) defines if swagger documentation should be automatically registered. diff --git a/docs/integrate/building-modules/11-structure.md b/docs/integrate/building-modules/11-structure.md new file mode 100644 index 000000000..22930ee42 --- /dev/null +++ b/docs/integrate/building-modules/11-structure.md @@ -0,0 +1,95 @@ +--- +sidebar_position: 1 +--- + +# Recommended Folder Structure + +:::note Synopsis +This document outlines the recommended structure of Cosmos SDK modules. These ideas are meant to be applied as suggestions. Application developers are encouraged to improve upon and contribute to module structure and development design. +::: + +## Structure + +A typical Cosmos SDK module can be structured as follows: + +```shell +proto +└── {project_name} +    └── {module_name} +    └── {proto_version} +       ├── {module_name}.proto +       ├── event.proto +       ├── genesis.proto +       ├── query.proto +       └── tx.proto +``` + +* `{module_name}.proto`: The module's common message type definitions. +* `event.proto`: The module's message type definitions related to events. +* `genesis.proto`: The module's message type definitions related to genesis state. +* `query.proto`: The module's Query service and related message type definitions. +* `tx.proto`: The module's Msg service and related message type definitions. + +```shell +x/{module_name} +├── client +│   ├── cli +│   │ ├── query.go +│   │   └── tx.go +│   └── testutil +│   ├── cli_test.go +│   └── suite.go +├── exported +│   └── exported.go +├── keeper +│   ├── genesis.go +│   ├── grpc_query.go +│   ├── hooks.go +│   ├── invariants.go +│   ├── keeper.go +│   ├── keys.go +│   ├── msg_server.go +│   └── querier.go +├── module +│   └── module.go +│   └── abci.go +│   └── autocli.go +├── simulation +│   ├── decoder.go +│   ├── genesis.go +│   ├── operations.go +│   └── params.go +├── {module_name}.pb.go +├── codec.go +├── errors.go +├── events.go +├── events.pb.go +├── expected_keepers.go +├── genesis.go +├── genesis.pb.go +├── keys.go +├── msgs.go +├── params.go +├── query.pb.go +├── tx.pb.go +└── 05-depinject.md +``` + +* `client/`: The module's CLI client functionality implementation and the module's CLI testing suite. +* `exported/`: The module's exported types - typically interface types. If a module relies on keepers from another module, it is expected to receive the keepers as interface contracts through the `expected_keepers.go` file (see below) in order to avoid a direct dependency on the module implementing the keepers. However, these interface contracts can define methods that operate on and/or return types that are specific to the module that is implementing the keepers and this is where `exported/` comes into play. The interface types that are defined in `exported/` use canonical types, allowing for the module to receive the keepers as interface contracts through the `expected_keepers.go` file. This pattern allows for code to remain DRY and also alleviates import cycle chaos. +* `keeper/`: The module's `Keeper` and `MsgServer` implementation. +* `module/`: The module's `AppModule` and `AppModuleBasic` implementation. + * `abci.go`: The module's `BeginBlocker` and `EndBlocker` implementations (this file is only required if `BeginBlocker` and/or `EndBlocker` need to be defined). + * `autocli.go`: The module [autocli](../tooling/03-autocli.md) options. +* `simulation/`: The module's [simulation](14-simulator.md) package defines functions used by the blockchain simulator application (`simapp`). +* `REAMDE.md`: The module's specification documents outlining important concepts, state storage structure, and message and event type definitions. Learn more how to write module specs in the [spec guidelines](../spec/SPEC_MODULE.md). +* The root directory includes type definitions for messages, events, and genesis state, including the type definitions generated by Protocol Buffers. + * `codec.go`: The module's registry methods for interface types. + * `errors.go`: The module's sentinel errors. + * `events.go`: The module's event types and constructors. + * `expected_keepers.go`: The module's [expected keeper](06-keeper.md#type-definition) interfaces. + * `genesis.go`: The module's genesis state methods and helper functions. + * `keys.go`: The module's store keys and associated helper functions. + * `msgs.go`: The module's message type definitions and associated methods. + * `params.go`: The module's parameter type definitions and associated methods. + * `*.pb.go`: The module's type definitions generated by Protocol Buffers (as defined in the respective `*.proto` files above). diff --git a/docs/integrate/building-modules/12-errors.md b/docs/integrate/building-modules/12-errors.md new file mode 100644 index 000000000..969ce6e75 --- /dev/null +++ b/docs/integrate/building-modules/12-errors.md @@ -0,0 +1,56 @@ +--- +sidebar_position: 1 +--- + +# Errors + +:::note Synopsis +This document outlines the recommended usage and APIs for error handling in Cosmos SDK modules. +::: + +Modules are encouraged to define and register their own errors to provide better +context on failed message or handler execution. Typically, these errors should be +common or general errors which can be further wrapped to provide additional specific +execution context. + +## Registration + +Modules should define and register their custom errors in `x/{module}/errors.go`. +Registration of errors is handled via the [`errors` package](https://github.com/cosmos/cosmos-sdk/blob/main/errors/errors.go). + +Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/types/errors.go#L1-L21 +``` + +Each custom module error must provide the codespace, which is typically the module name +(e.g. "distribution") and is unique per module, and a uint32 code. Together, the codespace and code +provide a globally unique Cosmos SDK error. Typically, the code is monotonically increasing but does not +necessarily have to be. The only restrictions on error codes are the following: + +* Must be greater than one, as a code value of one is reserved for internal errors. +* Must be unique within the module. + +Note, the Cosmos SDK provides a core set of *common* errors. These errors are defined in [`types/errors/errors.go`](https://github.com/cosmos/cosmos-sdk/blob/main/types/errors/errors.go). + +## Wrapping + +The custom module errors can be returned as their concrete type as they already fulfill the `error` +interface. However, module errors can be wrapped to provide further context and meaning to failed +execution. + +Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/keeper.go#L141-L182 +``` + +Regardless if an error is wrapped or not, the Cosmos SDK's `errors` package provides a function to determine if +an error is of a particular kind via `Is`. + +## ABCI + +If a module error is registered, the Cosmos SDK `errors` package allows ABCI information to be extracted +through the `ABCIInfo` function. The package also provides `ResponseCheckTx` and `ResponseDeliverTx` as +auxiliary functions to automatically get `CheckTx` and `DeliverTx` responses from an error. diff --git a/docs/integrate/building-modules/13-upgrade.md b/docs/integrate/building-modules/13-upgrade.md new file mode 100644 index 000000000..3cc63cfe7 --- /dev/null +++ b/docs/integrate/building-modules/13-upgrade.md @@ -0,0 +1,65 @@ +--- +sidebar_position: 1 +--- + +# Upgrading Modules + +:::note Synopsis +[In-Place Store Migrations](../../develop/advanced-concepts/16-upgrade.md) allow your modules to upgrade to new versions that include breaking changes. This document outlines how to build modules to take advantage of this functionality. +::: + +:::note + +### Pre-requisite Readings + +* [In-Place Store Migration](../../develop/advanced-concepts/16-upgrade.md) + +::: + +## Consensus Version + +Successful upgrades of existing modules require each `AppModule` to implement the function `ConsensusVersion() uint64`. + +* The versions must be hard-coded by the module developer. +* The initial version **must** be set to 1. + +Consensus versions serve as state-breaking versions of app modules and must be incremented when the module introduces breaking changes. + +## Registering Migrations + +To register the functionality that takes place during a module upgrade, you must register which migrations you want to take place. + +Migration registration takes place in the `Configurator` using the `RegisterMigration` method. The `AppModule` reference to the configurator is in the `RegisterServices` method. + +You can register one or more migrations. If you register more than one migration script, list the migrations in increasing order and ensure there are enough migrations that lead to the desired consensus version. For example, to migrate to version 3 of a module, register separate migrations for version 1 and version 2 as shown in the following example: + +```go +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) +} +``` + +Since these migrations are functions that need access to a Keeper's store, use a wrapper around the keepers called `Migrator` as shown in this example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/migrations.go#L11-L35 +``` + +## Writing Migration Scripts + +To define the functionality that takes place during an upgrade, write a migration script and place the functions in a `migrations/` directory. For example, to write migration scripts for the bank module, place the functions in `x/bank/migrations/`. Use the recommended naming convention for these functions. For example, `v2bank` is the script that migrates the package `x/bank/migrations/v2`: + +```go +// Migrating bank module from version 1 to 2 +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2bank.MigrateStore(ctx, m.keeper.storeKey) // v2bank is package `x/bank/migrations/v2`. +} +``` + +To see example code of changes that were implemented in a migration of balance keys, check out [migrateBalanceKeys](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/migrations/v2/store.go#L52-L73). For context, this code introduced migrations of the bank store that updated addresses to be prefixed by their length in bytes as outlined in [ADR-028](../architecture/adr-028-public-key-addresses.md). diff --git a/docs/integrate/building-modules/14-simulator.md b/docs/integrate/building-modules/14-simulator.md new file mode 100644 index 000000000..1bd7667eb --- /dev/null +++ b/docs/integrate/building-modules/14-simulator.md @@ -0,0 +1,135 @@ +--- +sidebar_position: 1 +--- + +# Module Simulation + +:::note + +### Pre-requisite Readings + +* [Cosmos Blockchain Simulator](../../develop/advanced-concepts/13-simulation.md) +::: + +## Synopsis + +This document details how to define each module simulation functions to be +integrated with the application `SimulationManager`. + +* [Simulation package](#simulation-package) + * [Store decoders](#store-decoders) + * [Randomized genesis](#randomized-genesis) + * [Randomized parameter changes](#randomized-parameter-changes) + * [Random weighted operations](#random-weighted-operations) + * [Random proposal contents](#random-proposal-contents) +* [Registering simulation functions](#registering-simulation-functions) +* [App Simulator manager](#app-simulator-manager) + +## Simulation package + +Every module that implements the Cosmos SDK simulator needs to have a `x//simulation` +package which contains the primary functions required by the fuzz tests: store +decoders, randomized genesis state and parameters, weighted operations and proposal +contents. + +### Store decoders + +Registering the store decoders is required for the `AppImportExport`. This allows +for the key-value pairs from the stores to be decoded (_i.e_ unmarshalled) +to their corresponding types. In particular, it matches the key to a concrete type +and then unmarshals the value from the `KVPair` to the type provided. + +You can use the example [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/simulation/decoder.go) from the distribution module to implement your store decoders. + +### Randomized genesis + +The simulator tests different scenarios and values for genesis parameters +in order to fully test the edge cases of specific modules. The `simulator` package from each module must expose a `RandomizedGenState` function to generate the initial random `GenesisState` from a given seed. + +Once the module genesis parameter are generated randomly (or with the key and +values defined in a `params` file), they are marshaled to JSON format and added +to the app genesis JSON to use it on the simulations. + +You can check an example on how to create the randomized genesis [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/simulation/genesis.go). + +### Randomized parameter changes + +The simulator is able to test parameter changes at random. The simulator package from each module must contain a `RandomizedParams` func that will simulate parameter changes of the module throughout the simulations lifespan. + +You can see how an example of what is needed to fully test parameter changes [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/simulation/params.go) + +### Random weighted operations + +Operations are one of the crucial parts of the Cosmos SDK simulation. They are the transactions +(`Msg`) that are simulated with random field values. The sender of the operation +is also assigned randomly. + +Operations on the simulation are simulated using the full [transaction cycle](../../develop/advanced-concepts/01-transactions.md) of a +`ABCI` application that exposes the `BaseApp`. + +Shown below is how weights are set: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/simulation/operations.go#L19-L86 +``` + +As you can see, the weights are predefined in this case. Options exist to override this behavior with different weights. One option is to use `*rand.Rand` to define a random weight for the operation, or you can inject your own predefined weights. + +Here is how one can override the above package `simappparams`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/Makefile#L293-L299 +``` + +For the last test a tool called [runsim](https://github.com/cosmos/tools/tree/master/cmd/runsim) is used, this is used to parallelize go test instances, provide info to Github and slack integrations to provide information to your team on how the simulations are running. + +### Random proposal contents + +Randomized governance proposals are also supported on the Cosmos SDK simulator. Each +module must define the governance proposal `Content`s that they expose and register +them to be used on the parameters. + +## Registering simulation functions + +Now that all the required functions are defined, we need to integrate them into the module pattern within the `module.go`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/module.go#L180-L203 +``` + +## App Simulator manager + +The following step is setting up the `SimulatorManager` at the app level. This +is required for the simulation test files on the next step. + +```go +type CustomApp struct { + ... + sm *module.SimulationManager +} +``` + +Then at the instantiation of the application, we create the `SimulationManager` +instance in the same way we create the `ModuleManager` but this time we only pass +the modules that implement the simulation functions from the `AppModuleSimulation` +interface described above. + +```go +func NewCustomApp(...) { + // create the simulation manager and define the order of the modules for deterministic simulations + app.sm = module.NewSimulationManager( + auth.NewAppModule(app.accountKeeper), + bank.NewAppModule(app.bankKeeper, app.accountKeeper), + supply.NewAppModule(app.supplyKeeper, app.accountKeeper), + gov.NewAppModule(app.govKeeper, app.accountKeeper, app.supplyKeeper), + mint.NewAppModule(app.mintKeeper), + distr.NewAppModule(app.distrKeeper, app.accountKeeper, app.supplyKeeper, app.stakingKeeper), + staking.NewAppModule(app.stakingKeeper, app.accountKeeper, app.supplyKeeper), + slashing.NewAppModule(app.slashingKeeper, app.accountKeeper, app.stakingKeeper), + ) + + // register the store decoders for simulation tests + app.sm.RegisterStoreDecoders() + ... +} +``` diff --git a/docs/integrate/building-modules/15-depinject.md b/docs/integrate/building-modules/15-depinject.md new file mode 100644 index 000000000..9a51850d0 --- /dev/null +++ b/docs/integrate/building-modules/15-depinject.md @@ -0,0 +1,126 @@ +--- +sidebar_position: 1 +--- + +# Modules depinject-ready + +:::note + +### Pre-requisite Readings + +* [Depinject Documentation](../libraries/01-depinject.md) + +::: + +[`depinject`](../libraries/01-depinject.md) is used to wire any module in `app.go`. +All core modules are already configured to support dependency injection. + +To work with `depinject` a module must define its configuration and requirements so that `depinject` can provide the right dependencies. + +In brief, as a module developer, the following steps are required: + +1. Define the module configuration using Protobuf +2. Define the module dependencies in `x/{moduleName}/module.go` + +A chain developer can then use the module by following these two steps: + +1. Configure the module in `app_config.go` or `app.yaml` +2. Inject the module in `app.go` + +## Module Configuration + +The module available configuration is defined in a Protobuf file, located at `{moduleName}/module/v1/module.proto`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/module/v1/module.proto +``` + +* `go_import` must point to the Go package of the custom module. +* Message fields define the module configuration. + That configuration can be set in the `app_config.go` / `app.yaml` file for a chain developer to configure the module. + Taking `group` as example, a chain developer is able to decide, thanks to `uint64 max_metadata_len`, what the maximum metatada length allowed for a group porposal is. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L226-L230 + ``` + +That message is generated using [`pulsar`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/protocgen-pulsar.sh) (by running `make proto-gen`). +In the case of the `group` module, this file is generated here: https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/api/cosmos/group/module/v1/module.pulsar.go. + +The part that is relevant for the module configuration is: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/api/cosmos/group/module/v1/module.pulsar.go#L515-L527 +``` + +:::note +Pulsar is optional. The official [`protoc-gen-go`](https://developers.google.com/protocol-buffers/docs/reference/go-generated) can be used as well. +::: + +## Dependency Definition + +Once the configuration proto is defined, the module's `module.go` must define what dependencies are required by the module. +The boilerplate is similar for all modules. + +:::warning +All methods, structs and their fields must be public for `depinject`. +::: + +1. Import the module configuration generated package: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L12-L14 + ``` + + Define an `init()` function for defining the `providers` of the module configuration: + This registers the module configuration message and the wiring of the module. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L199-L204 + ``` + +2. Ensure that the module implements the `appmodule.AppModule` interface: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0/x/group/module/module.go#L58-L64 + ``` + +3. Define a struct that inherits `depinject.In` and define the module inputs (i.e. module dependencies): + * `depinject` provides the right dependencies to the module. + * `depinject` also checks that all dependencies are provided. + + :::tip + For making a dependency optional, add the `optional:"true"` struct tag. + ::: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L206-L216 + ``` + +4. Define the module outputs with a public struct that inherits `depinject.Out`: + The module outputs are the dependencies that the module provides to other modules. It is usually the module itself and its keeper. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L218-L223 + ``` + +5. Create a function named `ProvideModule` (as called in 1.) and use the inputs for instantiating the module outputs. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L225-L235 + ``` + +The `ProvideModule` function should return an instance of `cosmossdk.io/core/appmodule.AppModule` which implements +one or more app module extension interfaces for initializing the module. + +Following is the complete app wiring configuration for `group`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L195-L235 +``` + +The module is now ready to be used with `depinject` by a chain developer. + +## Integrate in an application + +The App Wiring is done in `app_config.go` / `app.yaml` and `app_v2.go` and is explained in detail in the [overview of `app_v2.go`](../building-apps/01-app-go-v2.md). diff --git a/docs/integrate/building-modules/16-testing.md b/docs/integrate/building-modules/16-testing.md new file mode 100644 index 000000000..b76f626da --- /dev/null +++ b/docs/integrate/building-modules/16-testing.md @@ -0,0 +1,124 @@ +--- +sidebar_position: 1 +--- + +# Testing + +The Cosmos SDK contains different types of [tests](https://martinfowler.com/articles/practical-test-pyramid.html). +These tests have different goals and are used at different stages of the development cycle. +We advice, as a general rule, to use tests at all stages of the development cycle. +It is adviced, as a chain developer, to test your application and modules in a similar way than the SDK. + +The rationale behind testing can be found in [ADR-59](https://docs.cosmos.network/main/architecture/adr-059-test-scopes.html). + +## Unit Tests + +Unit tests are the lowest test category of the [test pyramid](https://martinfowler.com/articles/practical-test-pyramid.html). +All packages and modules should have unit test coverage. Modules should have their dependencies mocked: this means mocking keepers. + +The SDK uses `mockgen` to generate mocks for keepers: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/mockgen.sh#L3-L6 +``` + +You can read more about mockgen [here](https://github.com/golang/mock). + +### Example + +As an example, we will walkthrough the [keeper tests](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper_test.go) of the `x/gov` module. + +The `x/gov` module has a `Keeper` type requires a few external dependencies (ie. imports outside `x/gov` to work properly). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper.go#L61-L65 +``` + +In order to only test `x/gov`, we mock the [expected keepers](https://docs.cosmos.network/v0.46/building-modules/keeper.html#type-definition) and instantiate the `Keeper` with the mocked dependencies. Note that we may need to configure the mocked dependencies to return the expected values: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/common_test.go#L67-L81 +``` + +This allows us to test the `x/gov` module without having to import other modules. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper_test.go#L3-L35 +``` + +We can test then create unit tests using the newly created `Keeper` instance. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper_test.go#L73-L91 +``` + +## Integration Tests + +Integration tests are at the second level of the [test pyramid](https://martinfowler.com/articles/practical-test-pyramid.html). +In the SDK, we locate our integration tests under [`/tests/integrations`](https://github.com/cosmos/cosmos-sdk/tree/main/tests/integration). + +The goal of these integration tests is to test how a component interacts with other dependencies. Compared to unit tests, integration tests do not mock dependencies. Instead, they use the direct dependencies of the component. This differs as well from end-to-end tests, which test the component with a full application. + +Integration tests interact with the tested module via the defined `Msg` and `Query` services. The result of the test can be verified by checking the state of the application, by checking the emitted events or the response. It is adviced to combine two of these methods to verify the result of the test. + +The SDK provides small helpers for quickly setting up an integration tests. These helpers can be found at . + +### Example + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/29e22b3bdb05353555c8e0b269311bbff7b8deca/testutil/integration/example_test.go#L22-L89 +``` + +## Deterministic and Regression tests + +Tests are written for queries in the Cosmos SDK which have `module_query_safe` Protobuf annotation. + +Each query is tested using 2 methods: + +* Use property-based testing with the [`rapid`](https://pkg.go.dev/pgregory.net/rapid@v0.5.3) library. The property that is tested is that the query response and gas consumption are the same upon 1000 query calls. +* Regression tests are written with hardcoded responses and gas, and verify they don't change upon 1000 calls and between SDK patch versions. + +Here's an example of regression tests: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/tests/integration/bank/keeper/deterministic_test.go#L102-L115 +``` + +## Simulations + +Simulations uses as well a minimal application, built with [`depinject`](../libraries/01-depinject.md): + +:::note +You can as well use the `AppConfig` `configurator` for creating an `AppConfig` [inline](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/slashing/app_test.go#L54-L62). There is no difference between those two ways, use whichever you prefer. +::: + +Following is an example for `x/gov/` simulations: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/simulation/operations_test.go#L292-L310 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/simulation/operations_test.go#L69-L111 +``` + +## End-to-end Tests + +End-to-end tests are at the top of the [test pyramid](https://martinfowler.com/articles/practical-test-pyramid.html). +They must test the whole application flow, from the user perspective (for instance, CLI tests). They are located under [`/tests/e2e`](https://github.com/cosmos/cosmos-sdk/tree/main/tests/e2e). + + +For that, the SDK is using `simapp` but you should use your own application (`appd`). +Here are some examples: + +* SDK E2E tests: . +* Cosmos Hub E2E tests: . +* Osmosis E2E tests: . + +:::note warning +The SDK is in the process of creating its E2E tests, as defined in [ADR-59](https://docs.cosmos.network/main/architecture/adr-059-test-scopes.html). This page will eventually be updated with better examples. +::: + +## Learn More + +Learn more about testing scope in [ADR-59](https://docs.cosmos.network/main/architecture/adr-059-test-scopes.html). diff --git a/docs/integrate/building-modules/_category_.json b/docs/integrate/building-modules/_category_.json new file mode 100644 index 000000000..2d50f8b3e --- /dev/null +++ b/docs/integrate/building-modules/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Building Modules", + "position": 1, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/libraries/01-depinject.md b/docs/integrate/libraries/01-depinject.md new file mode 100644 index 000000000..258e1e0b6 --- /dev/null +++ b/docs/integrate/libraries/01-depinject.md @@ -0,0 +1,187 @@ +--- +sidebar_position: 1 +--- + +# Depinject + +> **DISCLAIMER**: This is a **beta** package. The SDK team is actively working on this feature and we are looking for feedback from the community. Please try it out and let us know what you think. + +## Overview + +`depinject` is a dependency injection (DI) framework for the Cosmos SDK, designed to streamline the process of building and configuring blockchain applications. It works in conjunction with the `core/appconfig` module to replace the majority of boilerplate code in `app.go` with a configuration file in Go, YAML, or JSON format. + +`depinject` is particularly useful for developing blockchain applications: + +* With multiple interdependent components, modules, or services. Helping manage their dependencies effectively. +* That require decoupling of these components, making it easier to test, modify, or replace individual parts without affecting the entire system. +* That are wanting to simplify the setup and initialisation of modules and their dependencies by reducing boilerplate code and automating dependency management. + +By using `depinject`, developers can achieve: + +* Cleaner and more organised code. +* Improved modularity and maintainability. +* A more maintainable and modular structure for their blockchain applications, ultimately enhancing development velocity and code quality. + +* [Go Doc](https://pkg.go.dev/cosmossdk.io/depinject) + +## Usage + +The `depinject` framework, based on dependency injection concepts, streamlines the management of dependencies within your blockchain application using its Configuration API. This API offers a set of functions and methods to create easy to use configurations, making it simple to define, modify, and access dependencies and their relationships. + +A core component of the [Configuration API](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/depinject#Config) is the `Provide` function, which allows you to register provider functions that supply dependencies. Inspired by constructor injection, these provider functions form the basis of the dependency tree, enabling the management and resolution of dependencies in a structured and maintainable manner. Additionally, `depinject` supports interface types as inputs to provider functions, offering flexibility and decoupling between components, similar to interface injection concepts. + +By leveraging `depinject` and its Configuration API, you can efficiently handle dependencies in your blockchain application, ensuring a clean, modular, and well-organised codebase. + +Example: + +```go +package main + +import ( + "fmt" + + "cosmossdk.io/depinject" +) + +type AnotherInt int + +func main() { + var ( + x int + y AnotherInt + ) + + fmt.Printf("Before (%v, %v)\n", x, y) + depinject.Inject( + depinject.Provide( + func() int { return 1 }, + func() AnotherInt { return AnotherInt(2) }, + ), + &x, + &y, + ) + fmt.Printf("After (%v, %v)\n", x, y) +} +``` + +In this example, `depinject.Provide` registers two provider functions that return `int` and `AnotherInt` values. The `depinject.Inject` function is then used to inject these values into the variables `x` and `y`. + +Provider functions serve as the basis for the dependency tree. They are analysed to identify their inputs as dependencies and their outputs as dependents. These dependents can either be used by another provider function or be stored outside the DI container (e.g., `&x` and `&y` in the example above). + +### Interface type resolution + +`depinject` supports the use of interface types as inputs to provider functions, which helps decouple dependencies between modules. This approach is particularly useful for managing complex systems with multiple modules, such as the Cosmos SDK, where dependencies need to be flexible and maintainable. + +For example, `x/bank` expects an [AccountKeeper](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/x/bank/types#AccountKeeper) interface as [input to ProvideModule](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/module.go#L208-L260). `SimApp` uses the implementation in `x/auth`, but the modular design allows for easy changes to the implementation if needed. + +Consider the following example: + +```go +package duck + +type Duck interface { + quack() +} + +type AlsoDuck interface { + quack() +} + +type Mallard struct{} +type Canvasback struct{} + +func (duck Mallard) quack() {} +func (duck Canvasback) quack() {} + +type Pond struct { + Duck AlsoDuck +} +``` + +In this example, there's a `Pond` struct that has a `Duck` field of type `AlsoDuck`. The `depinject` framework can automatically resolve the appropriate implementation when there's only one available, as shown below: + +```go +var pond Pond + +depinject.Inject( + depinject.Provide( + func() Mallard { return Mallard{} }, + func(duck Duck) Pond { + return Pond{Duck: duck} + }), + &pond) +``` + +This code snippet results in the `Duck` field of `Pond` being implicitly bound to the `Mallard` implementation because it's the only implementation of the `Duck` interface in the container. + +However, if there are multiple implementations of the `Duck` interface, as in the following example, you'll encounter an error: + +```go +var pond Pond + +depinject.Inject( + depinject.Provide( + func() Mallard { return Mallard{} }, + func() Canvasback { return Canvasback{} }, + func(duck Duck) Pond { + return Pond{Duck: duck} + }), + &pond) +``` + +A specific binding preference for `Duck` is required. + +#### `BindInterface` API + +In the above situation registering a binding for a given interface binding may look like: + +```go +depinject.Inject( + depinject.Configs( + depinject.BindInterface( + "duck.Duck", + "duck.Mallard"), + depinject.Provide( + func() Mallard { return Mallard{} }, + func() Canvasback { return Canvasback{} }, + func(duck Duck) APond { + return Pond{Duck: duck} + })), + &pond) +``` + +Now `depinject` has enough information to provide `Mallard` as an input to `APond`. + +### Full example in real app + +:::warning +When using `depinject.Inject`, the injected types must be pointers. +::: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L219-L244 +``` + +## Debugging + +Issues with resolving dependencies in the container can be done with logs and [Graphviz](https://graphviz.org) renderings of the container tree. +By default, whenever there is an error, logs will be printed to stderr and a rendering of the dependency graph in Graphviz DOT format will be saved to `debug_container.dot`. + +Here is an example Graphviz rendering of a successful build of a dependency graph: +![Graphviz Example](https://raw.githubusercontent.com/cosmos/cosmos-sdk/ff39d243d421442b400befcd959ec3ccd2525154/depinject/testdata/example.svg) + +Rectangles represent functions, ovals represent types, rounded rectangles represent modules and the single hexagon +represents the function which called `Build`. Black-colored shapes mark functions and types that were called/resolved +without an error. Gray-colored nodes mark functions and types that could have been called/resolved in the container but +were left unused. + +Here is an example Graphviz rendering of a dependency graph build which failed: +![Graphviz Error Example](https://raw.githubusercontent.com/cosmos/cosmos-sdk/ff39d243d421442b400befcd959ec3ccd2525154/depinject/testdata/example_error.svg) + +Graphviz DOT files can be converted into SVG's for viewing in a web browser using the `dot` command-line tool, ex: + +```txt +dot -Tsvg debug_container.dot > debug_container.svg +``` + +Many other tools including some IDEs support working with DOT files. diff --git a/docs/integrate/libraries/02-collections.md b/docs/integrate/libraries/02-collections.md new file mode 100644 index 000000000..7f8278233 --- /dev/null +++ b/docs/integrate/libraries/02-collections.md @@ -0,0 +1,1119 @@ +# Collections + +Collections is a library meant to simplify the experience with respect to module state handling. + +Cosmos SDK modules handle their state using the `KVStore` interface. The problem with working with +`KVStore` is that it forces you to think of state as a bytes KV pairings when in reality the majority of +state comes from complex concrete golang objects (strings, ints, structs, etc.). + +Collections allows you to work with state as if they were normal golang objects and removes the need +for you to think of your state as raw bytes in your code. + +It also allows you to migrate your existing state without causing any state breakage that forces you into +tedious and complex chain state migrations. + +## Installation + +To install collections in your cosmos-sdk chain project, run the following command: + +```shell +go get cosmossdk.io/collections +``` + +## Core types + +Collections offers 5 different APIs to work with state, which will be explored in the next sections, these APIs are: +- ``Map``: to work with typed arbitrary KV pairings. +- ``KeySet``: to work with just typed keys +- ``Item``: to work with just one typed value +- ``Sequence``: which is a monotonically increasing number. +- ``IndexedMap``: which combines ``Map`` and `KeySet` to provide a `Map` with indexing capabilities. + +## Preliminary components + +Before exploring the different collections types and their capability it is necessary to introduce +the three components that every collection shares. In fact when instantiating a collection type by doing, for example, +```collections.NewMap/collections.NewItem/...``` you will find yourself having to pass them some common arguments. + +For example, in code: + +```go +package collections + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var AllowListPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + AllowList collections.KeySet[string] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + + return Keeper{ + AllowList: collections.NewKeySet(sb, AllowListPrefix, "allow_list", collections.StringKey), + } +} + +``` + +Let's analyse the shared arguments, what they do, and why we need them. + +### SchemaBuilder + +The first argument passed is the ``SchemaBuilder`` + +`SchemaBuilder` is a structure that keeps track of all the state of a module, it is not required by the collections + to deal with state but it offers a dynamic and reflective way for clients to explore a module's state. + +We instantiate a ``SchemaBuilder`` by passing it a function that given the modules store key returns the module's specific store. + +We then need to pass the schema builder to every collection type we instantiate in our keeper, in our case the `AllowList`. + +### Prefix + +The second argument passed to our ``KeySet`` is a `collections.Prefix`, a prefix represents a partition of the module's `KVStore` +where all the state of a specific collection will be saved. + +Since a module can have multiple collections, the following is expected: +- module params will become a `collections.Item` +- the `AllowList` is a `collections.KeySet` + +We don't want a collection to write over the state of the other collection so we pass it a prefix, which defines a storage +partition owned by the collection. + +If you already built modules, the prefix translates to the items you were creating in your ``types/keys.go`` file, example: https://github.com/cosmos/cosmos-sdk/blob/main/x/feegrant/key.go#L27 + +your old: +```go +var ( + // FeeAllowanceKeyPrefix is the set of the kvstore for fee allowance data + // - 0x00: allowance + FeeAllowanceKeyPrefix = []byte{0x00} + + // FeeAllowanceQueueKeyPrefix is the set of the kvstore for fee allowance keys data + // - 0x01: + FeeAllowanceQueueKeyPrefix = []byte{0x01} +) +``` +becomes: +```go +var ( + // FeeAllowanceKeyPrefix is the set of the kvstore for fee allowance data + // - 0x00: allowance + FeeAllowanceKeyPrefix = collections.NewPrefix(0) + + // FeeAllowanceQueueKeyPrefix is the set of the kvstore for fee allowance keys data + // - 0x01: + FeeAllowanceQueueKeyPrefix = collections.NewPrefix(1) +) +``` + +#### Rules + +``collections.NewPrefix`` accepts either `uint8`, `string` or `[]bytes` it's good practice to use an always increasing `uint8`for disk space efficiency. + +A collection **MUST NOT** share the same prefix as another collection in the same module, and a collection prefix **MUST NEVER** start with the same prefix as another, examples: + +```go +prefix1 := collections.NewPrefix("prefix") +prefix2 := collections.NewPrefix("prefix") // THIS IS BAD! +``` + +```go +prefix1 := collections.NewPrefix("a") +prefix2 := collections.NewPrefix("aa") // prefix2 starts with the same as prefix1: BAD!!! +``` +### Human-Readable Name + +The third parameter we pass to a collection is a string, which is a human-readable name. +It is needed to make the role of a collection understandable by clients who have no clue about +what a module is storing in state. + +#### Rules + +Each collection in a module **MUST** have a unique humanised name. + +## Key and Value Codecs + +A collection is generic over the type you can use as keys or values. +This makes collections dumb, but also means that hypothetically we can store everything +that can be a go type into a collection. We are not bounded to any type of encoding (be it proto, json or whatever) + +So a collection needs to be given a way to understand how to convert your keys and values to bytes. +This is achieved through ``KeyCodec`` and `ValueCodec`, which are arguments that you pass to your +collections when you're instantiating them using the ```collections.NewMap/collections.NewItem/...``` +instantiation functions. + +NOTE: Generally speaking you will never be required to implement your own ``Key/ValueCodec`` as +the SDK and collections libraries already come with default, safe and fast implementation of those. +You might need to implement them only if you're migrating to collections and there are state layout incompatibilities. + +Let's explore an example: + +````go +package collections + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var IDsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + IDs collections.Map[string, uint64] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + + return Keeper{ + IDs: collections.NewMap(sb, IDsPrefix, "ids", collections.StringKey, collections.Uint64Value), + } +} +```` + +We're now instantiating a map where the key is string and the value is `uint64`. +We already know the first three arguments of the ``NewMap`` function. + +The fourth parameter is our `KeyCodec`, we know that the ``Map`` has `string` as key so we pass it a `KeyCodec` that handles strings as keys. + +The fifth parameter is our `ValueCodec`, we know that the `Map` as a `uint64` as value so we pass it a `ValueCodec` that handles uint64. + +Collections already comes with all the required implementations for golang primitive types. + +Let's make another example, this falls closer to what we build using cosmos SDK, let's say we want +to create a `collections.Map` that maps account addresses to their base account. So we want to map an `sdk.AccAddress` to an `auth.BaseAccount` (which is a proto): + +```go +package collections + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var AccountsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Accounts collections.Map[sdk.AccAddress, authtypes.BaseAccount] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey, cdc codec.BinaryCodec) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Accounts: collections.NewMap(sb, AccountsPrefix, "accounts", + sdk.AccAddressKey, codec.CollValue[authtypes.BaseAccount](cdc)), + } +} +``` + +As we can see here since our `collections.Map` maps `sdk.AccAddress` to `authtypes.BaseAccount`, +we use the `sdk.AccAddressKey` which is the `KeyCodec` implementation for `AccAddress` and we use `codec.CollValue` to +encode our proto type `BaseAccount`. + +Generally speaking you will always find the respective key and value codecs for types in the `go.mod` path you're using +to import that type. If you want to encode proto values refer to the codec `codec.CollValue` function, which allows you +to encode any type implement the `proto.Message` interface. + +## Map + +We analyse the first and most important collection type, the ``collections.Map``. +This is the type that everything else builds on top of. + +### Use case + +A `collections.Map` is used to map arbitrary keys with arbitrary values. + +### Example + +It's easier to explain a `collections.Map` capabilities through an example: + +```go +package collections + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + "fmt" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var AccountsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Accounts collections.Map[sdk.AccAddress, authtypes.BaseAccount] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey, cdc codec.BinaryCodec) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Accounts: collections.NewMap(sb, AccountsPrefix, "accounts", + sdk.AccAddressKey, codec.CollValue[authtypes.BaseAccount](cdc)), + } +} + +func (k Keeper) CreateAccount(ctx sdk.Context, addr sdk.AccAddress, account authtypes.BaseAccount) error { + has, err := k.Accounts.Has(ctx, addr) + if err != nil { + return err + } + if has { + return fmt.Errorf("account already exists: %s", addr) + } + + err = k.Accounts.Set(ctx, addr, account) + if err != nil { + return err + } + return nil +} + +func (k Keeper) GetAccount(ctx sdk.Context, addr sdk.AccAddress) (authtypes.BaseAccount, error) { + acc, err := k.Accounts.Get(ctx, addr) + if err != nil { + return authtypes.BaseAccount{}, err + } + + return acc, nil +} + +func (k Keeper) RemoveAccount(ctx sdk.Context, addr sdk.AccAddress) error { + err := k.Accounts.Remove(ctx, addr) + if err != nil { + return err + } + return nil +} +``` + +#### Set method + +Set maps with the provided `AccAddress` (the key) to the `auth.BaseAccount` (the value). + +Under the hood the `collections.Map` will convert the key and value to bytes using the [key and value codec](README.md#key-and-value-codecs). +It will prepend to our bytes key the [prefix](README.md#prefix) and store it in the KVStore of the module. + +#### Has method + +The has method reports if the provided key exists in the store. + +#### Get method + +The get method accepts the `AccAddress` and returns the associated `auth.BaseAccount` if it exists, otherwise it errors. + +#### Remove method + +The remove method accepts the `AccAddress` and removes it from the store. It won't report errors +if it does not exist, to check for existence before removal use the ``Has`` method. + +#### Iteration + +Iteration has a separate section. + +## KeySet + +The second type of collection is `collections.KeySet`, as the word suggests it maintains +only a set of keys without values. + +#### Implementation curiosity + +A `collections.KeySet` is just a `collections.Map` with a `key` but no value. +The value internally is always the same and is represented as an empty byte slice ```[]byte{}```. + +### Example + +As always we explore the collection type through an example: + +```go +package collections + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var ValidatorsSetPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + ValidatorsSet collections.KeySet[sdk.ValAddress] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + ValidatorsSet: collections.NewKeySet(sb, ValidatorsSetPrefix, "validators_set", sdk.ValAddressKey), + } +} + +func (k Keeper) AddValidator(ctx sdk.Context, validator sdk.ValAddress) error { + has, err := k.ValidatorsSet.Has(ctx, validator) + if err != nil { + return err + } + if has { + return fmt.Errorf("validator already in set: %s", validator) + } + + err = k.ValidatorsSet.Set(ctx, validator) + if err != nil { + return err + } + + return nil +} + +func (k Keeper) RemoveValidator(ctx sdk.Context, validator sdk.ValAddress) error { + err := k.ValidatorsSet.Remove(ctx, validator) + if err != nil { + return err + } + return nil +} +``` +The first difference we notice is that `KeySet` needs use to specify only one type parameter: the key (`sdk.ValAddress` in this case). +The second difference we notice is that `KeySet` in its `NewKeySet` function does not require +us to specify a `ValueCodec` but only a `KeyCodec`. This is because a `KeySet` only saves keys and not values. + +Let's explore the methods. + +#### Has method + +Has allows us to understand if a key is present in the `collections.KeySet` or not, functions in the same way as `collections.Map.Has +` + +#### Set method + +Set inserts the provided key in the `KeySet`. + +#### Remove method + +Remove removes the provided key from the `KeySet`, it does not error if the key does not exist, +if existence check before removal is required it needs to be coupled with the `Has` method. + +## Item + +The third type of collection is the `collections.Item`. +It stores only one single item, it's useful for example for parameters, there's only one instance +of parameters in state always. + +#### implementation curiosity + +A `collections.Item` is just a `collections.Map` with no key but just a value. +The key is the prefix of the collection! + +### Example + +```go +package collections + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +var ParamsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Params collections.Item[stakingtypes.Params] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey, cdc codec.BinaryCodec) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Params: collections.NewItem(sb, ParamsPrefix, "params", codec.CollValue[stakingtypes.Params](cdc)), + } +} + +func (k Keeper) UpdateParams(ctx sdk.Context, params stakingtypes.Params) error { + err := k.Params.Set(ctx, params) + if err != nil { + return err + } + return nil +} + +func (k Keeper) GetParams(ctx sdk.Context) (stakingtypes.Params, error) { + return k.Params.Get(ctx) +} +``` + +The first key difference we notice is that we specify only one type parameter, which is the value we're storing. +The second key difference is that we don't specify the `KeyCodec`, since we store only one item we already know the key +and the fact that it is constant. + +## Iteration + +One of the key features of the ``KVStore`` is iterating over keys. + +Collections which deal with keys (so `Map`, `KeySet` and `IndexedMap`) allow you to iterate +over keys in a safe and typed way. They all share the same API, the only difference being +that ``KeySet`` returns a different type of `Iterator` because `KeySet` only deals with keys. + +:::note + +Every collection shares the same `Iterator` semantics. + +::: + +Let's have a look at the `Map.Iterate` method: + +```go +func (m Map[K, V]) Iterate(ctx context.Context, ranger Ranger[K]) (Iterator[K, V], error) +``` + +It accepts a `collections.Ranger[K]`, which is an API that instructs map on how to iterate over keys. +As always we don't need to implement anything here as `collections` already provides some generic `Ranger` implementers +that expose all you need to work with ranges. + +### Example + +We have a `collections.Map` that maps accounts using `uint64` IDs. + +```go +package collections + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var AccountsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Accounts collections.Map[uint64, authtypes.BaseAccount] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey, cdc codec.BinaryCodec) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Accounts: collections.NewMap(sb, AccountsPrefix, "accounts", collections.Uint64Key, codec.CollValue[authtypes.BaseAccount](cdc)), + } +} + +func (k Keeper) GetAllAccounts(ctx sdk.Context) ([]authtypes.BaseAccount, error) { + // passing a nil Ranger equals to: iterate over every possible key + iter, err := k.Accounts.Iterate(ctx, nil) + if err != nil { + return nil, err + } + accounts, err := iter.Values() + if err != nil { + return nil, err + } + + return accounts, err +} + +func (k Keeper) IterateAccountsBetween(ctx sdk.Context, start, end uint64) ([]authtypes.BaseAccount, error) { + // The collections.Range API offers a lot of capabilities + // like defining where the iteration starts or ends. + rng := new(collections.Range[uint64]). + StartInclusive(start). + EndExclusive(end). + Descending() + + iter, err := k.Accounts.Iterate(ctx, rng) + if err != nil { + return nil, err + } + accounts, err := iter.Values() + if err != nil { + return nil, err + } + + return accounts, nil +} + +func (k Keeper) IterateAccounts(ctx sdk.Context, do func(id uint64, acc authtypes.BaseAccount) (stop bool)) error { + iter, err := k.Accounts.Iterate(ctx, nil) + if err != nil { + return err + } + defer iter.Close() + + for ; iter.Valid(); iter.Next() { + kv, err := iter.KeyValue() + if err != nil { + return err + } + + if do(kv.Key, kv.Value) { + break + } + } + return nil +} +``` + +Let's analyse each method in the example and how it makes use of the `Iterate` and the returned `Iterator` API. + +#### GetAllAccounts + +In `GetAllAccounts` we pass to our `Iterate` a nil `Ranger`. This means that the returned `Iterator` will include +all the existing keys within the collection. + +Then we use some the `Values` method from the returned `Iterator` API to collect all the values into a slice. + +`Iterator` offers other methods such as `Keys()` to collect only the keys and not the values and `KeyValues` to collect +all the keys and values. + + +#### IterateAccountsBetween + +Here we make use of the `collections.Range` helper to specialise our range. +We make it start in a point through `StartInclusive` and end in the other with `EndExclusive`, then +we instruct it to report us results in reverse order through `Descending` + +Then we pass the range instruction to `Iterate` and get an `Iterator`, which will contain only the results +we specified in the range. + +Then we use again th `Values` method of the `Iterator` to collect all the results. + +`collections.Range` also offers a `Prefix` API which is not appliable to all keys types, +for example uint64 cannot be prefix because it is of constant size, but a `string` key +can be prefixed. + +#### IterateAccounts + +Here we showcase how to lazily collect values from an Iterator. + +:::note + +`Keys/Values/KeyValues` fully consume and close the `Iterator`, here we need to explicitly do a `defer iterator.Close()` call. + +::: + +`Iterator` also exposes a `Value` and `Key` method to collect only the current value or key, if collecting both is not needed. + +:::note + +For this `callback` pattern, collections expose a `Walk` API. + +::: + +## Composite keys + +So far we've worked only with simple keys, like `uint64`, the account address, etc. +There are some more complex cases in, which we need to deal with composite keys. + +A key is composite when it is composed of multiple keys, for example bank balances as stored as the composite key +`(AccAddress, string)` where the first part is the address holding the coins and the second part is the denom. + +Example, let's say address `BOB` holds `10atom,15osmo`, this is how it is stored in state: + +``` +(bob, atom) => 10 +(bob, osmos) => 15 +``` + +Now this allows to efficiently get a specific denom balance of an address, by simply `getting` `(address, denom)`, or getting all the balances +of an address by prefixing over `(address)`. + +Let's see now how we can work with composite keys using collections. + +### Example + +In our example we will show-case how we can use collections when we are dealing with balances, similar to bank, +a balance is a mapping between `(address, denom) => math.Int` the composite key in our case is `(address, denom)`. + +## Instantiation of a composite key collection + +```go +package collections + +import ( + "cosmossdk.io/collections" + "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + + +var BalancesPrefix = collections.NewPrefix(1) + +type Keeper struct { + Schema collections.Schema + Balances collections.Map[collections.Pair[sdk.AccAddress, string], math.Int] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Balances: collections.NewMap( + sb, BalancesPrefix, "balances", + collections.PairKeyCodec(sdk.AccAddressKey, collections.StringKey), + math.IntValue, + ), + } +} +``` + +#### The Map Key definition + +First of all we can see that in order to define a composite key of two elements we use the `collections.Pair` type: +````go +collections.Map[collections.Pair[sdk.AccAddress, string], math.Int] +```` + +`collections.Pair` defines a key composed of two other keys, in our case the first part is `sdk.AccAddress`, the second +part is `string`. + +#### The Key Codec instantiation + +The arguments to instantiate are always the same, the only thing that changes is how we instantiate +the ``KeyCodec``, since this key is composed of two keys we use `collections.PairKeyCodec`, which generates +a `KeyCodec` composed of two key codecs. The first one will encode the first part of the key, the second one will +encode the second part of the key. + + +### Working with composite key collections + +Let's expand on the example we used before: + +````go +var BalancesPrefix = collections.NewPrefix(1) + +type Keeper struct { + Schema collections.Schema + Balances collections.Map[collections.Pair[sdk.AccAddress, string], math.Int] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Balances: collections.NewMap( + sb, BalancesPrefix, "balances", + collections.PairKeyCodec(sdk.AccAddressKey, collections.StringKey), + math.IntValue, + ), + } +} + +func (k Keeper) SetBalance(ctx sdk.Context, address sdk.AccAddress, denom string, amount math.Int) error { + key := collections.Join(address, denom) + return k.Balances.Set(ctx, key, amount) +} + +func (k Keeper) GetBalance(ctx sdk.Context, address sdk.AccAddress, denom string) (math.Int, error) { + return k.Balances.Get(ctx, collections.Join(address, denom)) +} + +func (k Keeper) GetAllAddressBalances(ctx sdk.Context, address sdk.AccAddress) (sdk.Coins, error) { + balances := sdk.NewCoins() + + rng := collections.NewPrefixedPairRange[sdk.AccAddress, string](address) + + iter, err := k.Balances.Iterate(ctx, rng) + if err != nil { + return nil, err + } + + kvs, err := iter.KeyValues() + if err != nil { + return nil, err + } + + for _, kv := range kvs { + balances = balances.Add(sdk.NewCoin(kv.Key.K2(), kv.Value)) + } + return balances, nil +} + +func (k Keeper) GetAllAddressBalancesBetween(ctx sdk.Context, address sdk.AccAddress, startDenom, endDenom string) (sdk.Coins, error) { + rng := collections.NewPrefixedPairRange[sdk.AccAddress, string](address). + StartInclusive(startDenom). + EndInclusive(endDenom) + + iter, err := k.Balances.Iterate(ctx, rng) + if err != nil { + return nil, err + } + ... +} +```` + +#### SetBalance + +As we can see here we're setting the balance of an address for a specific denom. +We use the `collections.Join` function to generate the composite key. +`collections.Join` returns a `collections.Pair` (which is the key of our `collections.Map`) + +`collections.Pair` contains the two keys we have joined, it also exposes two methods: `K1` to fetch the 1st part of the +key and `K2` to fetch the second part. + +As always, we use the `collections.Map.Set` method to map the composite key to our value (`math.Int`in this case) + +#### GetBalance + +To get a value in composite key collection, we simply use `collections.Join` to compose the key. + +#### GetAllAddressBalances + +We use `collections.PrefixedPairRange` to iterate over all the keys starting with the provided address. +Concretely the iteration will report all the balances belonging to the provided address. + +The first part is that we instantiate a `PrefixedPairRange`, which is a `Ranger` implementer aimed to help +in `Pair` keys iterations. + +```go + rng := collections.NewPrefixedPairRange[sdk.AccAddress, string](address) +``` + +As we can see here we're passing the type parameters of the `collections.Pair` because golang type inference +with respect to generics is not as permissive as other languages, so we need to explitly say what are the types of the pair key. + +#### GetAllAddressesBalancesBetween + +This showcases how we can further specialise our range to limit the results further, by specifying +the range between the second part of the key (in our case the denoms, which are strings). + +## IndexedMap + +`collections.IndexedMap` is a collection that uses under the hood a `collections.Map`, and has a struct, which contains the indexes that we need to define. + +### Example + +Let's say we have an `auth.BaseAccount` struct which looks like the following: + +```go +type BaseAccount struct { + AccountNumber uint64 `protobuf:"varint,3,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty"` + Sequence uint64 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"` +} +``` + +First of all, when we save our accounts in state we map them using a primary key `sdk.AccAddress`. +If it were to be a `collections.Map` it would be `collections.Map[sdk.AccAddres, authtypes.BaseAccount]`. + +Then we also want to be able to get an account not only by its `sdk.AccAddress`, but also by its `AccountNumber`. + +So we can say we want to create an `Index` that maps our `BaseAccount` to its `AccountNumber`. + +We also know that this `Index` is unique. Unique means that there can only be one `BaseAccount` that maps to a specific +`AccountNumber`. + +First of all, we start by defining the object that contains our index: + +```go +var AccountsNumberIndexPrefix = collections.NewPrefix(1) + +type AccountsIndexes struct { + Number *indexes.Unique[uint64, sdk.AccAddress, authtypes.BaseAccount] +} + +func (a AccountsIndexes) IndexesList() []collections.Index[sdk.AccAddress, authtypes.BaseAccount] { + return []collections.Index[sdk.AccAddress, authtypes.BaseAccount]{a.Number} +} + +func NewAccountIndexes(sb *collections.SchemaBuilder) AccountsIndexes { + return AccountsIndexes{ + Number: indexes.NewUnique( + sb, AccountsNumberIndexPrefix, "accounts_by_number", + collections.Uint64Key, sdk.AccAddressKey, + func(_ sdk.AccAddress, v authtypes.BaseAccount) (uint64, error) { + return v.AccountNumber, nil + }, + ), + } +} +``` + +We create an `AccountIndexes` struct which contains a field: `Number`. This field represents our `AccountNumber` index. +`AccountNumber` is a field of `authtypes.BaseAccount` and it's a `uint64`. + +Then we can see in our `AccountIndexes` struct the `Number` field is defined as: + +```go +*indexes.Unique[uint64, sdk.AccAddress, authtypes.BaseAccount] +``` + +Where the first type parameter is `uint64`, which is the field type of our index. +The second type parameter is the primary key `sdk.AccAddress` +And the third type parameter is the actual object we're storing `authtypes.BaseAccount`. + +Then we implement a function called `IndexesList` on our `AccountIndexes` struct, this will be used +by the `IndexedMap` to keep the underlying map in sync with the indexes, in our case `Number`. +This function just needs to return the slice of indexes contained in the struct. + +Then we create a `NewAccountIndexes` function that instantiates and returns the `AccountsIndexes` struct. + +The function takes a `SchemaBuilder`. Then we instantiate our `indexes.Unique`, let's analyse the arguments we pass to +`indexes.NewUnique`. + +#### Instantiating a `indexes.Unique` + +The first three arguments, we already know them, they are: `SchemaBuilder`, `Prefix` which is our index prefix (the partition +where index keys relationship for the `Number` index will be maintained), and the human name for the `Number` index. + +The second argument is a `collections.Uint64Key` which is a key codec to deal with `uint64` keys, we pass that because +the key we're trying to index is a `uint64` key (the account number), and then we pass as fifth argument the primary key codec, +which in our case is `sdk.AccAddress` (remember: we're mapping `sdk.AccAddress` => `BaseAccount`). + +Then as last parameter we pass a function that: given the `BaseAccount` returns its `AccountNumber`. + +After this we can proceed instantiating our `IndexedMap`. + +```go +var AccountsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Accounts *collections.IndexedMap[sdk.AccAddress, authtypes.BaseAccount, AccountsIndexes] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey, cdc codec.BinaryCodec) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Accounts: collections.NewIndexedMap( + sb, AccountsPrefix, "accounts", + sdk.AccAddressKey, codec.CollValue[authtypes.BaseAccount](cdc), + NewAccountIndexes(sb), + ), + } +} +``` + +As we can see here what we do, for now, is the same thing as we did for `collections.Map`. +We pass it the `SchemaBuilder`, the `Prefix` where we plan to store the mapping between `sdk.AccAddress` and `authtypes.BaseAccount`, +the human name and the respective `sdk.AccAddress` key codec and `authtypes.BaseAccount` value codec. + +Then we pass the instantiation of our `AccountIndexes` through `NewAccountIndexes`. + +Full example: + +```go +package docs + +import ( + "cosmossdk.io/collections" + "cosmossdk.io/collections/indexes" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var AccountsNumberIndexPrefix = collections.NewPrefix(1) + +type AccountsIndexes struct { + Number *indexes.Unique[uint64, sdk.AccAddress, authtypes.BaseAccount] +} + +func (a AccountsIndexes) IndexesList() []collections.Index[sdk.AccAddress, authtypes.BaseAccount] { + return []collections.Index[sdk.AccAddress, authtypes.BaseAccount]{a.Number} +} + +func NewAccountIndexes(sb *collections.SchemaBuilder) AccountsIndexes { + return AccountsIndexes{ + Number: indexes.NewUnique( + sb, AccountsNumberIndexPrefix, "accounts_by_number", + collections.Uint64Key, sdk.AccAddressKey, + func(_ sdk.AccAddress, v authtypes.BaseAccount) (uint64, error) { + return v.AccountNumber, nil + }, + ), + } +} + +var AccountsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Accounts *collections.IndexedMap[sdk.AccAddress, authtypes.BaseAccount, AccountsIndexes] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey, cdc codec.BinaryCodec) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Accounts: collections.NewIndexedMap( + sb, AccountsPrefix, "accounts", + sdk.AccAddressKey, codec.CollValue[authtypes.BaseAccount](cdc), + NewAccountIndexes(sb), + ), + } +} +``` + +### Working with IndexedMaps + +Whilst instantiating `collections.IndexedMap` is tedious, working with them is extremely smooth. + +Let's take the full example, and expand it with some use-cases. + +```go +package docs + +import ( + "cosmossdk.io/collections" + "cosmossdk.io/collections/indexes" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var AccountsNumberIndexPrefix = collections.NewPrefix(1) + +type AccountsIndexes struct { + Number *indexes.Unique[uint64, sdk.AccAddress, authtypes.BaseAccount] +} + +func (a AccountsIndexes) IndexesList() []collections.Index[sdk.AccAddress, authtypes.BaseAccount] { + return []collections.Index[sdk.AccAddress, authtypes.BaseAccount]{a.Number} +} + +func NewAccountIndexes(sb *collections.SchemaBuilder) AccountsIndexes { + return AccountsIndexes{ + Number: indexes.NewUnique( + sb, AccountsNumberIndexPrefix, "accounts_by_number", + collections.Uint64Key, sdk.AccAddressKey, + func(_ sdk.AccAddress, v authtypes.BaseAccount) (uint64, error) { + return v.AccountNumber, nil + }, + ), + } +} + +var AccountsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Accounts *collections.IndexedMap[sdk.AccAddress, authtypes.BaseAccount, AccountsIndexes] +} + +func NewKeeper(storeKey *storetypes.KVStoreKey, cdc codec.BinaryCodec) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Accounts: collections.NewIndexedMap( + sb, AccountsPrefix, "accounts", + sdk.AccAddressKey, codec.CollValue[authtypes.BaseAccount](cdc), + NewAccountIndexes(sb), + ), + } +} + +func (k Keeper) CreateAccount(ctx sdk.Context, addr sdk.AccAddress) error { + nextAccountNumber := k.getNextAccountNumber() + + newAcc := authtypes.BaseAccount{ + AccountNumber: nextAccountNumber, + Sequence: 0, + } + + return k.Accounts.Set(ctx, addr, newAcc) +} + +func (k Keeper) RemoveAccount(ctx sdk.Context, addr sdk.AccAddress) error { + return k.Accounts.Remove(ctx, addr) +} + +func (k Keeper) GetAccountByNumber(ctx sdk.Context, accNumber uint64) (sdk.AccAddress, authtypes.BaseAccount, error) { + accAddress, err := k.Accounts.Indexes.Number.MatchExact(ctx, accNumber) + if err != nil { + return nil, authtypes.BaseAccount{}, err + } + + acc, err := k.Accounts.Get(ctx, accAddress) + return accAddress, acc, nil +} + +func (k Keeper) GetAccountsByNumber(ctx sdk.Context, startAccNum, endAccNum uint64) ([]authtypes.BaseAccount, error) { + rng := new(collections.Range[uint64]). + StartInclusive(startAccNum). + EndInclusive(endAccNum) + + iter, err := k.Accounts.Indexes.Number.Iterate(ctx, rng) + if err != nil { + return nil, err + } + + return indexes.CollectValues(ctx, k.Accounts, iter) +} + + +func (k Keeper) getNextAccountNumber() uint64 { + return 0 +} +``` + +## Collections with interfaces as values + +Although cosmos-sdk is shifting away from the usage of interface registry, there are still some places where it is used. +In order to support old code, we have to support collections with interface values. + +The generic `codec.CollValue` is not able to handle interface values, so we need to use a special type `codec.CollValueInterface`. +`codec.CollValueInterface` takes a `codec.BinaryCodec` as an argument, and uses it to marshal and unmarshal values as interfaces. +The `codec.CollValueInterface` lives in the `codec` package, whose import path is `github.com/cosmos/cosmos-sdk/codec`. + +### Instantiating Collections with interface values + +In order to instantiate a collection with interface values, we need to use `codec.CollValueInterface` instead of `codec.CollValue`. + +```go +package example + +import ( + "cosmossdk.io/collections" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var AccountsPrefix = collections.NewPrefix(0) + +type Keeper struct { + Schema collections.Schema + Accounts *collections.Map[sdk.AccAddress, sdk.AccountI] +} + +func NewKeeper(cdc codec.BinaryCodec, storeKey *storetypes.KVStoreKey) Keeper { + sb := collections.NewSchemaBuilder(sdk.OpenKVStore(storeKey)) + return Keeper{ + Accounts: collections.NewMap( + sb, AccountsPrefix, "accounts", + sdk.AccAddressKey, codec.CollInterfaceValue[sdk.AccountI](cdc), + ), + } +} + +func (k Keeper) SaveBaseAccount(ctx sdk.Context, account authtypes.BaseAccount) error { + return k.Accounts.Set(ctx, account.GetAddress(), account) +} + +func (k Keeper) SaveModuleAccount(ctx sdk.Context, account authtypes.ModuleAccount) error { + return k.Accounts.Set(ctx, account.GetAddress(), account) +} + +func (k Keeper) GetAccount(ctx sdk.context, addr sdk.AccAddress) (sdk.AccountI, error) { + return k.Accounts.Get(ctx, addr) +} +``` diff --git a/docs/integrate/libraries/03-orm.md b/docs/integrate/libraries/03-orm.md new file mode 100644 index 000000000..14bc84b88 --- /dev/null +++ b/docs/integrate/libraries/03-orm.md @@ -0,0 +1,329 @@ +# ORM + +The Cosmos SDK ORM is a state management library that provides a rich, but opinionated set of tools for managing a +module's state. It provides support for: + +* type safe management of state +* multipart keys +* secondary indexes +* unique indexes +* easy prefix and range queries +* automatic genesis import/export +* automatic query services for clients, including support for light client proofs (still in development) +* indexing state data in external databases (still in development) + +## Design and Philosophy + +The ORM's data model is inspired by the relational data model found in SQL databases. The core abstraction is a table +with a primary key and optional secondary indexes. + +Because the Cosmos SDK uses protobuf as its encoding layer, ORM tables are defined directly in .proto files using +protobuf options. Each table is defined by a single protobuf `message` type and a schema of multiple tables is +represented by a single .proto file. + +Table structure is specified in the same file where messages are defined in order to make it easy to focus on better +design of the state layer. Because blockchain state layout is part of the public API for clients (TODO: link to docs on +light client proofs), it is important to think about the state layout as being part of the public API of a module. +Changing the state layout actually breaks clients, so it is ideal to think through it carefully up front and to aim for +a design that will eliminate or minimize breaking changes down the road. Also, good design of state enables building +more performant and sophisticated applications. Providing users with a set of tools inspired by relational databases +which have a long history of database design best practices and allowing schema to be specified declaratively in a +single place are design choices the ORM makes to enable better design and more durable APIs. + +Also, by only supporting the table abstraction as opposed to key-value pair maps, it is easy to add to new +columns/fields to any data structure without causing a breaking change and the data structures can easily be indexed in +any off-the-shelf SQL database for more sophisticated queries. + +The encoding of fields in keys is designed to support ordered iteration for all protobuf primitive field types +except for `bytes` as well as the well-known types `google.protobuf.Timestamp` and `google.protobuf.Duration`. Encodings +are optimized for storage space when it makes sense (see the documentation in `cosmos/orm/v1/orm.proto` for more details) +and table rows do not use extra storage space to store key fields in the value. + +We recommend that users of the ORM attempt to follow database design best practices such as +[normalization](https://en.wikipedia.org/wiki/Database_normalization) (at least 1NF). +For instance, defining `repeated` fields in a table is considered an anti-pattern because breaks first normal form (1NF). +Although we support `repeated` fields in tables, they cannot be used as key fields for this reason. This may seem +restrictive but years of best practice (and also experience in the SDK) have shown that following this pattern +leads to easier to maintain schemas. + +To illustrate the motivation for these principles with an example from the SDK, historically balances were stored +as a mapping from account -> map of denom to amount. This did not scale well because an account with 100 token balances +needed to be encoded/decoded every time a single coin balance changed. Now balances are stored as account,denom -> amount +as in the example above. With the ORM's data model, if we wanted to add a new field to `Balance` such as +`unlocked_balance` (if vesting accounts were redesigned in this way), it would be easy to add it to this table without +requiring a data migration. Because of the ORM's optimizations, the account and denom are only stored in the key part +of storage and not in the value leading to both a flexible data model and efficient usage of storage. + +## Defining Tables + +To define a table: + +1) create a .proto file to describe the module's state (naming it `state.proto` is recommended for consistency), +and import "cosmos/orm/v1/orm.proto", ex: + +```protobuf +syntax = "proto3"; +package bank_example; + +import "cosmos/orm/v1/orm.proto"; +``` + +2) define a `message` for the table, ex: + +```protobuf +message Balance { + bytes account = 1; + string denom = 2; + uint64 balance = 3; +} +``` + +3) add the `cosmos.orm.v1.table` option to the table and give the table an `id` unique within this .proto file: + +```protobuf +message Balance { + option (cosmos.orm.v1.table) = { + id: 1 + }; + + bytes account = 1; + string denom = 2; + uint64 balance = 3; +} +``` + +4) define the primary key field or fields, as a comma-separated list of the fields from the message which should make +up the primary key: + +```protobuf +message Balance { + option (cosmos.orm.v1.table) = { + id: 1 + primary_key: { fields: "account,denom" } + }; + + bytes account = 1; + string denom = 2; + uint64 balance = 3; +} +``` + +5) add any desired secondary indexes by specifying an `id` unique within the table and a comma-separate list of the +index fields: + +```protobuf +message Balance { + option (cosmos.orm.v1.table) = { + id: 1; + primary_key: { fields: "account,denom" } + index: { id: 1 fields: "denom" } // this allows querying for the accounts which own a denom + }; + + bytes account = 1; + string denom = 2; + uint64 amount = 3; +} +``` + +### Auto-incrementing Primary Keys + +A common pattern in SDK modules and in database design is to define tables with a single integer `id` field with an +automatically generated primary key. In the ORM we can do this by setting the `auto_increment` option to `true` on the +primary key, ex: + +```protobuf +message Account { + option (cosmos.orm.v1.table) = { + id: 2; + primary_key: { fields: "id", auto_increment: true } + }; + + uint64 id = 1; + bytes address = 2; +} +``` + +### Unique Indexes + +A unique index can be added by setting the `unique` option to `true` on an index, ex: + +```protobuf +message Account { + option (cosmos.orm.v1.table) = { + id: 2; + primary_key: { fields: "id", auto_increment: true } + index: {id: 1, fields: "address", unique: true} + }; + + uint64 id = 1; + bytes address = 2; +} +``` + +### Singletons + +The ORM also supports a special type of table with only one row called a `singleton`. This can be used for storing +module parameters. Singletons only need to define a unique `id` and that cannot conflict with the id of other +tables or singletons in the same .proto file. Ex: + +```protobuf +message Params { + option (cosmos.orm.v1.singleton) = { + id: 3; + }; + + google.protobuf.Duration voting_period = 1; + uint64 min_threshold = 2; +} +``` + +## Running Codegen + +NOTE: the ORM will only work with protobuf code that implements the [google.golang.org/protobuf](https://pkg.go.dev/google.golang.org/protobuf) +API. That means it will not work with code generated using gogo-proto. + +To install the ORM's code generator, run: + +```shell +go install cosmossdk.io/orm/cmd/protoc-gen-go-cosmos-orm@latest +``` + +The recommended way to run the code generator is to use [buf build](https://docs.buf.build/build/usage). +This is an example `buf.gen.yaml` that runs `protoc-gen-go`, `protoc-gen-go-grpc` and `protoc-gen-go-cosmos-orm` +using buf managed mode: + +```yaml +version: v1 +managed: + enabled: true + go_package_prefix: + default: foo.bar/api # the go package prefix of your package + override: + buf.build/cosmos/cosmos-sdk: cosmossdk.io/api # required to import the Cosmos SDK api module +plugins: + - name: go + out: . + opt: paths=source_relative + - name: go-grpc + out: . + opt: paths=source_relative + - name: go-cosmos-orm + out: . + opt: paths=source_relative +``` + +## Using the ORM in a module + +### Initialization + +To use the ORM in a module, first create a `ModuleSchemaDescriptor`. This tells the ORM which .proto files have defined +an ORM schema and assigns them all a unique non-zero id. Ex: + +```go +var MyModuleSchema = &ormv1alpha1.ModuleSchemaDescriptor{ + SchemaFile: []*ormv1alpha1.ModuleSchemaDescriptor_FileEntry{ + { + Id: 1, + ProtoFileName: mymodule.File_my_module_state_proto.Path(), + }, + }, +} +``` + +In the ORM generated code for a file named `state.proto`, there should be an interface `StateStore` that got generated +with a constructor `NewStateStore` that takes a parameter of type `ormdb.ModuleDB`. Add a reference to `StateStore` +to your module's keeper struct. Ex: + +```go +type Keeper struct { + db StateStore +} +``` + +Then instantiate the `StateStore` instance via an `ormdb.ModuleDB` that is instantiated from the `SchemaDescriptor` +above and one or more store services from `cosmossdk.io/core/store`. Ex: + +```go +func NewKeeper(storeService store.KVStoreService) (*Keeper, error) { + modDb, err := ormdb.NewModuleDB(MyModuleSchema, ormdb.ModuleDBOptions{KVStoreService: storeService}) + if err != nil { + return nil, err + } + db, err := NewStateStore(modDb) + if err != nil { + return nil, err + } + return Keeper{db: db}, nil +} +``` + +### Using the generated code + +The generated code for the ORM contains methods for inserting, updating, deleting and querying table entries. +For each table in a .proto file, there is a type-safe table interface implemented in generated code. For instance, +for a table named `Balance` there should be a `BalanceTable` interface that looks like this: + +```go +type BalanceTable interface { + Insert(ctx context.Context, balance *Balance) error + Update(ctx context.Context, balance *Balance) error + Save(ctx context.Context, balance *Balance) error + Delete(ctx context.Context, balance *Balance) error + Has(ctx context.Context, acocunt []byte, denom string) (found bool, err error) + // Get returns nil and an error which responds true to ormerrors.IsNotFound() if the record was not found. + Get(ctx context.Context, acocunt []byte, denom string) (*Balance, error) + List(ctx context.Context, prefixKey BalanceIndexKey, opts ...ormlist.Option) (BalanceIterator, error) + ListRange(ctx context.Context, from, to BalanceIndexKey, opts ...ormlist.Option) (BalanceIterator, error) + DeleteBy(ctx context.Context, prefixKey BalanceIndexKey) error + DeleteRange(ctx context.Context, from, to BalanceIndexKey) error + + doNotImplement() +} +``` + +This `BalanceTable` should be accessible from the `StateStore` interface (assuming our file is named `state.proto`) +via a `BalanceTable()` accessor method. If all the above example tables/singletons were in the same `state.proto`, +then `StateStore` would get generated like this: + +```go +type BankStore interface { + BalanceTable() BalanceTable + AccountTable() AccountTable + ParamsTable() ParamsTable + + doNotImplement() +} +``` + +So to work with the `BalanceTable` in a keeper method we could use code like this: + +```go +func (k keeper) AddBalance(ctx context.Context, acct []byte, denom string, amount uint64) error { + balance, err := k.db.BalanceTable().Get(ctx, acct, denom) + if err != nil && !ormerrors.IsNotFound(err) { + return err + } + + if balance == nil { + balance = &Balance{ + Account: acct, + Denom: denom, + Amount: amount, + } + } else { + balance.Amount = balance.Amount + amount + } + + return k.db.BalanceTable().Save(ctx, balance) +} +``` + +`List` methods take `IndexKey` parameters. For instance, `BalanceTable.List` takes `BalanceIndexKey`. `BalanceIndexKey` +let's represent index keys for the different indexes (primary and secondary) on the `Balance` table. The primary key +in the `Balance` table gets a struct `BalanceAccountDenomIndexKey` and the first index gets an index key `BalanceDenomIndexKey`. +If we wanted to list all the denoms and amounts that an account holds, we would use `BalanceAccountDenomIndexKey` +with a `List` query just on the account prefix. Ex: + +```go +it, err := keeper.db.BalanceTable().List(ctx, BalanceAccountDenomIndexKey{}.WithAccount(acct)) +``` diff --git a/docs/integrate/libraries/README.md b/docs/integrate/libraries/README.md new file mode 100644 index 000000000..7132b4138 --- /dev/null +++ b/docs/integrate/libraries/README.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 0 +--- + +# Packages + +The Cosmos SDK is a collection of Go modules. This section provides documentation on various packages that can used when developing a Cosmos SDK chain. +It lists all standalone Go modules that are part of the Cosmos SDK. + +:::tip +For more information on SDK modules, see the [SDK Modules](https://docs.cosmos.network/main/modules) section. +For more information on SDK tooling, see the [Tooling](https://docs.cosmos.network/main/tooling) section. +::: + +## Core + +* [Core](https://pkg.go.dev/cosmossdk.io/core) - Core library defining SDK interfaces ([ADR-063](https://docs.cosmos.network/main/architecture/adr-063-core-module-api)) +* [API](https://pkg.go.dev/cosmossdk.io/api) - API library containing generated SDK Pulsar API +* [Store](https://pkg.go.dev/cosmossdk.io/store) - Implementation of the Cosmos SDK store + +## State Management + +* [Collections](02-collections.md) - State management library +* [ORM](03-orm.md) - State management library + +## Automation + +* [Depinject](01-depinject.md) - Dependency injection framework +* [Client/v2](https://pkg.go.dev/cosmossdk.io/client/v2) - Library powering [AutoCLI](https://docs.cosmos.network/main/building-modules/autocli) + +## Utilities + +* [Log](https://pkg.go.dev/cosmossdk.io/log) - Logging library +* [Errors](https://pkg.go.dev/cosmossdk.io/errors) - Error handling library +* [Math](https://pkg.go.dev/cosmossdk.io/math) - Math library for SDK arithmetic operations + +## Example + +* [SimApp](https://pkg.go.dev/cosmossdk.io/simapp) - SimApp is **the** sample Cosmos SDK chain. This package should not be imported in your application. diff --git a/docs/integrate/libraries/_category_.json b/docs/integrate/libraries/_category_.json new file mode 100644 index 000000000..e91118d38 --- /dev/null +++ b/docs/integrate/libraries/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Packages", + "position": 9, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/migrations/01-intro.md b/docs/integrate/migrations/01-intro.md new file mode 100644 index 000000000..82f1db580 --- /dev/null +++ b/docs/integrate/migrations/01-intro.md @@ -0,0 +1,15 @@ +--- +sidebar_position: 1 +--- + +# SDK Migrations + +To smoothen the update to the latest stable release, the SDK includes a CLI command for hard-fork migrations (under the ` genesis migrate` subcommand). +Additionally, the SDK includes in-place migrations for its core modules. These in-place migrations are useful to migrate between major releases. + +* Hard-fork migrations are supported from the last major release to the current one. +* In-place module migrations are supported from the last two major releases to the current one. + +Migration from a version older than the last two major releases is not supported. + +When migrating from a previous version, refer to the [`UPGRADING.md`](02-upgrading.md) and the `CHANGELOG.md` of the version you are migrating to. diff --git a/docs/integrate/migrations/02-upgrading.md b/docs/integrate/migrations/02-upgrading.md new file mode 100644 index 000000000..b5ed8e943 --- /dev/null +++ b/docs/integrate/migrations/02-upgrading.md @@ -0,0 +1,612 @@ +# Upgrading Cosmos SDK + +This guide provides instructions for upgrading to specific versions of Cosmos SDK. +Note, always read the **SimApp** section for more information on application wiring updates. + +## [Unreleased] + +### Migration to CometBFT (Part 2) + +The Cosmos SDK has migrated in its previous versions, to CometBFT. +Some functions have been renamed to reflect the naming change. + +Following an exhaustive list: + +* `client.TendermintRPC` -> `client.CometRPC` +* `clitestutil.MockTendermintRPC` -> `clitestutil.MockCometRPC` +* `clitestutilgenutil.CreateDefaultTendermintConfig` -> `clitestutilgenutil.CreateDefaultCometConfig` +* Package `client/grpc/tmservice` -> `client/grpc/cmtservice` + +Additionally, the commands and flags mentioning `tendermint` have been renamed to `comet`. +However, these commands and flags is still supported for backward compatibility. + +For backward compatibility, the `**/tendermint/**` gRPC services are still supported. + +Additionally, the SDK is starting its abstraction from CometBFT Go types thorought the codebase: + +* The usage of CometBFT have been replaced to use the Cosmos SDK logger interface (`cosmossdk.io/log.Logger`). +* The usage of `github.com/cometbft/cometbft/libs/bytes.HexByte` have been replaced by `[]byte`. + +### Configuration + +A new tool have been created for migrating configuration of the SDK. Use the following command to migrate your configuration: + +```bash +simd config migrate v0.48 +``` + +More information about [confix](https://docs.cosmos.network/main/tooling/confix). + +#### Events + +The log section of abci.TxResult is not populated in the case of successful msg(s) execution. Instead a new attribute is added to all messages indicating the `msg_index` which identifies which events and attributes relate the same transaction + +#### gRPC-Web + +gRPC-Web is now listening to the same address as the gRPC Gateway API server (default: `localhost:1317`). +The possibility to listen to a different address has been removed, as well as its settings. +Use `confix` to clean-up your `app.toml`. A nginx (or alike) reverse-proxy can be set to keep the previous behavior. + +#### Database Support + +ClevelDB, BoltDB and BadgerDB are not supported anymore. To migrate from a unsupported database to a supported database please use the database migration tool. + +### Protobuf + +The SDK is in the process of removing all `gogoproto` annotations. + +#### Stringer + +The `gogoproto.goproto_stringer = false` annotation has been removed from most proto files. This means that the `String()` method is being generated for types that previously had this annotation. The generated `String()` method uses `proto.CompactTextString` for _stringifying_ structs. +[Verify](https://github.com/cosmos/cosmos-sdk/pull/13850#issuecomment-1328889651) the usage of the modified `String()` methods and double-check that they are not used in state-machine code. + +### SimApp + + + +#### Module Assertions + +Previously, all modules were required to be set in `OrderBeginBlockers`, `OrderEndBlockers` and `OrderInitGenesis / OrderExportGenesis` in `app.go` / `app_config.go`. +This is no longer the case, the assertion has been loosened to only require modules implementing, respectively, the `module.BeginBlockAppModule`, `module.EndBlockAppModule` and `module.HasGenesis` interfaces. + +#### Modules Keepers + +The following modules `NewKeeper` function now take a `KVStoreService` instead of a `StoreKey`: + +* `x/auth` +* `x/authz` +* `x/bank` +* `x/consensus` +* `x/distribution` +* `x/feegrant` +* `x/nft` + +User manually wiring their chain need to use the `runtime.NewKVStoreService` method to create a `KVStoreService` from a `StoreKey`: + +```diff +app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper( + appCodec, +- keys[consensusparamtypes.StoreKey] ++ runtime.NewKVStoreService(keys[consensusparamtypes.StoreKey]), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), +) +``` + +The following modules' `Keeper` methods now take in a `context.Context` instead of `sdk.Context`. Any module that has an interfaces for them (like "expected keepers") will need to update and re-generate mocks if needed: + +* `x/authz` +* `x/bank` +* `x/distribution` + +**Users using depinject do not need any changes, this is automatically done for them.** + +#### Logger + +The following modules `NewKeeper` function now take a `log.Logger`: + +* `x/bank` + +`depinject` users must now supply the logger through the main `depinject.Supply` function instead of passing it to `appBuilder.Build`. + +```diff +appConfig = depinject.Configs( + AppConfig, + depinject.Supply( + // supply the application options + appOpts, ++ logger, + ... +``` + +```diff +- app.App = appBuilder.Build(logger, db, traceStore, baseAppOptions...) ++ app.App = appBuilder.Build(db, traceStore, baseAppOptions...) +``` + +User manually wiring their chain need to add the logger argument when creating the keeper. + +#### Module Basics + +Previously, the `ModuleBasics` was a global variable that was used to register all modules's `AppModuleBasic` implementation. +The global variable has been removed and the basic module manager can be now created from the module manager. + +This is automatically done for depinject users, however for supplying different app module implementation, pass them via `depinject.Supply` in the main `AppConfig` (`app_config.go`): + +```go +depinject.Supply( + // supply custom module basics + map[string]module.AppModuleBasic{ + genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator), + govtypes.ModuleName: gov.NewAppModuleBasic( + []govclient.ProposalHandler{ + paramsclient.ProposalHandler, + }, + ), + }, + ) +``` + +Users manually wiring their chain need to use the new `module.NewBasicManagerFromManager` function, after the module manager creation, and pass a `map[string]module.AppModuleBasic` as argument for optionally overridding some module's `AppModuleBasic`. + +### Packages + +#### Store + +References to `types/store.go` which contained aliases for store types have been remapped to point to appropriate store/types, hence the `types/store.go` file is no longer needed and has been removed. + +##### Extract Store to a standalone module + +The `store` module is extracted to have a separate go.mod file which allows it be a standalone module. +All the store imports are now renamed to use `cosmossdk.io/store` instead of `github.com/cosmos/cosmos-sdk/store` across the SDK. + +#### Client + +The return type of the interface method `TxConfig.SignModeHandler()` has been changed from `x/auth/signing.SignModeHandler` to `x/tx/signing.HandlerMap`. This change is transparent to most users as the `TxConfig` interface is typically implemented by private `x/auth/tx.config` struct (as returned by `auth.NewTxConfig`) which has been updated to return the new type. If users have implemented their own `TxConfig` interface, they will need to update their implementation to return the new type. + +### Modules + +#### `**all**` + +[RFC 001](https://docs.cosmos.network/main/rfc/rfc-001-tx-validation) has defined a simplification of the message validation process for modules. +The `sdk.Msg` interface has been updated to not require the implementation of the `ValidateBasic` method. +It is now recommended to validate message directly in the message server. When the validation is performed in the message server, the `ValidateBasic` method on a message is no longer required and can be removed. + +#### `x/auth` + +For ante handler construction via `ante.NewAnteHandler`, the field `ante.HandlerOptions.SignModeHandler` has been updated to `x/tx/signing/HandlerMap` from `x/auth/signing/SignModeHandler`. Callers typically fetch this value from `client.TxConfig.SignModeHandler()` (which is also changed) so this change should be transparent to most users. + +#### `x/capability` + +Capability was moved to [IBC-GO](https://github.com/cosmos/ibc-go). IBC V8 will contain the necessary changes to incorporate the new module location + +#### `x/gov` + +##### Expedited Proposals + +The `gov` v1 module has been updated to support the ability to expedite governance proposals. When a proposal is expedited, the voting period will be shortened to `ExpeditedVotingPeriod` parameter. An expedited proposal must have an higher voting threshold than a classic proposal, that threshold is defined with the `ExpeditedThreshold` parameter. + +##### Cancelling Proposals + +The `gov` module has been updated to support the ability to cancel governance proposals. When a proposal is canceled, all the deposits of the proposal are either burnt or sent to `ProposalCancelDest` address. The deposits burn rate will be determined by a new parameter called `ProposalCancelRatio` parameter. + +```text + 1. deposits * proposal_cancel_ratio will be burned or sent to `ProposalCancelDest` address , if `ProposalCancelDest` is empty then deposits will be burned. + 2. deposits * (1 - proposal_cancel_ratio) will be sent to depositors. +``` + +By default, the new `ProposalCancelRatio` parameter is set to 0.5 during migration and `ProposalCancelDest` is set to empty string (i.e. burnt). + +#### `x/evidence` + +##### Extract evidence to a standalone module + +The `x/evidence` module is extracted to have a separate go.mod file which allows it be a standalone module. +All the evidence imports are now renamed to use `cosmossdk.io/x/evidence` instead of `github.com/cosmos/cosmos-sdk/x/evidence` across the SDK. + +#### `x/nft` + +##### Extract nft to a standalone module + +The `x/nft` module is extracted to have a separate go.mod file which allows it to be a standalone module. + +#### x/feegrant + +##### Extract feegrant to a standalone module + +The `x/feegrant` module is extracted to have a separate go.mod file which allows it to be a standalone module. +All the feegrant imports are now renamed to use `cosmossdk.io/x/feegrant` instead of `github.com/cosmos/cosmos-sdk/x/feegrant` across the SDK. + +#### `x/upgrade` + +##### Extract upgrade to a standalone module + +The `x/upgrade` module is extracted to have a separate go.mod file which allows it to be a standalone module. +All the upgrade imports are now renamed to use `cosmossdk.io/x/upgrade` instead of `github.com/cosmos/cosmos-sdk/x/upgrade` across the SDK. + +## [v0.47.x](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.47.0) + +### Migration to CometBFT (Part 1) + +The Cosmos SDK has migrated to CometBFT, as its default consensus engine. +CometBFT is an implementation of the Tendermint consensus algorithm, and the successor of Tendermint Core. +Due to the import changes, this is a breaking change. Chains need to remove **entirely** their imports of Tendermint Core in their codebase, from direct and indirects imports in their `go.mod`. + +* Replace `github.com/tendermint/tendermint` by `github.com/cometbft/cometbft` +* Replace `github.com/tendermint/tm-db` by `github.com/cometbft/cometbft-db` +* Verify `github.com/tendermint/tendermint` is not an indirect or direct dependency +* Run `make proto-gen` + +Other than that, the migration should be seamless. +On the SDK side, clean-up of variables, functions to reflect the new name will only happen from v0.48 (part 2). + +Note: It is possible that these steps must first be performed by your dependencies before you can perform them on your own codebase. + +### Simulation + +Remove `RandomizedParams` from `AppModuleSimulation` interface. Previously, it used to generate random parameter changes during simulations, however, it does so through ParamChangeProposal which is now legacy. Since all modules were migrated, we can now safely remove this from `AppModuleSimulation` interface. + +Moreover, to support the `MsgUpdateParams` governance proposals for each modules, `AppModuleSimulation` now defines a `AppModule.ProposalMsgs` method in addition to `AppModule.ProposalContents`. That method defines the messages that can be used to submit a proposal and that should be tested in simulation. + +When a module has no proposal messages or proposal content to be tested by simulation, the `AppModule.ProposalMsgs` and `AppModule.ProposalContents` methods can be deleted. + +### gRPC + +A new gRPC service, `proto/cosmos/base/node/v1beta1/query.proto`, has been introduced +which exposes various operator configuration. App developers should be sure to +register the service with the gRPC-gateway service via +`nodeservice.RegisterGRPCGatewayRoutes` in their application construction, which +is typically found in `RegisterAPIRoutes`. + +### AppModule Interface + +Support for the `AppModule` `Querier`, `Route` and `LegacyQuerier` methods has been entirely removed from the `AppModule` +interface. This removes and fully deprecates all legacy queriers. All modules no longer support the REST API previously +known as the LCD, and the `sdk.Msg#Route` method won't be used anymore. + +Most other existing `AppModule` methods have been moved to extension interfaces in preparation for the migration +to the `cosmossdk.io/core/appmodule` API in the next release. Most `AppModule` implementations should not be broken +by this change. + +### SimApp + +The `simapp` package **should not be imported in your own app**. Instead, you should import the `runtime.AppI` interface, that defines an `App`, and use the [`simtestutil` package](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/testutil/sims) for application testing. + +#### App Wiring + +SimApp's `app_v2.go` is using [App Wiring](https://docs.cosmos.network/main/building-apps/app-go-v2), the dependency injection framework of the Cosmos SDK. +This means that modules are injected directly into SimApp thanks to a [configuration file](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go). +The previous behavior, without the dependency injection framework, is still present in [`app.go`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go) and is not going anywhere. + +If you are using a `app.go` without dependency injection, add the following lines to your `app.go` in order to provide newer gRPC services: + +```go +autocliv1.RegisterQueryServer(app.GRPCQueryRouter(), runtimeservices.NewAutoCLIQueryService(app.ModuleManager.Modules)) + +reflectionSvc, err := runtimeservices.NewReflectionService() +if err != nil { + panic(err) +} +reflectionv1.RegisterReflectionServiceServer(app.GRPCQueryRouter(), reflectionSvc) +``` + +#### Constructor + +The constructor, `NewSimApp` has been simplified: + +* `NewSimApp` does not take encoding parameters (`encodingConfig`) as input, instead the encoding parameters are injected (when using app wiring), or directly created in the constructor. Instead, we can instantiate `SimApp` for getting the encoding configuration. +* `NewSimApp` now uses `AppOptions` for getting the home path (`homePath`) and the invariant checks period (`invCheckPeriod`). These were unnecessary given as arguments as they were already present in the `AppOptions`. + +#### Encoding + +`simapp.MakeTestEncodingConfig()` was deprecated and has been removed. Instead you can use the `TestEncodingConfig` from the `types/module/testutil` package. +This means you can replace your usage of `simapp.MakeTestEncodingConfig` in tests to `moduletestutil.MakeTestEncodingConfig`, which takes a series of relevant `AppModuleBasic` as input (the module being tested and any potential dependencies). + +#### Export + +`ExportAppStateAndValidators` takes an extra argument, `modulesToExport`, which is a list of module names to export. +That argument should be passed to the module maanager `ExportGenesisFromModules` method. + +#### Replaces + +The `GoLevelDB` version must pinned to `v1.0.1-0.20210819022825-2ae1ddf74ef7` in the application, following versions might cause unexpected behavior. +This can be done adding `replace github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7` to the `go.mod` file. + +* [issue #14949 on cosmos-sdk](https://github.com/cosmos/cosmos-sdk/issues/14949) +* [issue #25413 on go-ethereum](https://github.com/ethereum/go-ethereum/pull/25413) + +### Protobuf + +The SDK has migrated from `gogo/protobuf` (which is currently unmaintained), to our own maintained fork, [`cosmos/gogoproto`](https://github.com/cosmos/gogoproto). + +This means you should replace all imports of `github.com/gogo/protobuf` to `github.com/cosmos/gogoproto`. +This allows you to remove the replace directive `replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1` from your `go.mod` file. + +Please use the `ghcr.io/cosmos/proto-builder` image (version >= `0.11.5`) for generating protobuf files. + +See which buf commit for `cosmos/cosmos-sdk` to pin in your `buf.yaml` file [here](../tooling). + +#### Gogoproto Import Paths + +The SDK made a [patch fix](https://github.com/cosmos/gogoproto/pull/32) on its gogoproto repository to require that each proto file's package name matches its OS import path (relatively to a protobuf root import path, usually the root `proto/` folder, set by the `protoc -I` flag). + +For example, assuming you put all your proto files in subfolders inside your root `proto/` folder, then a proto file with package name `myapp.mymodule.v1` should be found in the `proto/myapp/mymodule/v1/` folder. If it is in another folder, the proto generation command will throw an error. + +If you are using a custom folder structure for your proto files, please reorganize them so that their OS path matches their proto package name. + +This is to allow the proto FileDescriptSets to be correctly registered, and this standardized OS import paths allows [Hubl](https://github.com/cosmos/cosmos-sdk/tree/main/tools/hubl) to reflectively talk to any chain. + +#### `{accepts,implements}_interface` proto annotations + +The SDK is normalizing the strings inside the Protobuf `accepts_interface` and `implements_interface` annotations. We require them to be fully-scoped names. They will soon be used by code generators like Pulsar and Telescope to match which messages can or cannot be packed inside `Any`s. + +Here are the following replacements that you need to perform on your proto files: + +```diff +- "Content" ++ "cosmos.gov.v1beta1.Content" +- "Authorization" ++ "cosmos.authz.v1beta1.Authorization" +- "sdk.Msg" ++ "cosmos.base.v1beta1.Msg" +- "AccountI" ++ "cosmos.auth.v1beta1.AccountI" +- "ModuleAccountI" ++ "cosmos.auth.v1beta1.ModuleAccountI" +- "FeeAllowanceI" ++ "cosmos.feegrant.v1beta1.FeeAllowanceI" +``` + +Please also check that in your own app's proto files that there are no single-word names for those two proto annotations. If so, then replace them with fully-qualified names, even though those names don't actually resolve to an actual protobuf entity. + +For more information, see the [encoding guide](../../develop/advanced-concepts/06-encoding.md). + +### Transactions + +#### Broadcast Mode + +Broadcast mode `block` was deprecated and has been removed. Please use `sync` mode +instead. When upgrading your tests from `block` to `sync` and checking for a +transaction code, you need to query the transaction first (with its hash) to get +the correct code. + +### Modules + +#### `**all**` + +`EventTypeMessage` events, with `sdk.AttributeKeyModule` and `sdk.AttributeKeySender` are now emitted directly at message excecution (in `baseapp`). +This means that the following boilerplate should be removed from all your custom modules: + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeySender, `signer/sender`), + ), +) +``` + +The module name is assumed by `baseapp` to be the second element of the message route: `"cosmos.bank.v1beta1.MsgSend" -> "bank"`. +In case a module does not follow the standard message path, (e.g. IBC), it is advised to keep emitting the module name event. +`Baseapp` only emits that event if the module has not already done so. + +#### `x/params` + +The `params` module was deprecated since v0.46. The Cosmos SDK has migrated away from `x/params` for its own modules. +Cosmos SDK modules now store their parameters directly in its repective modules. +The `params` module will be removed in `v0.48`, as mentioned [in v0.46 release](https://github.com/cosmos/cosmos-sdk/blob/v0.46.1/UPGRADING.md#xparams). It is strongly encouraged to migrate away from `x/params` before `v0.48`. + +When performing a chain migration, the params table must be initizalied manually. This was done in the modules keepers in previous versions. +Have a look at `simapp.RegisterUpgradeHandlers()` for an example. + +#### `x/gov` + +##### Minimum Proposal Deposit At Time of Submission + +The `gov` module has been updated to support a minimum proposal deposit at submission time. It is determined by a new +parameter called `MinInitialDepositRatio`. When multiplied by the existing `MinDeposit` parameter, it produces +the necessary proportion of coins needed at the proposal submission time. The motivation for this change is to prevent proposal spamming. + +By default, the new `MinInitialDepositRatio` parameter is set to zero during migration. The value of zero signifies that this +feature is disabled. If chains wish to utilize the minimum proposal deposits at time of submission, the migration logic needs to be +modified to set the new parameter to the desired value. + +##### New Proposal.Proposer field + +The `Proposal` proto has been updated with proposer field. For proposal state migraton developers can call `v4.AddProposerAddressToProposal` in their upgrade handler to update all existing proposal and make them compatible and **this migration is optional**. + +```go +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + v4 "github.com/cosmos/cosmos-sdk/x/gov/migrations/v4" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +) + +func (app SimApp) RegisterUpgradeHandlers() { + app.UpgradeKeeper.SetUpgradeHandler(UpgradeName, + func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // this migration is optional + // add proposal ids with proposers which are active (deposit or voting period) + proposals := make(map[uint64]string) + proposals[1] = "cosmos1luyncewxk4lm24k6gqy8y5dxkj0klr4tu0lmnj" ... + v4.AddProposerAddressToProposal(ctx, sdk.NewKVStoreKey(v4.ModuleName), app.appCodec, proposals) + return app.ModuleManager.RunMigrations(ctx, app.Configurator(), fromVM) + }) +} + +``` + +#### `x/consensus` + +Introducing a new `x/consensus` module to handle managing Tendermint consensus +parameters. For migration it is required to call a specific migration to migrate +existing parameters from the deprecated `x/params` to `x/consensus` module. App +developers should ensure to call `baseapp.MigrateParams` in their upgrade handler. + +Example: + +```go +func (app SimApp) RegisterUpgradeHandlers() { + ----> baseAppLegacySS := app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) <---- + + app.UpgradeKeeper.SetUpgradeHandler( + UpgradeName, + func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // Migrate Tendermint consensus parameters from x/params module to a + // dedicated x/consensus module. + ----> baseapp.MigrateParams(ctx, baseAppLegacySS, &app.ConsensusParamsKeeper) <---- + + // ... + + return app.ModuleManager.RunMigrations(ctx, app.Configurator(), fromVM) + }, + ) + + // ... +} +``` + +The old params module is required to still be imported in your app.go in order to handle this migration. + +##### `app.go` changes + +When using an `app.go` without App Wiring, the following changes are required: + +```diff +- bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())) ++ app.ConsensusParamsKeeper = consensusparamkeeper.NewKeeper(appCodec, keys[consensusparamstypes.StoreKey], authtypes.NewModuleAddress(govtypes.ModuleName).String()) ++ bApp.SetParamStore(&app.ConsensusParamsKeeper) +``` + +When using App Wiring, the paramater store is automatically set for you. + +#### `x/nft` + +The SDK does not validate anymore the `classID` and `nftID` of an NFT, for extra flexibility in your NFT implementation. +This means chain developers need to validate the `classID` and `nftID` of an NFT. + +### Ledger + +Ledger support has been generalized to enable use of different apps and keytypes that use `secp256k1`. The Ledger interface remains the same, but it can now be provided through the Keyring `Options`, allowing higher-level chains to connect to different Ledger apps or use custom implementations. In addition, higher-level chains can provide custom key implementations around the Ledger public key, to enable greater flexibility with address generation and signing. + +This is not a breaking change, as all values will default to use the standard Cosmos app implementation unless specified otherwise. + +## [v0.46.x](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.46.0) + +### Go API Changes + +The `replace google.golang.org/grpc` directive can be removed from the `go.mod`, it is no more required to block the version. + +A few packages that were deprecated in the previous version are now removed. + +For instance, the REST API, deprecated in v0.45, is now removed. If you have not migrated yet, please follow the [instructions](https://docs.cosmos.network/v0.45/migrations/rest.html). + +To improve clarity of the API, some renaming and improvements has been done: + +| Package | Previous | Current | +| --------- | ---------------------------------- | ------------------------------------ | +| `simapp` | `encodingConfig.Marshaler` | `encodingConfig.Codec` | +| `simapp` | `FundAccount`, `FundModuleAccount` | Functions moved to `x/bank/testutil` | +| `types` | `AccAddressFromHex` | `AccAddressFromHexUnsafe` | +| `x/auth` | `MempoolFeeDecorator` | Use `DeductFeeDecorator` instead | +| `x/bank` | `AddressFromBalancesStore` | `AddressAndDenomFromBalancesStore` | +| `x/gov` | `keeper.DeleteDeposits` | `keeper.DeleteAndBurnDeposits` | +| `x/gov` | `keeper.RefundDeposits` | `keeper.RefundAndDeleteDeposits` | +| `x/{mod}` | package `legacy` | package `migrations` | + +For the exhaustive list of API renaming, please refer to the [CHANGELOG](https://github.com/cosmos/cosmos-sdk/blob/main/CHANGELOG.md). + +#### new packages + +Additionally, new packages have been introduced in order to further split the codebase. Aliases are available for a new API breaking migration, but it is encouraged to migrate to this new packages: + +* `errors` should replace `types/errors` when registering errors or wrapping SDK errors. +* `math` contains the `Int` or `Uint` types that are used in the SDK. +* `x/nft` an NFT base module. +* `x/group` a group module allowing to create DAOs, multisig and policies. Greatly composes with `x/authz`. + +#### `x/authz` + +* `authz.NewMsgGrant` `expiration` is now a pointer. When `nil` is used, then no expiration will be set (grant won't expire). +* `authz.NewGrant` takes a new argument: block time, to correctly validate expire time. + +### Keyring + +The keyring has been refactored in v0.46. + +* The `Unsafe*` interfaces have been removed from the keyring package. Please use interface casting if you wish to access those unsafe functions. +* The keys' implementation has been refactored to be serialized as proto. +* `keyring.NewInMemory` and `keyring.New` takes now a `codec.Codec`. +* Take `keyring.Record` instead of `Info` as first argument in: + * `MkConsKeyOutput` + * `MkValKeyOutput` + * `MkAccKeyOutput` +* Rename: + * `SavePubKey` to `SaveOfflineKey` and remove the `algo` argument. + * `NewMultiInfo`, `NewLedgerInfo` to `NewLegacyMultiInfo`, `newLegacyLedgerInfo` respectively. + * `NewOfflineInfo` to `newLegacyOfflineInfo` and move it to `migration_test.go`. + +### PostHandler + +A `postHandler` is like an `antehandler`, but is run _after_ the `runMsgs` execution. It is in the same store branch that `runMsgs`, meaning that both `runMsgs` and `postHandler`. This allows to run a custom logic after the execution of the messages. + +### IAVL + +v0.19.0 IAVL introduces a new "fast" index. This index represents the latest state of the +IAVL laid out in a format that preserves data locality by key. As a result, it allows for faster queries and iterations +since data can now be read in lexicographical order that is frequent for Cosmos-SDK chains. + +The first time the chain is started after the upgrade, the aforementioned index is created. The creation process +might take time and depends on the size of the latest state of the chain. For example, Osmosis takes around 15 minutes to rebuild the index. + +While the index is being created, node operators can observe the following in the logs: +"Upgrading IAVL storage for faster queries + execution on the live state. This may take a while". The store +key is appended to the message. The message is printed for every module that has a non-transient store. +As a result, it gives a good indication of the progress of the upgrade. + +There is also downgrade and re-upgrade protection. If a node operator chooses to downgrade to IAVL pre-fast index, and then upgrade again, the index is rebuilt from scratch. This implementation detail should not be relevant in most cases. It was added as a safeguard against operator +mistakes. + +### Modules + +#### `x/params` + +* The `x/params` module has been depreacted in favour of each module housing and providing way to modify their parameters. Each module that has parameters that are changable during runtime have an authority, the authority can be a module or user account. The Cosmos SDK team recommends migrating modules away from using the param module. An example of how this could look like can be found [here](https://github.com/cosmos/cosmos-sdk/pull/12363). +* The Param module will be maintained until April 18, 2023. At this point the module will reach end of life and be removed from the Cosmos SDK. + +#### `x/gov` + +The `gov` module has been greatly improved. The previous API has been moved to `v1beta1` while the new implementation is called `v1`. + +In order to submit a proposal with `submit-proposal` you now need to pass a `proposal.json` file. +You can still use the old way by using `submit-legacy-proposal`. This is not recommended. +More information can be found in the gov module [client documentation](https://docs.cosmos.network/v0.46/modules/gov/07_client.html). + +#### `x/staking` + +The `staking module` added a new message type to cancel unbonding delegations. Users that have unbonded by accident or wish to cancel a undelegation can now specify the amount and valdiator they would like to cancel the unbond from + +### Protobuf + +The `third_party/proto` folder that existed in [previous version](https://github.com/cosmos/cosmos-sdk/tree/v0.45.3/third_party/proto) now does not contains directly the [proto files](https://github.com/cosmos/cosmos-sdk/tree/release/v0.46.x/third_party/proto). + +Instead, the SDK uses [`buf`](https://buf.build). Clients should have their own [`buf.yaml`](https://docs.buf.build/configuration/v1/buf-yaml) with `buf.build/cosmos/cosmos-sdk` as dependency, in order to avoid having to copy paste these files. + +The protos can as well be downloaded using `buf export buf.build/cosmos/cosmos-sdk:8cb30a2c4de74dc9bd8d260b1e75e176 --output `. + +Cosmos message protobufs should be extended with `cosmos.msg.v1.signer`: + +```protobuf +message MsgSetWithdrawAddress { + option (cosmos.msg.v1.signer) = "delegator_address"; ++ + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string withdraw_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} +``` + +When clients interract with a node they are required to set a codec in in the grpc.Dial. More information can be found in this [doc](https://docs.cosmos.network/v0.46/run-node/interact-node.html#programmatically-via-go). diff --git a/docs/integrate/migrations/_category_.json b/docs/integrate/migrations/_category_.json new file mode 100644 index 000000000..258dc810c --- /dev/null +++ b/docs/integrate/migrations/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "SDK Migrations", + "position": 3, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/modules/README.md b/docs/integrate/modules/README.md new file mode 100644 index 000000000..c5a8cc63d --- /dev/null +++ b/docs/integrate/modules/README.md @@ -0,0 +1,42 @@ +--- +sidebar_position: 0 +slug : /modules +--- + +# Module Summary + +Here are some production-grade modules that can be used in Cosmos SDK applications, along with their respective documentation: + +* [Auth](auth/README.md) - Authentication of accounts and transactions for Cosmos SDK applications. +* [Authz](authz/README.md) - Authorization for accounts to perform actions on behalf of other accounts. +* [Bank](bank/README.md) - Token transfer functionalities. +* [Crisis](crisis/README.md) - Halting the blockchain under certain circumstances (e.g. if an invariant is broken). +* [Distribution](distribution/README.md) - Fee distribution, and staking token provision distribution. +* [Evidence](evidence/README.md) - Evidence handling for double signing, misbehaviour, etc. +* [Feegrant](feegrant/README.md) - Grant fee allowances for executing transactions. +* [Governance](gov/README.md) - On-chain proposals and voting. +* [Mint](mint/README.md) - Creation of new units of staking token. +* [Params](params/README.md) - Globally available parameter store. +* [Slashing](slashing/README.md) - Validator punishment mechanisms. +* [Staking](staking/README.md) - Proof-of-Stake layer for public blockchains. +* [Upgrade](upgrade/README.md) - Software upgrades handling and coordination. +* [NFT](nft/README.md) - NFT module implemented based on [ADR43](https://docs.cosmos.network/main/architecture/adr-043-nft-module.html). +* [Consensus](consensus/README.md) - Consensus module for modifying CometBFT's ABCI consensus params. +* [Circuit](circuit/README.md) - Circuit breaker module for pausing messages. +* [Genutil](genutil/README.md) - Genesis utilities for the Cosmos SDK. + +To learn more about the process of building modules, visit the [building modules reference documentation](https://docs.cosmos.network/main/building-modules/intro). + +## IBC + +The IBC module for the SDK is maintained by the IBC Go team in its [own repository](https://github.com/cosmos/ibc-go). + +Additionally, the [capability module](https://github.com/cosmos/ibc-go/tree/fdd664698d79864f1e00e147f9879e58497b5ef1/modules/capability) is from v0.48+ maintained by the IBC Go team in its [own repository](https://github.com/cosmos/ibc-go/tree/fdd664698d79864f1e00e147f9879e58497b5ef1/modules/capability). + +## CosmWasm + +The CosmWasm module enables smart contracts, learn more by going to their [documentation site](https://book.cosmwasm.com/), or visit [the repository](https://github.com/CosmWasm/cosmwasm). + +## EVM + +Read more about writing smart contracts with solidity at the official [`evm` documentation page](https://docs.evmos.org/modules/evm/). diff --git a/docs/integrate/modules/_category_.json b/docs/integrate/modules/_category_.json new file mode 100644 index 000000000..9aac4ff6e --- /dev/null +++ b/docs/integrate/modules/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "List of SDK Modules", + "position": 2, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/modules/auth/1-vesting.md b/docs/integrate/modules/auth/1-vesting.md new file mode 100644 index 000000000..62619ede0 --- /dev/null +++ b/docs/integrate/modules/auth/1-vesting.md @@ -0,0 +1,618 @@ +--- +sidebar_position: 1 +--- + +# `x/auth/vesting` + + +* [Intro and Requirements](#intro-and-requirements) +* [Note](#note) +* [Vesting Account Types](#vesting-account-types) + * [BaseVestingAccount](#basevestingaccount) + * [ContinuousVestingAccount](#continuousvestingaccount) + * [DelayedVestingAccount](#delayedvestingaccount) + * [Period](#period) + * [PeriodicVestingAccount](#periodicvestingaccount) + * [PermanentLockedAccount](#permanentlockedaccount) +* [Vesting Account Specification](#vesting-account-specification) + * [Determining Vesting & Vested Amounts](#determining-vesting--vested-amounts) + * [Periodic Vesting Accounts](#periodic-vesting-accounts) + * [Transferring/Sending](#transferringsending) + * [Delegating](#delegating) + * [Undelegating](#undelegating) +* [Keepers & Handlers](#keepers--handlers) +* [Genesis Initialization](#genesis-initialization) +* [Examples](#examples) + * [Simple](#simple) + * [Slashing](#slashing) + * [Periodic Vesting](#periodic-vesting) +* [Glossary](#glossary) + +## Intro and Requirements + +This specification defines the vesting account implementation that is used by the Cosmos Hub. The requirements for this vesting account is that it should be initialized during genesis with a starting balance `X` and a vesting end time `ET`. A vesting account may be initialized with a vesting start time `ST` and a number of vesting periods `P`. If a vesting start time is included, the vesting period does not begin until start time is reached. If vesting periods are included, the vesting occurs over the specified number of periods. + +For all vesting accounts, the owner of the vesting account is able to delegate and undelegate from validators, however they cannot transfer coins to another account until those coins are vested. This specification allows for four different kinds of vesting: + +* Delayed vesting, where all coins are vested once `ET` is reached. +* Continous vesting, where coins begin to vest at `ST` and vest linearly with respect to time until `ET` is reached +* Periodic vesting, where coins begin to vest at `ST` and vest periodically according to number of periods and the vesting amount per period. The number of periods, length per period, and amount per period are configurable. A periodic vesting account is distinguished from a continuous vesting account in that coins can be released in staggered tranches. For example, a periodic vesting account could be used for vesting arrangements where coins are relased quarterly, yearly, or over any other function of tokens over time. +* Permanent locked vesting, where coins are locked forever. Coins in this account can still be used for delegating and for governance votes even while locked. + +## Note + +Vesting accounts can be initialized with some vesting and non-vesting coins. The non-vesting coins would be immediately transferable. DelayedVesting ContinuousVesting, PeriodicVesting and PermenantVesting accounts can be created with normal messages after genesis. Other types of vesting accounts must be created at genesis, or as part of a manual network upgrade. The current specification only allows for _unconditional_ vesting (ie. there is no possibility of reaching `ET` and +having coins fail to vest). + +## Vesting Account Types + +```go +// VestingAccount defines an interface that any vesting account type must +// implement. +type VestingAccount interface { + Account + + GetVestedCoins(Time) Coins + GetVestingCoins(Time) Coins + + // TrackDelegation performs internal vesting accounting necessary when + // delegating from a vesting account. It accepts the current block time, the + // delegation amount and balance of all coins whose denomination exists in + // the account's original vesting balance. + TrackDelegation(Time, Coins, Coins) + + // TrackUndelegation performs internal vesting accounting necessary when a + // vesting account performs an undelegation. + TrackUndelegation(Coins) + + GetStartTime() int64 + GetEndTime() int64 +} +``` + +### BaseVestingAccount + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L11-L35 +``` + +### ContinuousVestingAccount + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L37-L46 +``` + +### DelayedVestingAccount + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L48-L57 +``` + +### Period + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L59-L69 +``` + +```go +// Stores all vesting periods passed as part of a PeriodicVestingAccount +type Periods []Period + +``` + +### PeriodicVestingAccount + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L71-L81 +``` + +In order to facilitate less ad-hoc type checking and assertions and to support flexibility in account balance usage, the existing `x/bank` `ViewKeeper` interface is updated to contain the following: + +```go +type ViewKeeper interface { + // ... + + // Calculates the total locked account balance. + LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + + // Calculates the total spendable balance that can be sent to other accounts. + SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins +} +``` + +### PermanentLockedAccount + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L83-L94 +``` + +## Vesting Account Specification + +Given a vesting account, we define the following in the proceeding operations: + +* `OV`: The original vesting coin amount. It is a constant value. +* `V`: The number of `OV` coins that are still _vesting_. It is derived by +`OV`, `StartTime` and `EndTime`. This value is computed on demand and not on a per-block basis. +* `V'`: The number of `OV` coins that are _vested_ (unlocked). This value is computed on demand and not a per-block basis. +* `DV`: The number of delegated _vesting_ coins. It is a variable value. It is stored and modified directly in the vesting account. +* `DF`: The number of delegated _vested_ (unlocked) coins. It is a variable value. It is stored and modified directly in the vesting account. +* `BC`: The number of `OV` coins less any coins that are transferred +(which can be negative or delegated). It is considered to be balance of the embedded base account. It is stored and modified directly in the vesting account. + +### Determining Vesting & Vested Amounts + +It is important to note that these values are computed on demand and not on a mandatory per-block basis (e.g. `BeginBlocker` or `EndBlocker`). + +#### Continuously Vesting Accounts + +To determine the amount of coins that are vested for a given block time `T`, the +following is performed: + +1. Compute `X := T - StartTime` +2. Compute `Y := EndTime - StartTime` +3. Compute `V' := OV * (X / Y)` +4. Compute `V := OV - V'` + +Thus, the total amount of _vested_ coins is `V'` and the remaining amount, `V`, +is _vesting_. + +```go +func (cva ContinuousVestingAccount) GetVestedCoins(t Time) Coins { + if t <= cva.StartTime { + // We must handle the case where the start time for a vesting account has + // been set into the future or when the start of the chain is not exactly + // known. + return ZeroCoins + } else if t >= cva.EndTime { + return cva.OriginalVesting + } + + x := t - cva.StartTime + y := cva.EndTime - cva.StartTime + + return cva.OriginalVesting * (x / y) +} + +func (cva ContinuousVestingAccount) GetVestingCoins(t Time) Coins { + return cva.OriginalVesting - cva.GetVestedCoins(t) +} +``` + +### Periodic Vesting Accounts + +Periodic vesting accounts require calculating the coins released during each period for a given block time `T`. Note that multiple periods could have passed when calling `GetVestedCoins`, so we must iterate over each period until the end of that period is after `T`. + +1. Set `CT := StartTime` +2. Set `V' := 0` + +For each Period P: + + 1. Compute `X := T - CT` + 2. IF `X >= P.Length` + 1. Compute `V' += P.Amount` + 2. Compute `CT += P.Length` + 3. ELSE break + 3. Compute `V := OV - V'` + +```go +func (pva PeriodicVestingAccount) GetVestedCoins(t Time) Coins { + if t < pva.StartTime { + return ZeroCoins + } + ct := pva.StartTime // The start of the vesting schedule + vested := 0 + periods = pva.GetPeriods() + for _, period := range periods { + if t - ct < period.Length { + break + } + vested += period.Amount + ct += period.Length // increment ct to the start of the next vesting period + } + return vested +} + +func (pva PeriodicVestingAccount) GetVestingCoins(t Time) Coins { + return pva.OriginalVesting - cva.GetVestedCoins(t) +} +``` + +#### Delayed/Discrete Vesting Accounts + +Delayed vesting accounts are easier to reason about as they only have the full amount vesting up until a certain time, then all the coins become vested (unlocked). This does not include any unlocked coins the account may have initially. + +```go +func (dva DelayedVestingAccount) GetVestedCoins(t Time) Coins { + if t >= dva.EndTime { + return dva.OriginalVesting + } + + return ZeroCoins +} + +func (dva DelayedVestingAccount) GetVestingCoins(t Time) Coins { + return dva.OriginalVesting - dva.GetVestedCoins(t) +} +``` + +### Transferring/Sending + +At any given time, a vesting account may transfer: `min((BC + DV) - V, BC)`. + +In other words, a vesting account may transfer the minimum of the base account balance and the base account balance plus the number of currently delegated vesting coins less the number of coins vested so far. + +However, given that account balances are tracked via the `x/bank` module and that we want to avoid loading the entire account balance, we can instead determine the locked balance, which can be defined as `max(V - DV, 0)`, and infer the spendable balance from that. + +```go +func (va VestingAccount) LockedCoins(t Time) Coins { + return max(va.GetVestingCoins(t) - va.DelegatedVesting, 0) +} +``` + +The `x/bank` `ViewKeeper` can then provide APIs to determine locked and spendable coins for any account: + +```go +func (k Keeper) LockedCoins(ctx Context, addr AccAddress) Coins { + acc := k.GetAccount(ctx, addr) + if acc != nil { + if acc.IsVesting() { + return acc.LockedCoins(ctx.BlockTime()) + } + } + + // non-vesting accounts do not have any locked coins + return NewCoins() +} +``` + +#### Keepers/Handlers + +The corresponding `x/bank` keeper should appropriately handle sending coins based on if the account is a vesting account or not. + +```go +func (k Keeper) SendCoins(ctx Context, from Account, to Account, amount Coins) { + bc := k.GetBalances(ctx, from) + v := k.LockedCoins(ctx, from) + + spendable := bc - v + newCoins := spendable - amount + assert(newCoins >= 0) + + from.SetBalance(newCoins) + to.AddBalance(amount) + + // save balances... +} +``` + +### Delegating + +For a vesting account attempting to delegate `D` coins, the following is performed: + +1. Verify `BC >= D > 0` +2. Compute `X := min(max(V - DV, 0), D)` (portion of `D` that is vesting) +3. Compute `Y := D - X` (portion of `D` that is free) +4. Set `DV += X` +5. Set `DF += Y` + +```go +func (va VestingAccount) TrackDelegation(t Time, balance Coins, amount Coins) { + assert(balance <= amount) + x := min(max(va.GetVestingCoins(t) - va.DelegatedVesting, 0), amount) + y := amount - x + + va.DelegatedVesting += x + va.DelegatedFree += y +} +``` + +**Note** `TrackDelegation` only modifies the `DelegatedVesting` and `DelegatedFree` fields, so upstream callers MUST modify the `Coins` field by subtracting `amount`. + +#### Keepers/Handlers + +```go +func DelegateCoins(t Time, from Account, amount Coins) { + if isVesting(from) { + from.TrackDelegation(t, amount) + } else { + from.SetBalance(sc - amount) + } + + // save account... +} +``` + +### Undelegating + +For a vesting account attempting to undelegate `D` coins, the following is performed: + +> NOTE: `DV < D` and `(DV + DF) < D` may be possible due to quirks in the rounding of delegation/undelegation logic. + +1. Verify `D > 0` +2. Compute `X := min(DF, D)` (portion of `D` that should become free, prioritizing free coins) +3. Compute `Y := min(DV, D - X)` (portion of `D` that should remain vesting) +4. Set `DF -= X` +5. Set `DV -= Y` + +```go +func (cva ContinuousVestingAccount) TrackUndelegation(amount Coins) { + x := min(cva.DelegatedFree, amount) + y := amount - x + + cva.DelegatedFree -= x + cva.DelegatedVesting -= y +} +``` + +**Note** `TrackUnDelegation` only modifies the `DelegatedVesting` and `DelegatedFree` fields, so upstream callers MUST modify the `Coins` field by adding `amount`. + +**Note**: If a delegation is slashed, the continuous vesting account ends up with an excess `DV` amount, even after all its coins have vested. This is because undelegating free coins are prioritized. + +**Note**: The undelegation (bond refund) amount may exceed the delegated vesting (bond) amount due to the way undelegation truncates the bond refund, which can increase the validator's exchange rate (tokens/shares) slightly if the undelegated tokens are non-integral. + +#### Keepers/Handlers + +```go +func UndelegateCoins(to Account, amount Coins) { + if isVesting(to) { + if to.DelegatedFree + to.DelegatedVesting >= amount { + to.TrackUndelegation(amount) + // save account ... + } + } else { + AddBalance(to, amount) + // save account... + } +} +``` + +## Keepers & Handlers + +The `VestingAccount` implementations reside in `x/auth`. However, any keeper in a module (e.g. staking in `x/staking`) wishing to potentially utilize any vesting coins, must call explicit methods on the `x/bank` keeper (e.g. `DelegateCoins`) opposed to `SendCoins` and `SubtractCoins`. + +In addition, the vesting account should also be able to spend any coins it receives from other users. Thus, the bank module's `MsgSend` handler should error if a vesting account is trying to send an amount that exceeds their unlocked coin amount. + +See the above specification for full implementation details. + +## Genesis Initialization + +To initialize both vesting and non-vesting accounts, the `GenesisAccount` struct includes new fields: `Vesting`, `StartTime`, and `EndTime`. Accounts meant to be of type `BaseAccount` or any non-vesting type have `Vesting = false`. The genesis initialization logic (e.g. `initFromGenesisState`) must parse and return the correct accounts accordingly based off of these fields. + +```go +type GenesisAccount struct { + // ... + + // vesting account fields + OriginalVesting sdk.Coins `json:"original_vesting"` + DelegatedFree sdk.Coins `json:"delegated_free"` + DelegatedVesting sdk.Coins `json:"delegated_vesting"` + StartTime int64 `json:"start_time"` + EndTime int64 `json:"end_time"` +} + +func ToAccount(gacc GenesisAccount) Account { + bacc := NewBaseAccount(gacc) + + if gacc.OriginalVesting > 0 { + if ga.StartTime != 0 && ga.EndTime != 0 { + // return a continuous vesting account + } else if ga.EndTime != 0 { + // return a delayed vesting account + } else { + // invalid genesis vesting account provided + panic() + } + } + + return bacc +} +``` + +## Examples + +### Simple + +Given a continuous vesting account with 10 vesting coins. + +```text +OV = 10 +DF = 0 +DV = 0 +BC = 10 +V = 10 +V' = 0 +``` + +1. Immediately receives 1 coin + + ```text + BC = 11 + ``` + +2. Time passes, 2 coins vest + + ```text + V = 8 + V' = 2 + ``` + +3. Delegates 4 coins to validator A + + ```text + DV = 4 + BC = 7 + ``` + +4. Sends 3 coins + + ```text + BC = 4 + ``` + +5. More time passes, 2 more coins vest + + ```text + V = 6 + V' = 4 + ``` + +6. Sends 2 coins. At this point the account cannot send anymore until further +coins vest or it receives additional coins. It can still however, delegate. + + ```text + BC = 2 + ``` + +### Slashing + +Same initial starting conditions as the simple example. + +1. Time passes, 5 coins vest + + ```text + V = 5 + V' = 5 + ``` + +2. Delegate 5 coins to validator A + + ```text + DV = 5 + BC = 5 + ``` + +3. Delegate 5 coins to validator B + + ```text + DF = 5 + BC = 0 + ``` + +4. Validator A gets slashed by 50%, making the delegation to A now worth 2.5 coins +5. Undelegate from validator A (2.5 coins) + + ```text + DF = 5 - 2.5 = 2.5 + BC = 0 + 2.5 = 2.5 + ``` + +6. Undelegate from validator B (5 coins). The account at this point can only +send 2.5 coins unless it receives more coins or until more coins vest. +It can still however, delegate. + + ```text + DV = 5 - 2.5 = 2.5 + DF = 2.5 - 2.5 = 0 + BC = 2.5 + 5 = 7.5 + ``` + + Notice how we have an excess amount of `DV`. + +### Periodic Vesting + +A vesting account is created where 100 tokens will be released over 1 year, with +1/4 of tokens vesting each quarter. The vesting schedule would be as follows: + +```yaml +Periods: +- amount: 25stake, length: 7884000 +- amount: 25stake, length: 7884000 +- amount: 25stake, length: 7884000 +- amount: 25stake, length: 7884000 +``` + +```text +OV = 100 +DF = 0 +DV = 0 +BC = 100 +V = 100 +V' = 0 +``` + +1. Immediately receives 1 coin + + ```text + BC = 101 + ``` + +2. Vesting period 1 passes, 25 coins vest + + ```text + V = 75 + V' = 25 + ``` + +3. During vesting period 2, 5 coins are transfered and 5 coins are delegated + + ```text + DV = 5 + BC = 91 + ``` + +4. Vesting period 2 passes, 25 coins vest + + ```text + V = 50 + V' = 50 + ``` + +## Glossary + +* OriginalVesting: The amount of coins (per denomination) that are initially +part of a vesting account. These coins are set at genesis. +* StartTime: The BFT time at which a vesting account starts to vest. +* EndTime: The BFT time at which a vesting account is fully vested. +* DelegatedFree: The tracked amount of coins (per denomination) that are +delegated from a vesting account that have been fully vested at time of delegation. +* DelegatedVesting: The tracked amount of coins (per denomination) that are +delegated from a vesting account that were vesting at time of delegation. +* ContinuousVestingAccount: A vesting account implementation that vests coins +linearly over time. +* DelayedVestingAccount: A vesting account implementation that only fully vests +all coins at a given time. +* PeriodicVestingAccount: A vesting account implementation that vests coins +according to a custom vesting schedule. +* PermanentLockedAccount: It does not ever release coins, locking them indefinitely. +Coins in this account can still be used for delegating and for governance votes even while locked. + + +## CLI + +A user can query and interact with the `vesting` module using the CLI. + +### Transactions + +The `tx` commands allow users to interact with the `vesting` module. + +```bash +simd tx vesting --help +``` + +#### create-periodic-vesting-account + +The `create-periodic-vesting-account` command creates a new vesting account funded with an allocation of tokens, where a sequence of coins and period length in seconds. Periods are sequential, in that the duration of of a period only starts at the end of the previous period. The duration of the first period starts upon account creation. + +```bash +simd tx vesting create-periodic-vesting-account [to_address] [periods_json_file] [flags] +``` + +Example: + +```bash +simd tx vesting create-periodic-vesting-account cosmos1.. periods.json +``` + +#### create-vesting-account + +The `create-vesting-account` command creates a new vesting account funded with an allocation of tokens. The account can either be a delayed or continuous vesting account, which is determined by the '--delayed' flag. All vesting accouts created will have their start time set by the committed block's time. The end_time must be provided as a UNIX epoch timestamp. + +```bash +simd tx vesting create-vesting-account [to_address] [amount] [end_time] [flags] +``` + +Example: + +```bash +simd tx vesting create-vesting-account cosmos1.. 100stake 2592000 +``` diff --git a/docs/integrate/modules/auth/2-tx.md b/docs/integrate/modules/auth/2-tx.md new file mode 100644 index 000000000..0460f69d8 --- /dev/null +++ b/docs/integrate/modules/auth/2-tx.md @@ -0,0 +1,266 @@ +--- +sidebar_position: 1 +--- + +# `x/auth/tx` + +:::note + +### Pre-requisite Readings + +* [Transactions](https://docs.cosmos.network/main/core/transactions#transaction-generation) +* [Encoding](https://docs.cosmos.network/main/core/encoding#transaction-encoding) + +::: + +## Abstract + +This document specifies the `x/auth/tx` package of the Cosmos SDK. + +This package represents the Cosmos SDK implementation of the `client.TxConfig`, `client.TxBuilder`, `client.TxEncoder` and `client.TxDecoder` interfaces. + +## Contents + +* [Transactions](#transactions) + * [`TxConfig`](#txconfig) + * [`TxBuilder`](#txbuilder) + * [`TxEncoder`/ `TxDecoder`](#txencoder-txdecoder) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + +## Transactions + +### `TxConfig` + +`client.TxConfig` defines an interface a client can utilize to generate an application-defined concrete transaction type. +The interface defines a set of methods for creating a `client.TxBuilder`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L25-L31 +``` + +The default implementation of `client.TxConfig` is instantiated by `NewTxConfig` in `x/auth/tx` module. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/config.go#L22-L28 +``` + +### `TxBuilder` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L50 +``` + +The [`client.TxBuilder`](https://docs.cosmos.network/main/core/transactions#transaction-generation) interface is as well implemented by `x/auth/tx`. +A `client.TxBuilder` can be accessed with `TxConfig.NewTxBuilder()`. + +### `TxEncoder`/ `TxDecoder` + +More information about `TxEncoder` and `TxDecoder` can be found [here](https://docs.cosmos.network/main/core/encoding#transaction-encoding). + +## Client + +### CLI + +#### Query + +The `x/auth/tx` module provides a CLI command to query any transaction, given its hash, transaction sequence or signature. + +Without any argument, the command will query the transaction using the transaction hash. + +```shell +simd query tx DFE87B78A630C0EFDF76C80CD24C997E252792E0317502AE1A02B9809F0D8685 +``` + +When querying a transaction from an account given its sequence, use the `--type=acc_seq` flag: + +```shell +simd query tx --type=acc_seq cosmos1u69uyr6v9qwe6zaaeaqly2h6wnedac0xpxq325/1 +``` + +When querying a transaction given its signature, use the `--type=signature` flag: + +```shell +simd query tx --type=signature Ofjvgrqi8twZfqVDmYIhqwRLQjZZ40XbxEamk/veH3gQpRF0hL2PH4ejRaDzAX+2WChnaWNQJQ41ekToIi5Wqw== +``` + +When querying a transaction given its events, use the `--type=events` flag: + +```shell +simd query txs --events 'message.sender=cosmos...' --page 1 --limit 30 +``` + +The `x/auth/block` module provides a CLI command to query any block, given its hash, height, or events. + +When querying a block by its hash, use the `--type=hash` flag: + +```shell +simd query block --type=hash DFE87B78A630C0EFDF76C80CD24C997E252792E0317502AE1A02B9809F0D8685 +``` + +When querying a block by its height, use the `--type=height` flag: + +```shell +simd query block --type=height 1357 +``` + +When querying a block by its events, use the `--query` flag: + +```shell +simd query blocks --query 'message.sender=cosmos...' --page 1 --limit 30 +``` + +#### Transactions + +The `x/auth/tx` module provides a convinient CLI command for decoding and encoding transactions. + +#### `encode` + +The `encode` command encodes a transaction created with the `--generate-only` flag or signed with the sign command. +The transaction is seralized it to Protobuf and returned as base64. + +```bash +$ simd tx encode tx.json +Co8BCowBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmwKLWNvc21vczFsNnZzcWhoN3Jud3N5cjJreXozampnM3FkdWF6OGd3Z3lsODI3NRItY29zbW9zMTU4c2FsZHlnOHBteHU3Znd2dDBkNng3amVzd3A0Z3d5a2xrNnkzGgwKBXN0YWtlEgMxMDASBhIEEMCaDA== +$ simd tx encode tx.signed.json +``` + +More information about the `encode` command can be found running `simd tx encode --help`. + +#### `decode` + +The `decode` commands decodes a transaction encoded with the `encode` command. + + +```bash +simd tx decode Co8BCowBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmwKLWNvc21vczFsNnZzcWhoN3Jud3N5cjJreXozampnM3FkdWF6OGd3Z3lsODI3NRItY29zbW9zMTU4c2FsZHlnOHBteHU3Znd2dDBkNng3amVzd3A0Z3d5a2xrNnkzGgwKBXN0YWtlEgMxMDASBhIEEMCaDA== +``` + +More information about the `decode` command can be found running `simd tx decode --help`. + +### gRPC + +A user can query the `x/auth/tx` module using gRPC endpoints. + +#### `TxDecode` + +The `TxDecode` endpoint allows to decode a transaction. + +```shell +cosmos.tx.v1beta1.Service/TxDecode +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"tx_bytes":"Co8BCowBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmwKLWNvc21vczFsNnZzcWhoN3Jud3N5cjJreXozampnM3FkdWF6OGd3Z3lsODI3NRItY29zbW9zMTU4c2FsZHlnOHBteHU3Znd2dDBkNng3amVzd3A0Z3d5a2xrNnkzGgwKBXN0YWtlEgMxMDASBhIEEMCaDA=="}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/TxDecode +``` + +Example Output: + +```json +{ + "tx": { + "body": { + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"100"}],"fromAddress":"cosmos1l6vsqhh7rnwsyr2kyz3jjg3qduaz8gwgyl8275","toAddress":"cosmos158saldyg8pmxu7fwvt0d6x7jeswp4gwyklk6y3"} + ] + }, + "authInfo": { + "fee": { + "gasLimit": "200000" + } + } + } +} +``` + +#### `TxEncode` + +The `TxEncode` endpoint allows to encode a transaction. + +```shell +cosmos.tx.v1beta1.Service/TxEncode +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"tx": { + "body": { + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"100"}],"fromAddress":"cosmos1l6vsqhh7rnwsyr2kyz3jjg3qduaz8gwgyl8275","toAddress":"cosmos158saldyg8pmxu7fwvt0d6x7jeswp4gwyklk6y3"} + ] + }, + "authInfo": { + "fee": { + "gasLimit": "200000" + } + } + }}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/TxEncode +``` + +Example Output: + +```json +{ + "txBytes": "Co8BCowBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmwKLWNvc21vczFsNnZzcWhoN3Jud3N5cjJreXozampnM3FkdWF6OGd3Z3lsODI3NRItY29zbW9zMTU4c2FsZHlnOHBteHU3Znd2dDBkNng3amVzd3A0Z3d5a2xrNnkzGgwKBXN0YWtlEgMxMDASBhIEEMCaDA==" +} +``` + +#### `TxDecodeAmino` + +The `TxDecode` endpoint allows to decode an amino transaction. + +```shell +cosmos.tx.v1beta1.Service/TxDecodeAmino +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"amino_binary": "KCgWqQpvqKNhmgotY29zbW9zMXRzeno3cDJ6Z2Q3dnZrYWh5ZnJlNHduNXh5dTgwcnB0ZzZ2OWg1Ei1jb3Ntb3MxdHN6ejdwMnpnZDd2dmthaHlmcmU0d241eHl1ODBycHRnNnY5aDUaCwoFc3Rha2USAjEwEhEKCwoFc3Rha2USAjEwEMCaDCIGZm9vYmFy"}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/TxDecodeAmino +``` + +Example Output: + +```json +{ + "aminoJson": "{\"type\":\"cosmos-sdk/StdTx\",\"value\":{\"msg\":[{\"type\":\"cosmos-sdk/MsgSend\",\"value\":{\"from_address\":\"cosmos1tszz7p2zgd7vvkahyfre4wn5xyu80rptg6v9h5\",\"to_address\":\"cosmos1tszz7p2zgd7vvkahyfre4wn5xyu80rptg6v9h5\",\"amount\":[{\"denom\":\"stake\",\"amount\":\"10\"}]}}],\"fee\":{\"amount\":[{\"denom\":\"stake\",\"amount\":\"10\"}],\"gas\":\"200000\"},\"signatures\":null,\"memo\":\"foobar\",\"timeout_height\":\"0\"}}" +} +``` + +#### `TxEncodeAmino` + +The `TxEncodeAmino` endpoint allows to encode an amino transaction. + +```shell +cosmos.tx.v1beta1.Service/TxEncodeAmino +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"amino_json":"{\"type\":\"cosmos-sdk/StdTx\",\"value\":{\"msg\":[{\"type\":\"cosmos-sdk/MsgSend\",\"value\":{\"from_address\":\"cosmos1tszz7p2zgd7vvkahyfre4wn5xyu80rptg6v9h5\",\"to_address\":\"cosmos1tszz7p2zgd7vvkahyfre4wn5xyu80rptg6v9h5\",\"amount\":[{\"denom\":\"stake\",\"amount\":\"10\"}]}}],\"fee\":{\"amount\":[{\"denom\":\"stake\",\"amount\":\"10\"}],\"gas\":\"200000\"},\"signatures\":null,\"memo\":\"foobar\",\"timeout_height\":\"0\"}}"}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/TxEncodeAmino +``` + +Example Output: + +```json +{ + "amino_binary": "KCgWqQpvqKNhmgotY29zbW9zMXRzeno3cDJ6Z2Q3dnZrYWh5ZnJlNHduNXh5dTgwcnB0ZzZ2OWg1Ei1jb3Ntb3MxdHN6ejdwMnpnZDd2dmthaHlmcmU0d241eHl1ODBycHRnNnY5aDUaCwoFc3Rha2USAjEwEhEKCwoFc3Rha2USAjEwEMCaDCIGZm9vYmFy" +} +``` diff --git a/docs/integrate/modules/auth/README.md b/docs/integrate/modules/auth/README.md new file mode 100644 index 000000000..0c6364bf7 --- /dev/null +++ b/docs/integrate/modules/auth/README.md @@ -0,0 +1,705 @@ +--- +sidebar_position: 1 +--- + +# `x/auth` + +## Abstract + +This document specifies the auth module of the Cosmos SDK. + +The auth module is responsible for specifying the base transaction and account types +for an application, since the SDK itself is agnostic to these particulars. It contains +the middlewares, where all basic transaction validity checks (signatures, nonces, auxiliary fields) +are performed, and exposes the account keeper, which allows other modules to read, write, and modify accounts. + +This module is used in the Cosmos Hub. + +## Contents + +* [Concepts](#concepts) + * [Gas & Fees](#gas--fees) +* [State](#state) + * [Accounts](#accounts) +* [AnteHandlers](#antehandlers) +* [Keepers](#keepers) + * [Account Keeper](#account-keeper) +* [Parameters](#parameters) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + * [REST](#rest) + +## Concepts + +**Note:** The auth module is different from the [authz module](../authz/README.md). + +The differences are: + +* `auth` - authentication of accounts and transactions for Cosmos SDK applications and is responsible for specifying the base transaction and account types. +* `authz` - authorization for accounts to perform actions on behalf of other accounts and enables a granter to grant authorizations to a grantee that allows the grantee to execute messages on behalf of the granter. + +### Gas & Fees + +Fees serve two purposes for an operator of the network. + +Fees limit the growth of the state stored by every full node and allow for +general purpose censorship of transactions of little economic value. Fees +are best suited as an anti-spam mechanism where validators are disinterested in +the use of the network and identities of users. + +Fees are determined by the gas limits and gas prices transactions provide, where +`fees = ceil(gasLimit * gasPrices)`. Txs incur gas costs for all state reads/writes, +signature verification, as well as costs proportional to the tx size. Operators +should set minimum gas prices when starting their nodes. They must set the unit +costs of gas in each token denomination they wish to support: + +`simd start ... --minimum-gas-prices=0.00001stake;0.05photinos` + +When adding transactions to mempool or gossipping transactions, validators check +if the transaction's gas prices, which are determined by the provided fees, meet +any of the validator's minimum gas prices. In other words, a transaction must +provide a fee of at least one denomination that matches a validator's minimum +gas price. + +CometBFT does not currently provide fee based mempool prioritization, and fee +based mempool filtering is local to node and not part of consensus. But with +minimum gas prices set, such a mechanism could be implemented by node operators. + +Because the market value for tokens will fluctuate, validators are expected to +dynamically adjust their minimum gas prices to a level that would encourage the +use of the network. + +## State + +### Accounts + +Accounts contain authentication information for a uniquely identified external user of an SDK blockchain, +including public key, address, and account number / sequence number for replay protection. For efficiency, +since account balances must also be fetched to pay fees, account structs also store the balance of a user +as `sdk.Coins`. + +Accounts are exposed externally as an interface, and stored internally as +either a base account or vesting account. Module clients wishing to add more +account types may do so. + +* `0x01 | Address -> ProtocolBuffer(account)` + +#### Account Interface + +The account interface exposes methods to read and write standard account information. +Note that all of these methods operate on an account struct conforming to the +interface - in order to write the account to the store, the account keeper will +need to be used. + +```go +// AccountI is an interface used to store coins at a given address within state. +// It presumes a notion of sequence numbers for replay protection, +// a notion of account numbers for replay protection for previously pruned accounts, +// and a pubkey for authentication purposes. +// +// Many complex conditions can be used in the concrete struct which implements AccountI. +type AccountI interface { + proto.Message + + GetAddress() sdk.AccAddress + SetAddress(sdk.AccAddress) error // errors if already set. + + GetPubKey() crypto.PubKey // can return nil. + SetPubKey(crypto.PubKey) error + + GetAccountNumber() uint64 + SetAccountNumber(uint64) error + + GetSequence() uint64 + SetSequence(uint64) error + + // Ensure that account implements stringer + String() string +} +``` + +##### Base Account + +A base account is the simplest and most common account type, which just stores all requisite +fields directly in a struct. + +```protobuf +// BaseAccount defines a base account type. It contains all the necessary fields +// for basic account functionality. Any custom account type should extend this +// type for additional functionality (e.g. vesting). +message BaseAccount { + string address = 1; + google.protobuf.Any pub_key = 2; + uint64 account_number = 3; + uint64 sequence = 4; +} +``` + +### Vesting Account + +See [Vesting](https://docs.cosmos.network/main/modules/auth/vesting/). + +## AnteHandlers + +The `x/auth` module presently has no transaction handlers of its own, but does expose the special `AnteHandler`, used for performing basic validity checks on a transaction, such that it could be thrown out of the mempool. +The `AnteHandler` can be seen as a set of decorators that check transactions within the current context, per [ADR 010](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-010-modular-antehandler.md). + +Note that the `AnteHandler` is called on both `CheckTx` and `DeliverTx`, as CometBFT proposers presently have the ability to include in their proposed block transactions which fail `CheckTx`. + +### Decorators + +The auth module provides `AnteDecorator`s that are recursively chained together into a single `AnteHandler` in the following order: + +* `SetUpContextDecorator`: Sets the `GasMeter` in the `Context` and wraps the next `AnteHandler` with a defer clause to recover from any downstream `OutOfGas` panics in the `AnteHandler` chain to return an error with information on gas provided and gas used. + +* `RejectExtensionOptionsDecorator`: Rejects all extension options which can optionally be included in protobuf transactions. + +* `MempoolFeeDecorator`: Checks if the `tx` fee is above local mempool `minFee` parameter during `CheckTx`. + +* `ValidateBasicDecorator`: Calls `tx.ValidateBasic` and returns any non-nil error. + +* `TxTimeoutHeightDecorator`: Check for a `tx` height timeout. + +* `ValidateMemoDecorator`: Validates `tx` memo with application parameters and returns any non-nil error. + +* `ConsumeGasTxSizeDecorator`: Consumes gas proportional to the `tx` size based on application parameters. + +* `DeductFeeDecorator`: Deducts the `FeeAmount` from first signer of the `tx`. If the `x/feegrant` module is enabled and a fee granter is set, it deducts fees from the fee granter account. + +* `SetPubKeyDecorator`: Sets the pubkey from a `tx`'s signers that does not already have its corresponding pubkey saved in the state machine and in the current context. + +* `ValidateSigCountDecorator`: Validates the number of signatures in `tx` based on app-parameters. + +* `SigGasConsumeDecorator`: Consumes parameter-defined amount of gas for each signature. This requires pubkeys to be set in context for all signers as part of `SetPubKeyDecorator`. + +* `SigVerificationDecorator`: Verifies all signatures are valid. This requires pubkeys to be set in context for all signers as part of `SetPubKeyDecorator`. + +* `IncrementSequenceDecorator`: Increments the account sequence for each signer to prevent replay attacks. + +## Keepers + +The auth module only exposes one keeper, the account keeper, which can be used to read and write accounts. + +### Account Keeper + +Presently only one fully-permissioned account keeper is exposed, which has the ability to both read and write +all fields of all accounts, and to iterate over all stored accounts. + +```go +// AccountKeeperI is the interface contract that x/auth's keeper implements. +type AccountKeeperI interface { + // Return a new account with the next account number and the specified address. Does not save the new account to the store. + NewAccountWithAddress(sdk.Context, sdk.AccAddress) types.AccountI + + // Return a new account with the next account number. Does not save the new account to the store. + NewAccount(sdk.Context, types.AccountI) types.AccountI + + // Check if an account exists in the store. + HasAccount(sdk.Context, sdk.AccAddress) bool + + // Retrieve an account from the store. + GetAccount(sdk.Context, sdk.AccAddress) types.AccountI + + // Set an account in the store. + SetAccount(sdk.Context, types.AccountI) + + // Remove an account from the store. + RemoveAccount(sdk.Context, types.AccountI) + + // Iterate over all accounts, calling the provided function. Stop iteration when it returns true. + IterateAccounts(sdk.Context, func(types.AccountI) bool) + + // Fetch the public key of an account at a specified address + GetPubKey(sdk.Context, sdk.AccAddress) (crypto.PubKey, error) + + // Fetch the sequence of an account at a specified address. + GetSequence(sdk.Context, sdk.AccAddress) (uint64, error) + + // Fetch the next account number, and increment the internal counter. + NextAccountNumber(sdk.Context) uint64 +} +``` + +## Parameters + +The auth module contains the following parameters: + +| Key | Type | Example | +| ---------------------- | --------------- | ------- | +| MaxMemoCharacters | uint64 | 256 | +| TxSigLimit | uint64 | 7 | +| TxSizeCostPerByte | uint64 | 10 | +| SigVerifyCostED25519 | uint64 | 590 | +| SigVerifyCostSecp256k1 | uint64 | 1000 | + +## Client + +### CLI + +A user can query and interact with the `auth` module using the CLI. + +### Query + +The `query` commands allow users to query `auth` state. + +```bash +simd query auth --help +``` + +#### account + +The `account` command allow users to query for an account by it's address. + +```bash +simd query auth account [address] [flags] +``` + +Example: + +```bash +simd query auth account cosmos1... +``` + +Example Output: + +```bash +'@type': /cosmos.auth.v1beta1.BaseAccount +account_number: "0" +address: cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2 +pub_key: + '@type': /cosmos.crypto.secp256k1.PubKey + key: ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD +sequence: "1" +``` + +#### accounts + +The `accounts` command allow users to query all the available accounts. + +```bash +simd query auth accounts [flags] +``` + +Example: + +```bash +simd query auth accounts +``` + +Example Output: + +```bash +accounts: +- '@type': /cosmos.auth.v1beta1.BaseAccount + account_number: "0" + address: cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2 + pub_key: + '@type': /cosmos.crypto.secp256k1.PubKey + key: ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD + sequence: "1" +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "8" + address: cosmos1yl6hdjhmkf37639730gffanpzndzdpmhwlkfhr + pub_key: null + sequence: "0" + name: transfer + permissions: + - minter + - burner +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "4" + address: cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh + pub_key: null + sequence: "0" + name: bonded_tokens_pool + permissions: + - burner + - staking +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "5" + address: cosmos1tygms3xhhs3yv487phx3dw4a95jn7t7lpm470r + pub_key: null + sequence: "0" + name: not_bonded_tokens_pool + permissions: + - burner + - staking +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "6" + address: cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn + pub_key: null + sequence: "0" + name: gov + permissions: + - burner +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "3" + address: cosmos1jv65s3grqf6v6jl3dp4t6c9t9rk99cd88lyufl + pub_key: null + sequence: "0" + name: distribution + permissions: [] +- '@type': /cosmos.auth.v1beta1.BaseAccount + account_number: "1" + address: cosmos147k3r7v2tvwqhcmaxcfql7j8rmkrlsemxshd3j + pub_key: null + sequence: "0" +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "7" + address: cosmos1m3h30wlvsf8llruxtpukdvsy0km2kum8g38c8q + pub_key: null + sequence: "0" + name: mint + permissions: + - minter +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "2" + address: cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta + pub_key: null + sequence: "0" + name: fee_collector + permissions: [] +pagination: + next_key: null + total: "0" +``` + +#### params + +The `params` command allow users to query the current auth parameters. + +```bash +simd query auth params [flags] +``` + +Example: + +```bash +simd query auth params +``` + +Example Output: + +```bash +max_memo_characters: "256" +sig_verify_cost_ed25519: "590" +sig_verify_cost_secp256k1: "1000" +tx_sig_limit: "7" +tx_size_cost_per_byte: "10" +``` + +### Transactions + +The `auth` module supports transactions commands to help you with signing and more. Compared to other modules you can access directly the `auth` module transactions commands using the only `tx` command. + +Use directly the `--help` flag to get more information about the `tx` command. + +```bash +simd tx --help +``` + +#### `sign` + +The `sign` command allows users to sign transactions that was generated offline. + +```bash +simd tx sign tx.json --from $ALICE > tx.signed.json +``` + +The result is a signed transaction that can be broadcasted to the network thanks to the broadcast command. + +More information about the `sign` command can be found running `simd tx sign --help`. + +#### `sign-batch` + +The `sign-batch` command allows users to sign multiples offline generated transactions. +The transactions can be in one file, with one tx per line, or in multiple files. + +```bash +simd tx sign txs.json --from $ALICE > tx.signed.json +``` + +or + +```bash +simd tx sign tx1.json tx2.json tx3.json --from $ALICE > tx.signed.json +``` + +The result is multiples signed transactions. For combining the signed transactions into one transactions, use the `--append` flag. + +More information about the `sign-batch` command can be found running `simd tx sign-batch --help`. + +#### `multi-sign` + +The `multi-sign` command allows users to sign transactions that was generated offline by a multisig account. + +```bash +simd tx multisign transaction.json k1k2k3 k1sig.json k2sig.json k3sig.json +``` + +Where `k1k2k3` is the multisig account address, `k1sig.json` is the signature of the first signer, `k2sig.json` is the signature of the second signer, and `k3sig.json` is the signature of the third signer. + +More information about the `multi-sign` command can be found running `simd tx multi-sign --help`. + +#### `multisign-batch` + +The `multisign-batch` works the same way as `sign-batch`, but for multisig accounts. +With the difference that the `multisign-batch` command requires all transactions to be in one file, and the `--append` flag does not exist. + +More information about the `multisign-batch` command can be found running `simd tx multisign-batch --help`. + +#### `validate-signatures` + +The `validate-signatures` command allows users to validate the signatures of a signed transaction. + +```bash +$ simd tx validate-signatures tx.signed.json +Signers: + 0: cosmos1l6vsqhh7rnwsyr2kyz3jjg3qduaz8gwgyl8275 + +Signatures: + 0: cosmos1l6vsqhh7rnwsyr2kyz3jjg3qduaz8gwgyl8275 [OK] +``` + +More information about the `validate-signatures` command can be found running `simd tx validate-signatures --help`. + +#### `broadcast` + +The `broadcast` command allows users to broadcast a signed transaction to the network. + +```bash +simd tx broadcast tx.signed.json +``` + +More information about the `broadcast` command can be found running `simd tx broadcast --help`. + +#### `aux-to-fee` + +The `aux-to-fee` comamnds includes the aux signer data in the tx, broadcast the tx, and sends the tip amount to the broadcaster. +[Learn more about tip transaction](https://docs.cosmos.network/main/core/tips). + +```bash +# simd tx bank send --aux (optional: --tip --tipper ) +simd tx aux-to-fee tx.aux.signed.json +``` + +More information about the `aux-to-fee` command can be found running `simd tx aux-to-fee --help`. + +### gRPC + +A user can query the `auth` module using gRPC endpoints. + +#### Account + +The `account` endpoint allow users to query for an account by it's address. + +```bash +cosmos.auth.v1beta1.Query/Account +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.auth.v1beta1.Query/Account +``` + +Example Output: + +```bash +{ + "account":{ + "@type":"/cosmos.auth.v1beta1.BaseAccount", + "address":"cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2", + "pubKey":{ + "@type":"/cosmos.crypto.secp256k1.PubKey", + "key":"ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD" + }, + "sequence":"1" + } +} +``` + +#### Accounts + +The `accounts` endpoint allow users to query all the available accounts. + +```bash +cosmos.auth.v1beta1.Query/Accounts +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.auth.v1beta1.Query/Accounts +``` + +Example Output: + +```bash +{ + "accounts":[ + { + "@type":"/cosmos.auth.v1beta1.BaseAccount", + "address":"cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2", + "pubKey":{ + "@type":"/cosmos.crypto.secp256k1.PubKey", + "key":"ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD" + }, + "sequence":"1" + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1yl6hdjhmkf37639730gffanpzndzdpmhwlkfhr", + "accountNumber":"8" + }, + "name":"transfer", + "permissions":[ + "minter", + "burner" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh", + "accountNumber":"4" + }, + "name":"bonded_tokens_pool", + "permissions":[ + "burner", + "staking" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1tygms3xhhs3yv487phx3dw4a95jn7t7lpm470r", + "accountNumber":"5" + }, + "name":"not_bonded_tokens_pool", + "permissions":[ + "burner", + "staking" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + "accountNumber":"6" + }, + "name":"gov", + "permissions":[ + "burner" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1jv65s3grqf6v6jl3dp4t6c9t9rk99cd88lyufl", + "accountNumber":"3" + }, + "name":"distribution" + }, + { + "@type":"/cosmos.auth.v1beta1.BaseAccount", + "accountNumber":"1", + "address":"cosmos147k3r7v2tvwqhcmaxcfql7j8rmkrlsemxshd3j" + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1m3h30wlvsf8llruxtpukdvsy0km2kum8g38c8q", + "accountNumber":"7" + }, + "name":"mint", + "permissions":[ + "minter" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta", + "accountNumber":"2" + }, + "name":"fee_collector" + } + ], + "pagination":{ + "total":"9" + } +} +``` + +#### Params + +The `params` endpoint allow users to query the current auth parameters. + +```bash +cosmos.auth.v1beta1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.auth.v1beta1.Query/Params +``` + +Example Output: + +```bash +{ + "params": { + "maxMemoCharacters": "256", + "txSigLimit": "7", + "txSizeCostPerByte": "10", + "sigVerifyCostEd25519": "590", + "sigVerifyCostSecp256k1": "1000" + } +} +``` + +### REST + +A user can query the `auth` module using REST endpoints. + +#### Account + +The `account` endpoint allow users to query for an account by it's address. + +```bash +/cosmos/auth/v1beta1/account?address={address} +``` + +#### Accounts + +The `accounts` endpoint allow users to query all the available accounts. + +```bash +/cosmos/auth/v1beta1/accounts +``` + +#### Params + +The `params` endpoint allow users to query the current auth parameters. + +```bash +/cosmos/auth/v1beta1/params +``` diff --git a/docs/integrate/modules/authz/README.md b/docs/integrate/modules/authz/README.md new file mode 100644 index 000000000..a641693df --- /dev/null +++ b/docs/integrate/modules/authz/README.md @@ -0,0 +1,355 @@ +--- +sidebar_position: 1 +--- + +# `x/authz` + +## Abstract + +`x/authz` is an implementation of a Cosmos SDK module, per [ADR 30](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-030-authz-module.md), that allows +granting arbitrary privileges from one account (the granter) to another account (the grantee). Authorizations must be granted for a particular Msg service method one by one using an implementation of the `Authorization` interface. + +## Contents + +* [Concepts](#concepts) + * [Authorization and Grant](#authorization-and-grant) + * [Built-in Authorizations](#built-in-authorizations) + * [Gas](#gas) +* [State](#state) + * [Grant](#grant) + * [GrantQueue](#grantqueue) +* [Messages](#messages) + * [MsgGrant](#msggrant) + * [MsgRevoke](#msgrevoke) + * [MsgExec](#msgexec) +* [Events](#events) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + * [REST](#rest) + +## Concepts + +### Authorization and Grant + +The `x/authz` module defines interfaces and messages grant authorizations to perform actions +on behalf of one account to other accounts. The design is defined in the [ADR 030](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-030-authz-module.md). + +A *grant* is an allowance to execute a Msg by the grantee on behalf of the granter. +Authorization is an interface that must be implemented by a concrete authorization logic to validate and execute grants. Authorizations are extensible and can be defined for any Msg service method even outside of the module where the Msg method is defined. See the `SendAuthorization` example in the next section for more details. + +**Note:** The authz module is different from the [auth (authentication)](../auth/README.md) module that is responsible for specifying the base transaction and account types. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/authz/authorizations.go#L11-L25 +``` + +### Built-in Authorizations + +The Cosmos SDK `x/authz` module comes with following authorization types: + +#### GenericAuthorization + +`GenericAuthorization` implements the `Authorization` interface that gives unrestricted permission to execute the provided Msg on behalf of granter's account. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/authz/v1beta1/authz.proto#L14-L22 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/authz/generic_authorization.go#L16-L29 +``` + +* `msg` stores Msg type URL. + +#### SendAuthorization + +`SendAuthorization` implements the `Authorization` interface for the `cosmos.bank.v1beta1.MsgSend` Msg. + +* It takes a (positive) `SpendLimit` that specifies the maximum amount of tokens the grantee can spend. The `SpendLimit` is updated as the tokens are spent. +* It takes an (optional) `AllowList` that specifies to which addresses a grantee can send token. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/authz.proto#L11-L30 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/types/send_authorization.go#L29-L62 +``` + +* `spend_limit` keeps track of how many coins are left in the authorization. +* `allow_list` specifies an optional list of addresses to whom the grantee can send tokens on behalf of the granter. + +#### StakeAuthorization + +`StakeAuthorization` implements the `Authorization` interface for messages in the [staking module](../staking/README.md). It takes an `AuthorizationType` to specify whether you want to authorise delegating, undelegating or redelegating (i.e. these have to be authorised seperately). It also takes a required `MaxTokens` that keeps track of a limit to the amount of tokens that can be delegated/undelegated/redelegated. If left empty, the amount is unlimited. Additionally, this Msg takes an `AllowList` or a `DenyList`, which allows you to select which validators you allow or deny grantees to stake with. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/authz.proto#L11-L35 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/types/authz.go#L15-L35 +``` + +### Gas + +In order to prevent DoS attacks, granting `StakeAuthorization`s with `x/authz` incurs gas. `StakeAuthorization` allows you to authorize another account to delegate, undelegate, or redelegate to validators. The authorizer can define a list of validators they allow or deny delegations to. The Cosmos SDK iterates over these lists and charge 10 gas for each validator in both of the lists. + +Since the state maintaining a list for granter, grantee pair with same expiration, we are iterating over the list to remove the grant (incase of any revoke of paritcular `msgType`) from the list and we are charging 20 gas per iteration. + +## State + +### Grant + +Grants are identified by combining granter address (the address bytes of the granter), grantee address (the address bytes of the grantee) and Authorization type (its type URL). Hence we only allow one grant for the (granter, grantee, Authorization) triple. + +* Grant: `0x01 | granter_address_len (1 byte) | granter_address_bytes | grantee_address_len (1 byte) | grantee_address_bytes | msgType_bytes -> ProtocolBuffer(AuthorizationGrant)` + +The grant object encapsulates an `Authorization` type and an expiration timestamp: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/authz/v1beta1/authz.proto#L24-L32 +``` + +### GrantQueue + +We are maintaining a queue for authz pruning. Whenever a grant is created, an item will be added to `GrantQueue` with a key of expiration, granter, grantee. + +In `EndBlock` (which runs for every block) we continuously check and prune the expired grants by forming a prefix key with current blocktime that passed the stored expiration in `GrantQueue`, we iterate through all the matched records from `GrantQueue` and delete them from the `GrantQueue` & `Grant`s store. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/5f4ddc6f80f9707320eec42182184207fff3833a/x/authz/keeper/keeper.go#L378-L403 +``` + +* GrantQueue: `0x02 | expiration_bytes | granter_address_len (1 byte) | granter_address_bytes | grantee_address_len (1 byte) | grantee_address_bytes -> ProtocalBuffer(GrantQueueItem)` + +The `expiration_bytes` are the expiration date in UTC with the format `"2006-01-02T15:04:05.000000000"`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/authz/keeper/keys.go#L77-L93 +``` + +The `GrantQueueItem` object contains the list of type urls between granter and grantee that expire at the time indicated in the key. + +## Messages + +In this section we describe the processing of messages for the authz module. + +### MsgGrant + +An authorization grant is created using the `MsgGrant` message. +If there is already a grant for the `(granter, grantee, Authorization)` triple, then the new grant overwrites the previous one. To update or extend an existing grant, a new grant with the same `(granter, grantee, Authorization)` triple should be created. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/authz/v1beta1/tx.proto#L35-L45 +``` + +The message handling should fail if: + +* both granter and grantee have the same address. +* provided `Expiration` time is less than current unix timestamp (but a grant will be created if no `expiration` time is provided since `expiration` is optional). +* provided `Grant.Authorization` is not implemented. +* `Authorization.MsgTypeURL()` is not defined in the router (there is no defined handler in the app router to handle that Msg types). + +### MsgRevoke + +A grant can be removed with the `MsgRevoke` message. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/authz/v1beta1/tx.proto#L69-L78 +``` + +The message handling should fail if: + +* both granter and grantee have the same address. +* provided `MsgTypeUrl` is empty. + +NOTE: The `MsgExec` message removes a grant if the grant has expired. + +### MsgExec + +When a grantee wants to execute a transaction on behalf of a granter, they must send `MsgExec`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/authz/v1beta1/tx.proto#L52-L63 +``` + +The message handling should fail if: + +* provided `Authorization` is not implemented. +* grantee doesn't have permission to run the transaction. +* if granted authorization is expired. + +## Events + +The authz module emits proto events defined in [the Protobuf reference](https://buf.build/cosmos/cosmos-sdk/docs/main/cosmos.authz.v1beta1#cosmos.authz.v1beta1.EventGrant). + +## Client + +### CLI + +A user can query and interact with the `authz` module using the CLI. + +#### Query + +The `query` commands allow users to query `authz` state. + +```bash +simd query authz --help +``` + +##### grants + +The `grants` command allows users to query grants for a granter-grantee pair. If the message type URL is set, it selects grants only for that message type. + +```bash +simd query authz grants [granter-addr] [grantee-addr] [msg-type-url]? [flags] +``` + +Example: + +```bash +simd query authz grants cosmos1.. cosmos1.. /cosmos.bank.v1beta1.MsgSend +``` + +Example Output: + +```bash +grants: +- authorization: + '@type': /cosmos.bank.v1beta1.SendAuthorization + spend_limit: + - amount: "100" + denom: stake + expiration: "2022-01-01T00:00:00Z" +pagination: null +``` + +#### Transactions + +The `tx` commands allow users to interact with the `authz` module. + +```bash +simd tx authz --help +``` + +##### exec + +The `exec` command allows a grantee to execute a transaction on behalf of granter. + +```bash + simd tx authz exec [tx-json-file] --from [grantee] [flags] +``` + +Example: + +```bash +simd tx authz exec tx.json --from=cosmos1.. +``` + +##### grant + +The `grant` command allows a granter to grant an authorization to a grantee. + +```bash +simd tx authz grant --from [flags] +``` + +Example: + +```bash +simd tx authz grant cosmos1.. send --spend-limit=100stake --from=cosmos1.. +``` + +##### revoke + +The `revoke` command allows a granter to revoke an authorization from a grantee. + +```bash +simd tx authz revoke [grantee] [msg-type-url] --from=[granter] [flags] +``` + +Example: + +```bash +simd tx authz revoke cosmos1.. /cosmos.bank.v1beta1.MsgSend --from=cosmos1.. +``` + +### gRPC + +A user can query the `authz` module using gRPC endpoints. + +#### Grants + +The `Grants` endpoint allows users to query grants for a granter-grantee pair. If the message type URL is set, it selects grants only for that message type. + +```bash +cosmos.authz.v1beta1.Query/Grants +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"granter":"cosmos1..","grantee":"cosmos1..","msg_type_url":"/cosmos.bank.v1beta1.MsgSend"}' \ + localhost:9090 \ + cosmos.authz.v1beta1.Query/Grants +``` + +Example Output: + +```bash +{ + "grants": [ + { + "authorization": { + "@type": "/cosmos.bank.v1beta1.SendAuthorization", + "spendLimit": [ + { + "denom":"stake", + "amount":"100" + } + ] + }, + "expiration": "2022-01-01T00:00:00Z" + } + ] +} +``` + +### REST + +A user can query the `authz` module using REST endpoints. + +```bash +/cosmos/authz/v1beta1/grants +``` + +Example: + +```bash +curl "localhost:1317/cosmos/authz/v1beta1/grants?granter=cosmos1..&grantee=cosmos1..&msg_type_url=/cosmos.bank.v1beta1.MsgSend" +``` + +Example Output: + +```bash +{ + "grants": [ + { + "authorization": { + "@type": "/cosmos.bank.v1beta1.SendAuthorization", + "spend_limit": [ + { + "denom": "stake", + "amount": "100" + } + ] + }, + "expiration": "2022-01-01T00:00:00Z" + } + ], + "pagination": null +} +``` diff --git a/docs/integrate/modules/bank/README.md b/docs/integrate/modules/bank/README.md new file mode 100644 index 000000000..340822aa3 --- /dev/null +++ b/docs/integrate/modules/bank/README.md @@ -0,0 +1,950 @@ +--- +sidebar_position: 1 +--- + +# `x/bank` + +## Abstract + +This document specifies the bank module of the Cosmos SDK. + +The bank module is responsible for handling multi-asset coin transfers between +accounts and tracking special-case pseudo-transfers which must work differently +with particular kinds of accounts (notably delegating/undelegating for vesting +accounts). It exposes several interfaces with varying capabilities for secure +interaction with other modules which must alter user balances. + +In addition, the bank module tracks and provides query support for the total +supply of all assets used in the application. + +This module is used in the Cosmos Hub. + +## Contents + +* [Supply](#supply) + * [Total Supply](#total-supply) +* [Module Accounts](#module-accounts) + * [Permissions](#permissions) +* [State](#state) +* [Params](#params) +* [Keepers](#keepers) +* [Messages](#messages) +* [Events](#events) + * [Message Events](#message-events) + * [Keeper Events](#keeper-events) +* [Parameters](#parameters) + * [SendEnabled](#sendenabled) + * [DefaultSendEnabled](#defaultsendenabled) +* [Client](#client) + * [CLI](#cli) + * [Query](#query) + * [Transactions](#transactions) +* [gRPC](#grpc) + +## Supply + +The `supply` functionality: + +* passively tracks the total supply of coins within a chain, +* provides a pattern for modules to hold/interact with `Coins`, and +* introduces the invariant check to verify a chain's total supply. + +### Total Supply + +The total `Supply` of the network is equal to the sum of all coins from the +account. The total supply is updated every time a `Coin` is minted (eg: as part +of the inflation mechanism) or burned (eg: due to slashing or if a governance +proposal is vetoed). + +## Module Accounts + +The supply functionality introduces a new type of `auth.Account` which can be used by +modules to allocate tokens and in special cases mint or burn tokens. At a base +level these module accounts are capable of sending/receiving tokens to and from +`auth.Account`s and other module accounts. This design replaces previous +alternative designs where, to hold tokens, modules would burn the incoming +tokens from the sender account, and then track those tokens internally. Later, +in order to send tokens, the module would need to effectively mint tokens +within a destination account. The new design removes duplicate logic between +modules to perform this accounting. + +The `ModuleAccount` interface is defined as follows: + +```go +type ModuleAccount interface { + auth.Account // same methods as the Account interface + + GetName() string // name of the module; used to obtain the address + GetPermissions() []string // permissions of module account + HasPermission(string) bool +} +``` + +> **WARNING!** +> Any module or message handler that allows either direct or indirect sending of funds must explicitly guarantee those funds cannot be sent to module accounts (unless allowed). + +The supply `Keeper` also introduces new wrapper functions for the auth `Keeper` +and the bank `Keeper` that are related to `ModuleAccount`s in order to be able +to: + +* Get and set `ModuleAccount`s by providing the `Name`. +* Send coins from and to other `ModuleAccount`s or standard `Account`s + (`BaseAccount` or `VestingAccount`) by passing only the `Name`. +* `Mint` or `Burn` coins for a `ModuleAccount` (restricted to its permissions). + +### Permissions + +Each `ModuleAccount` has a different set of permissions that provide different +object capabilities to perform certain actions. Permissions need to be +registered upon the creation of the supply `Keeper` so that every time a +`ModuleAccount` calls the allowed functions, the `Keeper` can lookup the +permissions to that specific account and perform or not perform the action. + +The available permissions are: + +* `Minter`: allows for a module to mint a specific amount of coins. +* `Burner`: allows for a module to burn a specific amount of coins. +* `Staking`: allows for a module to delegate and undelegate a specific amount of coins. + +## State + +The `x/bank` module keeps state of the following primary objects: + +1. Account balances +2. Denomination metadata +3. The total supply of all balances +4. Information on which denominations are allowed to be sent. + +In addition, the `x/bank` module keeps the following indexes to manage the +aforementioned state: + +* Supply Index: `0x0 | byte(denom) -> byte(amount)` +* Denom Metadata Index: `0x1 | byte(denom) -> ProtocolBuffer(Metadata)` +* Balances Index: `0x2 | byte(address length) | []byte(address) | []byte(balance.Denom) -> ProtocolBuffer(balance)` +* Reverse Denomination to Address Index: `0x03 | byte(denom) | 0x00 | []byte(address) -> 0` + +## Params + +The bank module stores it's params in state with the prefix of `0x05`, +it can be updated with governance or the address with authority. + +* Params: `0x05 | ProtocolBuffer(Params)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/bank.proto#L12-L23 +``` + +## Keepers + +The bank module provides these exported keeper interfaces that can be +passed to other modules that read or update account balances. Modules +should use the least-permissive interface that provides the functionality they +require. + +Best practices dictate careful review of `bank` module code to ensure that +permissions are limited in the way that you expect. + +### Denied Addresses + +The `x/bank` module accepts a map of addresses that are considered blocklisted +from directly and explicitly receiving funds through means such as `MsgSend` and +`MsgMultiSend` and direct API calls like `SendCoinsFromModuleToAccount`. + +Typically, these addresses are module accounts. If these addresses receive funds +outside the expected rules of the state machine, invariants are likely to be +broken and could result in a halted network. + +By providing the `x/bank` module with a blocklisted set of addresses, an error occurs for the operation if a user or client attempts to directly or indirectly send funds to a blocklisted account, for example, by using [IBC](https://ibc.cosmos.network). + +### Common Types + +#### Input + +An input of a multiparty transfer + +```protobuf +// Input models transaction input. +message Input { + string address = 1; + repeated cosmos.base.v1beta1.Coin coins = 2; +} +``` + +#### Output + +An output of a multiparty transfer. + +```protobuf +// Output models transaction outputs. +message Output { + string address = 1; + repeated cosmos.base.v1beta1.Coin coins = 2; +} +``` + +### BaseKeeper + +The base keeper provides full-permission access: the ability to arbitrary modify any account's balance and mint or burn coins. + +Restricted permission to mint per module could be achieved by using baseKeeper with `WithMintCoinsRestriction` to give specific restrictions to mint (e.g. only minting certain denom). + +```go +// Keeper defines a module interface that facilitates the transfer of coins +// between accounts. +type Keeper interface { + SendKeeper + WithMintCoinsRestriction(MintingRestrictionFn) BaseKeeper + + InitGenesis(context.Context, *types.GenesisState) + ExportGenesis(context.Context) *types.GenesisState + + GetSupply(ctx context.Context, denom string) sdk.Coin + HasSupply(ctx context.Context, denom string) bool + GetPaginatedTotalSupply(ctx context.Context, pagination *query.PageRequest) (sdk.Coins, *query.PageResponse, error) + IterateTotalSupply(ctx context.Context, cb func(sdk.Coin) bool) + GetDenomMetaData(ctx context.Context, denom string) (types.Metadata, bool) + HasDenomMetaData(ctx context.Context, denom string) bool + SetDenomMetaData(ctx context.Context, denomMetaData types.Metadata) + IterateAllDenomMetaData(ctx context.Context, cb func(types.Metadata) bool) + + SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromModuleToModule(ctx context.Context, senderModule, recipientModule string, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + DelegateCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + UndelegateCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + MintCoins(ctx context.Context, moduleName string, amt sdk.Coins) error + BurnCoins(ctx context.Context, moduleName string, amt sdk.Coins) error + + DelegateCoins(ctx context.Context, delegatorAddr, moduleAccAddr sdk.AccAddress, amt sdk.Coins) error + UndelegateCoins(ctx context.Context, moduleAccAddr, delegatorAddr sdk.AccAddress, amt sdk.Coins) error + + // GetAuthority gets the address capable of executing governance proposal messages. Usually the gov module account. + GetAuthority() string + + types.QueryServer +} +``` + +### SendKeeper + +The send keeper provides access to account balances and the ability to transfer coins between +accounts. The send keeper does not alter the total supply (mint or burn coins). + +```go +// SendKeeper defines a module interface that facilitates the transfer of coins +// between accounts without the possibility of creating coins. +type SendKeeper interface { + ViewKeeper + + InputOutputCoins(ctx context.Context, inputs types.Input, outputs []types.Output) error + SendCoins(ctx context.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error + + GetParams(ctx context.Context) types.Params + SetParams(ctx context.Context, params types.Params) error + + IsSendEnabledDenom(ctx context.Context, denom string) bool + SetSendEnabled(ctx context.Context, denom string, value bool) + SetAllSendEnabled(ctx context.Context, sendEnableds []*types.SendEnabled) + DeleteSendEnabled(ctx context.Context, denom string) + IterateSendEnabledEntries(ctx context.Context, cb func(denom string, sendEnabled bool) (stop bool)) + GetAllSendEnabledEntries(ctx context.Context) []types.SendEnabled + + IsSendEnabledCoin(ctx context.Context, coin sdk.Coin) bool + IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coin) error + + BlockedAddr(addr sdk.AccAddress) bool +} +``` + +### ViewKeeper + +The view keeper provides read-only access to account balances. The view keeper does not have balance alteration functionality. All balance lookups are `O(1)`. + +```go +// ViewKeeper defines a module interface that facilitates read only access to +// account balances. +type ViewKeeper interface { + 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) []types.Balance + GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin + LockedCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + SpendableCoin(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin + + 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)) +} +``` + +## Messages + +### MsgSend + +Send coins from one address to another. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L38-L53 +``` + +The message will fail under the following conditions: + +* The coins do not have sending enabled +* The `to` address is restricted + +### MsgMultiSend + +Send coins from one sender and to a series of different address. If any of the receiving addresses do not correspond to an existing account, a new account is created. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L58-L69 +``` + +The message will fail under the following conditions: + +* Any of the coins do not have sending enabled +* Any of the `to` addresses are restricted +* Any of the coins are locked +* The inputs and outputs do not correctly correspond to one another + +### MsgUpdateParams + +The `bank` module params can be updated through `MsgUpdateParams`, which can be done using governance proposal. The signer will always be the `gov` module account address. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L74-L88 +``` + +The message handling can fail if: + +* signer is not the gov module account address. + +### MsgSetSendEnabled + +Used with the x/gov module to set create/edit SendEnabled entries. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L96-L117 +``` + +The message will fail under the following conditions: + +* The authority is not a bech32 address. +* The authority is not x/gov module's address. +* There are multiple SendEnabled entries with the same Denom. +* One or more SendEnabled entries has an invalid Denom. + +## Events + +The bank module emits the following events: + +### Message Events + +#### MsgSend + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | ------------------ | +| transfer | recipient | {recipientAddress} | +| transfer | amount | {amount} | +| message | module | bank | +| message | action | send | +| message | sender | {senderAddress} | + +#### MsgMultiSend + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | ------------------ | +| transfer | recipient | {recipientAddress} | +| transfer | amount | {amount} | +| message | module | bank | +| message | action | multisend | +| message | sender | {senderAddress} | + +### Keeper Events + +In addition to message events, the bank keeper will produce events when the following methods are called (or any method which ends up calling them) + +#### MintCoins + +```json +{ + "type": "coinbase", + "attributes": [ + { + "key": "minter", + "value": "{{sdk.AccAddress of the module minting coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being minted}}", + "index": true + } + ] +} +``` + +```json +{ + "type": "coin_received", + "attributes": [ + { + "key": "receiver", + "value": "{{sdk.AccAddress of the module minting coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being received}}", + "index": true + } + ] +} +``` + +#### BurnCoins + +```json +{ + "type": "burn", + "attributes": [ + { + "key": "burner", + "value": "{{sdk.AccAddress of the module burning coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being burned}}", + "index": true + } + ] +} +``` + +```json +{ + "type": "coin_spent", + "attributes": [ + { + "key": "spender", + "value": "{{sdk.AccAddress of the module burning coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being burned}}", + "index": true + } + ] +} +``` + +#### addCoins + +```json +{ + "type": "coin_received", + "attributes": [ + { + "key": "receiver", + "value": "{{sdk.AccAddress of the address beneficiary of the coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being received}}", + "index": true + } + ] +} +``` + +#### subUnlockedCoins/DelegateCoins + +```json +{ + "type": "coin_spent", + "attributes": [ + { + "key": "spender", + "value": "{{sdk.AccAddress of the address which is spending coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being spent}}", + "index": true + } + ] +} +``` + +## Parameters + +The bank module contains the following parameters + +### SendEnabled + +The SendEnabled parameter is now deprecated and not to be use. It is replaced +with state store records. + + +### DefaultSendEnabled + +The default send enabled value controls send transfer capability for all +coin denominations unless specifically included in the array of `SendEnabled` +parameters. + +## Client + +### CLI + +A user can query and interact with the `bank` module using the CLI. + +#### Query + +The `query` commands allow users to query `bank` state. + +```shell +simd query bank --help +``` + +##### balances + +The `balances` command allows users to query account balances by address. + +```shell +simd query bank balances [address] [flags] +``` + +Example: + +```shell +simd query bank balances cosmos1.. +``` + +Example Output: + +```yml +balances: +- amount: "1000000000" + denom: stake +pagination: + next_key: null + total: "0" +``` + +##### denom-metadata + +The `denom-metadata` command allows users to query metadata for coin denominations. A user can query metadata for a single denomination using the `--denom` flag or all denominations without it. + +```shell +simd query bank denom-metadata [flags] +``` + +Example: + +```shell +simd query bank denom-metadata --denom stake +``` + +Example Output: + +```yml +metadata: + base: stake + denom_units: + - aliases: + - STAKE + denom: stake + description: native staking token of simulation app + display: stake + name: SimApp Token + symbol: STK +``` + +##### total + +The `total` command allows users to query the total supply of coins. A user can query the total supply for a single coin using the `--denom` flag or all coins without it. + +```shell +simd query bank total [flags] +``` + +Example: + +```shell +simd query bank total --denom stake +``` + +Example Output: + +```yml +amount: "10000000000" +denom: stake +``` + +##### send-enabled + +The `send-enabled` command allows users to query for all or some SendEnabled entries. + +```shell +simd query bank send-enabled [denom1 ...] [flags] +``` + +Example: + +```shell +simd query bank send-enabled +``` + +Example output: + +```yml +send_enabled: +- denom: foocoin + enabled: true +- denom: barcoin +pagination: + next-key: null + total: 2 +``` + +#### Transactions + +The `tx` commands allow users to interact with the `bank` module. + +```shell +simd tx bank --help +``` + +##### send + +The `send` command allows users to send funds from one account to another. + +```shell +simd tx bank send [from_key_or_address] [to_address] [amount] [flags] +``` + +Example: + +```shell +simd tx bank send cosmos1.. cosmos1.. 100stake +``` + +## gRPC + +A user can query the `bank` module using gRPC endpoints. + +### Balance + +The `Balance` endpoint allows users to query account balance by address for a given denomination. + +```shell +cosmos.bank.v1beta1.Query/Balance +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"address":"cosmos1..","denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/Balance +``` + +Example Output: + +```json +{ + "balance": { + "denom": "stake", + "amount": "1000000000" + } +} +``` + +### AllBalances + +The `AllBalances` endpoint allows users to query account balance by address for all denominations. + +```shell +cosmos.bank.v1beta1.Query/AllBalances +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +Example Output: + +```json +{ + "balances": [ + { + "denom": "stake", + "amount": "1000000000" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### DenomMetadata + +The `DenomMetadata` endpoint allows users to query metadata for a single coin denomination. + +```shell +cosmos.bank.v1beta1.Query/DenomMetadata +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/DenomMetadata +``` + +Example Output: + +```json +{ + "metadata": { + "description": "native staking token of simulation app", + "denomUnits": [ + { + "denom": "stake", + "aliases": [ + "STAKE" + ] + } + ], + "base": "stake", + "display": "stake", + "name": "SimApp Token", + "symbol": "STK" + } +} +``` + +### DenomsMetadata + +The `DenomsMetadata` endpoint allows users to query metadata for all coin denominations. + +```shell +cosmos.bank.v1beta1.Query/DenomsMetadata +``` + +Example: + +```shell +grpcurl -plaintext \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/DenomsMetadata +``` + +Example Output: + +```json +{ + "metadatas": [ + { + "description": "native staking token of simulation app", + "denomUnits": [ + { + "denom": "stake", + "aliases": [ + "STAKE" + ] + } + ], + "base": "stake", + "display": "stake", + "name": "SimApp Token", + "symbol": "STK" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### DenomOwners + +The `DenomOwners` endpoint allows users to query metadata for a single coin denomination. + +```shell +cosmos.bank.v1beta1.Query/DenomOwners +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/DenomOwners +``` + +Example Output: + +```json +{ + "denomOwners": [ + { + "address": "cosmos1..", + "balance": { + "denom": "stake", + "amount": "5000000000" + } + }, + { + "address": "cosmos1..", + "balance": { + "denom": "stake", + "amount": "5000000000" + } + }, + ], + "pagination": { + "total": "2" + } +} +``` + +### TotalSupply + +The `TotalSupply` endpoint allows users to query the total supply of all coins. + +```shell +cosmos.bank.v1beta1.Query/TotalSupply +``` + +Example: + +```shell +grpcurl -plaintext \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/TotalSupply +``` + +Example Output: + +```json +{ + "supply": [ + { + "denom": "stake", + "amount": "10000000000" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### SupplyOf + +The `SupplyOf` endpoint allows users to query the total supply of a single coin. + +```shell +cosmos.bank.v1beta1.Query/SupplyOf +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/SupplyOf +``` + +Example Output: + +```json +{ + "amount": { + "denom": "stake", + "amount": "10000000000" + } +} +``` + +### Params + +The `Params` endpoint allows users to query the parameters of the `bank` module. + +```shell +cosmos.bank.v1beta1.Query/Params +``` + +Example: + +```shell +grpcurl -plaintext \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "defaultSendEnabled": true + } +} +``` + +### SendEnabled + +The `SendEnabled` enpoints allows users to query the SendEnabled entries of the `bank` module. + +Any denominations NOT returned, use the `Params.DefaultSendEnabled` value. + +```shell +cosmos.bank.v1beta1.Query/SendEnabled +``` + +Example: + +```shell +grpcurl -plaintext \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/SendEnabled +``` + +Example Output: + +```json +{ + "send_enabled": [ + { + "denom": "foocoin", + "enabled": true + }, + { + "denom": "barcoin" + } + ], + "pagination": { + "next-key": null, + "total": 2 + } +} +``` diff --git a/docs/integrate/modules/circuit/README.md b/docs/integrate/modules/circuit/README.md new file mode 100644 index 000000000..332ebf214 --- /dev/null +++ b/docs/integrate/modules/circuit/README.md @@ -0,0 +1,115 @@ +# `x/circuit` + +## Concepts + +Circuit Breaker is a module that is meant to avoid a chain needing to halt/shut down in the presence of a vulnerability, instead the module will allow specific messages or all messages to be disabled. When operating a chain, if it is app specific then a halt of the chain is less detrimental, but if there are applications built on top of the chain then halting is expensive due to the disturbance to applications. + +Circuit Breaker works with the idea that an address or set of addresses have the right to block messages from being executed and/or included in the mempool. Any address with a permission is able to reset the circuit breaker for the message. + +## State + +### Accounts + +* AccountPermissions `0x1 | account_address -> ProtocolBuffer(CircuitBreakerPermissions)` + +```go +type level int32 + +const ( + // LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit + // breaker permissions. + LEVEL_NONE_UNSPECIFIED = iota + // LEVEL_SOME_MSGS indicates that the account will have permission to + // trip or reset the circuit breaker for some Msg type URLs. If this level + // is chosen, a non-empty list of Msg type URLs must be provided in + // limit_type_urls. + LEVEL_SOME_MSGS + // LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit + // breaker for Msg's of all type URLs. + LEVEL_ALL_MSGS + // LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker + // actions and can grant permissions to other accounts. + LEVEL_SUPER_ADMIN +) + +type Access struct { + level int32 + msgs []string // if full permission, msgs can be empty +} +``` + + +### Disable List + +List of type urls that are disabled. + +* DisableList `0x2 | msg_type_url -> []byte{}` + +## State Transitions + +### Authorize + +Authorize, is called by the module authority (default governance module account) or any account with `LEVEL_SUPER_ADMIN` to give permission to disable/enable messages to another account. There are three levels of permissions that can be granted. `LEVEL_SOME_MSGS` limits the number of messages that can be disabled. `LEVEL_ALL_MSGS` permits all messages to be disabled. `LEVEL_SUPER_ADMIN` allows an account to take all circuit breaker actions including authorizing and deauthorizing other accounts. + +```protobuf + // AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another + // account's circuit breaker permissions. + rpc AuthorizeCircuitBreaker(MsgAuthorizeCircuitBreaker) returns (MsgAuthorizeCircuitBreakerResponse); +``` + +### Trip + +Trip, is called by an account to disable message execution for a specific msgURL. + +```protobuf + // TripCircuitBreaker pauses processing of Msg's in the state machine. + rpc TripCircuitBreaker(MsgTripCircuitBreaker) returns (MsgTripCircuitBreakerResponse); +``` + +### Reset + +Reset is called to enable execution of a previously disabled message. + +```protobuf + // ResetCircuitBreaker resumes processing of Msg's in the state machine that + // have been been paused using TripCircuitBreaker. + rpc ResetCircuitBreaker(MsgResetCircuitBreaker) returns (MsgResetCircuitBreakerResponse); +``` + +## Messages + +### MsgAuthorizeCircuitBreaker + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/cosmos/circuit/v1/tx.proto#L25-L75 +``` + +This message is expected to fail if: + +* the granter is not an account with permission level `LEVEL_SUPER_ADMIN` or the module authority +* if the type urls does not exist + +### MsgTripCircuitBreaker + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/cosmos/circuit/v1/tx.proto#L77-L93 +``` + +This message is expected to fail if: + +* if the signer does not have a permission level with the ability to disable the specified type url message +* if the type urls does not exist + +### MsgResetCircuitBreaker + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/cosmos/circuit/v1/tx.proto#L95-109 +``` + +This message is expected to fail if: + +* if the type urls does not exist +* if the type url is not disabled + +* `## Events` - list and describe event tags used +* `## Client` - list and describe CLI commands and gRPC and REST endpoints diff --git a/docs/integrate/modules/consensus/README.md b/docs/integrate/modules/consensus/README.md new file mode 100644 index 000000000..902280a6e --- /dev/null +++ b/docs/integrate/modules/consensus/README.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 1 +--- + +# `x/consensus` + +Functionality to modify CometBFT's ABCI consensus params. diff --git a/docs/integrate/modules/crisis/README.md b/docs/integrate/modules/crisis/README.md new file mode 100644 index 000000000..e4e29d0a1 --- /dev/null +++ b/docs/integrate/modules/crisis/README.md @@ -0,0 +1,110 @@ +--- +sidebar_position: 1 +--- + +# `x/crisis` + +## Overview + +The crisis module halts the blockchain under the circumstance that a blockchain +invariant is broken. Invariants can be registered with the application during the +application initialization process. + +## Contents + +* [State](#state) +* [Messages](#messages) +* [Events](#events) +* [Parameters](#parameters) +* [Client](#client) + * [CLI](#cli) + +## State + +### ConstantFee + +Due to the anticipated large gas cost requirement to verify an invariant (and +potential to exceed the maximum allowable block gas limit) a constant fee is +used instead of the standard gas consumption method. The constant fee is +intended to be larger than the anticipated gas cost of running the invariant +with the standard gas consumption method. + +The ConstantFee param is stored in the module params state with the prefix of `0x01`, +it can be updated with governance or the address with authority. + +* Params: `mint/params -> legacy_amino(sdk.Coin)` + +## Messages + +In this section we describe the processing of the crisis messages and the +corresponding updates to the state. + +### MsgVerifyInvariant + +Blockchain invariants can be checked using the `MsgVerifyInvariant` message. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/crisis/v1beta1/tx.proto#L26-L42 +``` + +This message is expected to fail if: + +* the sender does not have enough coins for the constant fee +* the invariant route is not registered + +This message checks the invariant provided, and if the invariant is broken it +panics, halting the blockchain. If the invariant is broken, the constant fee is +never deducted as the transaction is never committed to a block (equivalent to +being refunded). However, if the invariant is not broken, the constant fee will +not be refunded. + +## Events + +The crisis module emits the following events: + +### Handlers + +#### MsgVerifyInvariance + +| Type | Attribute Key | Attribute Value | +|-----------|---------------|------------------| +| invariant | route | {invariantRoute} | +| message | module | crisis | +| message | action | verify_invariant | +| message | sender | {senderAddress} | + +## Parameters + +The crisis module contains the following parameters: + +| Key | Type | Example | +|-------------|---------------|-----------------------------------| +| ConstantFee | object (coin) | {"denom":"uatom","amount":"1000"} | + +## Client + +### CLI + +A user can query and interact with the `crisis` module using the CLI. + +#### Transactions + +The `tx` commands allow users to interact with the `crisis` module. + +```bash +simd tx crisis --help +``` + +##### invariant-broken + +The `invariant-broken` command submits proof when an invariant was broken to halt the chain + +```bash +simd tx crisis invariant-broken [module-name] [invariant-route] [flags] +``` + +Example: + +```bash +simd tx crisis invariant-broken bank total-supply --from=[keyname or address] +``` diff --git a/docs/integrate/modules/distribution/README.md b/docs/integrate/modules/distribution/README.md new file mode 100644 index 000000000..e46dab3fc --- /dev/null +++ b/docs/integrate/modules/distribution/README.md @@ -0,0 +1,1042 @@ +--- +sidebar_position: 1 +--- + +# `x/distribution` + +## Overview + +This _simple_ distribution mechanism describes a functional way to passively +distribute rewards between validators and delegators. Note that this mechanism does +not distribute funds in as precisely as active reward distribution mechanisms and +will therefore be upgraded in the future. + +The mechanism operates as follows. Collected rewards are pooled globally and +divided out passively to validators and delegators. Each validator has the +opportunity to charge commission to the delegators on the rewards collected on +behalf of the delegators. Fees are collected directly into a global reward pool +and validator proposer-reward pool. Due to the nature of passive accounting, +whenever changes to parameters which affect the rate of reward distribution +occurs, withdrawal of rewards must also occur. + +* Whenever withdrawing, one must withdraw the maximum amount they are entitled + to, leaving nothing in the pool. +* Whenever bonding, unbonding, or re-delegating tokens to an existing account, a + full withdrawal of the rewards must occur (as the rules for lazy accounting + change). +* Whenever a validator chooses to change the commission on rewards, all accumulated + commission rewards must be simultaneously withdrawn. + +The above scenarios are covered in `hooks.md`. + +The distribution mechanism outlined herein is used to lazily distribute the +following rewards between validators and associated delegators: + +* multi-token fees to be socially distributed +* inflated staked asset provisions +* validator commission on all rewards earned by their delegators stake + +Fees are pooled within a global pool. The mechanisms used allow for validators +and delegators to independently and lazily withdraw their rewards. + +## Shortcomings + +As a part of the lazy computations, each delegator holds an accumulation term +specific to each validator which is used to estimate what their approximate +fair portion of tokens held in the global fee pool is owed to them. + +```text +entitlement = delegator-accumulation / all-delegators-accumulation +``` + +Under the circumstance that there was constant and equal flow of incoming +reward tokens every block, this distribution mechanism would be equal to the +active distribution (distribute individually to all delegators each block). +However, this is unrealistic so deviations from the active distribution will +occur based on fluctuations of incoming reward tokens as well as timing of +reward withdrawal by other delegators. + +If you happen to know that incoming rewards are about to significantly increase, +you are incentivized to not withdraw until after this event, increasing the +worth of your existing _accum_. See [#2764](https://github.com/cosmos/cosmos-sdk/issues/2764) +for further details. + +## Effect on Staking + +Charging commission on Atom provisions while also allowing for Atom-provisions +to be auto-bonded (distributed directly to the validators bonded stake) is +problematic within BPoS. Fundamentally, these two mechanisms are mutually +exclusive. If both commission and auto-bonding mechanisms are simultaneously +applied to the staking-token then the distribution of staking-tokens between +any validator and its delegators will change with each block. This then +necessitates a calculation for each delegation records for each block - +which is considered computationally expensive. + +In conclusion, we can only have Atom commission and unbonded atoms +provisions or bonded atom provisions with no Atom commission, and we elect to +implement the former. Stakeholders wishing to rebond their provisions may elect +to set up a script to periodically withdraw and rebond rewards. + +## Contents + +* [Concepts](#concepts) +* [State](#state) + * [FeePool](#feepool) + * [Validator Distribution](#validator-distribution) + * [Delegation Distribution](#delegation-distribution) + * [Params](#params) +* [Begin Block](#begin-block) +* [Messages](#messages) +* [Hooks](#hooks) +* [Events](#events) +* [Parameters](#parameters) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + +## Concepts + +In Proof of Stake (PoS) blockchains, rewards gained from transaction fees are paid to validators. The fee distribution module fairly distributes the rewards to the validators' constituent delegators. + +Rewards are calculated per period. The period is updated each time a validator's delegation changes, for example, when the validator receives a new delegation. +The rewards for a single validator can then be calculated by taking the total rewards for the period before the delegation started, minus the current total rewards. +To learn more, see the [F1 Fee Distribution paper](https://github.com/cosmos/cosmos-sdk/tree/main/docs/spec/fee_distribution/f1_fee_distr.pdf). + +The commission to the validator is paid when the validator is removed or when the validator requests a withdrawal. +The commission is calculated and incremented at every `BeginBlock` operation to update accumulated fee amounts. + +The rewards to a delegator are distributed when the delegation is changed or removed, or a withdrawal is requested. +Before rewards are distributed, all slashes to the validator that occurred during the current delegation are applied. + +### Reference Counting in F1 Fee Distribution + +In F1 fee distribution, the rewards a delegator receives are calculated when their delegation is withdrawn. This calculation must read the terms of the summation of rewards divided by the share of tokens from the period which they ended when they delegated, and the final period that was created for the withdrawal. + +Additionally, as slashes change the amount of tokens a delegation will have (but we calculate this lazily, +only when a delegator un-delegates), we must calculate rewards in separate periods before / after any slashes +which occurred in between when a delegator delegated and when they withdrew their rewards. Thus slashes, like +delegations, reference the period which was ended by the slash event. + +All stored historical rewards records for periods which are no longer referenced by any delegations +or any slashes can thus be safely removed, as they will never be read (future delegations and future +slashes will always reference future periods). This is implemented by tracking a `ReferenceCount` +along with each historical reward storage entry. Each time a new object (delegation or slash) +is created which might need to reference the historical record, the reference count is incremented. +Each time one object which previously needed to reference the historical record is deleted, the reference +count is decremented. If the reference count hits zero, the historical record is deleted. + +## State + +### FeePool + +All globally tracked parameters for distribution are stored within +`FeePool`. Rewards are collected and added to the reward pool and +distributed to validators/delegators from here. + +Note that the reward pool holds decimal coins (`DecCoins`) to allow +for fractions of coins to be received from operations like inflation. +When coins are distributed from the pool they are truncated back to +`sdk.Coins` which are non-decimal. + +* FeePool: `0x00 -> ProtocolBuffer(FeePool)` + +```go +// coins with decimal +type DecCoins []DecCoin + +type DecCoin struct { + Amount math.LegacyDec + Denom string +} +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/distribution/v1beta1/distribution.proto#L116-L123 +``` + +### Validator Distribution + +Validator distribution information for the relevant validator is updated each time: + +1. delegation amount to a validator is updated, +2. any delegator withdraws from a validator, or +3. the validator withdraws its commission. + +* ValidatorDistInfo: `0x02 | ValOperatorAddrLen (1 byte) | ValOperatorAddr -> ProtocolBuffer(validatorDistribution)` + +```go +type ValidatorDistInfo struct { + OperatorAddress sdk.AccAddress + SelfBondRewards sdkmath.DecCoins + ValidatorCommission types.ValidatorAccumulatedCommission +} +``` + +### Delegation Distribution + +Each delegation distribution only needs to record the height at which it last +withdrew fees. Because a delegation must withdraw fees each time it's +properties change (aka bonded tokens etc.) its properties will remain constant +and the delegator's _accumulation_ factor can be calculated passively knowing +only the height of the last withdrawal and its current properties. + +* DelegationDistInfo: `0x02 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValOperatorAddrLen (1 byte) | ValOperatorAddr -> ProtocolBuffer(delegatorDist)` + +```go +type DelegationDistInfo struct { + WithdrawalHeight int64 // last time this delegation withdrew rewards +} +``` + +### Params + +The distribution module stores it's params in state with the prefix of `0x09`, +it can be updated with governance or the address with authority. + +* Params: `0x09 | ProtocolBuffer(Params)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/distribution/v1beta1/distribution.proto#L12-L42 +``` + +## Begin Block + +At each `BeginBlock`, all fees received in the previous block are transferred to +the distribution `ModuleAccount` account. When a delegator or validator +withdraws their rewards, they are taken out of the `ModuleAccount`. During begin +block, the different claims on the fees collected are updated as follows: + +* The reserve community tax is charged. +* The remainder is distributed proportionally by voting power to all bonded validators + +### The Distribution Scheme + +See [params](#params) for description of parameters. + +Let `fees` be the total fees collected in the previous block, including +inflationary rewards to the stake. All fees are collected in a specific module +account during the block. During `BeginBlock`, they are sent to the +`"distribution"` `ModuleAccount`. No other sending of tokens occurs. Instead, the +rewards each account is entitled to are stored, and withdrawals can be triggered +through the messages `FundCommunityPool`, `WithdrawValidatorCommission` and +`WithdrawDelegatorReward`. + +#### Reward to the Community Pool + +The community pool gets `community_tax * fees`, plus any remaining dust after +validators get their rewards that are always rounded down to the nearest +integer value. + +#### Reward To the Validators + +The proposer receives no extra rewards. All fees are distributed among all the +bonded validators, including the proposer, in proportion to their consensus power. + +```text +powFrac = validator power / total bonded validator power +voteMul = 1 - community_tax +``` + +All validators receive `fees * voteMul * powFrac`. + +#### Rewards to Delegators + +Each validator's rewards are distributed to its delegators. The validator also +has a self-delegation that is treated like a regular delegation in +distribution calculations. + +The validator sets a commission rate. The commission rate is flexible, but each +validator sets a maximum rate and a maximum daily increase. These maximums cannot be exceeded and protect delegators from sudden increases of validator commission rates to prevent validators from taking all of the rewards. + +The outstanding rewards that the operator is entitled to are stored in +`ValidatorAccumulatedCommission`, while the rewards the delegators are entitled +to are stored in `ValidatorCurrentRewards`. The [F1 fee distribution scheme](#concepts) is used to calculate the rewards per delegator as they +withdraw or update their delegation, and is thus not handled in `BeginBlock`. + +#### Example Distribution + +For this example distribution, the underlying consensus engine selects block proposers in +proportion to their power relative to the entire bonded power. + +All validators are equally performant at including pre-commits in their proposed +blocks. Then hold `(pre_commits included) / (total bonded validator power)` +constant so that the amortized block reward for the validator is `( validator power / total bonded power) * (1 - community tax rate)` of +the total rewards. Consequently, the reward for a single delegator is: + +```text +(delegator proportion of the validator power / validator power) * (validator power / total bonded power) + * (1 - community tax rate) * (1 - validator commission rate) += (delegator proportion of the validator power / total bonded power) * (1 - +community tax rate) * (1 - validator commission rate) +``` + +## Messages + +### MsgSetWithdrawAddress + +By default, the withdraw address is the delegator address. To change its withdraw address, a delegator must send a `MsgSetWithdrawAddress` message. +Changing the withdraw address is possible only if the parameter `WithdrawAddrEnabled` is set to `true`. + +The withdraw address cannot be any of the module accounts. These accounts are blocked from being withdraw addresses by being added to the distribution keeper's `blockedAddrs` array at initialization. + +Response: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/distribution/v1beta1/tx.proto#L49-L60 +``` + +```go +func (k Keeper) SetWithdrawAddr(ctx context.Context, delegatorAddr sdk.AccAddress, withdrawAddr sdk.AccAddress) error + if k.blockedAddrs[withdrawAddr.String()] { + fail with "`{withdrawAddr}` is not allowed to receive external funds" + } + + if !k.GetWithdrawAddrEnabled(ctx) { + fail with `ErrSetWithdrawAddrDisabled` + } + + k.SetDelegatorWithdrawAddr(ctx, delegatorAddr, withdrawAddr) +``` + +### MsgWithdrawDelegatorReward + +A delegator can withdraw its rewards. +Internally in the distribution module, this transaction simultaneously removes the previous delegation with associated rewards, the same as if the delegator simply started a new delegation of the same value. +The rewards are sent immediately from the distribution `ModuleAccount` to the withdraw address. +Any remainder (truncated decimals) are sent to the community pool. +The starting height of the delegation is set to the current validator period, and the reference count for the previous period is decremented. +The amount withdrawn is deducted from the `ValidatorOutstandingRewards` variable for the validator. + +In the F1 distribution, the total rewards are calculated per validator period, and a delegator receives a piece of those rewards in proportion to their stake in the validator. +In basic F1, the total rewards that all the delegators are entitled to between to periods is calculated the following way. +Let `R(X)` be the total accumulated rewards up to period `X` divided by the tokens staked at that time. The delegator allocation is `R(X) * delegator_stake`. +Then the rewards for all the delegators for staking between periods `A` and `B` are `(R(B) - R(A)) * total stake`. +However, these calculated rewards don't account for slashing. + +Taking the slashes into account requires iteration. +Let `F(X)` be the fraction a validator is to be slashed for a slashing event that happened at period `X`. +If the validator was slashed at periods `P1, ..., PN`, where `A < P1`, `PN < B`, the distribution module calculates the individual delegator's rewards, `T(A, B)`, as follows: + +```go +stake := initial stake +rewards := 0 +previous := A +for P in P1, ..., PN`: + rewards = (R(P) - previous) * stake + stake = stake * F(P) + previous = P +rewards = rewards + (R(B) - R(PN)) * stake +``` + +The historical rewards are calculated retroactively by playing back all the slashes and then attenuating the delegator's stake at each step. +The final calculated stake is equivalent to the actual staked coins in the delegation with a margin of error due to rounding errors. + +Response: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/distribution/v1beta1/tx.proto#L66-L77 +``` + +### WithdrawValidatorCommission + +The validator can send the WithdrawValidatorCommission message to withdraw their accumulated commission. +The commission is calculated in every block during `BeginBlock`, so no iteration is required to withdraw. +The amount withdrawn is deducted from the `ValidatorOutstandingRewards` variable for the validator. +Only integer amounts can be sent. If the accumulated awards have decimals, the amount is truncated before the withdrawal is sent, and the remainder is left to be withdrawn later. + +### FundCommunityPool + +This message sends coins directly from the sender to the community pool. + +The transaction fails if the amount cannot be transferred from the sender to the distribution module account. + +```go +func (k Keeper) FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error { + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, sender, types.ModuleName, amount); err != nil { + return err + } + + feePool := k.GetFeePool(ctx) + feePool.CommunityPool = feePool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(amount...)...) + k.SetFeePool(ctx, feePool) + + return nil +} +``` + +### Common distribution operations + +These operations take place during many different messages. + +#### Initialize delegation + +Each time a delegation is changed, the rewards are withdrawn and the delegation is reinitialized. +Initializing a delegation increments the validator period and keeps track of the starting period of the delegation. + +```go +// initialize starting info for a new delegation +func (k Keeper) initializeDelegation(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) { + // period has already been incremented - we want to store the period ended by this delegation action + previousPeriod := k.GetValidatorCurrentRewards(ctx, val).Period - 1 + + // increment reference count for the period we're going to track + k.incrementReferenceCount(ctx, val, previousPeriod) + + validator := k.stakingKeeper.Validator(ctx, val) + delegation := k.stakingKeeper.Delegation(ctx, del, val) + + // calculate delegation stake in tokens + // we don't store directly, so multiply delegation shares * (tokens per share) + // note: necessary to truncate so we don't allow withdrawing more rewards than owed + stake := validator.TokensFromSharesTruncated(delegation.GetShares()) + k.SetDelegatorStartingInfo(ctx, val, del, types.NewDelegatorStartingInfo(previousPeriod, stake, uint64(ctx.BlockHeight()))) +} +``` + +### MsgUpdateParams + +Distribution module params can be updated through `MsgUpdateParams`, which can be done using governance proposal and the signer will always be gov module account address. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/distribution/v1beta1/tx.proto#L133-L147 +``` + +The message handling can fail if: + +* signer is not the gov module account address. + +## Hooks + +Available hooks that can be called by and from this module. + +### Create or modify delegation distribution + +* triggered-by: `staking.MsgDelegate`, `staking.MsgBeginRedelegate`, `staking.MsgUndelegate` + +#### Before + +* The delegation rewards are withdrawn to the withdraw address of the delegator. + The rewards include the current period and exclude the starting period. +* The validator period is incremented. + The validator period is incremented because the validator's power and share distribution might have changed. +* The reference count for the delegator's starting period is decremented. + +#### After + +The starting height of the delegation is set to the previous period. +Because of the `Before`-hook, this period is the last period for which the delegator was rewarded. + +### Validator created + +* triggered-by: `staking.MsgCreateValidator` + +When a validator is created, the following validator variables are initialized: + +* Historical rewards +* Current accumulated rewards +* Accumulated commission +* Total outstanding rewards +* Period + +By default, all values are set to a `0`, except period, which is set to `1`. + +### Validator removed + +* triggered-by: `staking.RemoveValidator` + +Outstanding commission is sent to the validator's self-delegation withdrawal address. +Remaining delegator rewards get sent to the community fee pool. + +Note: The validator gets removed only when it has no remaining delegations. +At that time, all outstanding delegator rewards will have been withdrawn. +Any remaining rewards are dust amounts. + +### Validator is slashed + +* triggered-by: `staking.Slash` +* The current validator period reference count is incremented. + The reference count is incremented because the slash event has created a reference to it. +* The validator period is incremented. +* The slash event is stored for later use. + The slash event will be referenced when calculating delegator rewards. + +## Events + +The distribution module emits the following events: + +### BeginBlocker + +| Type | Attribute Key | Attribute Value | +|-----------------|---------------|--------------------| +| proposer_reward | validator | {validatorAddress} | +| proposer_reward | reward | {proposerReward} | +| commission | amount | {commissionAmount} | +| commission | validator | {validatorAddress} | +| rewards | amount | {rewardAmount} | +| rewards | validator | {validatorAddress} | + +### Handlers + +#### MsgSetWithdrawAddress + +| Type | Attribute Key | Attribute Value | +|----------------------|------------------|----------------------| +| set_withdraw_address | withdraw_address | {withdrawAddress} | +| message | module | distribution | +| message | action | set_withdraw_address | +| message | sender | {senderAddress} | + +#### MsgWithdrawDelegatorReward + +| Type | Attribute Key | Attribute Value | +|---------|---------------|---------------------------| +| withdraw_rewards | amount | {rewardAmount} | +| withdraw_rewards | validator | {validatorAddress} | +| message | module | distribution | +| message | action | withdraw_delegator_reward | +| message | sender | {senderAddress} | + +#### MsgWithdrawValidatorCommission + +| Type | Attribute Key | Attribute Value | +|------------|---------------|-------------------------------| +| withdraw_commission | amount | {commissionAmount} | +| message | module | distribution | +| message | action | withdraw_validator_commission | +| message | sender | {senderAddress} | + +## Parameters + +The distribution module contains the following parameters: + +| Key | Type | Example | +| ------------------- | ------------ | -------------------------- | +| communitytax | string (dec) | "0.020000000000000000" [0] | +| withdrawaddrenabled | bool | true | + +* [0] `communitytax` must be positive and cannot exceed 1.00. +* `baseproposerreward` and `bonusproposerreward` were parameters that are deprecated in v0.47 and are not used. + +:::note +The reserve pool is the pool of collected funds for use by governance taken via the `CommunityTax`. +Currently with the Cosmos SDK, tokens collected by the CommunityTax are accounted for but unspendable. +::: + +## Client + +## CLI + +A user can query and interact with the `distribution` module using the CLI. + +#### Query + +The `query` commands allow users to query `distribution` state. + +```shell +simd query distribution --help +``` + +##### commission + +The `commission` command allows users to query validator commission rewards by address. + +```shell +simd query distribution commission [address] [flags] +``` + +Example: + +```shell +simd query distribution commission cosmosvaloper1... +``` + +Example Output: + +```yml +commission: +- amount: "1000000.000000000000000000" + denom: stake +``` + +##### community-pool + +The `community-pool` command allows users to query all coin balances within the community pool. + +```shell +simd query distribution community-pool [flags] +``` + +Example: + +```shell +simd query distribution community-pool +``` + +Example Output: + +```yml +pool: +- amount: "1000000.000000000000000000" + denom: stake +``` + +##### params + +The `params` command allows users to query the parameters of the `distribution` module. + +```shell +simd query distribution params [flags] +``` + +Example: + +```shell +simd query distribution params +``` + +Example Output: + +```yml +base_proposer_reward: "0.000000000000000000" +bonus_proposer_reward: "0.000000000000000000" +community_tax: "0.020000000000000000" +withdraw_addr_enabled: true +``` + +##### rewards + +The `rewards` command allows users to query delegator rewards. Users can optionally include the validator address to query rewards earned from a specific validator. + +```shell +simd query distribution rewards [delegator-addr] [validator-addr] [flags] +``` + +Example: + +```shell +simd query distribution rewards cosmos1... +``` + +Example Output: + +```yml +rewards: +- reward: + - amount: "1000000.000000000000000000" + denom: stake + validator_address: cosmosvaloper1.. +total: +- amount: "1000000.000000000000000000" + denom: stake +``` + +##### slashes + +The `slashes` command allows users to query all slashes for a given block range. + +```shell +simd query distribution slashes [validator] [start-height] [end-height] [flags] +``` + +Example: + +```shell +simd query distribution slashes cosmosvaloper1... 1 1000 +``` + +Example Output: + +```yml +pagination: + next_key: null + total: "0" +slashes: +- validator_period: 20, + fraction: "0.009999999999999999" +``` + +##### validator-outstanding-rewards + +The `validator-outstanding-rewards` command allows users to query all outstanding (un-withdrawn) rewards for a validator and all their delegations. + +```shell +simd query distribution validator-outstanding-rewards [validator] [flags] +``` + +Example: + +```shell +simd query distribution validator-outstanding-rewards cosmosvaloper1... +``` + +Example Output: + +```yml +rewards: +- amount: "1000000.000000000000000000" + denom: stake +``` + +##### validator-distribution-info + +The `validator-distribution-info` command allows users to query validator commission and self-delegation rewards for validator. + +```shell +simd query distribution validator-distribution-info cosmosvaloper1... +``` + +Example Output: + +```yml +commission: +- amount: "100000.000000000000000000" + denom: stake +operator_address: cosmosvaloper1... +self_bond_rewards: +- amount: "100000.000000000000000000" + denom: stake +``` + +#### Transactions + +The `tx` commands allow users to interact with the `distribution` module. + +```shell +simd tx distribution --help +``` + +##### fund-community-pool + +The `fund-community-pool` command allows users to send funds to the community pool. + +```shell +simd tx distribution fund-community-pool [amount] [flags] +``` + +Example: + +```shell +simd tx distribution fund-community-pool 100stake --from cosmos1... +``` + +##### set-withdraw-addr + +The `set-withdraw-addr` command allows users to set the withdraw address for rewards associated with a delegator address. + +```shell +simd tx distribution set-withdraw-addr [withdraw-addr] [flags] +``` + +Example: + +```shell +simd tx distribution set-withdraw-addr cosmos1... --from cosmos1... +``` + +##### withdraw-all-rewards + +The `withdraw-all-rewards` command allows users to withdraw all rewards for a delegator. + +```shell +simd tx distribution withdraw-all-rewards [flags] +``` + +Example: + +```shell +simd tx distribution withdraw-all-rewards --from cosmos1... +``` + +##### withdraw-rewards + +The `withdraw-rewards` command allows users to withdraw all rewards from a given delegation address, +and optionally withdraw validator commission if the delegation address given is a validator operator and the user proves the `--commission` flag. + +```shell +simd tx distribution withdraw-rewards [validator-addr] [flags] +``` + +Example: + +```shell +simd tx distribution withdraw-rewards cosmosvaloper1... --from cosmos1... --commission +``` + +### gRPC + +A user can query the `distribution` module using gRPC endpoints. + +#### Params + +The `Params` endpoint allows users to query parameters of the `distribution` module. + +Example: + +```shell +grpcurl -plaintext \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "communityTax": "20000000000000000", + "baseProposerReward": "00000000000000000", + "bonusProposerReward": "00000000000000000", + "withdrawAddrEnabled": true + } +} +``` + +#### ValidatorDistributionInfo + +The `ValidatorDistributionInfo` queries validator commission and self-delegation rewards for validator. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"validator_address":"cosmosvalop1..."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/ValidatorDistributionInfo +``` + +Example Output: + +```json +{ + "commission": { + "commission": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] + }, + "self_bond_rewards": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ], + "validator_address": "cosmosvalop1..." +} +``` + +#### ValidatorOutstandingRewards + +The `ValidatorOutstandingRewards` endpoint allows users to query rewards of a validator address. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"validator_address":"cosmosvalop1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/ValidatorOutstandingRewards +``` + +Example Output: + +```json +{ + "rewards": { + "rewards": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] + } +} +``` + +#### ValidatorCommission + +The `ValidatorCommission` endpoint allows users to query accumulated commission for a validator. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"validator_address":"cosmosvalop1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/ValidatorCommission +``` + +Example Output: + +```json +{ + "commission": { + "commission": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] + } +} +``` + +#### ValidatorSlashes + +The `ValidatorSlashes` endpoint allows users to query slash events of a validator. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"validator_address":"cosmosvalop1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/ValidatorSlashes +``` + +Example Output: + +```json +{ + "slashes": [ + { + "validator_period": "20", + "fraction": "0.009999999999999999" + } + ], + "pagination": { + "total": "1" + } +} +``` + +#### DelegationRewards + +The `DelegationRewards` endpoint allows users to query the total rewards accrued by a delegation. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1...","validator_address":"cosmosvalop1..."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegationRewards +``` + +Example Output: + +```json +{ + "rewards": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] +} +``` + +#### DelegationTotalRewards + +The `DelegationTotalRewards` endpoint allows users to query the total rewards accrued by each validator. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1..."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegationTotalRewards +``` + +Example Output: + +```json +{ + "rewards": [ + { + "validatorAddress": "cosmosvaloper1...", + "reward": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] + } + ], + "total": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] +} +``` + +#### DelegatorValidators + +The `DelegatorValidators` endpoint allows users to query all validators for given delegator. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1..."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegatorValidators +``` + +Example Output: + +```json +{ + "validators": ["cosmosvaloper1..."] +} +``` + +#### DelegatorWithdrawAddress + +The `DelegatorWithdrawAddress` endpoint allows users to query the withdraw address of a delegator. + +Example: + +```shell +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1..."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegatorWithdrawAddress +``` + +Example Output: + +```json +{ + "withdrawAddress": "cosmos1..." +} +``` + +#### CommunityPool + +The `CommunityPool` endpoint allows users to query the community pool coins. + +Example: + +```shell +grpcurl -plaintext \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/CommunityPool +``` + +Example Output: + +```json +{ + "pool": [ + { + "denom": "stake", + "amount": "1000000000000000000" + } + ] +} +``` diff --git a/docs/integrate/modules/evidence/README.md b/docs/integrate/modules/evidence/README.md new file mode 100644 index 000000000..263481b0c --- /dev/null +++ b/docs/integrate/modules/evidence/README.md @@ -0,0 +1,440 @@ +--- +sidebar_position: 1 +--- + +# `x/evidence` + +* [Concepts](#concepts) +* [State](#state) +* [Messages](#messages) +* [Events](#events) +* [Parameters](#parameters) +* [BeginBlock](#beginblock) +* [Client](#client) + * [CLI](#cli) + * [REST](#rest) + * [gRPC](#grpc) + +## Abstract + +`x/evidence` is an implementation of a Cosmos SDK module, per [ADR 009](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-009-evidence-module.md), +that allows for the submission and handling of arbitrary evidence of misbehavior such +as equivocation and counterfactual signing. + +The evidence module differs from standard evidence handling which typically expects the +underlying consensus engine, e.g. CometBFT, to automatically submit evidence when +it is discovered by allowing clients and foreign chains to submit more complex evidence +directly. + +All concrete evidence types must implement the `Evidence` interface contract. Submitted +`Evidence` is first routed through the evidence module's `Router` in which it attempts +to find a corresponding registered `Handler` for that specific `Evidence` type. +Each `Evidence` type must have a `Handler` registered with the evidence module's +keeper in order for it to be successfully routed and executed. + +Each corresponding handler must also fulfill the `Handler` interface contract. The +`Handler` for a given `Evidence` type can perform any arbitrary state transitions +such as slashing, jailing, and tombstoning. + +## Concepts + +### Evidence + +Any concrete type of evidence submitted to the `x/evidence` module must fulfill the +`Evidence` contract outlined below. Not all concrete types of evidence will fulfill +this contract in the same way and some data may be entirely irrelevant to certain +types of evidence. An additional `ValidatorEvidence`, which extends `Evidence`, +has also been created to define a contract for evidence against malicious validators. + +```go +// Evidence defines the contract which concrete evidence types of misbehavior +// must implement. +type Evidence interface { + proto.Message + + Route() string + String() string + Hash() []byte + ValidateBasic() error + + // Height at which the infraction occurred + GetHeight() int64 +} + +// ValidatorEvidence extends Evidence interface to define contract +// for evidence against malicious validators +type ValidatorEvidence interface { + Evidence + + // The consensus address of the malicious validator at time of infraction + GetConsensusAddress() sdk.ConsAddress + + // The total power of the malicious validator at time of infraction + GetValidatorPower() int64 + + // The total validator set power at time of infraction + GetTotalPower() int64 +} +``` + +### Registration & Handling + +The `x/evidence` module must first know about all types of evidence it is expected +to handle. This is accomplished by registering the `Route` method in the `Evidence` +contract with what is known as a `Router` (defined below). The `Router` accepts +`Evidence` and attempts to find the corresponding `Handler` for the `Evidence` +via the `Route` method. + +```go +type Router interface { + AddRoute(r string, h Handler) Router + HasRoute(r string) bool + GetRoute(path string) Handler + Seal() + Sealed() bool +} +``` + +The `Handler` (defined below) is responsible for executing the entirety of the +business logic for handling `Evidence`. This typically includes validating the +evidence, both stateless checks via `ValidateBasic` and stateful checks via any +keepers provided to the `Handler`. In addition, the `Handler` may also perform +capabilities such as slashing and jailing a validator. All `Evidence` handled +by the `Handler` should be persisted. + +```go +// Handler defines an agnostic Evidence handler. The handler is responsible +// for executing all corresponding business logic necessary for verifying the +// evidence as valid. In addition, the Handler may execute any necessary +// slashing and potential jailing. +type Handler func(sdk.Context, Evidence) error +``` + + +## State + +Currently the `x/evidence` module only stores valid submitted `Evidence` in state. +The evidence state is also stored and exported in the `x/evidence` module's `GenesisState`. + +```protobuf +// GenesisState defines the evidence module's genesis state. +message GenesisState { + // evidence defines all the evidence at genesis. + repeated google.protobuf.Any evidence = 1; +} + +``` + +All `Evidence` is retrieved and stored via a prefix `KVStore` using prefix `0x00` (`KeyPrefixEvidence`). + + +## Messages + +### MsgSubmitEvidence + +Evidence is submitted through a `MsgSubmitEvidence` message: + +```protobuf +// MsgSubmitEvidence represents a message that supports submitting arbitrary +// Evidence of misbehavior such as equivocation or counterfactual signing. +message MsgSubmitEvidence { + string submitter = 1; + google.protobuf.Any evidence = 2; +} +``` + +Note, the `Evidence` of a `MsgSubmitEvidence` message must have a corresponding +`Handler` registered with the `x/evidence` module's `Router` in order to be processed +and routed correctly. + +Given the `Evidence` is registered with a corresponding `Handler`, it is processed +as follows: + +```go +func SubmitEvidence(ctx Context, evidence Evidence) error { + if _, ok := GetEvidence(ctx, evidence.Hash()); ok { + return errorsmod.Wrap(types.ErrEvidenceExists, strings.ToUpper(hex.EncodeToString(evidence.Hash()))) + } + if !router.HasRoute(evidence.Route()) { + return errorsmod.Wrap(types.ErrNoEvidenceHandlerExists, evidence.Route()) + } + + handler := router.GetRoute(evidence.Route()) + if err := handler(ctx, evidence); err != nil { + return errorsmod.Wrap(types.ErrInvalidEvidence, err.Error()) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeSubmitEvidence, + sdk.NewAttribute(types.AttributeKeyEvidenceHash, strings.ToUpper(hex.EncodeToString(evidence.Hash()))), + ), + ) + + SetEvidence(ctx, evidence) + return nil +} +``` + +First, there must not already exist valid submitted `Evidence` of the exact same +type. Secondly, the `Evidence` is routed to the `Handler` and executed. Finally, +if there is no error in handling the `Evidence`, an event is emitted and it is persisted to state. + + +## Events + +The `x/evidence` module emits the following events: + +### Handlers + +#### MsgSubmitEvidence + +| Type | Attribute Key | Attribute Value | +| --------------- | ------------- | --------------- | +| submit_evidence | evidence_hash | {evidenceHash} | +| message | module | evidence | +| message | sender | {senderAddress} | +| message | action | submit_evidence | + + +## Parameters + +The evidence module does not contain any parameters. + + +## BeginBlock + +### Evidence Handling + +CometBFT blocks can include +[Evidence](https://github.com/cometbft/cometbft/blob/main/spec/abci/abci%2B%2B_basic_concepts.md#evidence) that indicates if a validator committed malicious behavior. The relevant information is forwarded to the application as ABCI Evidence in `abci.RequestBeginBlock` so that the validator can be punished accordingly. + +#### Equivocation + +The Cosmos SDK handles two types of evidence inside the ABCI `BeginBlock`: + +* `DuplicateVoteEvidence`, +* `LightClientAttackEvidence`. + +The evidence module handles these two evidence types the same way. First, the Cosmos SDK converts the CometBFT concrete evidence type to an SDK `Evidence` interface using `Equivocation` as the concrete type. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/evidence/v1beta1/evidence.proto#L12-L32 +``` + +For some `Equivocation` submitted in `block` to be valid, it must satisfy: + +`Evidence.Timestamp >= block.Timestamp - MaxEvidenceAge` + +Where: + +* `Evidence.Timestamp` is the timestamp in the block at height `Evidence.Height` +* `block.Timestamp` is the current block timestamp. + +If valid `Equivocation` evidence is included in a block, the validator's stake is +reduced (slashed) by `SlashFractionDoubleSign` as defined by the `x/slashing` module +of what their stake was when the infraction occurred, rather than when the evidence was discovered. +We want to "follow the stake", i.e., the stake that contributed to the infraction +should be slashed, even if it has since been redelegated or started unbonding. + +In addition, the validator is permanently jailed and tombstoned to make it impossible for that +validator to ever re-enter the validator set. + +The `Equivocation` evidence is handled as follows: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/evidence/keeper/infraction.go#L26-L140 +``` + +**Note:** The slashing, jailing, and tombstoning calls are delegated through the `x/slashing` module +that emits informative events and finally delegates calls to the `x/staking` module. See documentation +on slashing and jailing in [State Transitions](../staking/README.md#state-transitions). + +## Client + +### CLI + +A user can query and interact with the `evidence` module using the CLI. + +#### Query + +The `query` commands allows users to query `evidence` state. + +```bash +simd query evidence --help +``` + +#### evidence + +The `evidence` command allows users to list all evidence or evidence by hash. + +Usage: + +```bash +simd query evidence [flags] +``` + +To query evidence by hash + +Example: + +```bash +simd query evidence "DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660" +``` + +Example Output: + +```bash +evidence: + consensus_address: cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h + height: 11 + power: 100 + time: "2021-10-20T16:08:38.194017624Z" +``` + +To get all evidence + +Example: + +```bash +simd query evidence +``` + +Example Output: + +```bash +evidence: + consensus_address: cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h + height: 11 + power: 100 + time: "2021-10-20T16:08:38.194017624Z" +pagination: + next_key: null + total: "1" +``` + +### REST + +A user can query the `evidence` module using REST endpoints. + +#### Evidence + +Get evidence by hash + +```bash +/cosmos/evidence/v1beta1/evidence/{hash} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/evidence/v1beta1/evidence/DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660" +``` + +Example Output: + +```bash +{ + "evidence": { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } +} +``` + +#### All evidence + +Get all evidence + +```bash +/cosmos/evidence/v1beta1/evidence +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/evidence/v1beta1/evidence" +``` + +Example Output: + +```bash +{ + "evidence": [ + { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### gRPC + +A user can query the `evidence` module using gRPC endpoints. + +#### Evidence + +Get evidence by hash + +```bash +cosmos.evidence.v1beta1.Query/Evidence +``` + +Example: + +```bash +grpcurl -plaintext -d '{"evidence_hash":"DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660"}' localhost:9090 cosmos.evidence.v1beta1.Query/Evidence +``` + +Example Output: + +```bash +{ + "evidence": { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } +} +``` + +#### All evidence + +Get all evidence + +```bash +cosmos.evidence.v1beta1.Query/AllEvidence +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.evidence.v1beta1.Query/AllEvidence +``` + +Example Output: + +```bash +{ + "evidence": [ + { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } + ], + "pagination": { + "total": "1" + } +} +``` diff --git a/docs/integrate/modules/feegrant/README.md b/docs/integrate/modules/feegrant/README.md new file mode 100644 index 000000000..9fcd1e476 --- /dev/null +++ b/docs/integrate/modules/feegrant/README.md @@ -0,0 +1,388 @@ +--- +sidebar_position: 1 +--- + +# `x/feegrant` + +## Abstract + +This document specifies the fee grant module. For the full ADR, please see [Fee Grant ADR-029](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-029-fee-grant-module.md). + +This module allows accounts to grant fee allowances and to use fees from their accounts. Grantees can execute any transaction without the need to maintain sufficient fees. + +## Contents + +* [Concepts](#concepts) +* [State](#state) + * [FeeAllowance](#feeallowance) + * [FeeAllowanceQueue](#feeallowancequeue) +* [Messages](#messages) + * [Msg/GrantAllowance](#msggrantallowance) + * [Msg/RevokeAllowance](#msgrevokeallowance) +* [Events](#events) +* [Msg Server](#msg-server) + * [MsgGrantAllowance](#msggrantallowance-1) + * [MsgRevokeAllowance](#msgrevokeallowance-1) + * [Exec fee allowance](#exec-fee-allowance) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + +## Concepts + +### Grant + +`Grant` is stored in the KVStore to record a grant with full context. Every grant will contain `granter`, `grantee` and what kind of `allowance` is granted. `granter` is an account address who is giving permission to `grantee` (the beneficiary account address) to pay for some or all of `grantee`'s transaction fees. `allowance` defines what kind of fee allowance (`BasicAllowance` or `PeriodicAllowance`, see below) is granted to `grantee`. `allowance` accepts an interface which implements `FeeAllowanceI`, encoded as `Any` type. There can be only one existing fee grant allowed for a `grantee` and `granter`, self grants are not allowed. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L83-L93 +``` + +`FeeAllowanceI` looks like: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/feegrant/fees.go#L9-L32 +``` + +### Fee Allowance types + +There are two types of fee allowances present at the moment: + +* `BasicAllowance` +* `PeriodicAllowance` +* `AllowedMsgAllowance` + +### BasicAllowance + +`BasicAllowance` is permission for `grantee` to use fee from a `granter`'s account. If any of the `spend_limit` or `expiration` reaches its limit, the grant will be removed from the state. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L15-L28 +``` + +* `spend_limit` is the limit of coins that are allowed to be used from the `granter` account. If it is empty, it assumes there's no spend limit, `grantee` can use any number of available coins from `granter` account address before the expiration. + +* `expiration` specifies an optional time when this allowance expires. If the value is left empty, there is no expiry for the grant. + +* When a grant is created with empty values for `spend_limit` and `expiration`, it is still a valid grant. It won't restrict the `grantee` to use any number of coins from `granter` and it won't have any expiration. The only way to restrict the `grantee` is by revoking the grant. + +### PeriodicAllowance + +`PeriodicAllowance` is a repeating fee allowance for the mentioned period, we can mention when the grant can expire as well as when a period can reset. We can also define the maximum number of coins that can be used in a mentioned period of time. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L34-L68 +``` + +* `basic` is the instance of `BasicAllowance` which is optional for periodic fee allowance. If empty, the grant will have no `expiration` and no `spend_limit`. + +* `period` is the specific period of time, after each period passes, `period_can_spend` will be reset. + +* `period_spend_limit` specifies the maximum number of coins that can be spent in the period. + +* `period_can_spend` is the number of coins left to be spent before the period_reset time. + +* `period_reset` keeps track of when a next period reset should happen. + +### AllowedMsgAllowance + +`AllowedMsgAllowance` is a fee allowance, it can be any of `BasicFeeAllowance`, `PeriodicAllowance` but restricted only to the allowed messages mentioned by the granter. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L70-L81 +``` + +* `allowance` is either `BasicAllowance` or `PeriodicAllowance`. + +* `allowed_messages` is array of messages allowed to execute the given allowance. + +### FeeGranter flag + +`feegrant` module introduces a `FeeGranter` flag for CLI for the sake of executing transactions with fee granter. When this flag is set, `clientCtx` will append the granter account address for transactions generated through CLI. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/cmd.go#L249-L260 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx/tx.go#L109-L109 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/builder.go#L275-L284 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L203-L224 +``` + +Example cmd: + +```go +./simd tx gov submit-proposal --title="Test Proposal" --description="My awesome proposal" --type="Text" --from validator-key --fee-granter=cosmos1xh44hxt7spr67hqaa7nyx5gnutrz5fraw6grxn --chain-id=testnet --fees="10stake" +``` + +### Granted Fee Deductions + +Fees are deducted from grants in the `x/auth` ante handler. To learn more about how ante handlers work, read the [Auth Module AnteHandlers Guide](../auth/README.md#antehandlers). + +### Gas + +In order to prevent DoS attacks, using a filtered `x/feegrant` incurs gas. The SDK must assure that the `grantee`'s transactions all conform to the filter set by the `granter`. The SDK does this by iterating over the allowed messages in the filter and charging 10 gas per filtered message. The SDK will then iterate over the messages being sent by the `grantee` to ensure the messages adhere to the filter, also charging 10 gas per message. The SDK will stop iterating and fail the transaction if it finds a message that does not conform to the filter. + +**WARNING**: The gas is charged against the granted allowance. Ensure your messages conform to the filter, if any, before sending transactions using your allowance. + +### Pruning + +A queue in the state maintained with the prefix of expiration of the grants and checks them on EndBlock with the current block time for every block to prune. + +## State + +### FeeAllowance + +Fee Allowances are identified by combining `Grantee` (the account address of fee allowance grantee) with the `Granter` (the account address of fee allowance granter). + +Fee allowance grants are stored in the state as follows: + +* Grant: `0x00 | grantee_addr_len (1 byte) | grantee_addr_bytes | granter_addr_len (1 byte) | granter_addr_bytes -> ProtocolBuffer(Grant)` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/feegrant/feegrant.pb.go#L222-L230 +``` + +### FeeAllowanceQueue + +Fee Allowances queue items are identified by combining the `FeeAllowancePrefixQueue` (i.e., 0x01), `expiration`, `grantee` (the account address of fee allowance grantee), `granter` (the account address of fee allowance granter). Endblocker checks `FeeAllowanceQueue` state for the expired grants and prunes them from `FeeAllowance` if there are any found. + +Fee allowance queue keys are stored in the state as follows: + +* Grant: `0x01 | expiration_bytes | grantee_addr_len (1 byte) | grantee_addr_bytes | granter_addr_len (1 byte) | granter_addr_bytes -> EmptyBytes` + +## Messages + +### Msg/GrantAllowance + +A fee allowance grant will be created with the `MsgGrantAllowance` message. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/feegrant/v1beta1/tx.proto#L25-L39 +``` + +### Msg/RevokeAllowance + +An allowed grant fee allowance can be removed with the `MsgRevokeAllowance` message. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/feegrant/v1beta1/tx.proto#L41-L54 +``` + +## Events + +The feegrant module emits the following events: + +## Msg Server + +### MsgGrantAllowance + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ---------------- | +| message | action | set_feegrant | +| message | granter | {granterAddress} | +| message | grantee | {granteeAddress} | + +### MsgRevokeAllowance + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ---------------- | +| message | action | revoke_feegrant | +| message | granter | {granterAddress} | +| message | grantee | {granteeAddress} | + +### Exec fee allowance + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ---------------- | +| message | action | use_feegrant | +| message | granter | {granterAddress} | +| message | grantee | {granteeAddress} | + +## Client + +### CLI + +A user can query and interact with the `feegrant` module using the CLI. + +#### Query + +The `query` commands allow users to query `feegrant` state. + +```shell +simd query feegrant --help +``` + +##### grant + +The `grant` command allows users to query a grant for a given granter-grantee pair. + +```shell +simd query feegrant grant [granter] [grantee] [flags] +``` + +Example: + +```shell +simd query feegrant grant cosmos1.. cosmos1.. +``` + +Example Output: + +```yml +allowance: + '@type': /cosmos.feegrant.v1beta1.BasicAllowance + expiration: null + spend_limit: + - amount: "100" + denom: stake +grantee: cosmos1.. +granter: cosmos1.. +``` + +##### grants + +The `grants` command allows users to query all grants for a given grantee. + +```shell +simd query feegrant grants [grantee] [flags] +``` + +Example: + +```shell +simd query feegrant grants cosmos1.. +``` + +Example Output: + +```yml +allowances: +- allowance: + '@type': /cosmos.feegrant.v1beta1.BasicAllowance + expiration: null + spend_limit: + - amount: "100" + denom: stake + grantee: cosmos1.. + granter: cosmos1.. +pagination: + next_key: null + total: "0" +``` + +#### Transactions + +The `tx` commands allow users to interact with the `feegrant` module. + +```shell +simd tx feegrant --help +``` + +##### grant + +The `grant` command allows users to grant fee allowances to another account. The fee allowance can have an expiration date, a total spend limit, and/or a periodic spend limit. + +```shell +simd tx feegrant grant [granter] [grantee] [flags] +``` + +Example (one-time spend limit): + +```shell +simd tx feegrant grant cosmos1.. cosmos1.. --spend-limit 100stake +``` + +Example (periodic spend limit): + +```shell +simd tx feegrant grant cosmos1.. cosmos1.. --period 3600 --period-limit 10stake +``` + +##### revoke + +The `revoke` command allows users to revoke a granted fee allowance. + +```shell +simd tx feegrant revoke [granter] [grantee] [flags] +``` + +Example: + +```shell +simd tx feegrant revoke cosmos1.. cosmos1.. +``` + +### gRPC + +A user can query the `feegrant` module using gRPC endpoints. + +#### Allowance + +The `Allowance` endpoint allows users to query a granted fee allowance. + +```shell +cosmos.feegrant.v1beta1.Query/Allowance +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"grantee":"cosmos1..","granter":"cosmos1.."}' \ + localhost:9090 \ + cosmos.feegrant.v1beta1.Query/Allowance +``` + +Example Output: + +```json +{ + "allowance": { + "granter": "cosmos1..", + "grantee": "cosmos1..", + "allowance": {"@type":"/cosmos.feegrant.v1beta1.BasicAllowance","spendLimit":[{"denom":"stake","amount":"100"}]} + } +} +``` + +#### Allowances + +The `Allowances` endpoint allows users to query all granted fee allowances for a given grantee. + +```shell +cosmos.feegrant.v1beta1.Query/Allowances +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.feegrant.v1beta1.Query/Allowances +``` + +Example Output: + +```json +{ + "allowances": [ + { + "granter": "cosmos1..", + "grantee": "cosmos1..", + "allowance": {"@type":"/cosmos.feegrant.v1beta1.BasicAllowance","spendLimit":[{"denom":"stake","amount":"100"}]} + } + ], + "pagination": { + "total": "1" + } +} +``` diff --git a/docs/integrate/modules/genutil/README.md b/docs/integrate/modules/genutil/README.md new file mode 100644 index 000000000..c534b8b0d --- /dev/null +++ b/docs/integrate/modules/genutil/README.md @@ -0,0 +1,69 @@ +# `x/genutil` + +## Concepts + +The `genutil` package contains a variaety of genesis utility functionalities for usage within a blockchain application. Namely: + +* Genesis transactions related (gentx) +* Commands for collection and creation of gentxs +* `InitChain` processing of gentxs +* Genesis file validation +* Genesis file migration +* CometBFT related initialization + * Translation of an app genesis to a CometBFT genesis + +## Client + +### CLI + +The genutil commands are available under the `genesis` subcommand. + +#### add-genesis-account + +Add a genesis account to `genesis.json`. Learn more [here](https://docs.cosmos.network/main/run-node/run-node#adding-genesis-accounts). + +#### collect-gentxs + +Collect genesis txs and output a `genesis.json` file. + +```shell +simd genesis collect-gentxs +``` + +This will create a new `genesis.json` file that includes data from all the validators (we sometimes call it the "super genesis file" to distinguish it from single-validator genesis files). + +#### gentx + +Generate a genesis tx carrying a self delegation. + +```shell +simd genesis gentx [key_name] [amount] --chain-id [chain-id] +``` + +This will create the genesis transaction for your new chain. Here `amount` should be at least `1000000000stake`. +If you provide too much or too little, you will encounter an error when starting a node. + +#### migrate + +Migrate genesis to a specified target (SDK) version. + +```shell +simd genesis migrate [target-version] +``` + +:::tip +The `migrate` command is extensible and takes a `MigrationMap`. This map is a mapping of target versions to genesis migrations functions. +When not using the default `MigrationMap`, it is recommended to still call the default `MigrationMap` corresponding the SDK version of the chain and prepend/append your own genesis migrations. +::: + +#### validate-genesis + +Validates the genesis file at the default location or at the location passed as an argument. + +```shell +simd genesis validate-genesis +``` + +:::warning +Validate genesis only validates if the genesis is valid at the **current application binary**. For validating a genesis from a previous version of the application, use the `migrate` command to migrate the genesis to the current version. +::: diff --git a/docs/integrate/modules/gov/README.md b/docs/integrate/modules/gov/README.md new file mode 100644 index 000000000..8dac16a3e --- /dev/null +++ b/docs/integrate/modules/gov/README.md @@ -0,0 +1,2658 @@ +--- +sidebar_position: 1 +--- + +# `x/gov` + +## Abstract + +This paper specifies the Governance module of the Cosmos SDK, which was first +described in the [Cosmos Whitepaper](https://cosmos.network/about/whitepaper) in +June 2016. + +The module enables Cosmos SDK based blockchain to support an on-chain governance +system. In this system, holders of the native staking token of the chain can vote +on proposals on a 1 token 1 vote basis. Next is a list of features the module +currently supports: + +* **Proposal submission:** Users can submit proposals with a deposit. Once the +minimum deposit is reached, the proposal enters voting period. +* **Vote:** Participants can vote on proposals that reached MinDeposit +* **Inheritance and penalties:** Delegators inherit their validator's vote if +they don't vote themselves. +* **Claiming deposit:** Users that deposited on proposals can recover their +deposits if the proposal was accepted or rejected. If the proposal was vetoed, or never entered voting period, the deposit is burned. + +This module will be used in the Cosmos Hub, the first Hub in the Cosmos network. +Features that may be added in the future are described in [Future Improvements](#future-improvements). + +## Contents + +The following specification uses *ATOM* as the native staking token. The module +can be adapted to any Proof-Of-Stake blockchain by replacing *ATOM* with the native +staking token of the chain. + +* [Concepts](#concepts) + * [Proposal submission](#proposal-submission) + * [Deposit](#deposit) + * [Vote](#vote) +* [State](#state) + * [Proposals](#proposals) + * [Parameters and base types](#parameters-and-base-types) + * [Deposit](#deposit-1) + * [ValidatorGovInfo](#validatorgovinfo) + * [Stores](#stores) + * [Proposal Processing Queue](#proposal-processing-queue) + * [Legacy Proposal](#legacy-proposal) +* [Messages](#messages) + * [Proposal Submission](#proposal-submission-1) + * [Deposit](#deposit-2) + * [Vote](#vote-1) +* [Events](#events) + * [EndBlocker](#endblocker) + * [Handlers](#handlers) +* [Parameters](#parameters) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + * [REST](#rest) +* [Metadata](#metadata) + * [Proposal](#proposal-3) + * [Vote](#vote-5) +* [Future Improvements](#future-improvements) + +## Concepts + +*Disclaimer: This is work in progress. Mechanisms are susceptible to change.* + +The governance process is divided in a few steps that are outlined below: + +* **Proposal submission:** Proposal is submitted to the blockchain with a + deposit. +* **Vote:** Once deposit reaches a certain value (`MinDeposit`), proposal is + confirmed and vote opens. Bonded Atom holders can then send `TxGovVote` + transactions to vote on the proposal. +* **Execution** After a period of time, the votes are tallied and depending + on the result, the messages in the proposal will be executed. + +### Proposal submission + +#### Right to submit a proposal + +Every account can submit proposals by sending a `MsgSubmitProposal` transaction. +Once a proposal is submitted, it is identified by its unique `proposalID`. + +#### Proposal Messages + +A proposal includes an array of `sdk.Msg`s which are executed automatically if the +proposal passes. The messages are executed by the governance `ModuleAccount` itself. Modules +such as `x/upgrade`, that want to allow certain messages to be executed by governance +only should add a whitelist within the respective msg server, granting the governance +module the right to execute the message once a quorum has been reached. The governance +module uses the `MsgServiceRouter` to check that these messages are correctly constructed +and have a respective path to execute on but do not perform a full validity check. + +### Deposit + +To prevent spam, proposals must be submitted with a deposit in the coins defined by +the `MinDeposit` param. + +When a proposal is submitted, it has to be accompanied with a deposit that must be +strictly positive, but can be inferior to `MinDeposit`. The submitter doesn't need +to pay for the entire deposit on their own. The newly created proposal is stored in +an *inactive proposal queue* and stays there until its deposit passes the `MinDeposit`. +Other token holders can increase the proposal's deposit by sending a `Deposit` +transaction. If a proposal doesn't pass the `MinDeposit` before the deposit end time +(the time when deposits are no longer accepted), the proposal will be destroyed: the +proposal will be removed from state and the deposit will be burned (see x/gov `EndBlocker`). +When a proposal deposit passes the `MinDeposit` threshold (even during the proposal +submission) before the deposit end time, the proposal will be moved into the +*active proposal queue* and the voting period will begin. + +The deposit is kept in escrow and held by the governance `ModuleAccount` until the +proposal is finalized (passed or rejected). + +#### Deposit refund and burn + +When a proposal is finalized, the coins from the deposit are either refunded or burned +according to the final tally of the proposal: + +* If the proposal is approved or rejected but *not* vetoed, each deposit will be + automatically refunded to its respective depositor (transferred from the governance + `ModuleAccount`). +* When the proposal is vetoed with greater than 1/3, deposits will be burned from the + governance `ModuleAccount` and the proposal information along with its deposit + information will be removed from state. +* All refunded or burned deposits are removed from the state. Events are issued when + burning or refunding a deposit. + +### Vote + +#### Participants + +*Participants* are users that have the right to vote on proposals. On the +Cosmos Hub, participants are bonded Atom holders. Unbonded Atom holders and +other users do not get the right to participate in governance. However, they +can submit and deposit on proposals. + +Note that when *participants* have bonded and unbonded Atoms, their voting power is calculated from their bonded Atom holdings only. + +#### Voting period + +Once a proposal reaches `MinDeposit`, it immediately enters `Voting period`. We +define `Voting period` as the interval between the moment the vote opens and +the moment the vote closes. `Voting period` should always be shorter than +`Unbonding period` to prevent double voting. The initial value of +`Voting period` is 2 weeks. + +#### Option set + +The option set of a proposal refers to the set of choices a participant can +choose from when casting its vote. + +The initial option set includes the following options: + +* `Yes` +* `No` +* `NoWithVeto` +* `Abstain` + +`NoWithVeto` counts as `No` but also adds a `Veto` vote. `Abstain` option +allows voters to signal that they do not intend to vote in favor or against the +proposal but accept the result of the vote. + +*Note: from the UI, for urgent proposals we should maybe add a ‘Not Urgent’ option that casts a `NoWithVeto` vote.* + +#### Weighted Votes + +[ADR-037](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-037-gov-split-vote.md) introduces the weighted vote feature which allows a staker to split their votes into several voting options. For example, it could use 70% of its voting power to vote Yes and 30% of its voting power to vote No. + +Often times the entity owning that address might not be a single individual. For example, a company might have different stakeholders who want to vote differently, and so it makes sense to allow them to split their voting power. Currently, it is not possible for them to do "passthrough voting" and giving their users voting rights over their tokens. However, with this system, exchanges can poll their users for voting preferences, and then vote on-chain proportionally to the results of the poll. + +To represent weighted vote on chain, we use the following Protobuf message. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1beta1/gov.proto#L34-L47 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1beta1/gov.proto#L181-L201 +``` + +For a weighted vote to be valid, the `options` field must not contain duplicate vote options, and the sum of weights of all options must be equal to 1. + +### Quorum + +Quorum is defined as the minimum percentage of voting power that needs to be +cast on a proposal for the result to be valid. + +### Expedited Proposals + +A proposal can be expedited, making the proposal use shorter voting duration and a higher tally threshold by its default. If an expedited proposal fails to meet the threshold within the scope of shorter voting duration, the expedited proposal is then converted to a regular proposal and restarts voting under regular voting conditions. + +#### Threshold + +Threshold is defined as the minimum proportion of `Yes` votes (excluding +`Abstain` votes) for the proposal to be accepted. + +Initially, the threshold is set at 50% of `Yes` votes, excluding `Abstain` +votes. A possibility to veto exists if more than 1/3rd of all votes are +`NoWithVeto` votes. Note, both of these values are derived from the `TallyParams` +on-chain parameter, which is modifiable by governance. +This means that proposals are accepted iff: + +* There exist bonded tokens. +* Quorum has been achieved. +* The proportion of `Abstain` votes is inferior to 1/1. +* The proportion of `NoWithVeto` votes is inferior to 1/3, including + `Abstain` votes. +* The proportion of `Yes` votes, excluding `Abstain` votes, at the end of + the voting period is superior to 1/2. + +For expedited proposals, by default, the threshold is higher than with a *normal proposal*, namely, 66.7%. + +#### Inheritance + +If a delegator does not vote, it will inherit its validator vote. + +* If the delegator votes before its validator, it will not inherit from the + validator's vote. +* If the delegator votes after its validator, it will override its validator + vote with its own. If the proposal is urgent, it is possible + that the vote will close before delegators have a chance to react and + override their validator's vote. This is not a problem, as proposals require more than 2/3rd of the total voting power to pass, when tallied at the end of the voting period. Because as little as 1/3 + 1 validation power could collude to censor transactions, non-collusion is already assumed for ranges exceeding this threshold. + +#### Validator’s punishment for non-voting + +At present, validators are not punished for failing to vote. + +#### Governance address + +Later, we may add permissioned keys that could only sign txs from certain modules. For the MVP, the `Governance address` will be the main validator address generated at account creation. This address corresponds to a different PrivKey than the CometBFT PrivKey which is responsible for signing consensus messages. Validators thus do not have to sign governance transactions with the sensitive CometBFT PrivKey. + +#### Burnable Params + +There are three parameters that define if the deposit of a proposal should be burned or returned to the depositors. + +* `BurnVoteVeto` burns the proposal deposit if the proposal gets vetoed. +* `BurnVoteQuorum` burns the proposal deposit if the proposal deposit if the vote does not reach quorum. +* `BurnProposalDepositPrevote` burns the proposal deposit if it does not enter the voting phase. + +> Note: These parameters are modifiable via governance. + +## State + +### Constitution + +`Constitution` is found in the genesis state. It is a string field intended to be used to descibe the purpose of a particular blockchain, and its expected norms. A few examples of how the constitution field can be used: + +* define the purpose of the chain, laying a foundation for its future development +* set expectations for delegators +* set expectations for validators +* define the chain's relationship to "meatspace" entities, like a foundation or corporation + +Since this is more of a social feature than a technical feature, we'll now get into some items that may have been useful to have in a genesis constitution: + +* What limitations on governance exist, if any? + * is it okay for the community to slash the wallet of a whale that they no longer feel that they want around? (viz: Juno Proposal 4 and 16) + * can governance "socially slash" a validator who is using unapproved MEV? (viz: commonwealth.im/osmosis) + * In the event of an economic emergency, what should validators do? + * Terra crash of May, 2022, saw validators choose to run a new binary with code that had not been approved by governance, because the governance token had been inflated to nothing. +* What is the purpose of the chain, specifically? + * best example of this is the Cosmos hub, where different founding groups, have different interpertations of the purpose of the network. + +This genesis entry, "constitution" hasn't been designed for existing chains, who should likely just ratify a constitution using their governance system. Instead, this is for new chains. It will allow for validators to have a much clearer idea of purpose and the expecations placed on them while operating thier nodes. Likewise, for community members, the constitution will give them some idea of what to expect from both the "chain team" and the validators, respectively. + +This constitution is designed to be immutable, and placed only in genesis, though that could change over time by a pull request to the cosmos-sdk that allows for the constitution to be changed by governance. Communities whishing to make amendments to their original constitution should use the governance mechanism and a "signaling proposal" to do exactly that. + +**Ideal use scenario for a cosmos chain constitution** + +As a chain developer, you decide that you'd like to provide clarity to your key user groups: + +* validators +* token holders +* developers (yourself) + +You use the constitution to immutably store some Markdown in genesis, so that when difficult questions come up, the constutituon can provide guidance to the community. + +### Proposals + +`Proposal` objects are used to tally votes and generally track the proposal's state. +They contain an array of arbitrary `sdk.Msg`'s which the governance module will attempt +to resolve and then execute if the proposal passes. `Proposal`'s are identified by a +unique id and contains a series of timestamps: `submit_time`, `deposit_end_time`, +`voting_start_time`, `voting_end_time` which track the lifecycle of a proposal + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/gov.proto#L51-L99 +``` + +A proposal will generally require more than just a set of messages to explain its +purpose but need some greater justification and allow a means for interested participants +to discuss and debate the proposal. +In most cases, **it is encouraged to have an off-chain system that supports the on-chain governance process**. +To accommodate for this, a proposal contains a special **`metadata`** field, a string, +which can be used to add context to the proposal. The `metadata` field allows custom use for networks, +however, it is expected that the field contains a URL or some form of CID using a system such as +[IPFS](https://docs.ipfs.io/concepts/content-addressing/). To support the case of +interoperability across networks, the SDK recommends that the `metadata` represents +the following `JSON` template: + +```json +{ + "title": "...", + "description": "...", + "forum": "...", // a link to the discussion platform (i.e. Discord) + "other": "..." // any extra data that doesn't correspond to the other fields +} +``` + +This makes it far easier for clients to support multiple networks. + +The metadata has a maximum length that is chosen by the app developer, and +passed into the gov keeper as a config. The default maximum length in the SDK is 255 characters. + +#### Writing a module that uses governance + +There are many aspects of a chain, or of the individual modules that you may want to +use governance to perform such as changing various parameters. This is very simple +to do. First, write out your message types and `MsgServer` implementation. Add an +`authority` field to the keeper which will be populated in the constructor with the +governance module account: `govKeeper.GetGovernanceAccount().GetAddress()`. Then for +the methods in the `msg_server.go`, perform a check on the message that the signer +matches `authority`. This will prevent any user from executing that message. + +### Parameters and base types + +`Parameters` define the rules according to which votes are run. There can only +be one active parameter set at any given time. If governance wants to change a +parameter set, either to modify a value or add/remove a parameter field, a new +parameter set has to be created and the previous one rendered inactive. + +#### DepositParams + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/gov.proto#L152-L162 +``` + +#### VotingParams + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/gov.proto#L164-L168 +``` + +#### TallyParams + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/gov.proto#L170-L182 +``` + +Parameters are stored in a global `GlobalParams` KVStore. + +Additionally, we introduce some basic types: + +```go +type Vote byte + +const ( + VoteYes = 0x1 + VoteNo = 0x2 + VoteNoWithVeto = 0x3 + VoteAbstain = 0x4 +) + +type ProposalType string + +const ( + ProposalTypePlainText = "Text" + ProposalTypeSoftwareUpgrade = "SoftwareUpgrade" +) + +type ProposalStatus byte + + +const ( + StatusNil ProposalStatus = 0x00 + StatusDepositPeriod ProposalStatus = 0x01 // Proposal is submitted. Participants can deposit on it but not vote + StatusVotingPeriod ProposalStatus = 0x02 // MinDeposit is reached, participants can vote + StatusPassed ProposalStatus = 0x03 // Proposal passed and successfully executed + StatusRejected ProposalStatus = 0x04 // Proposal has been rejected + StatusFailed ProposalStatus = 0x05 // Proposal passed but failed execution +) +``` + +### Deposit + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/gov.proto#L38-L49 +``` + +### ValidatorGovInfo + +This type is used in a temp map when tallying + +```go + type ValidatorGovInfo struct { + Minus sdk.Dec + Vote Vote + } +``` + +## Stores + +:::note +Stores are KVStores in the multi-store. The key to find the store is the first parameter in the list +::: + +We will use one KVStore `Governance` to store four mappings: + +* A mapping from `proposalID|'proposal'` to `Proposal`. +* A mapping from `proposalID|'addresses'|address` to `Vote`. This mapping allows + us to query all addresses that voted on the proposal along with their vote by + doing a range query on `proposalID:addresses`. +* A mapping from `ParamsKey|'Params'` to `Params`. This map allows to query all + x/gov params. +* A mapping from `VotingPeriodProposalKeyPrefix|proposalID` to a single byte. This allows + us to know if a proposal is in the voting period or not with very low gas cost. + +For pseudocode purposes, here are the two function we will use to read or write in stores: + +* `load(StoreKey, Key)`: Retrieve item stored at key `Key` in store found at key `StoreKey` in the multistore +* `store(StoreKey, Key, value)`: Write value `Value` at key `Key` in store found at key `StoreKey` in the multistore + +### Proposal Processing Queue + +**Store:** + +* `ProposalProcessingQueue`: A queue `queue[proposalID]` containing all the + `ProposalIDs` of proposals that reached `MinDeposit`. During each `EndBlock`, + all the proposals that have reached the end of their voting period are processed. + To process a finished proposal, the application tallies the votes, computes the + votes of each validator and checks if every validator in the validator set has + voted. If the proposal is accepted, deposits are refunded. Finally, the proposal + content `Handler` is executed. + +And the pseudocode for the `ProposalProcessingQueue`: + +```go + in EndBlock do + + for finishedProposalID in GetAllFinishedProposalIDs(block.Time) + proposal = load(Governance, ) // proposal is a const key + + validators = Keeper.getAllValidators() + tmpValMap := map(sdk.AccAddress)ValidatorGovInfo + + // Initiate mapping at 0. This is the amount of shares of the validator's vote that will be overridden by their delegator's votes + for each validator in validators + tmpValMap(validator.OperatorAddr).Minus = 0 + + // Tally + voterIterator = rangeQuery(Governance, ) //return all the addresses that voted on the proposal + for each (voterAddress, vote) in voterIterator + delegations = stakingKeeper.getDelegations(voterAddress) // get all delegations for current voter + + for each delegation in delegations + // make sure delegation.Shares does NOT include shares being unbonded + tmpValMap(delegation.ValidatorAddr).Minus += delegation.Shares + proposal.updateTally(vote, delegation.Shares) + + _, isVal = stakingKeeper.getValidator(voterAddress) + if (isVal) + tmpValMap(voterAddress).Vote = vote + + tallyingParam = load(GlobalParams, 'TallyingParam') + + // Update tally if validator voted + for each validator in validators + if tmpValMap(validator).HasVoted + proposal.updateTally(tmpValMap(validator).Vote, (validator.TotalShares - tmpValMap(validator).Minus)) + + + + // Check if proposal is accepted or rejected + totalNonAbstain := proposal.YesVotes + proposal.NoVotes + proposal.NoWithVetoVotes + if (proposal.Votes.YesVotes/totalNonAbstain > tallyingParam.Threshold AND proposal.Votes.NoWithVetoVotes/totalNonAbstain < tallyingParam.Veto) + // proposal was accepted at the end of the voting period + // refund deposits (non-voters already punished) + for each (amount, depositor) in proposal.Deposits + depositor.AtomBalance += amount + + stateWriter, err := proposal.Handler() + if err != nil + // proposal passed but failed during state execution + proposal.CurrentStatus = ProposalStatusFailed + else + // proposal pass and state is persisted + proposal.CurrentStatus = ProposalStatusAccepted + stateWriter.save() + else + // proposal was rejected + proposal.CurrentStatus = ProposalStatusRejected + + store(Governance, , proposal) +``` + +### Legacy Proposal + +A legacy proposal is the old implementation of governance proposal. +Contrary to proposal that can contain any messages, a legacy proposal allows to submit a set of pre-defined proposals. +These proposal are defined by their types. + +While proposals should use the new implementation of the governance proposal, we need still to use legacy proposal in order to submit a `software-upgrade` and a `cancel-software-upgrade` proposal. + +More information on how to submit proposals in the [client section](#client). + +## Messages + +### Proposal Submission + +Proposals can be submitted by any account via a `MsgSubmitProposal` transaction. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/tx.proto#L42-L69 +``` + +All `sdk.Msgs` passed into the `messages` field of a `MsgSubmitProposal` message +must be registered in the app's `MsgServiceRouter`. Each of these messages must +have one signer, namely the gov module account. And finally, the metadata length +must not be larger than the `maxMetadataLen` config passed into the gov keeper. + +**State modifications:** + +* Generate new `proposalID` +* Create new `Proposal` +* Initialise `Proposal`'s attributes +* Decrease balance of sender by `InitialDeposit` +* If `MinDeposit` is reached: + * Push `proposalID` in `ProposalProcessingQueue` +* Transfer `InitialDeposit` from the `Proposer` to the governance `ModuleAccount` + +A `MsgSubmitProposal` transaction can be handled according to the following +pseudocode. + +```go +// PSEUDOCODE // +// Check if MsgSubmitProposal is valid. If it is, create proposal // + +upon receiving txGovSubmitProposal from sender do + + if !correctlyFormatted(txGovSubmitProposal) + // check if proposal is correctly formatted and the messages have routes to other modules. Includes fee payment. + // check if all messages' unique Signer is the gov acct. + // check if the metadata is not too long. + throw + + initialDeposit = txGovSubmitProposal.InitialDeposit + if (initialDeposit.Atoms <= 0) OR (sender.AtomBalance < initialDeposit.Atoms) + // InitialDeposit is negative or null OR sender has insufficient funds + throw + + if (txGovSubmitProposal.Type != ProposalTypePlainText) OR (txGovSubmitProposal.Type != ProposalTypeSoftwareUpgrade) + + sender.AtomBalance -= initialDeposit.Atoms + + depositParam = load(GlobalParams, 'DepositParam') + + proposalID = generate new proposalID + proposal = NewProposal() + + proposal.Messages = txGovSubmitProposal.Messages + proposal.Metadata = txGovSubmitProposal.Metadata + proposal.TotalDeposit = initialDeposit + proposal.SubmitTime = + proposal.DepositEndTime = .Add(depositParam.MaxDepositPeriod) + proposal.Deposits.append({initialDeposit, sender}) + proposal.Submitter = sender + proposal.YesVotes = 0 + proposal.NoVotes = 0 + proposal.NoWithVetoVotes = 0 + proposal.AbstainVotes = 0 + proposal.CurrentStatus = ProposalStatusOpen + + store(Proposals, , proposal) // Store proposal in Proposals mapping + return proposalID +``` + +### Deposit + +Once a proposal is submitted, if +`Proposal.TotalDeposit < ActiveParam.MinDeposit`, Atom holders can send +`MsgDeposit` transactions to increase the proposal's deposit. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/tx.proto#L134-L147 +``` + +**State modifications:** + +* Decrease balance of sender by `deposit` +* Add `deposit` of sender in `proposal.Deposits` +* Increase `proposal.TotalDeposit` by sender's `deposit` +* If `MinDeposit` is reached: + * Push `proposalID` in `ProposalProcessingQueueEnd` +* Transfer `Deposit` from the `proposer` to the governance `ModuleAccount` + +A `MsgDeposit` transaction has to go through a number of checks to be valid. +These checks are outlined in the following pseudocode. + +```go +// PSEUDOCODE // +// Check if MsgDeposit is valid. If it is, increase deposit and check if MinDeposit is reached + +upon receiving txGovDeposit from sender do + // check if proposal is correctly formatted. Includes fee payment. + + if !correctlyFormatted(txGovDeposit) + throw + + proposal = load(Proposals, ) // proposal is a const key, proposalID is variable + + if (proposal == nil) + // There is no proposal for this proposalID + throw + + if (txGovDeposit.Deposit.Atoms <= 0) OR (sender.AtomBalance < txGovDeposit.Deposit.Atoms) OR (proposal.CurrentStatus != ProposalStatusOpen) + + // deposit is negative or null + // OR sender has insufficient funds + // OR proposal is not open for deposit anymore + + throw + + depositParam = load(GlobalParams, 'DepositParam') + + if (CurrentBlock >= proposal.SubmitBlock + depositParam.MaxDepositPeriod) + proposal.CurrentStatus = ProposalStatusClosed + + else + // sender can deposit + sender.AtomBalance -= txGovDeposit.Deposit.Atoms + + proposal.Deposits.append({txGovVote.Deposit, sender}) + proposal.TotalDeposit.Plus(txGovDeposit.Deposit) + + if (proposal.TotalDeposit >= depositParam.MinDeposit) + // MinDeposit is reached, vote opens + + proposal.VotingStartBlock = CurrentBlock + proposal.CurrentStatus = ProposalStatusActive + ProposalProcessingQueue.push(txGovDeposit.ProposalID) + + store(Proposals, , proposal) +``` + +### Vote + +Once `ActiveParam.MinDeposit` is reached, voting period starts. From there, +bonded Atom holders are able to send `MsgVote` transactions to cast their +vote on the proposal. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/gov/v1/tx.proto#L92-L108 +``` + +**State modifications:** + +* Record `Vote` of sender + +:::note +Gas cost for this message has to take into account the future tallying of the vote in EndBlocker. +::: + +Next is a pseudocode outline of the way `MsgVote` transactions are handled: + +```go + // PSEUDOCODE // + // Check if MsgVote is valid. If it is, count vote// + + upon receiving txGovVote from sender do + // check if proposal is correctly formatted. Includes fee payment. + + if !correctlyFormatted(txGovDeposit) + throw + + proposal = load(Proposals, ) + + if (proposal == nil) + // There is no proposal for this proposalID + throw + + + if (proposal.CurrentStatus == ProposalStatusActive) + + + // Sender can vote if + // Proposal is active + // Sender has some bonds + + store(Governance, , txGovVote.Vote) // Voters can vote multiple times. Re-voting overrides previous vote. This is ok because tallying is done once at the end. +``` + +## Events + +The governance module emits the following events: + +### EndBlocker + +| Type | Attribute Key | Attribute Value | +|-------------------|-----------------|------------------| +| inactive_proposal | proposal_id | {proposalID} | +| inactive_proposal | proposal_result | {proposalResult} | +| active_proposal | proposal_id | {proposalID} | +| active_proposal | proposal_result | {proposalResult} | + +### Handlers + +#### MsgSubmitProposal + +| Type | Attribute Key | Attribute Value | +|---------------------|---------------------|-----------------| +| submit_proposal | proposal_id | {proposalID} | +| submit_proposal [0] | voting_period_start | {proposalID} | +| proposal_deposit | amount | {depositAmount} | +| proposal_deposit | proposal_id | {proposalID} | +| message | module | governance | +| message | action | submit_proposal | +| message | sender | {senderAddress} | + +* [0] Event only emitted if the voting period starts during the submission. + +#### MsgVote + +| Type | Attribute Key | Attribute Value | +|---------------|---------------|-----------------| +| proposal_vote | option | {voteOption} | +| proposal_vote | proposal_id | {proposalID} | +| message | module | governance | +| message | action | vote | +| message | sender | {senderAddress} | + +#### MsgVoteWeighted + +| Type | Attribute Key | Attribute Value | +|---------------|---------------|-----------------------| +| proposal_vote | option | {weightedVoteOptions} | +| proposal_vote | proposal_id | {proposalID} | +| message | module | governance | +| message | action | vote | +| message | sender | {senderAddress} | + +#### MsgDeposit + +| Type | Attribute Key | Attribute Value | +|----------------------|---------------------|-----------------| +| proposal_deposit | amount | {depositAmount} | +| proposal_deposit | proposal_id | {proposalID} | +| proposal_deposit [0] | voting_period_start | {proposalID} | +| message | module | governance | +| message | action | deposit | +| message | sender | {senderAddress} | + +* [0] Event only emitted if the voting period starts during the submission. + +## Parameters + +The governance module contains the following parameters: + +| Key | Type | Example | +|-------------------------------|------------------|-----------------------------------------| +| min_deposit | array (coins) | [{"denom":"uatom","amount":"10000000"}] | +| max_deposit_period | string (time ns) | "172800000000000" (17280s) | +| voting_period | string (time ns) | "172800000000000" (17280s) | +| quorum | string (dec) | "0.334000000000000000" | +| threshold | string (dec) | "0.500000000000000000" | +| veto | string (dec) | "0.334000000000000000" | +| expedited_threshold | string (time ns) | "0.667000000000000000" | +| expedited_voting_period | string (time ns) | "86400000000000" (8600s) | +| expedited_min_deposit | array (coins) | [{"denom":"uatom","amount":"50000000"}] | +| burn_proposal_deposit_prevote | bool | false | +| burn_vote_quorum | bool | false | +| burn_vote_veto | bool | true | + +**NOTE**: The governance module contains parameters that are objects unlike other +modules. If only a subset of parameters are desired to be changed, only they need +to be included and not the entire parameter object structure. + +## Client + +### CLI + +A user can query and interact with the `gov` module using the CLI. + +#### Query + +The `query` commands allow users to query `gov` state. + +```bash +simd query gov --help +``` + +##### deposit + +The `deposit` command allows users to query a deposit for a given proposal from a given depositor. + +```bash +simd query gov deposit [proposal-id] [depositer-addr] [flags] +``` + +Example: + +```bash +simd query gov deposit 1 cosmos1.. +``` + +Example Output: + +```bash +amount: +- amount: "100" + denom: stake +depositor: cosmos1.. +proposal_id: "1" +``` + +##### deposits + +The `deposits` command allows users to query all deposits for a given proposal. + +```bash +simd query gov deposits [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov deposits 1 +``` + +Example Output: + +```bash +deposits: +- amount: + - amount: "100" + denom: stake + depositor: cosmos1.. + proposal_id: "1" +pagination: + next_key: null + total: "0" +``` + +##### param + +The `param` command allows users to query a given parameter for the `gov` module. + +```bash +simd query gov param [param-type] [flags] +``` + +Example: + +```bash +simd query gov param voting +``` + +Example Output: + +```bash +voting_period: "172800000000000" +``` + +##### params + +The `params` command allows users to query all parameters for the `gov` module. + +```bash +simd query gov params [flags] +``` + +Example: + +```bash +simd query gov params +``` + +Example Output: + +```bash +deposit_params: + max_deposit_period: 172800s + min_deposit: + - amount: "10000000" + denom: stake +params: + expedited_min_deposit: + - amount: "50000000" + denom: stake + expedited_threshold: "0.670000000000000000" + expedited_voting_period: 86400s + max_deposit_period: 172800s + min_deposit: + - amount: "10000000" + denom: stake + min_initial_deposit_ratio: "0.000000000000000000" + proposal_cancel_burn_rate: "0.500000000000000000" + quorum: "0.334000000000000000" + threshold: "0.500000000000000000" + veto_threshold: "0.334000000000000000" + voting_period: 172800s +tally_params: + quorum: "0.334000000000000000" + threshold: "0.500000000000000000" + veto_threshold: "0.334000000000000000" +voting_params: + voting_period: 172800s +``` + +##### proposal + +The `proposal` command allows users to query a given proposal. + +```bash +simd query gov proposal [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov proposal 1 +``` + +Example Output: + +```bash +deposit_end_time: "2022-03-30T11:50:20.819676256Z" +final_tally_result: + abstain_count: "0" + no_count: "0" + no_with_veto_count: "0" + yes_count: "0" +id: "1" +messages: +- '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "10" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. +metadata: AQ== +status: PROPOSAL_STATUS_DEPOSIT_PERIOD +submit_time: "2022-03-28T11:50:20.819676256Z" +total_deposit: +- amount: "10" + denom: stake +voting_end_time: null +voting_start_time: null +``` + +##### proposals + +The `proposals` command allows users to query all proposals with optional filters. + +```bash +simd query gov proposals [flags] +``` + +Example: + +```bash +simd query gov proposals +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +proposals: +- deposit_end_time: "2022-03-30T11:50:20.819676256Z" + final_tally_result: + abstain_count: "0" + no_count: "0" + no_with_veto_count: "0" + yes_count: "0" + id: "1" + messages: + - '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "10" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. + metadata: AQ== + status: PROPOSAL_STATUS_DEPOSIT_PERIOD + submit_time: "2022-03-28T11:50:20.819676256Z" + total_deposit: + - amount: "10" + denom: stake + voting_end_time: null + voting_start_time: null +- deposit_end_time: "2022-03-30T14:02:41.165025015Z" + final_tally_result: + abstain_count: "0" + no_count: "0" + no_with_veto_count: "0" + yes_count: "0" + id: "2" + messages: + - '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "10" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. + metadata: AQ== + status: PROPOSAL_STATUS_DEPOSIT_PERIOD + submit_time: "2022-03-28T14:02:41.165025015Z" + total_deposit: + - amount: "10" + denom: stake + voting_end_time: null + voting_start_time: null +``` + +##### proposer + +The `proposer` command allows users to query the proposer for a given proposal. + +```bash +simd query gov proposer [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov proposer 1 +``` + +Example Output: + +```bash +proposal_id: "1" +proposer: cosmos1.. +``` + +##### tally + +The `tally` command allows users to query the tally of a given proposal vote. + +```bash +simd query gov tally [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov tally 1 +``` + +Example Output: + +```bash +abstain: "0" +"no": "0" +no_with_veto: "0" +"yes": "1" +``` + +##### vote + +The `vote` command allows users to query a vote for a given proposal. + +```bash +simd query gov vote [proposal-id] [voter-addr] [flags] +``` + +Example: + +```bash +simd query gov vote 1 cosmos1.. +``` + +Example Output: + +```bash +option: VOTE_OPTION_YES +options: +- option: VOTE_OPTION_YES + weight: "1.000000000000000000" +proposal_id: "1" +voter: cosmos1.. +``` + +##### votes + +The `votes` command allows users to query all votes for a given proposal. + +```bash +simd query gov votes [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov votes 1 +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +votes: +- option: VOTE_OPTION_YES + options: + - option: VOTE_OPTION_YES + weight: "1.000000000000000000" + proposal_id: "1" + voter: cosmos1.. +``` + +#### Transactions + +The `tx` commands allow users to interact with the `gov` module. + +```bash +simd tx gov --help +``` + +##### deposit + +The `deposit` command allows users to deposit tokens for a given proposal. + +```bash +simd tx gov deposit [proposal-id] [deposit] [flags] +``` + +Example: + +```bash +simd tx gov deposit 1 10000000stake --from cosmos1.. +``` + +##### draft-proposal + +The `draft-proposal` command allows users to draft any type of proposal. +The command returns a `draft_proposal.json`, to be used by `submit-proposal` after being completed. +The `draft_metadata.json` is meant to be uploaded to [IPFS](#metadata). + +```bash +simd tx gov draft-proposal +``` + +##### submit-proposal + +The `submit-proposal` command allows users to submit a governance proposal along with some messages and metadata. +Messages, metadata and deposit are defined in a JSON file. + +```bash +simd tx gov submit-proposal [path-to-proposal-json] [flags] +``` + +Example: + +```bash +simd tx gov submit-proposal /path/to/proposal.json --from cosmos1.. +``` + +where `proposal.json` contains: + +```json +{ + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1...", // The gov module module address + "to_address": "cosmos1...", + "amount":[{"denom": "stake","amount": "10"}] + } + ], + "metadata": "AQ==", + "deposit": "10stake", + "title": "Proposal Title", + "summary": "Proposal Summary" +} +``` + +:::note +By default the metadata, summary and title are both limited by 255 characters, this can be overridden by the application developer. +::: + +##### submit-legacy-proposal + +The `submit-legacy-proposal` command allows users to submit a governance legacy proposal along with an initial deposit. + +```bash +simd tx gov submit-legacy-proposal [command] [flags] +``` + +Example: + +```bash +simd tx gov submit-legacy-proposal --title="Test Proposal" --description="testing" --type="Text" --deposit="100000000stake" --from cosmos1.. +``` + +Example (`param-change`): + +```bash +simd tx gov submit-legacy-proposal param-change proposal.json --from cosmos1.. +``` + +```json +{ + "title": "Test Proposal", + "description": "testing, testing, 1, 2, 3", + "changes": [ + { + "subspace": "staking", + "key": "MaxValidators", + "value": 100 + } + ], + "deposit": "10000000stake" +} +``` + +#### cancel-proposal + +Once proposal is canceled, from the deposits of proposal `deposits * proposal_cancel_ratio` will be burned or sent to `ProposalCancelDest` address , if `ProposalCancelDest` is empty then deposits will be burned. The `remaining deposits` will be sent to depositers. + +```bash +simd tx gov cancel-proposal [proposal-id] [flags] +``` + +Example: + +```bash +simd tx gov cancel-proposal 1 --from cosmos1... +``` + +##### vote + +The `vote` command allows users to submit a vote for a given governance proposal. + +```bash +simd tx gov vote [command] [flags] +``` + +Example: + +```bash +simd tx gov vote 1 yes --from cosmos1.. +``` + +##### weighted-vote + +The `weighted-vote` command allows users to submit a weighted vote for a given governance proposal. + +```bash +simd tx gov weighted-vote [proposal-id] [weighted-options] [flags] +``` + +Example: + +```bash +simd tx gov weighted-vote 1 yes=0.5,no=0.5 --from cosmos1.. +``` + +### gRPC + +A user can query the `gov` module using gRPC endpoints. + +#### Proposal + +The `Proposal` endpoint allows users to query a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Proposal +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Proposal +``` + +Example Output: + +```bash +{ + "proposal": { + "proposalId": "1", + "content": {"@type":"/cosmos.gov.v1beta1.TextProposal","description":"testing, testing, 1, 2, 3","title":"Test Proposal"}, + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yes": "0", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + }, + "submitTime": "2021-09-16T19:40:08.712440474Z", + "depositEndTime": "2021-09-18T19:40:08.712440474Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "votingStartTime": "2021-09-16T19:40:08.712440474Z", + "votingEndTime": "2021-09-18T19:40:08.712440474Z", + "title": "Test Proposal", + "summary": "testing, testing, 1, 2, 3" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Proposal +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Proposal +``` + +Example Output: + +```bash +{ + "proposal": { + "id": "1", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"10"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yesCount": "0", + "abstainCount": "0", + "noCount": "0", + "noWithVetoCount": "0" + }, + "submitTime": "2022-03-28T11:50:20.819676256Z", + "depositEndTime": "2022-03-30T11:50:20.819676256Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "votingStartTime": "2022-03-28T14:25:26.644857113Z", + "votingEndTime": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==", + "title": "Test Proposal", + "summary": "testing, testing, 1, 2, 3" + } +} +``` + +#### Proposals + +The `Proposals` endpoint allows users to query all proposals with optional filters. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Proposals +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "proposalId": "1", + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yes": "0", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + }, + "submitTime": "2022-03-28T11:50:20.819676256Z", + "depositEndTime": "2022-03-30T11:50:20.819676256Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "votingStartTime": "2022-03-28T14:25:26.644857113Z", + "votingEndTime": "2022-03-30T14:25:26.644857113Z" + }, + { + "proposalId": "2", + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "finalTallyResult": { + "yes": "0", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + }, + "submitTime": "2022-03-28T14:02:41.165025015Z", + "depositEndTime": "2022-03-30T14:02:41.165025015Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "votingStartTime": "0001-01-01T00:00:00Z", + "votingEndTime": "0001-01-01T00:00:00Z" + } + ], + "pagination": { + "total": "2" + } +} + +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Proposals +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.gov.v1.Query/Proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "id": "1", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"10"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yesCount": "0", + "abstainCount": "0", + "noCount": "0", + "noWithVetoCount": "0" + }, + "submitTime": "2022-03-28T11:50:20.819676256Z", + "depositEndTime": "2022-03-30T11:50:20.819676256Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "votingStartTime": "2022-03-28T14:25:26.644857113Z", + "votingEndTime": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==", + "title": "Proposal Title", + "summary": "Proposal Summary" + }, + { + "id": "2", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"10"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "finalTallyResult": { + "yesCount": "0", + "abstainCount": "0", + "noCount": "0", + "noWithVetoCount": "0" + }, + "submitTime": "2022-03-28T14:02:41.165025015Z", + "depositEndTime": "2022-03-30T14:02:41.165025015Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "metadata": "AQ==", + "title": "Proposal Title", + "summary": "Proposal Summary" + } + ], + "pagination": { + "total": "2" + } +} +``` + +#### Vote + +The `Vote` endpoint allows users to query a vote for a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Vote +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1","voter":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Vote +``` + +Example Output: + +```bash +{ + "vote": { + "proposalId": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1000000000000000000" + } + ] + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Vote +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1","voter":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Vote +``` + +Example Output: + +```bash +{ + "vote": { + "proposalId": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } +} +``` + +#### Votes + +The `Votes` endpoint allows users to query all votes for a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Votes +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposalId": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1000000000000000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Votes +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposalId": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +#### Params + +The `Params` endpoint allows users to query all parameters for the `gov` module. + + + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"params_type":"voting"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Params +``` + +Example Output: + +```bash +{ + "votingParams": { + "votingPeriod": "172800s" + }, + "depositParams": { + "maxDepositPeriod": "0s" + }, + "tallyParams": { + "quorum": "MA==", + "threshold": "MA==", + "vetoThreshold": "MA==" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"params_type":"voting"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Params +``` + +Example Output: + +```bash +{ + "votingParams": { + "votingPeriod": "172800s" + } +} +``` + +#### Deposit + +The `Deposit` endpoint allows users to query a deposit for a given proposal from a given depositor. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Deposit +``` + +Example: + +```bash +grpcurl -plaintext \ + '{"proposal_id":"1","depositor":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Deposit +``` + +Example Output: + +```bash +{ + "deposit": { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Deposit +``` + +Example: + +```bash +grpcurl -plaintext \ + '{"proposal_id":"1","depositor":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Deposit +``` + +Example Output: + +```bash +{ + "deposit": { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +#### deposits + +The `Deposits` endpoint allows users to query all deposits for a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Deposits +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Deposits +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +#### TallyResult + +The `TallyResult` endpoint allows users to query the tally of a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/TallyResult +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/TallyResult +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/TallyResult +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/TallyResult +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + } +} +``` + +### REST + +A user can query the `gov` module using REST endpoints. + +#### proposal + +The `proposals` endpoint allows users to query a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1 +``` + +Example Output: + +```bash +{ + "proposal": { + "proposal_id": "1", + "content": null, + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes": "0", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1 +``` + +Example Output: + +```bash +{ + "proposal": { + "id": "1", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10" + } + ] + } + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes_count": "0", + "abstain_count": "0", + "no_count": "0", + "no_with_veto_count": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==", + "title": "Proposal Title", + "summary": "Proposal Summary" + } +} +``` + +#### proposals + +The `proposals` endpoint also allows users to query all proposals with optional filters. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "proposal_id": "1", + "content": null, + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes": "0", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z" + }, + { + "proposal_id": "2", + "content": null, + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "final_tally_result": { + "yes": "0", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + }, + "submit_time": "2022-03-28T14:02:41.165025015Z", + "deposit_end_time": "2022-03-30T14:02:41.165025015Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "voting_start_time": "0001-01-01T00:00:00Z", + "voting_end_time": "0001-01-01T00:00:00Z" + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "id": "1", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10" + } + ] + } + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes_count": "0", + "abstain_count": "0", + "no_count": "0", + "no_with_veto_count": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==", + "title": "Proposal Title", + "summary": "Proposal Summary" + }, + { + "id": "2", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10" + } + ] + } + ], + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "final_tally_result": { + "yes_count": "0", + "abstain_count": "0", + "no_count": "0", + "no_with_veto_count": "0" + }, + "submit_time": "2022-03-28T14:02:41.165025015Z", + "deposit_end_time": "2022-03-30T14:02:41.165025015Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "voting_start_time": null, + "voting_end_time": null, + "metadata": "AQ==", + "title": "Proposal Title", + "summary": "Proposal Summary" + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +#### voter vote + +The `votes` endpoint allows users to query a vote for a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/votes/cosmos1.. +``` + +Example Output: + +```bash +{ + "vote": { + "proposal_id": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/votes/cosmos1.. +``` + +Example Output: + +```bash +{ + "vote": { + "proposal_id": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ], + "metadata": "" + } +} +``` + +#### votes + +The `votes` endpoint allows users to query all votes for a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/votes +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposal_id": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/votes +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposal_id": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ], + "metadata": "" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### params + +The `params` endpoint allows users to query all parameters for the `gov` module. + + + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/params/{params_type} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/params/voting +``` + +Example Output: + +```bash +{ + "voting_params": { + "voting_period": "172800s" + }, + "deposit_params": { + "min_deposit": [ + ], + "max_deposit_period": "0s" + }, + "tally_params": { + "quorum": "0.000000000000000000", + "threshold": "0.000000000000000000", + "veto_threshold": "0.000000000000000000" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/params/{params_type} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/params/voting +``` + +Example Output: + +```bash +{ + "voting_params": { + "voting_period": "172800s" + }, + "deposit_params": { + "min_deposit": [ + ], + "max_deposit_period": "0s" + }, + "tally_params": { + "quorum": "0.000000000000000000", + "threshold": "0.000000000000000000", + "veto_threshold": "0.000000000000000000" + } +} +``` + +#### deposits + +The `deposits` endpoint allows users to query a deposit for a given proposal from a given depositor. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/deposits/cosmos1.. +``` + +Example Output: + +```bash +{ + "deposit": { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/deposits/cosmos1.. +``` + +Example Output: + +```bash +{ + "deposit": { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +#### proposal deposits + +The `deposits` endpoint allows users to query all deposits for a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/deposits +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### tally + +The `tally` endpoint allows users to query the tally of a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/tally +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/tally +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/tally +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/tally +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + } +} +``` + +## Metadata + +The gov module has two locations for metadata where users can provide further context about the on-chain actions they are taking. By default all metadata fields have a 255 character length field where metadata can be stored in json format, either on-chain or off-chain depending on the amount of data required. Here we provide a recommendation for the json structure and where the data should be stored. There are two important factors in making these recommendations. First, that the gov and group modules are consistent with one another, note the number of proposals made by all groups may be quite large. Second, that client applications such as block explorers and governance interfaces have confidence in the consistency of metadata structure accross chains. + +### Proposal + +Location: off-chain as json object stored on IPFS (mirrors [group proposal](../group/README.md#metadata)) + +```json +{ + "title": "", + "authors": [""], + "summary": "", + "details": "", + "proposal_forum_url": "", + "vote_option_context": "", +} +``` + +:::note +The `authors` field is an array of strings, this is to allow for multiple authors to be listed in the metadata. +In v0.46, the `authors` field is a comma-separated string. Frontends are encouraged to support both formats for backwards compatibility. +::: + +### Vote + +Location: on-chain as json within 255 character limit (mirrors [group vote](../group/README.md#metadata)) + +```json +{ + "justification": "", +} +``` + +## Future Improvements + +The current documentation only describes the minimum viable product for the +governance module. Future improvements may include: + +* **`BountyProposals`:** If accepted, a `BountyProposal` creates an open + bounty. The `BountyProposal` specifies how many Atoms will be given upon + completion. These Atoms will be taken from the `reserve pool`. After a + `BountyProposal` is accepted by governance, anybody can submit a + `SoftwareUpgradeProposal` with the code to claim the bounty. Note that once a + `BountyProposal` is accepted, the corresponding funds in the `reserve pool` + are locked so that payment can always be honored. In order to link a + `SoftwareUpgradeProposal` to an open bounty, the submitter of the + `SoftwareUpgradeProposal` will use the `Proposal.LinkedProposal` attribute. + If a `SoftwareUpgradeProposal` linked to an open bounty is accepted by + governance, the funds that were reserved are automatically transferred to the + submitter. +* **Complex delegation:** Delegators could choose other representatives than + their validators. Ultimately, the chain of representatives would always end + up to a validator, but delegators could inherit the vote of their chosen + representative before they inherit the vote of their validator. In other + words, they would only inherit the vote of their validator if their other + appointed representative did not vote. +* **Better process for proposal review:** There would be two parts to + `proposal.Deposit`, one for anti-spam (same as in MVP) and an other one to + reward third party auditors. diff --git a/docs/integrate/modules/group/README.md b/docs/integrate/modules/group/README.md new file mode 100644 index 000000000..b94fec728 --- /dev/null +++ b/docs/integrate/modules/group/README.md @@ -0,0 +1,2156 @@ +--- +sidebar_position: 1 +--- + +# `x/group` + +## Abstract + +The following documents specify the group module. + +This module allows the creation and management of on-chain multisig accounts and enables voting for message execution based on configurable decision policies. + +## Contents + +* [Concepts](#concepts) + * [Group](#group) + * [Group Policy](#group-policy) + * [Decision Policy](#decision-policy) + * [Proposal](#proposal) + * [Pruning](#pruning) +* [State](#state) + * [Group Table](#group-table) + * [Group Member Table](#group-member-table) + * [Group Policy Table](#group-policy-table) + * [Proposal Table](#proposal-table) + * [Vote Table](#vote-table) +* [Msg Service](#msg-service) + * [Msg/CreateGroup](#msgcreategroup) + * [Msg/UpdateGroupMembers](#msgupdategroupmembers) + * [Msg/UpdateGroupAdmin](#msgupdategroupadmin) + * [Msg/UpdateGroupMetadata](#msgupdategroupmetadata) + * [Msg/CreateGroupPolicy](#msgcreategrouppolicy) + * [Msg/CreateGroupWithPolicy](#msgcreategroupwithpolicy) + * [Msg/UpdateGroupPolicyAdmin](#msgupdategrouppolicyadmin) + * [Msg/UpdateGroupPolicyDecisionPolicy](#msgupdategrouppolicydecisionpolicy) + * [Msg/UpdateGroupPolicyMetadata](#msgupdategrouppolicymetadata) + * [Msg/SubmitProposal](#msgsubmitproposal) + * [Msg/WithdrawProposal](#msgwithdrawproposal) + * [Msg/Vote](#msgvote) + * [Msg/Exec](#msgexec) + * [Msg/LeaveGroup](#msgleavegroup) +* [Events](#events) + * [EventCreateGroup](#eventcreategroup) + * [EventUpdateGroup](#eventupdategroup) + * [EventCreateGroupPolicy](#eventcreategrouppolicy) + * [EventUpdateGroupPolicy](#eventupdategrouppolicy) + * [EventCreateProposal](#eventcreateproposal) + * [EventWithdrawProposal](#eventwithdrawproposal) + * [EventVote](#eventvote) + * [EventExec](#eventexec) + * [EventLeaveGroup](#eventleavegroup) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + * [REST](#rest) +* [Metadata](#metadata) + +## Concepts + +### Group + +A group is simply an aggregation of accounts with associated weights. It is not +an account and doesn't have a balance. It doesn't in and of itself have any +sort of voting or decision weight. It does have an "administrator" which has +the ability to add, remove and update members in the group. Note that a +group policy account could be an administrator of a group, and that the +administrator doesn't necessarily have to be a member of the group. + +### Group Policy + +A group policy is an account associated with a group and a decision policy. +Group policies are abstracted from groups because a single group may have +multiple decision policies for different types of actions. Managing group +membership separately from decision policies results in the least overhead +and keeps membership consistent across different policies. The pattern that +is recommended is to have a single master group policy for a given group, +and then to create separate group policies with different decision policies +and delegate the desired permissions from the master account to +those "sub-accounts" using the `x/authz` module. + +### Decision Policy + +A decision policy is the mechanism by which members of a group can vote on +proposals, as well as the rules that dictate whether a proposal should pass +or not based on its tally outcome. + +All decision policies generally would have a mininum execution period and a +maximum voting window. The minimum execution period is the minimum amount of time +that must pass after submission in order for a proposal to potentially be executed, and it may +be set to 0. The maximum voting window is the maximum time after submission that a proposal may +be voted on before it is tallied. + +The chain developer also defines an app-wide maximum execution period, which is +the maximum amount of time after a proposal's voting period end where users are +allowed to execute a proposal. + +The current group module comes shipped with two decision policies: threshold +and percentage. Any chain developer can extend upon these two, by creating +custom decision policies, as long as they adhere to the `DecisionPolicy` +interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/types.go#L27-L45 +``` + +#### Threshold decision policy + +A threshold decision policy defines a threshold of yes votes (based on a tally +of voter weights) that must be achieved in order for a proposal to pass. For +this decision policy, abstain and veto are simply treated as no's. + +This decision policy also has a VotingPeriod window and a MinExecutionPeriod +window. The former defines the duration after proposal submission where members +are allowed to vote, after which tallying is performed. The latter specifies +the minimum duration after proposal submission where the proposal can be +executed. If set to 0, then the proposal is allowed to be executed immediately +on submission (using the `TRY_EXEC` option). Obviously, MinExecutionPeriod +cannot be greater than VotingPeriod+MaxExecutionPeriod (where MaxExecution is +the app-defined duration that specifies the window after voting ended where a +proposal can be executed). + +#### Percentage decision policy + +A percentage decision policy is similar to a threshold decision policy, except +that the threshold is not defined as a constant weight, but as a percentage. +It's more suited for groups where the group members' weights can be updated, as +the percentage threshold stays the same, and doesn't depend on how those member +weights get updated. + +Same as the Threshold decision policy, the percentage decision policy has the +two VotingPeriod and MinExecutionPeriod parameters. + +### Proposal + +Any member(s) of a group can submit a proposal for a group policy account to decide upon. +A proposal consists of a set of messages that will be executed if the proposal +passes as well as any metadata associated with the proposal. + +#### Voting + +There are four choices to choose while voting - yes, no, abstain and veto. Not +all decision policies will take the four choices into account. Votes can contain some optional metadata. +In the current implementation, the voting window begins as soon as a proposal +is submitted, and the end is defined by the group policy's decision policy. + +#### Withdrawing Proposals + +Proposals can be withdrawn any time before the voting period end, either by the +admin of the group policy or by one of the proposers. Once withdrawn, it is +marked as `PROPOSAL_STATUS_WITHDRAWN`, and no more voting or execution is +allowed on it. + +#### Aborted Proposals + +If the group policy is updated during the voting period of the proposal, then +the proposal is marked as `PROPOSAL_STATUS_ABORTED`, and no more voting or +execution is allowed on it. This is because the group policy defines the rules +of proposal voting and execution, so if those rules change during the lifecycle +of a proposal, then the proposal should be marked as stale. + +#### Tallying + +Tallying is the counting of all votes on a proposal. It happens only once in +the lifecycle of a proposal, but can be triggered by two factors, whichever +happens first: + +* either someone tries to execute the proposal (see next section), which can + happen on a `Msg/Exec` transaction, or a `Msg/{SubmitProposal,Vote}` + transaction with the `Exec` field set. When a proposal execution is attempted, + a tally is done first to make sure the proposal passes. +* or on `EndBlock` when the proposal's voting period end just passed. + +If the tally result passes the decision policy's rules, then the proposal is +marked as `PROPOSAL_STATUS_ACCEPTED`, or else it is marked as +`PROPOSAL_STATUS_REJECTED`. In any case, no more voting is allowed anymore, and the tally +result is persisted to state in the proposal's `FinalTallyResult`. + +#### Executing Proposals + +Proposals are executed only when the tallying is done, and the group account's +decision policy allows the proposal to pass based on the tally outcome. They +are marked by the status `PROPOSAL_STATUS_ACCEPTED`. Execution must happen +before a duration of `MaxExecutionPeriod` (set by the chain developer) after +each proposal's voting period end. + +Proposals will not be automatically executed by the chain in this current design, +but rather a user must submit a `Msg/Exec` transaction to attempt to execute the +proposal based on the current votes and decision policy. Any user (not only the +group members) can execute proposals that have been accepted, and execution fees are +paid by the proposal executor. +It's also possible to try to execute a proposal immediately on creation or on +new votes using the `Exec` field of `Msg/SubmitProposal` and `Msg/Vote` requests. +In the former case, proposers signatures are considered as yes votes. +In these cases, if the proposal can't be executed (i.e. it didn't pass the +decision policy's rules), it will still be opened for new votes and +could be tallied and executed later on. + +A successful proposal execution will have its `ExecutorResult` marked as +`PROPOSAL_EXECUTOR_RESULT_SUCCESS`. The proposal will be automatically pruned +after execution. On the other hand, a failed proposal execution will be marked +as `PROPOSAL_EXECUTOR_RESULT_FAILURE`. Such a proposal can be re-executed +multiple times, until it expires after `MaxExecutionPeriod` after voting period +end. + +### Pruning + +Proposals and votes are automatically pruned to avoid state bloat. + +Votes are pruned: + +* either after a successful tally, i.e. a tally whose result passes the decision + policy's rules, which can be trigged by a `Msg/Exec` or a + `Msg/{SubmitProposal,Vote}` with the `Exec` field set, +* or on `EndBlock` right after the proposal's voting period end. This applies to proposals with status `aborted` or `withdrawn` too. + +whichever happens first. + +Proposals are pruned: + +* on `EndBlock` whose proposal status is `withdrawn` or `aborted` on proposal's voting period end before tallying, +* and either after a successful proposal execution, +* or on `EndBlock` right after the proposal's `voting_period_end` + + `max_execution_period` (defined as an app-wide configuration) is passed, + +whichever happens first. + +## State + +The `group` module uses the `orm` package which provides table storage with support for +primary keys and secondary indexes. `orm` also defines `Sequence` which is a persistent unique key generator based on a counter that can be used along with `Table`s. + +Here's the list of tables and associated sequences and indexes stored as part of the `group` module. + +### Group Table + +The `groupTable` stores `GroupInfo`: `0x0 | BigEndian(GroupId) -> ProtocolBuffer(GroupInfo)`. + +#### groupSeq + +The value of `groupSeq` is incremented when creating a new group and corresponds to the new `GroupId`: `0x1 | 0x1 -> BigEndian`. + +The second `0x1` corresponds to the ORM `sequenceStorageKey`. + +#### groupByAdminIndex + +`groupByAdminIndex` allows to retrieve groups by admin address: +`0x2 | len([]byte(group.Admin)) | []byte(group.Admin) | BigEndian(GroupId) -> []byte()`. + +### Group Member Table + +The `groupMemberTable` stores `GroupMember`s: `0x10 | BigEndian(GroupId) | []byte(member.Address) -> ProtocolBuffer(GroupMember)`. + +The `groupMemberTable` is a primary key table and its `PrimaryKey` is given by +`BigEndian(GroupId) | []byte(member.Address)` which is used by the following indexes. + +#### groupMemberByGroupIndex + +`groupMemberByGroupIndex` allows to retrieve group members by group id: +`0x11 | BigEndian(GroupId) | PrimaryKey -> []byte()`. + +#### groupMemberByMemberIndex + +`groupMemberByMemberIndex` allows to retrieve group members by member address: +`0x12 | len([]byte(member.Address)) | []byte(member.Address) | PrimaryKey -> []byte()`. + +### Group Policy Table + +The `groupPolicyTable` stores `GroupPolicyInfo`: `0x20 | len([]byte(Address)) | []byte(Address) -> ProtocolBuffer(GroupPolicyInfo)`. + +The `groupPolicyTable` is a primary key table and its `PrimaryKey` is given by +`len([]byte(Address)) | []byte(Address)` which is used by the following indexes. + +#### groupPolicySeq + +The value of `groupPolicySeq` is incremented when creating a new group policy and is used to generate the new group policy account `Address`: +`0x21 | 0x1 -> BigEndian`. + +The second `0x1` corresponds to the ORM `sequenceStorageKey`. + +#### groupPolicyByGroupIndex + +`groupPolicyByGroupIndex` allows to retrieve group policies by group id: +`0x22 | BigEndian(GroupId) | PrimaryKey -> []byte()`. + +#### groupPolicyByAdminIndex + +`groupPolicyByAdminIndex` allows to retrieve group policies by admin address: +`0x23 | len([]byte(Address)) | []byte(Address) | PrimaryKey -> []byte()`. + +### Proposal Table + +The `proposalTable` stores `Proposal`s: `0x30 | BigEndian(ProposalId) -> ProtocolBuffer(Proposal)`. + +#### proposalSeq + +The value of `proposalSeq` is incremented when creating a new proposal and corresponds to the new `ProposalId`: `0x31 | 0x1 -> BigEndian`. + +The second `0x1` corresponds to the ORM `sequenceStorageKey`. + +#### proposalByGroupPolicyIndex + +`proposalByGroupPolicyIndex` allows to retrieve proposals by group policy account address: +`0x32 | len([]byte(account.Address)) | []byte(account.Address) | BigEndian(ProposalId) -> []byte()`. + +#### ProposalsByVotingPeriodEndIndex + +`proposalsByVotingPeriodEndIndex` allows to retrieve proposals sorted by chronological `voting_period_end`: +`0x33 | sdk.FormatTimeBytes(proposal.VotingPeriodEnd) | BigEndian(ProposalId) -> []byte()`. + +This index is used when tallying the proposal votes at the end of the voting period, and for pruning proposals at `VotingPeriodEnd + MaxExecutionPeriod`. + +### Vote Table + +The `voteTable` stores `Vote`s: `0x40 | BigEndian(ProposalId) | []byte(voter.Address) -> ProtocolBuffer(Vote)`. + +The `voteTable` is a primary key table and its `PrimaryKey` is given by +`BigEndian(ProposalId) | []byte(voter.Address)` which is used by the following indexes. + +#### voteByProposalIndex + +`voteByProposalIndex` allows to retrieve votes by proposal id: +`0x41 | BigEndian(ProposalId) | PrimaryKey -> []byte()`. + +#### voteByVoterIndex + +`voteByVoterIndex` allows to retrieve votes by voter address: +`0x42 | len([]byte(voter.Address)) | []byte(voter.Address) | PrimaryKey -> []byte()`. + +## Msg Service + +### Msg/CreateGroup + +A new group can be created with the `MsgCreateGroup`, which has an admin address, a list of members and some optional metadata. + +The metadata has a maximum length that is chosen by the app developer, and +passed into the group keeper as a config. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L67-L80 +``` + +It's expected to fail if + +* metadata length is greater than `MaxMetadataLen` config +* members are not correctly set (e.g. wrong address format, duplicates, or with 0 weight). + +### Msg/UpdateGroupMembers + +Group members can be updated with the `UpdateGroupMembers`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L88-L102 +``` + +In the list of `MemberUpdates`, an existing member can be removed by setting its weight to 0. + +It's expected to fail if: + +* the signer is not the admin of the group. +* for any one of the associated group policies, if its decision policy's `Validate()` method fails against the updated group. + +### Msg/UpdateGroupAdmin + +The `UpdateGroupAdmin` can be used to update a group admin. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L107-L120 +``` + +It's expected to fail if the signer is not the admin of the group. + +### Msg/UpdateGroupMetadata + +The `UpdateGroupMetadata` can be used to update a group metadata. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L125-L138 +``` + +It's expected to fail if: + +* new metadata length is greater than `MaxMetadataLen` config. +* the signer is not the admin of the group. + +### Msg/CreateGroupPolicy + +A new group policy can be created with the `MsgCreateGroupPolicy`, which has an admin address, a group id, a decision policy and some optional metadata. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L147-L165 +``` + +It's expected to fail if: + +* the signer is not the admin of the group. +* metadata length is greater than `MaxMetadataLen` config. +* the decision policy's `Validate()` method doesn't pass against the group. + +### Msg/CreateGroupWithPolicy + +A new group with policy can be created with the `MsgCreateGroupWithPolicy`, which has an admin address, a list of members, a decision policy, a `group_policy_as_admin` field to optionally set group and group policy admin with group policy address and some optional metadata for group and group policy. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L191-L215 +``` + +It's expected to fail for the same reasons as `Msg/CreateGroup` and `Msg/CreateGroupPolicy`. + +### Msg/UpdateGroupPolicyAdmin + +The `UpdateGroupPolicyAdmin` can be used to update a group policy admin. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L173-L186 +``` + +It's expected to fail if the signer is not the admin of the group policy. + +### Msg/UpdateGroupPolicyDecisionPolicy + +The `UpdateGroupPolicyDecisionPolicy` can be used to update a decision policy. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L226-L241 +``` + +It's expected to fail if: + +* the signer is not the admin of the group policy. +* the new decision policy's `Validate()` method doesn't pass against the group. + +### Msg/UpdateGroupPolicyMetadata + +The `UpdateGroupPolicyMetadata` can be used to update a group policy metadata. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L246-L259 +``` + +It's expected to fail if: + +* new metadata length is greater than `MaxMetadataLen` config. +* the signer is not the admin of the group. + +### Msg/SubmitProposal + +A new proposal can be created with the `MsgSubmitProposal`, which has a group policy account address, a list of proposers addresses, a list of messages to execute if the proposal is accepted and some optional metadata. +An optional `Exec` value can be provided to try to execute the proposal immediately after proposal creation. Proposers signatures are considered as yes votes in this case. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L281-L315 +``` + +It's expected to fail if: + +* metadata, title, or summary length is greater than `MaxMetadataLen` config. +* if any of the proposers is not a group member. + +### Msg/WithdrawProposal + +A proposal can be withdrawn using `MsgWithdrawProposal` which has an `address` (can be either a proposer or the group policy admin) and a `proposal_id` (which has to be withdrawn). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L323-L333 +``` + +It's expected to fail if: + +* the signer is neither the group policy admin nor proposer of the proposal. +* the proposal is already closed or aborted. + +### Msg/Vote + +A new vote can be created with the `MsgVote`, given a proposal id, a voter address, a choice (yes, no, veto or abstain) and some optional metadata. +An optional `Exec` value can be provided to try to execute the proposal immediately after voting. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L338-L358 +``` + +It's expected to fail if: + +* metadata length is greater than `MaxMetadataLen` config. +* the proposal is not in voting period anymore. + +### Msg/Exec + +A proposal can be executed with the `MsgExec`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L363-L373 +``` + +The messages that are part of this proposal won't be executed if: + +* the proposal has not been accepted by the group policy. +* the proposal has already been successfully executed. + +### Msg/LeaveGroup + +The `MsgLeaveGroup` allows group member to leave a group. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/v1/tx.proto#L381-L391 +``` + +It's expected to fail if: + +* the group member is not part of the group. +* for any one of the associated group policies, if its decision policy's `Validate()` method fails against the updated group. + +## Events + +The group module emits the following events: + +### EventCreateGroup + +| Type | Attribute Key | Attribute Value | +| -------------------------------- | ------------- | -------------------------------- | +| message | action | /cosmos.group.v1.Msg/CreateGroup | +| cosmos.group.v1.EventCreateGroup | group_id | {groupId} | + +### EventUpdateGroup + +| Type | Attribute Key | Attribute Value | +| -------------------------------- | ------------- | ---------------------------------------------------------- | +| message | action | /cosmos.group.v1.Msg/UpdateGroup{Admin\|Metadata\|Members} | +| cosmos.group.v1.EventUpdateGroup | group_id | {groupId} | + +### EventCreateGroupPolicy + +| Type | Attribute Key | Attribute Value | +| -------------------------------------- | ------------- | -------------------------------------- | +| message | action | /cosmos.group.v1.Msg/CreateGroupPolicy | +| cosmos.group.v1.EventCreateGroupPolicy | address | {groupPolicyAddress} | + +### EventUpdateGroupPolicy + +| Type | Attribute Key | Attribute Value | +| -------------------------------------- | ------------- | ----------------------------------------------------------------------- | +| message | action | /cosmos.group.v1.Msg/UpdateGroupPolicy{Admin\|Metadata\|DecisionPolicy} | +| cosmos.group.v1.EventUpdateGroupPolicy | address | {groupPolicyAddress} | + +### EventCreateProposal + +| Type | Attribute Key | Attribute Value | +| ----------------------------------- | ------------- | ----------------------------------- | +| message | action | /cosmos.group.v1.Msg/CreateProposal | +| cosmos.group.v1.EventCreateProposal | proposal_id | {proposalId} | + +### EventWithdrawProposal + +| Type | Attribute Key | Attribute Value | +| ------------------------------------- | ------------- | ------------------------------------- | +| message | action | /cosmos.group.v1.Msg/WithdrawProposal | +| cosmos.group.v1.EventWithdrawProposal | proposal_id | {proposalId} | + +### EventVote + +| Type | Attribute Key | Attribute Value | +| ------------------------- | ------------- | ------------------------- | +| message | action | /cosmos.group.v1.Msg/Vote | +| cosmos.group.v1.EventVote | proposal_id | {proposalId} | + +## EventExec + +| Type | Attribute Key | Attribute Value | +| ------------------------- | ------------- | ------------------------- | +| message | action | /cosmos.group.v1.Msg/Exec | +| cosmos.group.v1.EventExec | proposal_id | {proposalId} | +| cosmos.group.v1.EventExec | logs | {logs_string} | + +### EventLeaveGroup + +| Type | Attribute Key | Attribute Value | +| ------------------------------- | ------------- | ------------------------------- | +| message | action | /cosmos.group.v1.Msg/LeaveGroup | +| cosmos.group.v1.EventLeaveGroup | proposal_id | {proposalId} | +| cosmos.group.v1.EventLeaveGroup | address | {address} | + + +## Client + +### CLI + +A user can query and interact with the `group` module using the CLI. + +#### Query + +The `query` commands allow users to query `group` state. + +```bash +simd query group --help +``` + +##### group-info + +The `group-info` command allows users to query for group info by given group id. + +```bash +simd query group group-info [id] [flags] +``` + +Example: + +```bash +simd query group group-info 1 +``` + +Example Output: + +```bash +admin: cosmos1.. +group_id: "1" +metadata: AQ== +total_weight: "3" +version: "1" +``` + +##### group-policy-info + +The `group-policy-info` command allows users to query for group policy info by account address of group policy . + +```bash +simd query group group-policy-info [group-policy-account] [flags] +``` + +Example: + +```bash +simd query group group-policy-info cosmos1.. +``` + +Example Output: + +```bash +address: cosmos1.. +admin: cosmos1.. +decision_policy: + '@type': /cosmos.group.v1.ThresholdDecisionPolicy + threshold: "1" + windows: + min_execution_period: 0s + voting_period: 432000s +group_id: "1" +metadata: AQ== +version: "1" +``` + +##### group-members + +The `group-members` command allows users to query for group members by group id with pagination flags. + +```bash +simd query group group-members [id] [flags] +``` + +Example: + +```bash +simd query group group-members 1 +``` + +Example Output: + +```bash +members: +- group_id: "1" + member: + address: cosmos1.. + metadata: AQ== + weight: "2" +- group_id: "1" + member: + address: cosmos1.. + metadata: AQ== + weight: "1" +pagination: + next_key: null + total: "2" +``` + +##### groups-by-admin + +The `groups-by-admin` command allows users to query for groups by admin account address with pagination flags. + +```bash +simd query group groups-by-admin [admin] [flags] +``` + +Example: + +```bash +simd query group groups-by-admin cosmos1.. +``` + +Example Output: + +```bash +groups: +- admin: cosmos1.. + group_id: "1" + metadata: AQ== + total_weight: "3" + version: "1" +- admin: cosmos1.. + group_id: "2" + metadata: AQ== + total_weight: "3" + version: "1" +pagination: + next_key: null + total: "2" +``` + +##### group-policies-by-group + +The `group-policies-by-group` command allows users to query for group policies by group id with pagination flags. + +```bash +simd query group group-policies-by-group [group-id] [flags] +``` + +Example: + +```bash +simd query group group-policies-by-group 1 +``` + +Example Output: + +```bash +group_policies: +- address: cosmos1.. + admin: cosmos1.. + decision_policy: + '@type': /cosmos.group.v1.ThresholdDecisionPolicy + threshold: "1" + windows: + min_execution_period: 0s + voting_period: 432000s + group_id: "1" + metadata: AQ== + version: "1" +- address: cosmos1.. + admin: cosmos1.. + decision_policy: + '@type': /cosmos.group.v1.ThresholdDecisionPolicy + threshold: "1" + windows: + min_execution_period: 0s + voting_period: 432000s + group_id: "1" + metadata: AQ== + version: "1" +pagination: + next_key: null + total: "2" +``` + +##### group-policies-by-admin + +The `group-policies-by-admin` command allows users to query for group policies by admin account address with pagination flags. + +```bash +simd query group group-policies-by-admin [admin] [flags] +``` + +Example: + +```bash +simd query group group-policies-by-admin cosmos1.. +``` + +Example Output: + +```bash +group_policies: +- address: cosmos1.. + admin: cosmos1.. + decision_policy: + '@type': /cosmos.group.v1.ThresholdDecisionPolicy + threshold: "1" + windows: + min_execution_period: 0s + voting_period: 432000s + group_id: "1" + metadata: AQ== + version: "1" +- address: cosmos1.. + admin: cosmos1.. + decision_policy: + '@type': /cosmos.group.v1.ThresholdDecisionPolicy + threshold: "1" + windows: + min_execution_period: 0s + voting_period: 432000s + group_id: "1" + metadata: AQ== + version: "1" +pagination: + next_key: null + total: "2" +``` + +##### proposal + +The `proposal` command allows users to query for proposal by id. + +```bash +simd query group proposal [id] [flags] +``` + +Example: + +```bash +simd query group proposal 1 +``` + +Example Output: + +```bash +proposal: + address: cosmos1.. + executor_result: EXECUTOR_RESULT_NOT_RUN + group_policy_version: "1" + group_version: "1" + metadata: AQ== + msgs: + - '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "100000000" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. + proposal_id: "1" + proposers: + - cosmos1.. + result: RESULT_UNFINALIZED + status: STATUS_SUBMITTED + submitted_at: "2021-12-17T07:06:26.310638964Z" + windows: + min_execution_period: 0s + voting_period: 432000s + vote_state: + abstain_count: "0" + no_count: "0" + veto_count: "0" + yes_count: "0" + summary: "Summary" + title: "Title" +``` + +##### proposals-by-group-policy + +The `proposals-by-group-policy` command allows users to query for proposals by account address of group policy with pagination flags. + +```bash +simd query group proposals-by-group-policy [group-policy-account] [flags] +``` + +Example: + +```bash +simd query group proposals-by-group-policy cosmos1.. +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "1" +proposals: +- address: cosmos1.. + executor_result: EXECUTOR_RESULT_NOT_RUN + group_policy_version: "1" + group_version: "1" + metadata: AQ== + msgs: + - '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "100000000" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. + proposal_id: "1" + proposers: + - cosmos1.. + result: RESULT_UNFINALIZED + status: STATUS_SUBMITTED + submitted_at: "2021-12-17T07:06:26.310638964Z" + windows: + min_execution_period: 0s + voting_period: 432000s + vote_state: + abstain_count: "0" + no_count: "0" + veto_count: "0" + yes_count: "0" + summary: "Summary" + title: "Title" +``` + +##### vote + +The `vote` command allows users to query for vote by proposal id and voter account address. + +```bash +simd query group vote [proposal-id] [voter] [flags] +``` + +Example: + +```bash +simd query group vote 1 cosmos1.. +``` + +Example Output: + +```bash +vote: + choice: CHOICE_YES + metadata: AQ== + proposal_id: "1" + submitted_at: "2021-12-17T08:05:02.490164009Z" + voter: cosmos1.. +``` + +##### votes-by-proposal + +The `votes-by-proposal` command allows users to query for votes by proposal id with pagination flags. + +```bash +simd query group votes-by-proposal [proposal-id] [flags] +``` + +Example: + +```bash +simd query group votes-by-proposal 1 +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "1" +votes: +- choice: CHOICE_YES + metadata: AQ== + proposal_id: "1" + submitted_at: "2021-12-17T08:05:02.490164009Z" + voter: cosmos1.. +``` + +##### votes-by-voter + +The `votes-by-voter` command allows users to query for votes by voter account address with pagination flags. + +```bash +simd query group votes-by-voter [voter] [flags] +``` + +Example: + +```bash +simd query group votes-by-voter cosmos1.. +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "1" +votes: +- choice: CHOICE_YES + metadata: AQ== + proposal_id: "1" + submitted_at: "2021-12-17T08:05:02.490164009Z" + voter: cosmos1.. +``` + +### Transactions + +The `tx` commands allow users to interact with the `group` module. + +```bash +simd tx group --help +``` + +#### create-group + +The `create-group` command allows users to create a group which is an aggregation of member accounts with associated weights and +an administrator account. + +```bash +simd tx group create-group [admin] [metadata] [members-json-file] +``` + +Example: + +```bash +simd tx group create-group cosmos1.. "AQ==" members.json +``` + +#### update-group-admin + +The `update-group-admin` command allows users to update a group's admin. + +```bash +simd tx group update-group-admin [admin] [group-id] [new-admin] [flags] +``` + +Example: + +```bash +simd tx group update-group-admin cosmos1.. 1 cosmos1.. +``` + +#### update-group-members + +The `update-group-members` command allows users to update a group's members. + +```bash +simd tx group update-group-members [admin] [group-id] [members-json-file] [flags] +``` + +Example: + +```bash +simd tx group update-group-members cosmos1.. 1 members.json +``` + +#### update-group-metadata + +The `update-group-metadata` command allows users to update a group's metadata. + +```bash +simd tx group update-group-metadata [admin] [group-id] [metadata] [flags] +``` + +Example: + +```bash +simd tx group update-group-metadata cosmos1.. 1 "AQ==" +``` + +#### create-group-policy + +The `create-group-policy` command allows users to create a group policy which is an account associated with a group and a decision policy. + +```bash +simd tx group create-group-policy [admin] [group-id] [metadata] [decision-policy] [flags] +``` + +Example: + +```bash +simd tx group create-group-policy cosmos1.. 1 "AQ==" '{"@type":"/cosmos.group.v1.ThresholdDecisionPolicy", "threshold":"1", "windows": {"voting_period": "120h", "min_execution_period": "0s"}}' +``` + +#### create-group-with-policy + +The `create-group-with-policy` command allows users to create a group which is an aggregation of member accounts with associated weights and an administrator account with decision policy. If the `--group-policy-as-admin` flag is set to `true`, the group policy address becomes the group and group policy admin. + +```bash +simd tx group create-group-with-policy [admin] [group-metadata] [group-policy-metadata] [members-json-file] [decision-policy] [flags] +``` + +Example: + +```bash +simd tx group create-group-with-policy cosmos1.. "AQ==" "AQ==" members.json '{"@type":"/cosmos.group.v1.ThresholdDecisionPolicy", "threshold":"1", "windows": {"voting_period": "120h", "min_execution_period": "0s"}}' +``` + +#### update-group-policy-admin + +The `update-group-policy-admin` command allows users to update a group policy admin. + +```bash +simd tx group update-group-policy-admin [admin] [group-policy-account] [new-admin] [flags] +``` + +Example: + +```bash +simd tx group update-group-policy-admin cosmos1.. cosmos1.. cosmos1.. +``` + +#### update-group-policy-metadata + +The `update-group-policy-metadata` command allows users to update a group policy metadata. + +```bash +simd tx group update-group-policy-metadata [admin] [group-policy-account] [new-metadata] [flags] +``` + +Example: + +```bash +simd tx group update-group-policy-metadata cosmos1.. cosmos1.. "AQ==" +``` + +#### update-group-policy-decision-policy + +The `update-group-policy-decision-policy` command allows users to update a group policy's decision policy. + +```bash +simd tx group update-group-policy-decision-policy [admin] [group-policy-account] [decision-policy] [flags] +``` + +Example: + +```bash +simd tx group update-group-policy-decision-policy cosmos1.. cosmos1.. '{"@type":"/cosmos.group.v1.ThresholdDecisionPolicy", "threshold":"2", "windows": {"voting_period": "120h", "min_execution_period": "0s"}}' +``` + +#### create-proposal + +The `create-proposal` command allows users to submit a new proposal. + +```bash +simd tx group create-proposal [group-policy-account] [proposer[,proposer]*] [msg_tx_json_file] [metadata] [flags] +``` + +Example: + +```bash +simd tx group create-proposal cosmos1.. cosmos1.. msg_tx.json "AQ==" +``` + +#### withdraw-proposal + +The `withdraw-proposal` command allows users to withdraw a proposal. + +```bash +simd tx group withdraw-proposal [proposal-id] [group-policy-admin-or-proposer] +``` + +Example: + +```bash +simd tx group withdraw-proposal 1 cosmos1.. +``` + +#### vote + +The `vote` command allows users to vote on a proposal. + +```bash +simd tx group vote proposal-id] [voter] [choice] [metadata] [flags] +``` + +Example: + +```bash +simd tx group vote 1 cosmos1.. CHOICE_YES "AQ==" +``` + +#### exec + +The `exec` command allows users to execute a proposal. + +```bash +simd tx group exec [proposal-id] [flags] +``` + +Example: + +```bash +simd tx group exec 1 +``` + +#### leave-group + +The `leave-group` command allows group member to leave the group. + +```bash +simd tx group leave-group [member-address] [group-id] +``` + +Example: + +```bash +simd tx group leave-group cosmos1... 1 +``` + +### gRPC + +A user can query the `group` module using gRPC endpoints. + +#### GroupInfo + +The `GroupInfo` endpoint allows users to query for group info by given group id. + +```bash +cosmos.group.v1.Query/GroupInfo +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"group_id":1}' localhost:9090 cosmos.group.v1.Query/GroupInfo +``` + +Example Output: + +```bash +{ + "info": { + "groupId": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "totalWeight": "3" + } +} +``` + +#### GroupPolicyInfo + +The `GroupPolicyInfo` endpoint allows users to query for group policy info by account address of group policy. + +```bash +cosmos.group.v1.Query/GroupPolicyInfo +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' localhost:9090 cosmos.group.v1.Query/GroupPolicyInfo +``` + +Example Output: + +```bash +{ + "info": { + "address": "cosmos1..", + "groupId": "1", + "admin": "cosmos1..", + "version": "1", + "decisionPolicy": {"@type":"/cosmos.group.v1.ThresholdDecisionPolicy","threshold":"1","windows": {"voting_period": "120h", "min_execution_period": "0s"}}, + } +} +``` + +#### GroupMembers + +The `GroupMembers` endpoint allows users to query for group members by group id with pagination flags. + +```bash +cosmos.group.v1.Query/GroupMembers +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"group_id":"1"}' localhost:9090 cosmos.group.v1.Query/GroupMembers +``` + +Example Output: + +```bash +{ + "members": [ + { + "groupId": "1", + "member": { + "address": "cosmos1..", + "weight": "1" + } + }, + { + "groupId": "1", + "member": { + "address": "cosmos1..", + "weight": "2" + } + } + ], + "pagination": { + "total": "2" + } +} +``` + +#### GroupsByAdmin + +The `GroupsByAdmin` endpoint allows users to query for groups by admin account address with pagination flags. + +```bash +cosmos.group.v1.Query/GroupsByAdmin +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"admin":"cosmos1.."}' localhost:9090 cosmos.group.v1.Query/GroupsByAdmin +``` + +Example Output: + +```bash +{ + "groups": [ + { + "groupId": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "totalWeight": "3" + }, + { + "groupId": "2", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "totalWeight": "3" + } + ], + "pagination": { + "total": "2" + } +} +``` + +#### GroupPoliciesByGroup + +The `GroupPoliciesByGroup` endpoint allows users to query for group policies by group id with pagination flags. + +```bash +cosmos.group.v1.Query/GroupPoliciesByGroup +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"group_id":"1"}' localhost:9090 cosmos.group.v1.Query/GroupPoliciesByGroup +``` + +Example Output: + +```bash +{ + "GroupPolicies": [ + { + "address": "cosmos1..", + "groupId": "1", + "admin": "cosmos1..", + "version": "1", + "decisionPolicy": {"@type":"/cosmos.group.v1.ThresholdDecisionPolicy","threshold":"1","windows":{"voting_period": "120h", "min_execution_period": "0s"}}, + }, + { + "address": "cosmos1..", + "groupId": "1", + "admin": "cosmos1..", + "version": "1", + "decisionPolicy": {"@type":"/cosmos.group.v1.ThresholdDecisionPolicy","threshold":"1","windows":{"voting_period": "120h", "min_execution_period": "0s"}}, + } + ], + "pagination": { + "total": "2" + } +} +``` + +#### GroupPoliciesByAdmin + +The `GroupPoliciesByAdmin` endpoint allows users to query for group policies by admin account address with pagination flags. + +```bash +cosmos.group.v1.Query/GroupPoliciesByAdmin +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"admin":"cosmos1.."}' localhost:9090 cosmos.group.v1.Query/GroupPoliciesByAdmin +``` + +Example Output: + +```bash +{ + "GroupPolicies": [ + { + "address": "cosmos1..", + "groupId": "1", + "admin": "cosmos1..", + "version": "1", + "decisionPolicy": {"@type":"/cosmos.group.v1.ThresholdDecisionPolicy","threshold":"1","windows":{"voting_period": "120h", "min_execution_period": "0s"}}, + }, + { + "address": "cosmos1..", + "groupId": "1", + "admin": "cosmos1..", + "version": "1", + "decisionPolicy": {"@type":"/cosmos.group.v1.ThresholdDecisionPolicy","threshold":"1","windows":{"voting_period": "120h", "min_execution_period": "0s"}}, + } + ], + "pagination": { + "total": "2" + } +} +``` + +#### Proposal + +The `Proposal` endpoint allows users to query for proposal by id. + +```bash +cosmos.group.v1.Query/Proposal +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' localhost:9090 cosmos.group.v1.Query/Proposal +``` + +Example Output: + +```bash +{ + "proposal": { + "proposalId": "1", + "address": "cosmos1..", + "proposers": [ + "cosmos1.." + ], + "submittedAt": "2021-12-17T07:06:26.310638964Z", + "groupVersion": "1", + "GroupPolicyVersion": "1", + "status": "STATUS_SUBMITTED", + "result": "RESULT_UNFINALIZED", + "voteState": { + "yesCount": "0", + "noCount": "0", + "abstainCount": "0", + "vetoCount": "0" + }, + "windows": { + "min_execution_period": "0s", + "voting_period": "432000s" + }, + "executorResult": "EXECUTOR_RESULT_NOT_RUN", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"100000000"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "title": "Title", + "summary": "Summary", + } +} +``` + +#### ProposalsByGroupPolicy + +The `ProposalsByGroupPolicy` endpoint allows users to query for proposals by account address of group policy with pagination flags. + +```bash +cosmos.group.v1.Query/ProposalsByGroupPolicy +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' localhost:9090 cosmos.group.v1.Query/ProposalsByGroupPolicy +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "proposalId": "1", + "address": "cosmos1..", + "proposers": [ + "cosmos1.." + ], + "submittedAt": "2021-12-17T08:03:27.099649352Z", + "groupVersion": "1", + "GroupPolicyVersion": "1", + "status": "STATUS_CLOSED", + "result": "RESULT_ACCEPTED", + "voteState": { + "yesCount": "1", + "noCount": "0", + "abstainCount": "0", + "vetoCount": "0" + }, + "windows": { + "min_execution_period": "0s", + "voting_period": "432000s" + }, + "executorResult": "EXECUTOR_RESULT_NOT_RUN", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"100000000"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "title": "Title", + "summary": "Summary", + } + ], + "pagination": { + "total": "1" + } +} +``` + +#### VoteByProposalVoter + +The `VoteByProposalVoter` endpoint allows users to query for vote by proposal id and voter account address. + +```bash +cosmos.group.v1.Query/VoteByProposalVoter +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1","voter":"cosmos1.."}' localhost:9090 cosmos.group.v1.Query/VoteByProposalVoter +``` + +Example Output: + +```bash +{ + "vote": { + "proposalId": "1", + "voter": "cosmos1..", + "choice": "CHOICE_YES", + "submittedAt": "2021-12-17T08:05:02.490164009Z" + } +} +``` + +#### VotesByProposal + +The `VotesByProposal` endpoint allows users to query for votes by proposal id with pagination flags. + +```bash +cosmos.group.v1.Query/VotesByProposal +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' localhost:9090 cosmos.group.v1.Query/VotesByProposal +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposalId": "1", + "voter": "cosmos1..", + "choice": "CHOICE_YES", + "submittedAt": "2021-12-17T08:05:02.490164009Z" + } + ], + "pagination": { + "total": "1" + } +} +``` + +#### VotesByVoter + +The `VotesByVoter` endpoint allows users to query for votes by voter account address with pagination flags. + +```bash +cosmos.group.v1.Query/VotesByVoter +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"voter":"cosmos1.."}' localhost:9090 cosmos.group.v1.Query/VotesByVoter +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposalId": "1", + "voter": "cosmos1..", + "choice": "CHOICE_YES", + "submittedAt": "2021-12-17T08:05:02.490164009Z" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### REST + +A user can query the `group` module using REST endpoints. + +#### GroupInfo + +The `GroupInfo` endpoint allows users to query for group info by given group id. + +```bash +/cosmos/group/v1/group_info/{group_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/group_info/1 +``` + +Example Output: + +```bash +{ + "info": { + "id": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "total_weight": "3" + } +} +``` + +#### GroupPolicyInfo + +The `GroupPolicyInfo` endpoint allows users to query for group policy info by account address of group policy. + +```bash +/cosmos/group/v1/group_policy_info/{address} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/group_policy_info/cosmos1.. +``` + +Example Output: + +```bash +{ + "info": { + "address": "cosmos1..", + "group_id": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "decision_policy": { + "@type": "/cosmos.group.v1.ThresholdDecisionPolicy", + "threshold": "1", + "windows": { + "voting_period": "120h", + "min_execution_period": "0s" + } + }, + } +} +``` + +#### GroupMembers + +The `GroupMembers` endpoint allows users to query for group members by group id with pagination flags. + +```bash +/cosmos/group/v1/group_members/{group_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/group_members/1 +``` + +Example Output: + +```bash +{ + "members": [ + { + "group_id": "1", + "member": { + "address": "cosmos1..", + "weight": "1", + "metadata": "AQ==" + } + }, + { + "group_id": "1", + "member": { + "address": "cosmos1..", + "weight": "2", + "metadata": "AQ==" + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +#### GroupsByAdmin + +The `GroupsByAdmin` endpoint allows users to query for groups by admin account address with pagination flags. + +```bash +/cosmos/group/v1/groups_by_admin/{admin} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/groups_by_admin/cosmos1.. +``` + +Example Output: + +```bash +{ + "groups": [ + { + "id": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "total_weight": "3" + }, + { + "id": "2", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "total_weight": "3" + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +#### GroupPoliciesByGroup + +The `GroupPoliciesByGroup` endpoint allows users to query for group policies by group id with pagination flags. + +```bash +/cosmos/group/v1/group_policies_by_group/{group_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/group_policies_by_group/1 +``` + +Example Output: + +```bash +{ + "group_policies": [ + { + "address": "cosmos1..", + "group_id": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "decision_policy": { + "@type": "/cosmos.group.v1.ThresholdDecisionPolicy", + "threshold": "1", + "windows": { + "voting_period": "120h", + "min_execution_period": "0s" + } + }, + }, + { + "address": "cosmos1..", + "group_id": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "decision_policy": { + "@type": "/cosmos.group.v1.ThresholdDecisionPolicy", + "threshold": "1", + "windows": { + "voting_period": "120h", + "min_execution_period": "0s" + } + }, + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +#### GroupPoliciesByAdmin + +The `GroupPoliciesByAdmin` endpoint allows users to query for group policies by admin account address with pagination flags. + +```bash +/cosmos/group/v1/group_policies_by_admin/{admin} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/group_policies_by_admin/cosmos1.. +``` + +Example Output: + +```bash +{ + "group_policies": [ + { + "address": "cosmos1..", + "group_id": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "decision_policy": { + "@type": "/cosmos.group.v1.ThresholdDecisionPolicy", + "threshold": "1", + "windows": { + "voting_period": "120h", + "min_execution_period": "0s" + } + }, + }, + { + "address": "cosmos1..", + "group_id": "1", + "admin": "cosmos1..", + "metadata": "AQ==", + "version": "1", + "decision_policy": { + "@type": "/cosmos.group.v1.ThresholdDecisionPolicy", + "threshold": "1", + "windows": { + "voting_period": "120h", + "min_execution_period": "0s" + } + }, + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +``` + +#### Proposal + +The `Proposal` endpoint allows users to query for proposal by id. + +```bash +/cosmos/group/v1/proposal/{proposal_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/proposal/1 +``` + +Example Output: + +```bash +{ + "proposal": { + "proposal_id": "1", + "address": "cosmos1..", + "metadata": "AQ==", + "proposers": [ + "cosmos1.." + ], + "submitted_at": "2021-12-17T07:06:26.310638964Z", + "group_version": "1", + "group_policy_version": "1", + "status": "STATUS_SUBMITTED", + "result": "RESULT_UNFINALIZED", + "vote_state": { + "yes_count": "0", + "no_count": "0", + "abstain_count": "0", + "veto_count": "0" + }, + "windows": { + "min_execution_period": "0s", + "voting_period": "432000s" + }, + "executor_result": "EXECUTOR_RESULT_NOT_RUN", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "100000000" + } + ] + } + ], + "title": "Title", + "summary": "Summary", + } +} +``` + +#### ProposalsByGroupPolicy + +The `ProposalsByGroupPolicy` endpoint allows users to query for proposals by account address of group policy with pagination flags. + +```bash +/cosmos/group/v1/proposals_by_group_policy/{address} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/proposals_by_group_policy/cosmos1.. +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "id": "1", + "group_policy_address": "cosmos1..", + "metadata": "AQ==", + "proposers": [ + "cosmos1.." + ], + "submit_time": "2021-12-17T08:03:27.099649352Z", + "group_version": "1", + "group_policy_version": "1", + "status": "STATUS_CLOSED", + "result": "RESULT_ACCEPTED", + "vote_state": { + "yes_count": "1", + "no_count": "0", + "abstain_count": "0", + "veto_count": "0" + }, + "windows": { + "min_execution_period": "0s", + "voting_period": "432000s" + }, + "executor_result": "EXECUTOR_RESULT_NOT_RUN", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "100000000" + } + ] + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### VoteByProposalVoter + +The `VoteByProposalVoter` endpoint allows users to query for vote by proposal id and voter account address. + +```bash +/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1beta1/vote_by_proposal_voter/1/cosmos1.. +``` + +Example Output: + +```bash +{ + "vote": { + "proposal_id": "1", + "voter": "cosmos1..", + "choice": "CHOICE_YES", + "metadata": "AQ==", + "submitted_at": "2021-12-17T08:05:02.490164009Z" + } +} +``` + +#### VotesByProposal + +The `VotesByProposal` endpoint allows users to query for votes by proposal id with pagination flags. + +```bash +/cosmos/group/v1/votes_by_proposal/{proposal_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/votes_by_proposal/1 +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposal_id": "1", + "voter": "cosmos1..", + "option": "CHOICE_YES", + "metadata": "AQ==", + "submit_time": "2021-12-17T08:05:02.490164009Z" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### VotesByVoter + +The `VotesByVoter` endpoint allows users to query for votes by voter account address with pagination flags. + +```bash +/cosmos/group/v1/votes_by_voter/{voter} +``` + +Example: + +```bash +curl localhost:1317/cosmos/group/v1/votes_by_voter/cosmos1.. +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposal_id": "1", + "voter": "cosmos1..", + "choice": "CHOICE_YES", + "metadata": "AQ==", + "submitted_at": "2021-12-17T08:05:02.490164009Z" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +## Metadata + +The group module has four locations for metadata where users can provide further context about the on-chain actions they are taking. By default all metadata fields have a 255 character length field where metadata can be stored in json format, either on-chain or off-chain depending on the amount of data required. Here we provide a recommendation for the json structure and where the data should be stored. There are two important factors in making these recommendations. First, that the group and gov modules are consistent with one another, note the number of proposals made by all groups may be quite large. Second, that client applications such as block explorers and governance interfaces have confidence in the consistency of metadata structure accross chains. + +### Proposal + +Location: off-chain as json object stored on IPFS (mirrors [gov proposal](../gov/README.md#metadata)) + +```json +{ + "title": "", + "authors": [""], + "summary": "", + "details": "", + "proposal_forum_url": "", + "vote_option_context": "", +} +``` + +:::note +The `authors` field is an array of strings, this is to allow for multiple authors to be listed in the metadata. +In v0.46, the `authors` field is a comma-separated string. Frontends are encouraged to support both formats for backwards compatibility. +::: + +### Vote + +Location: on-chain as json within 255 character limit (mirrors [gov vote](../gov/README.md#metadata)) + +```json +{ + "justification": "", +} +``` + +### Group + +Location: off-chain as json object stored on IPFS + +```json +{ + "name": "", + "description": "", + "group_website_url": "", + "group_forum_url": "", +} +``` + +### Decision policy + +Location: on-chain as json within 255 character limit + +```json +{ + "name": "", + "description": "", +} +``` diff --git a/docs/integrate/modules/mint/README.md b/docs/integrate/modules/mint/README.md new file mode 100644 index 000000000..900615bba --- /dev/null +++ b/docs/integrate/modules/mint/README.md @@ -0,0 +1,383 @@ +--- +sidebar_position: 1 +--- + +# `x/mint` + +## Contents + +* [State](#state) + * [Minter](#minter) + * [Params](#params) +* [Begin-Block](#begin-block) + * [NextInflationRate](#nextinflationrate) + * [NextAnnualProvisions](#nextannualprovisions) + * [BlockProvision](#blockprovision) +* [Parameters](#parameters) +* [Events](#events) + * [BeginBlocker](#beginblocker) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + * [REST](#rest) + +## Concepts + +### The Minting Mechanism + +The minting mechanism was designed to: + +* allow for a flexible inflation rate determined by market demand targeting a particular bonded-stake ratio +* effect a balance between market liquidity and staked supply + +In order to best determine the appropriate market rate for inflation rewards, a +moving change rate is used. The moving change rate mechanism ensures that if +the % bonded is either over or under the goal %-bonded, the inflation rate will +adjust to further incentivize or disincentivize being bonded, respectively. Setting the goal +%-bonded at less than 100% encourages the network to maintain some non-staked tokens +which should help provide some liquidity. + +It can be broken down in the following way: + +* If the inflation rate is below the goal %-bonded the inflation rate will + increase until a maximum value is reached +* If the goal % bonded (67% in Cosmos-Hub) is maintained, then the inflation + rate will stay constant +* If the inflation rate is above the goal %-bonded the inflation rate will + decrease until a minimum value is reached + + +## State + +### Minter + +The minter is a space for holding current inflation information. + +* Minter: `0x00 -> ProtocolBuffer(minter)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L10-L24 +``` + +### Params + +The mint module stores it's params in state with the prefix of `0x01`, +it can be updated with governance or the address with authority. + +* Params: `mint/params -> legacy_amino(params)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L26-L59 +``` + +## Begin-Block + +Minting parameters are recalculated and inflation paid at the beginning of each block. + +### Inflation rate calculation + +Inflation rate is calculated using an "inflation calculation function" that's +passed to the `NewAppModule` function. If no function is passed, then the SDK's +default inflation function will be used (`NextInflationRate`). In case a custom +inflation calculation logic is needed, this can be achieved by defining and +passing a function that matches `InflationCalculationFn`'s signature. + +```go +type InflationCalculationFn func(ctx sdk.Context, minter Minter, params Params, bondedRatio math.LegacyDec) math.LegacyDec +``` + +#### NextInflationRate + +The target annual inflation rate is recalculated each block. +The inflation is also subject to a rate change (positive or negative) +depending on the distance from the desired ratio (67%). The maximum rate change +possible is defined to be 13% per year, however the annual inflation is capped +as between 7% and 20%. + +```go +NextInflationRate(params Params, bondedRatio math.LegacyDec) (inflation math.LegacyDec) { + inflationRateChangePerYear = (1 - bondedRatio/params.GoalBonded) * params.InflationRateChange + inflationRateChange = inflationRateChangePerYear/blocksPerYr + + // increase the new annual inflation for this next block + inflation += inflationRateChange + if inflation > params.InflationMax { + inflation = params.InflationMax + } + if inflation < params.InflationMin { + inflation = params.InflationMin + } + + return inflation +} +``` + +### NextAnnualProvisions + +Calculate the annual provisions based on current total supply and inflation +rate. This parameter is calculated once per block. + +```go +NextAnnualProvisions(params Params, totalSupply math.LegacyDec) (provisions math.LegacyDec) { + return Inflation * totalSupply +``` + +### BlockProvision + +Calculate the provisions generated for each block based on current annual provisions. The provisions are then minted by the `mint` module's `ModuleMinterAccount` and then transferred to the `auth`'s `FeeCollector` `ModuleAccount`. + +```go +BlockProvision(params Params) sdk.Coin { + provisionAmt = AnnualProvisions/ params.BlocksPerYear + return sdk.NewCoin(params.MintDenom, provisionAmt.Truncate()) +``` + + +## Parameters + +The minting module contains the following parameters: + +| Key | Type | Example | +|---------------------|-----------------|------------------------| +| MintDenom | string | "uatom" | +| InflationRateChange | string (dec) | "0.130000000000000000" | +| InflationMax | string (dec) | "0.200000000000000000" | +| InflationMin | string (dec) | "0.070000000000000000" | +| GoalBonded | string (dec) | "0.670000000000000000" | +| BlocksPerYear | string (uint64) | "6311520" | + + +## Events + +The minting module emits the following events: + +### BeginBlocker + +| Type | Attribute Key | Attribute Value | +|------|-------------------|--------------------| +| mint | bonded_ratio | {bondedRatio} | +| mint | inflation | {inflation} | +| mint | annual_provisions | {annualProvisions} | +| mint | amount | {amount} | + + +## Client + +### CLI + +A user can query and interact with the `mint` module using the CLI. + +#### Query + +The `query` commands allow users to query `mint` state. + +```shell +simd query mint --help +``` + +##### annual-provisions + +The `annual-provisions` command allow users to query the current minting annual provisions value + +```shell +simd query mint annual-provisions [flags] +``` + +Example: + +```shell +simd query mint annual-provisions +``` + +Example Output: + +```shell +22268504368893.612100895088410693 +``` + +##### inflation + +The `inflation` command allow users to query the current minting inflation value + +```shell +simd query mint inflation [flags] +``` + +Example: + +```shell +simd query mint inflation +``` + +Example Output: + +```shell +0.199200302563256955 +``` + +##### params + +The `params` command allow users to query the current minting parameters + +```shell +simd query mint params [flags] +``` + +Example: + +```yml +blocks_per_year: "4360000" +goal_bonded: "0.670000000000000000" +inflation_max: "0.200000000000000000" +inflation_min: "0.070000000000000000" +inflation_rate_change: "0.130000000000000000" +mint_denom: stake +``` + +### gRPC + +A user can query the `mint` module using gRPC endpoints. + +#### AnnualProvisions + +The `AnnualProvisions` endpoint allow users to query the current minting annual provisions value + +```shell +/cosmos.mint.v1beta1.Query/AnnualProvisions +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/AnnualProvisions +``` + +Example Output: + +```json +{ + "annualProvisions": "1432452520532626265712995618" +} +``` + +#### Inflation + +The `Inflation` endpoint allow users to query the current minting inflation value + +```shell +/cosmos.mint.v1beta1.Query/Inflation +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Inflation +``` + +Example Output: + +```json +{ + "inflation": "130197115720711261" +} +``` + +#### Params + +The `Params` endpoint allow users to query the current minting parameters + +```shell +/cosmos.mint.v1beta1.Query/Params +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "mintDenom": "stake", + "inflationRateChange": "130000000000000000", + "inflationMax": "200000000000000000", + "inflationMin": "70000000000000000", + "goalBonded": "670000000000000000", + "blocksPerYear": "6311520" + } +} +``` + +### REST + +A user can query the `mint` module using REST endpoints. + +#### annual-provisions + +```shell +/cosmos/mint/v1beta1/annual_provisions +``` + +Example: + +```shell +curl "localhost:1317/cosmos/mint/v1beta1/annual_provisions" +``` + +Example Output: + +```json +{ + "annualProvisions": "1432452520532626265712995618" +} +``` + +#### inflation + +```shell +/cosmos/mint/v1beta1/inflation +``` + +Example: + +```shell +curl "localhost:1317/cosmos/mint/v1beta1/inflation" +``` + +Example Output: + +```json +{ + "inflation": "130197115720711261" +} +``` + +#### params + +```shell +/cosmos/mint/v1beta1/params +``` + +Example: + +```shell +curl "localhost:1317/cosmos/mint/v1beta1/params" +``` + +Example Output: + +```json +{ + "params": { + "mintDenom": "stake", + "inflationRateChange": "130000000000000000", + "inflationMax": "200000000000000000", + "inflationMin": "70000000000000000", + "goalBonded": "670000000000000000", + "blocksPerYear": "6311520" + } +} +``` diff --git a/docs/integrate/modules/nft/README.md b/docs/integrate/modules/nft/README.md new file mode 100644 index 000000000..34c1d4066 --- /dev/null +++ b/docs/integrate/modules/nft/README.md @@ -0,0 +1,89 @@ +--- +sidebar_position: 1 +--- + +# `x/nft` + +## Contents + +## Abstract + +`x/nft` is an implementation of a Cosmos SDK module, per [ADR 43](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-043-nft-module.md), that allows you to create nft classification, create nft, transfer nft, update nft, and support various queries by integrating the module. It is fully compatible with the ERC721 specification. + +* [Concepts](#concepts) + * [Class](#class) + * [NFT](#nft) +* [State](#state) + * [Class](#class-1) + * [NFT](#nft-1) + * [NFTOfClassByOwner](#nftofclassbyowner) + * [Owner](#owner) + * [TotalSupply](#totalsupply) +* [Messages](#messages) + * [MsgSend](#msgsend) +* [Events](#events) + +## Concepts + +### Class + +`x/nft` module defines a struct `Class` to describe the common characteristics of a class of nft, under this class, you can create a variety of nft, which is equivalent to an erc721 contract for Ethereum. The design is defined in the [ADR 043](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-043-nft-module.md). + +### NFT + +The full name of NFT is Non-Fungible Tokens. Because of the irreplaceable nature of NFT, it means that it can be used to represent unique things. The nft implemented by this module is fully compatible with Ethereum ERC721 standard. + +## State + +### Class + +Class is mainly composed of `id`, `name`, `symbol`, `description`, `uri`, `uri_hash`,`data` where `id` is the unique identifier of the class, similar to the Ethereum ERC721 contract address, the others are optional. + +* Class: `0x01 | classID | -> ProtocolBuffer(Class)` + +### NFT + +NFT is mainly composed of `class_id`, `id`, `uri`, `uri_hash` and `data`. Among them, `class_id` and `id` are two-tuples that identify the uniqueness of nft, `uri` and `uri_hash` is optional, which identifies the off-chain storage location of the nft, and `data` is an Any type. Use Any chain of `x/nft` modules can be customized by extending this field + +* NFT: `0x02 | classID | 0x00 | nftID |-> ProtocolBuffer(NFT)` + +### NFTOfClassByOwner + +NFTOfClassByOwner is mainly to realize the function of querying all nfts using classID and owner, without other redundant functions. + +* NFTOfClassByOwner: `0x03 | owner | 0x00 | classID | 0x00 | nftID |-> 0x01` + +### Owner + +Since there is no extra field in NFT to indicate the owner of nft, an additional key-value pair is used to save the ownership of nft. With the transfer of nft, the key-value pair is updated synchronously. + +* OwnerKey: `0x04 | classID | 0x00 | nftID |-> owner` + +### TotalSupply + +TotalSupply is responsible for tracking the number of all nfts under a certain class. Mint operation is performed under the changed class, supply increases by one, burn operation, and supply decreases by one. + +* OwnerKey: `0x05 | classID |-> totalSupply` + +## Messages + +In this section we describe the processing of messages for the NFT module. + +:::warning +The validation of `ClassID` and `NftID` is left to the app developer. +The SDK does not provide any validation for these fields. +::: + +### MsgSend + +You can use the `MsgSend` message to transfer the ownership of nft. This is a function provided by the `x/nft` module. Of course, you can use the `Transfer` method to implement your own transfer logic, but you need to pay extra attention to the transfer permissions. + +The message handling should fail if: + +* provided `ClassID` does not exist. +* provided `Id` does not exist. +* provided `Sender` does not the owner of nft. + +## Events + +The nft module emits proto events defined in [the Protobuf reference](https://buf.build/cosmos/cosmos-sdk/docs/main:cosmos.nft.v1beta1). diff --git a/docs/integrate/modules/params/README.md b/docs/integrate/modules/params/README.md new file mode 100644 index 000000000..f8d374d0c --- /dev/null +++ b/docs/integrate/modules/params/README.md @@ -0,0 +1,79 @@ +--- +sidebar_position: 1 +--- + +# `x/params` + +> Note: The Params module has been depreacted in favour of each module housing its own parameters. + +## Abstract + +Package params provides a globally available parameter store. + +There are two main types, Keeper and Subspace. Subspace is an isolated namespace for a +paramstore, where keys are prefixed by preconfigured spacename. Keeper has a +permission to access all existing spaces. + +Subspace can be used by the individual keepers, which need a private parameter store +that the other keepers cannot modify. The params Keeper can be used to add a route to `x/gov` router in order to modify any parameter in case a proposal passes. + +The following contents explains how to use params module for master and user modules. + +## Contents + +* [Keeper](#keeper) +* [Subspace](#subspace) + * [Key](#key) + * [KeyTable](#keytable) + * [ParamSet](#paramset) + +## Keeper + +In the app initialization stage, [subspaces](#subspace) can be allocated for other modules' keeper using `Keeper.Subspace` and are stored in `Keeper.spaces`. Then, those modules can have a reference to their specific parameter store through `Keeper.GetSubspace`. + +Example: + +```go +type ExampleKeeper struct { + paramSpace paramtypes.Subspace +} + +func (k ExampleKeeper) SetParams(ctx sdk.Context, params types.Params) { + k.paramSpace.SetParamSet(ctx, ¶ms) +} +``` + +## Subspace + +`Subspace` is a prefixed subspace of the parameter store. Each module which uses the +parameter store will take a `Subspace` to isolate permission to access. + +### Key + +Parameter keys are human readable alphanumeric strings. A parameter for the key +`"ExampleParameter"` is stored under `[]byte("SubspaceName" + "/" + "ExampleParameter")`, + where `"SubspaceName"` is the name of the subspace. + +Subkeys are secondary parameter keys those are used along with a primary parameter key. +Subkeys can be used for grouping or dynamic parameter key generation during runtime. + +### KeyTable + +All of the parameter keys that will be used should be registered at the compile +time. `KeyTable` is essentially a `map[string]attribute`, where the `string` is a parameter key. + +Currently, `attribute` consists of a `reflect.Type`, which indicates the parameter +type to check that provided key and value are compatible and registered, as well as a function `ValueValidatorFn` to validate values. + +Only primary keys have to be registered on the `KeyTable`. Subkeys inherit the +attribute of the primary key. + +### ParamSet + +Modules often define parameters as a proto message. The generated struct can implement +`ParamSet` interface to be used with the following methods: + +* `KeyTable.RegisterParamSet()`: registers all parameters in the struct +* `Subspace.{Get, Set}ParamSet()`: Get to & Set from the struct + +The implementor should be a pointer in order to use `GetParamSet()`. diff --git a/docs/integrate/modules/slashing/README.md b/docs/integrate/modules/slashing/README.md new file mode 100644 index 000000000..591a9a73a --- /dev/null +++ b/docs/integrate/modules/slashing/README.md @@ -0,0 +1,813 @@ +--- +sidebar_position: 1 +--- + +# `x/slashing` + +## Abstract + +This section specifies the slashing module of the Cosmos SDK, which implements functionality +first outlined in the [Cosmos Whitepaper](https://cosmos.network/about/whitepaper) in June 2016. + +The slashing module enables Cosmos SDK-based blockchains to disincentivize any attributable action +by a protocol-recognized actor with value at stake by penalizing them ("slashing"). + +Penalties may include, but are not limited to: + +* Burning some amount of their stake +* Removing their ability to vote on future blocks for a period of time. + +This module will be used by the Cosmos Hub, the first hub in the Cosmos ecosystem. + +## Contents + +* [Concepts](#concepts) + * [States](#states) + * [Tombstone Caps](#tombstone-caps) + * [Infraction Timelines](#infraction-timelines) +* [State](#state) + * [Signing Info (Liveness)](#signing-info-liveness) + * [Params](#params) +* [Messages](#messages) + * [Unjail](#unjail) +* [BeginBlock](#beginblock) + * [Liveness Tracking](#liveness-tracking) +* [Hooks](#hooks) +* [Events](#events) +* [Staking Tombstone](#staking-tombstone) +* [Parameters](#parameters) +* [CLI](#cli) + * [Query](#query) + * [Transactions](#transactions) + * [gRPC](#grpc) + * [REST](#rest) + +## Concepts + +### States + +At any given time, there are any number of validators registered in the state +machine. Each block, the top `MaxValidators` (defined by `x/staking`) validators +who are not jailed become _bonded_, meaning that they may propose and vote on +blocks. Validators who are _bonded_ are _at stake_, meaning that part or all of +their stake and their delegators' stake is at risk if they commit a protocol fault. + +For each of these validators we keep a `ValidatorSigningInfo` record that contains +information partaining to validator's liveness and other infraction related +attributes. + +### Tombstone Caps + +In order to mitigate the impact of initially likely categories of non-malicious +protocol faults, the Cosmos Hub implements for each validator +a _tombstone_ cap, which only allows a validator to be slashed once for a double +sign fault. For example, if you misconfigure your HSM and double-sign a bunch of +old blocks, you'll only be punished for the first double-sign (and then immediately tombstombed). This will still be quite expensive and desirable to avoid, but tombstone caps +somewhat blunt the economic impact of unintentional misconfiguration. + +Liveness faults do not have caps, as they can't stack upon each other. Liveness bugs are "detected" as soon as the infraction occurs, and the validators are immediately put in jail, so it is not possible for them to commit multiple liveness faults without unjailing in between. + +### Infraction Timelines + +To illustrate how the `x/slashing` module handles submitted evidence through +CometBFT consensus, consider the following examples: + +**Definitions**: + +_[_ : timeline start +_]_ : timeline end +_Cn_ : infraction `n` committed +_Dn_ : infraction `n` discovered +_Vb_ : validator bonded +_Vu_ : validator unbonded + +#### Single Double Sign Infraction + +\[----------C1----D1,Vu-----\] + +A single infraction is committed then later discovered, at which point the +validator is unbonded and slashed at the full amount for the infraction. + +#### Multiple Double Sign Infractions + +\[----------C1--C2---C3---D1,D2,D3Vu-----\] + +Multiple infractions are committed and then later discovered, at which point the +validator is jailed and slashed for only one infraction. Because the validator +is also tombstoned, they can not rejoin the validator set. + +## State + +### Signing Info (Liveness) + +Every block includes a set of precommits by the validators for the previous block, +known as the `LastCommitInfo` provided by CometBFT. A `LastCommitInfo` is valid so +long as it contains precommits from +2/3 of total voting power. + +Proposers are incentivized to include precommits from all validators in the CometBFT `LastCommitInfo` +by receiving additional fees proportional to the difference between the voting +power included in the `LastCommitInfo` and +2/3 (see [fee distribution](../distribution/README.md#begin-block)). + +```go +type LastCommitInfo struct { + Round int32 + Votes []VoteInfo +} +``` + +Validators are penalized for failing to be included in the `LastCommitInfo` for some +number of blocks by being automatically jailed, potentially slashed, and unbonded. + +Information about validator's liveness activity is tracked through `ValidatorSigningInfo`. +It is indexed in the store as follows: + +* ValidatorSigningInfo: `0x01 | ConsAddrLen (1 byte) | ConsAddress -> ProtocolBuffer(ValSigningInfo)` +* MissedBlocksBitArray: `0x02 | ConsAddrLen (1 byte) | ConsAddress | LittleEndianUint64(signArrayIndex) -> VarInt(didMiss)` (varint is a number encoding format) + +The first mapping allows us to easily lookup the recent signing info for a +validator based on the validator's consensus address. + +The second mapping (`MissedBlocksBitArray`) acts +as a bit-array of size `SignedBlocksWindow` that tells us if the validator missed +the block for a given index in the bit-array. The index in the bit-array is given +as little endian uint64. +The result is a `varint` that takes on `0` or `1`, where `0` indicates the +validator did not miss (did sign) the corresponding block, and `1` indicates +they missed the block (did not sign). + +Note that the `MissedBlocksBitArray` is not explicitly initialized up-front. Keys +are added as we progress through the first `SignedBlocksWindow` blocks for a newly +bonded validator. The `SignedBlocksWindow` parameter defines the size +(number of blocks) of the sliding window used to track validator liveness. + +The information stored for tracking validator liveness is as follows: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/slashing/v1beta1/slashing.proto#L13-L35 +``` + +### Params + +The slashing module stores it's params in state with the prefix of `0x00`, +it can be updated with governance or the address with authority. + +* Params: `0x00 | ProtocolBuffer(Params)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/slashing/v1beta1/slashing.proto#L37-L59 +``` + +## Messages + +In this section we describe the processing of messages for the `slashing` module. + +### Unjail + +If a validator was automatically unbonded due to downtime and wishes to come back online & +possibly rejoin the bonded set, it must send `MsgUnjail`: + +```protobuf +// MsgUnjail is an sdk.Msg used for unjailing a jailed validator, thus returning +// them into the bonded validator set, so they can begin receiving provisions +// and rewards again. +message MsgUnjail { + string validator_addr = 1; +} +``` + +Below is a pseudocode of the `MsgSrv/Unjail` RPC: + +```go +unjail(tx MsgUnjail) + validator = getValidator(tx.ValidatorAddr) + if validator == nil + fail with "No validator found" + + if getSelfDelegation(validator) == 0 + fail with "validator must self delegate before unjailing" + + if !validator.Jailed + fail with "Validator not jailed, cannot unjail" + + info = GetValidatorSigningInfo(operator) + if info.Tombstoned + fail with "Tombstoned validator cannot be unjailed" + if block time < info.JailedUntil + fail with "Validator still jailed, cannot unjail until period has expired" + + validator.Jailed = false + setValidator(validator) + + return +``` + +If the validator has enough stake to be in the top `n = MaximumBondedValidators`, it will be automatically rebonded, +and all delegators still delegated to the validator will be rebonded and begin to again collect +provisions and rewards. + +## BeginBlock + +### Liveness Tracking + +At the beginning of each block, we update the `ValidatorSigningInfo` for each +validator and check if they've crossed below the liveness threshold over a +sliding window. This sliding window is defined by `SignedBlocksWindow` and the +index in this window is determined by `IndexOffset` found in the validator's +`ValidatorSigningInfo`. For each block processed, the `IndexOffset` is incremented +regardless if the validator signed or not. Once the index is determined, the +`MissedBlocksBitArray` and `MissedBlocksCounter` are updated accordingly. + +Finally, in order to determine if a validator crosses below the liveness threshold, +we fetch the maximum number of blocks missed, `maxMissed`, which is +`SignedBlocksWindow - (MinSignedPerWindow * SignedBlocksWindow)` and the minimum +height at which we can determine liveness, `minHeight`. If the current block is +greater than `minHeight` and the validator's `MissedBlocksCounter` is greater than +`maxMissed`, they will be slashed by `SlashFractionDowntime`, will be jailed +for `DowntimeJailDuration`, and have the following values reset: +`MissedBlocksBitArray`, `MissedBlocksCounter`, and `IndexOffset`. + +**Note**: Liveness slashes do **NOT** lead to a tombstombing. + +```go +height := block.Height + +for vote in block.LastCommitInfo.Votes { + signInfo := GetValidatorSigningInfo(vote.Validator.Address) + + // This is a relative index, so we counts blocks the validator SHOULD have + // signed. We use the 0-value default signing info if not present, except for + // start height. + index := signInfo.IndexOffset % SignedBlocksWindow() + signInfo.IndexOffset++ + + // Update MissedBlocksBitArray and MissedBlocksCounter. The MissedBlocksCounter + // just tracks the sum of MissedBlocksBitArray. That way we avoid needing to + // read/write the whole array each time. + missedPrevious := GetValidatorMissedBlockBitArray(vote.Validator.Address, index) + missed := !signed + + switch { + case !missedPrevious && missed: + // array index has changed from not missed to missed, increment counter + SetValidatorMissedBlockBitArray(vote.Validator.Address, index, true) + signInfo.MissedBlocksCounter++ + + case missedPrevious && !missed: + // array index has changed from missed to not missed, decrement counter + SetValidatorMissedBlockBitArray(vote.Validator.Address, index, false) + signInfo.MissedBlocksCounter-- + + default: + // array index at this index has not changed; no need to update counter + } + + if missed { + // emit events... + } + + minHeight := signInfo.StartHeight + SignedBlocksWindow() + maxMissed := SignedBlocksWindow() - MinSignedPerWindow() + + // If we are past the minimum height and the validator has missed too many + // jail and slash them. + if height > minHeight && signInfo.MissedBlocksCounter > maxMissed { + validator := ValidatorByConsAddr(vote.Validator.Address) + + // emit events... + + // We need to retrieve the stake distribution which signed the block, so we + // subtract ValidatorUpdateDelay from the block height, and subtract an + // additional 1 since this is the LastCommit. + // + // Note, that this CAN result in a negative "distributionHeight" up to + // -ValidatorUpdateDelay-1, i.e. at the end of the pre-genesis block (none) = at the beginning of the genesis block. + // That's fine since this is just used to filter unbonding delegations & redelegations. + distributionHeight := height - sdk.ValidatorUpdateDelay - 1 + + SlashWithInfractionReason(vote.Validator.Address, distributionHeight, vote.Validator.Power, SlashFractionDowntime(), stakingtypes.Downtime) + Jail(vote.Validator.Address) + + signInfo.JailedUntil = block.Time.Add(DowntimeJailDuration()) + + // We need to reset the counter & array so that the validator won't be + // immediately slashed for downtime upon rebonding. + signInfo.MissedBlocksCounter = 0 + signInfo.IndexOffset = 0 + ClearValidatorMissedBlockBitArray(vote.Validator.Address) + } + + SetValidatorSigningInfo(vote.Validator.Address, signInfo) +} +``` + +## Hooks + +This section contains a description of the module's `hooks`. Hooks are operations that are executed automatically when events are raised. + +### Staking hooks + +The slashing module implements the `StakingHooks` defined in `x/staking` and are used as record-keeping of validators information. During the app initialization, these hooks should be registered in the staking module struct. + +The following hooks impact the slashing state: + +* `AfterValidatorBonded` creates a `ValidatorSigningInfo` instance as described in the following section. +* `AfterValidatorCreated` stores a validator's consensus key. +* `AfterValidatorRemoved` removes a validator's consensus key. + +### Validator Bonded + +Upon successful first-time bonding of a new validator, we create a new `ValidatorSigningInfo` structure for the +now-bonded validator, which `StartHeight` of the current block. + +If the validator was out of the validator set and gets bonded again, its new bonded height is set. + +```go +onValidatorBonded(address sdk.ValAddress) + + signingInfo, found = GetValidatorSigningInfo(address) + if !found { + signingInfo = ValidatorSigningInfo { + StartHeight : CurrentHeight, + IndexOffset : 0, + JailedUntil : time.Unix(0, 0), + Tombstone : false, + MissedBloskCounter : 0 + } else { + signingInfo.StartHeight = CurrentHeight + } + + setValidatorSigningInfo(signingInfo) + } + + return +``` + +## Events + +The slashing module emits the following events: + +### MsgServer + +#### MsgUnjail + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ------------------ | +| message | module | slashing | +| message | sender | {validatorAddress} | + +### Keeper + +### BeginBlocker: HandleValidatorSignature + +| Type | Attribute Key | Attribute Value | +| ----- | ------------- | --------------------------- | +| slash | address | {validatorConsensusAddress} | +| slash | power | {validatorPower} | +| slash | reason | {slashReason} | +| slash | jailed [0] | {validatorConsensusAddress} | +| slash | burned coins | {math.Int} | + +* [0] Only included if the validator is jailed. + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | --------------------------- | +| liveness | address | {validatorConsensusAddress} | +| liveness | missed_blocks | {missedBlocksCounter} | +| liveness | height | {blockHeight} | + +#### Slash + +* same as `"slash"` event from `HandleValidatorSignature`, but without the `jailed` attribute. + +#### Jail + +| Type | Attribute Key | Attribute Value | +| ----- | ------------- | ------------------ | +| slash | jailed | {validatorAddress} | + +## Staking Tombstone + +### Abstract + +In the current implementation of the `slashing` module, when the consensus engine +informs the state machine of a validator's consensus fault, the validator is +partially slashed, and put into a "jail period", a period of time in which they +are not allowed to rejoin the validator set. However, because of the nature of +consensus faults and ABCI, there can be a delay between an infraction occurring, +and evidence of the infraction reaching the state machine (this is one of the +primary reasons for the existence of the unbonding period). + +> Note: The tombstone concept, only applies to faults that have a delay between +> the infraction occurring and evidence reaching the state machine. For example, +> evidence of a validator double signing may take a while to reach the state machine +> due to unpredictable evidence gossip layer delays and the ability of validators to +> selectively reveal double-signatures (e.g. to infrequently-online light clients). +> Liveness slashing, on the other hand, is detected immediately as soon as the +> infraction occurs, and therefore no slashing period is needed. A validator is +> immediately put into jail period, and they cannot commit another liveness fault +> until they unjail. In the future, there may be other types of byzantine faults +> that have delays (for example, submitting evidence of an invalid proposal as a transaction). +> When implemented, it will have to be decided whether these future types of +> byzantine faults will result in a tombstoning (and if not, the slash amounts +> will not be capped by a slashing period). + +In the current system design, once a validator is put in the jail for a consensus +fault, after the `JailPeriod` they are allowed to send a transaction to `unjail` +themselves, and thus rejoin the validator set. + +One of the "design desires" of the `slashing` module is that if multiple +infractions occur before evidence is executed (and a validator is put in jail), +they should only be punished for single worst infraction, but not cumulatively. +For example, if the sequence of events is: + +1. Validator A commits Infraction 1 (worth 30% slash) +2. Validator A commits Infraction 2 (worth 40% slash) +3. Validator A commits Infraction 3 (worth 35% slash) +4. Evidence for Infraction 1 reaches state machine (and validator is put in jail) +5. Evidence for Infraction 2 reaches state machine +6. Evidence for Infraction 3 reaches state machine + +Only Infraction 2 should have its slash take effect, as it is the highest. This +is done, so that in the case of the compromise of a validator's consensus key, +they will only be punished once, even if the hacker double-signs many blocks. +Because, the unjailing has to be done with the validator's operator key, they +have a chance to re-secure their consensus key, and then signal that they are +ready using their operator key. We call this period during which we track only +the max infraction, the "slashing period". + +Once, a validator rejoins by unjailing themselves, we begin a new slashing period; +if they commit a new infraction after unjailing, it gets slashed cumulatively on +top of the worst infraction from the previous slashing period. + +However, while infractions are grouped based off of the slashing periods, because +evidence can be submitted up to an `unbondingPeriod` after the infraction, we +still have to allow for evidence to be submitted for previous slashing periods. +For example, if the sequence of events is: + +1. Validator A commits Infraction 1 (worth 30% slash) +2. Validator A commits Infraction 2 (worth 40% slash) +3. Evidence for Infraction 1 reaches state machine (and Validator A is put in jail) +4. Validator A unjails + +We are now in a new slashing period, however we still have to keep the door open +for the previous infraction, as the evidence for Infraction 2 may still come in. +As the number of slashing periods increase, it creates more complexity as we have +to keep track of the highest infraction amount for every single slashing period. + +> Note: Currently, according to the `slashing` module spec, a new slashing period +> is created every time a validator is unbonded then rebonded. This should probably +> be changed to jailed/unjailed. See issue [#3205](https://github.com/cosmos/cosmos-sdk/issues/3205) +> for further details. For the remainder of this, I will assume that we only start +> a new slashing period when a validator gets unjailed. + +The maximum number of slashing periods is the `len(UnbondingPeriod) / len(JailPeriod)`. +The current defaults in Gaia for the `UnbondingPeriod` and `JailPeriod` are 3 weeks +and 2 days, respectively. This means there could potentially be up to 11 slashing +periods concurrently being tracked per validator. If we set the `JailPeriod >= UnbondingPeriod`, +we only have to track 1 slashing period (i.e not have to track slashing periods). + +Currently, in the jail period implementation, once a validator unjails, all of +their delegators who are delegated to them (haven't unbonded / redelegated away), +stay with them. Given that consensus safety faults are so egregious +(way more so than liveness faults), it is probably prudent to have delegators not +"auto-rebond" to the validator. + +#### Proposal: infinite jail + +We propose setting the "jail time" for a +validator who commits a consensus safety fault, to `infinite` (i.e. a tombstone state). +This essentially kicks the validator out of the validator set and does not allow +them to re-enter the validator set. All of their delegators (including the operator themselves) +have to either unbond or redelegate away. The validator operator can create a new +validator if they would like, with a new operator key and consensus key, but they +have to "re-earn" their delegations back. + +Implementing the tombstone system and getting rid of the slashing period tracking +will make the `slashing` module way simpler, especially because we can remove all +of the hooks defined in the `slashing` module consumed by the `staking` module +(the `slashing` module still consumes hooks defined in `staking`). + +#### Single slashing amount + +Another optimization that can be made is that if we assume that all ABCI faults +for CometBFT consensus are slashed at the same level, we don't have to keep +track of "max slash". Once an ABCI fault happens, we don't have to worry about +comparing potential future ones to find the max. + +Currently the only CometBFT ABCI fault is: + +* Unjustified precommits (double signs) + +It is currently planned to include the following fault in the near future: + +* Signing a precommit when you're in unbonding phase (needed to make light client bisection safe) + +Given that these faults are both attributable byzantine faults, we will likely +want to slash them equally, and thus we can enact the above change. + +> Note: This change may make sense for current CometBFT consensus, but maybe +> not for a different consensus algorithm or future versions of CometBFT that +> may want to punish at different levels (for example, partial slashing). + +## Parameters + +The slashing module contains the following parameters: + +| Key | Type | Example | +| ----------------------- | -------------- | ---------------------- | +| SignedBlocksWindow | string (int64) | "100" | +| MinSignedPerWindow | string (dec) | "0.500000000000000000" | +| DowntimeJailDuration | string (ns) | "600000000000" | +| SlashFractionDoubleSign | string (dec) | "0.050000000000000000" | +| SlashFractionDowntime | string (dec) | "0.010000000000000000" | + +## CLI + +A user can query and interact with the `slashing` module using the CLI. + +### Query + +The `query` commands allow users to query `slashing` state. + +```shell +simd query slashing --help +``` + +#### params + +The `params` command allows users to query genesis parameters for the slashing module. + +```shell +simd query slashing params [flags] +``` + +Example: + +```shell +simd query slashing params +``` + +Example Output: + +```yml +downtime_jail_duration: 600s +min_signed_per_window: "0.500000000000000000" +signed_blocks_window: "100" +slash_fraction_double_sign: "0.050000000000000000" +slash_fraction_downtime: "0.010000000000000000" +``` + +#### signing-info + +The `signing-info` command allows users to query signing-info of the validator using consensus public key. + +```shell +simd query slashing signing-infos [flags] +``` + +Example: + +```shell +simd query slashing signing-info '{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Auxs3865HpB/EfssYOzfqNhEJjzys6jD5B6tPgC8="}' + +``` + +Example Output: + +```yml +address: cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c +index_offset: "2068" +jailed_until: "1970-01-01T00:00:00Z" +missed_blocks_counter: "0" +start_height: "0" +tombstoned: false +``` + +#### signing-infos + +The `signing-infos` command allows users to query signing infos of all validators. + +```shell +simd query slashing signing-infos [flags] +``` + +Example: + +```shell +simd query slashing signing-infos +``` + +Example Output: + +```yml +info: +- address: cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c + index_offset: "2075" + jailed_until: "1970-01-01T00:00:00Z" + missed_blocks_counter: "0" + start_height: "0" + tombstoned: false +pagination: + next_key: null + total: "0" +``` + +### Transactions + +The `tx` commands allow users to interact with the `slashing` module. + +```bash +simd tx slashing --help +``` + +#### unjail + +The `unjail` command allows users to unjail a validator previously jailed for downtime. + +```bash +simd tx slashing unjail --from mykey [flags] +``` + +Example: + +```bash +simd tx slashing unjail --from mykey +``` + +### gRPC + +A user can query the `slashing` module using gRPC endpoints. + +#### Params + +The `Params` endpoint allows users to query the parameters of slashing module. + +```shell +cosmos.slashing.v1beta1.Query/Params +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "signedBlocksWindow": "100", + "minSignedPerWindow": "NTAwMDAwMDAwMDAwMDAwMDAw", + "downtimeJailDuration": "600s", + "slashFractionDoubleSign": "NTAwMDAwMDAwMDAwMDAwMDA=", + "slashFractionDowntime": "MTAwMDAwMDAwMDAwMDAwMDA=" + } +} +``` + +#### SigningInfo + +The SigningInfo queries the signing info of given cons address. + +```shell +cosmos.slashing.v1beta1.Query/SigningInfo +``` + +Example: + +```shell +grpcurl -plaintext -d '{"cons_address":"cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c"}' localhost:9090 cosmos.slashing.v1beta1.Query/SigningInfo +``` + +Example Output: + +```json +{ + "valSigningInfo": { + "address": "cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c", + "indexOffset": "3493", + "jailedUntil": "1970-01-01T00:00:00Z" + } +} +``` + +#### SigningInfos + +The SigningInfos queries signing info of all validators. + +```shell +cosmos.slashing.v1beta1.Query/SigningInfos +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/SigningInfos +``` + +Example Output: + +```json +{ + "info": [ + { + "address": "cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c", + "indexOffset": "2467", + "jailedUntil": "1970-01-01T00:00:00Z" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### REST + +A user can query the `slashing` module using REST endpoints. + +#### Params + +```shell +/cosmos/slashing/v1beta1/params +``` + +Example: + +```shell +curl "localhost:1317/cosmos/slashing/v1beta1/params" +``` + +Example Output: + +```json +{ + "params": { + "signed_blocks_window": "100", + "min_signed_per_window": "0.500000000000000000", + "downtime_jail_duration": "600s", + "slash_fraction_double_sign": "0.050000000000000000", + "slash_fraction_downtime": "0.010000000000000000" +} +``` + +#### signing_info + +```shell +/cosmos/slashing/v1beta1/signing_infos/%s +``` + +Example: + +```shell +curl "localhost:1317/cosmos/slashing/v1beta1/signing_infos/cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c" +``` + +Example Output: + +```json +{ + "val_signing_info": { + "address": "cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c", + "start_height": "0", + "index_offset": "4184", + "jailed_until": "1970-01-01T00:00:00Z", + "tombstoned": false, + "missed_blocks_counter": "0" + } +} +``` + +#### signing_infos + +```shell +/cosmos/slashing/v1beta1/signing_infos +``` + +Example: + +```shell +curl "localhost:1317/cosmos/slashing/v1beta1/signing_infos +``` + +Example Output: + +```json +{ + "info": [ + { + "address": "cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c", + "start_height": "0", + "index_offset": "4169", + "jailed_until": "1970-01-01T00:00:00Z", + "tombstoned": false, + "missed_blocks_counter": "0" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` diff --git a/docs/integrate/modules/staking/README.md b/docs/integrate/modules/staking/README.md new file mode 100644 index 000000000..5dd94dc69 --- /dev/null +++ b/docs/integrate/modules/staking/README.md @@ -0,0 +1,3058 @@ +--- +sidebar_position: 1 +--- + +# `x/staking` + +## Abstract + +This paper specifies the Staking module of the Cosmos SDK that was first +described in the [Cosmos Whitepaper](https://cosmos.network/about/whitepaper) +in June 2016. + +The module enables Cosmos SDK-based blockchain to support an advanced +Proof-of-Stake (PoS) system. In this system, holders of the native staking token of +the chain can become validators and can delegate tokens to validators, +ultimately determining the effective validator set for the system. + +This module is used in the Cosmos Hub, the first Hub in the Cosmos +network. + +## Contents + +* [State](#state) + * [Pool](#pool) + * [LastTotalPower](#lasttotalpower) + * [ValidatorUpdates](#validatorupdates) + * [UnbondingID](#unbondingid) + * [Params](#params) + * [Validator](#validator) + * [Delegation](#delegation) + * [UnbondingDelegation](#unbondingdelegation) + * [Redelegation](#redelegation) + * [Queues](#queues) + * [HistoricalInfo](#historicalinfo) +* [State Transitions](#state-transitions) + * [Validators](#validators) + * [Delegations](#delegations) + * [Slashing](#slashing) + * [How Shares are calculated](#how-shares-are-calculated) +* [Messages](#messages) + * [MsgCreateValidator](#msgcreatevalidator) + * [MsgEditValidator](#msgeditvalidator) + * [MsgDelegate](#msgdelegate) + * [MsgUndelegate](#msgundelegate) + * [MsgCancelUnbondingDelegation](#msgcancelunbondingdelegation) + * [MsgBeginRedelegate](#msgbeginredelegate) + * [MsgUpdateParams](#msgupdateparams) +* [Begin-Block](#begin-block) + * [Historical Info Tracking](#historical-info-tracking) +* [End-Block](#end-block) + * [Validator Set Changes](#validator-set-changes) + * [Queues](#queues-1) +* [Hooks](#hooks) +* [Events](#events) + * [EndBlocker](#endblocker) + * [Msg's](#msgs) +* [Parameters](#parameters) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + * [REST](#rest) + +## State + +### Pool + +Pool is used for tracking bonded and not-bonded token supply of the bond denomination. + +### LastTotalPower + +LastTotalPower tracks the total amounts of bonded tokens recorded during the previous end block. +Store entries prefixed with "Last" must remain unchanged until EndBlock. + +* LastTotalPower: `0x12 -> ProtocolBuffer(math.Int)` + +### ValidatorUpdates + +ValidatorUpdates contains the validator updates returned to ABCI at the end of every block. +The values are overwritten in every block. + +* ValidatorUpdates `0x61 -> []abci.ValidatorUpdate` + +### UnbondingID + +UnbondingID stores the ID of the latest unbonding operation. It enables to create unique IDs for unbonding operation, i.e., UnbondingID is incremented every time a new unbonding operation (validator unbonding, unbonding delegation, redelegation) is initiated. + +* UnbondingID: `0x37 -> uint64` + +### Params + +The staking module stores its params in state with the prefix of `0x51`, +it can be updated with governance or the address with authority. + +* Params: `0x51 | ProtocolBuffer(Params)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L310-L333 +``` + +### Validator + +Validators can have one of three statuses + +* `Unbonded`: The validator is not in the active set. They cannot sign blocks and do not earn + rewards. They can receive delegations. +* `Bonded`: Once the validator receives sufficient bonded tokens they automatically join the + active set during [`EndBlock`](#validator-set-changes) and their status is updated to `Bonded`. + They are signing blocks and receiving rewards. They can receive further delegations. + They can be slashed for misbehavior. Delegators to this validator who unbond their delegation + must wait the duration of the UnbondingTime, a chain-specific param, during which time + they are still slashable for offences of the source validator if those offences were committed + during the period of time that the tokens were bonded. +* `Unbonding`: When a validator leaves the active set, either by choice or due to slashing, jailing or + tombstoning, an unbonding of all their delegations begins. All delegations must then wait the UnbondingTime + before their tokens are moved to their accounts from the `BondedPool`. + +:::warning +Tombstoning is permanent, once tombstoned a validators consensus key can not be reused within the chain where the tombstoning happened. +::: + +Validators objects should be primarily stored and accessed by the +`OperatorAddr`, an SDK validator address for the operator of the validator. Two +additional indices are maintained per validator object in order to fulfill +required lookups for slashing and validator-set updates. A third special index +(`LastValidatorPower`) is also maintained which however remains constant +throughout each block, unlike the first two indices which mirror the validator +records within a block. + +* Validators: `0x21 | OperatorAddrLen (1 byte) | OperatorAddr -> ProtocolBuffer(validator)` +* ValidatorsByConsAddr: `0x22 | ConsAddrLen (1 byte) | ConsAddr -> OperatorAddr` +* ValidatorsByPower: `0x23 | BigEndian(ConsensusPower) | OperatorAddrLen (1 byte) | OperatorAddr -> OperatorAddr` +* LastValidatorsPower: `0x11 | OperatorAddrLen (1 byte) | OperatorAddr -> ProtocolBuffer(ConsensusPower)` +* ValidatorsByUnbondingID: `0x38 | UnbondingID -> 0x21 | OperatorAddrLen (1 byte) | OperatorAddr` + +`Validators` is the primary index - it ensures that each operator can have only one +associated validator, where the public key of that validator can change in the +future. Delegators can refer to the immutable operator of the validator, without +concern for the changing public key. + +`ValidatorsByUnbondingID` is an additional index that enables lookups for + validators by the unbonding IDs corresponding to their current unbonding. + +`ValidatorByConsAddr` is an additional index that enables lookups for slashing. +When CometBFT reports evidence, it provides the validator address, so this +map is needed to find the operator. Note that the `ConsAddr` corresponds to the +address which can be derived from the validator's `ConsPubKey`. + +`ValidatorsByPower` is an additional index that provides a sorted list of +potential validators to quickly determine the current active set. Here +ConsensusPower is validator.Tokens/10^6 by default. Note that all validators +where `Jailed` is true are not stored within this index. + +`LastValidatorsPower` is a special index that provides a historical list of the +last-block's bonded validators. This index remains constant during a block but +is updated during the validator set update process which takes place in [`EndBlock`](#end-block). + +Each validator's state is stored in a `Validator` struct: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L82-L138 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L26-L80 +``` + +### Delegation + +Delegations are identified by combining `DelegatorAddr` (the address of the delegator) +with the `ValidatorAddr` Delegators are indexed in the store as follows: + +* Delegation: `0x31 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorAddr -> ProtocolBuffer(delegation)` + +Stake holders may delegate coins to validators; under this circumstance their +funds are held in a `Delegation` data structure. It is owned by one +delegator, and is associated with the shares for one validator. The sender of +the transaction is the owner of the bond. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L198-L216 +``` + +#### Delegator Shares + +When one Delegates tokens to a Validator they are issued a number of delegator shares based on a +dynamic exchange rate, calculated as follows from the total number of tokens delegated to the +validator and the number of shares issued so far: + +`Shares per Token = validator.TotalShares() / validator.Tokens()` + +Only the number of shares received is stored on the DelegationEntry. When a delegator then +Undelegates, the token amount they receive is calculated from the number of shares they currently +hold and the inverse exchange rate: + +`Tokens per Share = validator.Tokens() / validatorShares()` + +These `Shares` are simply an accounting mechanism. They are not a fungible asset. The reason for +this mechanism is to simplify the accounting around slashing. Rather than iteratively slashing the +tokens of every delegation entry, instead the Validators total bonded tokens can be slashed, +effectively reducing the value of each issued delegator share. + +### UnbondingDelegation + +Shares in a `Delegation` can be unbonded, but they must for some time exist as +an `UnbondingDelegation`, where shares can be reduced if Byzantine behavior is +detected. + +`UnbondingDelegation` are indexed in the store as: + +* UnbondingDelegation: `0x32 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorAddr -> ProtocolBuffer(unbondingDelegation)` +* UnbondingDelegationsFromValidator: `0x33 | ValidatorAddrLen (1 byte) | ValidatorAddr | DelegatorAddrLen (1 byte) | DelegatorAddr -> nil` +* UnbondingDelegationByUnbondingId: `0x38 | UnbondingId -> 0x32 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorAddr` + `UnbondingDelegation` is used in queries, to lookup all unbonding delegations for + a given delegator. + +`UnbondingDelegationsFromValidator` is used in slashing, to lookup all + unbonding delegations associated with a given validator that need to be + slashed. + + `UnbondingDelegationByUnbondingId` is an additional index that enables + lookups for unbonding delegations by the unbonding IDs of the containing + unbonding delegation entries. + + +A UnbondingDelegation object is created every time an unbonding is initiated. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L218-L261 +``` + +### Redelegation + +The bonded tokens worth of a `Delegation` may be instantly redelegated from a +source validator to a different validator (destination validator). However when +this occurs they must be tracked in a `Redelegation` object, whereby their +shares can be slashed if their tokens have contributed to a Byzantine fault +committed by the source validator. + +`Redelegation` are indexed in the store as: + +* Redelegations: `0x34 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorSrcAddr | ValidatorDstAddr -> ProtocolBuffer(redelegation)` +* RedelegationsBySrc: `0x35 | ValidatorSrcAddrLen (1 byte) | ValidatorSrcAddr | ValidatorDstAddrLen (1 byte) | ValidatorDstAddr | DelegatorAddrLen (1 byte) | DelegatorAddr -> nil` +* RedelegationsByDst: `0x36 | ValidatorDstAddrLen (1 byte) | ValidatorDstAddr | ValidatorSrcAddrLen (1 byte) | ValidatorSrcAddr | DelegatorAddrLen (1 byte) | DelegatorAddr -> nil` +* RedelegationByUnbondingId: `0x38 | UnbondingId -> 0x34 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorSrcAddr | ValidatorDstAddr` + + `Redelegations` is used for queries, to lookup all redelegations for a given + delegator. + + `RedelegationsBySrc` is used for slashing based on the `ValidatorSrcAddr`. + + `RedelegationsByDst` is used for slashing based on the `ValidatorDstAddr` + +The first map here is used for queries, to lookup all redelegations for a given +delegator. The second map is used for slashing based on the `ValidatorSrcAddr`, +while the third map is for slashing based on the `ValidatorDstAddr`. + +`RedelegationByUnbondingId` is an additional index that enables + lookups for redelegations by the unbonding IDs of the containing + redelegation entries. + +A redelegation object is created every time a redelegation occurs. To prevent +"redelegation hopping" redelegations may not occur under the situation that: + +* the (re)delegator already has another immature redelegation in progress + with a destination to a validator (let's call it `Validator X`) +* and, the (re)delegator is attempting to create a _new_ redelegation + where the source validator for this new redelegation is `Validator X`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L263-L308 +``` + +### Queues + +All queues objects are sorted by timestamp. The time used within any queue is +first rounded to the nearest nanosecond then sorted. The sortable time format +used is a slight modification of the RFC3339Nano and uses the format string +`"2006-01-02T15:04:05.000000000"`. Notably this format: + +* right pads all zeros +* drops the time zone info (uses UTC) + +In all cases, the stored timestamp represents the maturation time of the queue +element. + +#### UnbondingDelegationQueue + +For the purpose of tracking progress of unbonding delegations the unbonding +delegations queue is kept. + +* UnbondingDelegation: `0x41 | format(time) -> []DVPair` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L162-L172 +``` + +#### RedelegationQueue + +For the purpose of tracking progress of redelegations the redelegation queue is +kept. + +* RedelegationQueue: `0x42 | format(time) -> []DVVTriplet` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L179-L191 +``` + +#### ValidatorQueue + +For the purpose of tracking progress of unbonding validators the validator +queue is kept. + +* ValidatorQueueTime: `0x43 | format(time) -> []sdk.ValAddress` + +The stored object as each key is an array of validator operator addresses from +which the validator object can be accessed. Typically it is expected that only +a single validator record will be associated with a given timestamp however it is possible +that multiple validators exist in the queue at the same location. + +### HistoricalInfo + +HistoricalInfo objects are stored and pruned at each block such that the staking keeper persists +the `n` most recent historical info defined by staking module parameter: `HistoricalEntries`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L17-L24 +``` + +At each BeginBlock, the staking keeper will persist the current Header and the Validators that committed +the current block in a `HistoricalInfo` object. The Validators are sorted on their address to ensure that +they are in a deterministic order. +The oldest HistoricalEntries will be pruned to ensure that there only exist the parameter-defined number of +historical entries. + +## State Transitions + +### Validators + +State transitions in validators are performed on every [`EndBlock`](#validator-set-changes) +in order to check for changes in the active `ValidatorSet`. + +A validator can be `Unbonded`, `Unbonding` or `Bonded`. `Unbonded` +and `Unbonding` are collectively called `Not Bonded`. A validator can move +directly between all the states, except for from `Bonded` to `Unbonded`. + +#### Not bonded to Bonded + +The following transition occurs when a validator's ranking in the `ValidatorPowerIndex` surpasses +that of the `LastValidator`. + +* set `validator.Status` to `Bonded` +* send the `validator.Tokens` from the `NotBondedTokens` to the `BondedPool` `ModuleAccount` +* delete the existing record from `ValidatorByPowerIndex` +* add a new updated record to the `ValidatorByPowerIndex` +* update the `Validator` object for this validator +* if it exists, delete any `ValidatorQueue` record for this validator + +#### Bonded to Unbonding + +When a validator begins the unbonding process the following operations occur: + +* send the `validator.Tokens` from the `BondedPool` to the `NotBondedTokens` `ModuleAccount` +* set `validator.Status` to `Unbonding` +* delete the existing record from `ValidatorByPowerIndex` +* add a new updated record to the `ValidatorByPowerIndex` +* update the `Validator` object for this validator +* insert a new record into the `ValidatorQueue` for this validator + +#### Unbonding to Unbonded + +A validator moves from unbonding to unbonded when the `ValidatorQueue` object +moves from bonded to unbonded + +* update the `Validator` object for this validator +* set `validator.Status` to `Unbonded` + +#### Jail/Unjail + +when a validator is jailed it is effectively removed from the CometBFT set. +this process may be also be reversed. the following operations occur: + +* set `Validator.Jailed` and update object +* if jailed delete record from `ValidatorByPowerIndex` +* if unjailed add record to `ValidatorByPowerIndex` + +Jailed validators are not present in any of the following stores: + +* the power store (from consensus power to address) + +### Delegations + +#### Delegate + +When a delegation occurs both the validator and the delegation objects are affected + +* determine the delegators shares based on tokens delegated and the validator's exchange rate +* remove tokens from the sending account +* add shares the delegation object or add them to a created validator object +* add new delegator shares and update the `Validator` object +* transfer the `delegation.Amount` from the delegator's account to the `BondedPool` or the `NotBondedPool` `ModuleAccount` depending if the `validator.Status` is `Bonded` or not +* delete the existing record from `ValidatorByPowerIndex` +* add an new updated record to the `ValidatorByPowerIndex` + +#### Begin Unbonding + +As a part of the Undelegate and Complete Unbonding state transitions Unbond +Delegation may be called. + +* subtract the unbonded shares from delegator +* add the unbonded tokens to an `UnbondingDelegationEntry` +* update the delegation or remove the delegation if there are no more shares +* if the delegation is the operator of the validator and no more shares exist then trigger a jail validator +* update the validator with removed the delegator shares and associated coins +* if the validator state is `Bonded`, transfer the `Coins` worth of the unbonded + shares from the `BondedPool` to the `NotBondedPool` `ModuleAccount` +* remove the validator if it is unbonded and there are no more delegation shares. +* remove the validator if it is unbonded and there are no more delegation shares +* get a unique `unbondingId` and map it to the `UnbondingDelegationEntry` in `UnbondingDelegationByUnbondingId` +* call the `AfterUnbondingInitiated(unbondingId)` hook +* add the unbonding delegation to `UnbondingDelegationQueue` with the completion time set to `UnbondingTime` + +#### Cancel an `UnbondingDelegation` Entry + +When a `cancel unbond delegation` occurs both the `validator`, the `delegation` and an `UnbondingDelegationQueue` state will be updated. + +* if cancel unbonding delegation amount equals to the `UnbondingDelegation` entry `balance`, then the `UnbondingDelegation` entry deleted from `UnbondingDelegationQueue`. +* if the `cancel unbonding delegation amount is less than the `UnbondingDelegation` entry balance, then the `UnbondingDelegation` entry will be updated with new balance in the `UnbondingDelegationQueue`. +* cancel `amount` is [Delegated](#delegations) back to the original `validator`. + +#### Complete Unbonding + +For undelegations which do not complete immediately, the following operations +occur when the unbonding delegation queue element matures: + +* remove the entry from the `UnbondingDelegation` object +* transfer the tokens from the `NotBondedPool` `ModuleAccount` to the delegator `Account` + +#### Begin Redelegation + +Redelegations affect the delegation, source and destination validators. + +* perform an `unbond` delegation from the source validator to retrieve the tokens worth of the unbonded shares +* using the unbonded tokens, `Delegate` them to the destination validator +* if the `sourceValidator.Status` is `Bonded`, and the `destinationValidator` is not, + transfer the newly delegated tokens from the `BondedPool` to the `NotBondedPool` `ModuleAccount` +* otherwise, if the `sourceValidator.Status` is not `Bonded`, and the `destinationValidator` + is `Bonded`, transfer the newly delegated tokens from the `NotBondedPool` to the `BondedPool` `ModuleAccount` +* record the token amount in an new entry in the relevant `Redelegation` + +From when a redelegation begins until it completes, the delegator is in a state of "pseudo-unbonding", and can still be +slashed for infractions that occurred before the redelegation began. + +#### Complete Redelegation + +When a redelegations complete the following occurs: + +* remove the entry from the `Redelegation` object + +### Slashing + +#### Slash Validator + +When a Validator is slashed, the following occurs: + +* The total `slashAmount` is calculated as the `slashFactor` (a chain parameter) \* `TokensFromConsensusPower`, + the total number of tokens bonded to the validator at the time of the infraction. +* Every unbonding delegation and pseudo-unbonding redelegation such that the infraction occured before the unbonding or + redelegation began from the validator are slashed by the `slashFactor` percentage of the initialBalance. +* Each amount slashed from redelegations and unbonding delegations is subtracted from the + total slash amount. +* The `remaingSlashAmount` is then slashed from the validator's tokens in the `BondedPool` or + `NonBondedPool` depending on the validator's status. This reduces the total supply of tokens. + +In the case of a slash due to any infraction that requires evidence to submitted (for example double-sign), the slash +occurs at the block where the evidence is included, not at the block where the infraction occured. +Put otherwise, validators are not slashed retroactively, only when they are caught. + +#### Slash Unbonding Delegation + +When a validator is slashed, so are those unbonding delegations from the validator that began unbonding +after the time of the infraction. Every entry in every unbonding delegation from the validator +is slashed by `slashFactor`. The amount slashed is calculated from the `InitialBalance` of the +delegation and is capped to prevent a resulting negative balance. Completed (or mature) unbondings are not slashed. + +#### Slash Redelegation + +When a validator is slashed, so are all redelegations from the validator that began after the +infraction. Redelegations are slashed by `slashFactor`. +Redelegations that began before the infraction are not slashed. +The amount slashed is calculated from the `InitialBalance` of the delegation and is capped to +prevent a resulting negative balance. +Mature redelegations (that have completed pseudo-unbonding) are not slashed. + +### How Shares are calculated + +At any given point in time, each validator has a number of tokens, `T`, and has a number of shares issued, `S`. +Each delegator, `i`, holds a number of shares, `S_i`. +The number of tokens is the sum of all tokens delegated to the validator, plus the rewards, minus the slashes. + +The delegator is entitled to a portion of the underlying tokens proportional to their proportion of shares. +So delegator `i` is entitled to `T * S_i / S` of the validator's tokens. + +When a delegator delegates new tokens to the validator, they receive a number of shares proportional to their contribution. +So when delegator `j` delegates `T_j` tokens, they receive `S_j = S * T_j / T` shares. +The total number of tokens is now `T + T_j`, and the total number of shares is `S + S_j`. +`j`s proportion of the shares is the same as their proportion of the total tokens contributed: `(S + S_j) / S = (T + T_j) / T`. + +A special case is the initial delegation, when `T = 0` and `S = 0`, so `T_j / T` is undefined. +For the initial delegation, delegator `j` who delegates `T_j` tokens receive `S_j = T_j` shares. +So a validator that hasn't received any rewards and has not been slashed will have `T = S`. + +## Messages + +In this section we describe the processing of the staking messages and the corresponding updates to the state. All created/modified state objects specified by each message are defined within the [state](#state) section. + +### MsgCreateValidator + +A validator is created using the `MsgCreateValidator` message. +The validator must be created with an initial delegation from the operator. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L20-L21 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L50-L73 +``` + +This message is expected to fail if: + +* another validator with this operator address is already registered +* another validator with this pubkey is already registered +* the initial self-delegation tokens are of a denom not specified as the bonding denom +* the commission parameters are faulty, namely: + * `MaxRate` is either > 1 or < 0 + * the initial `Rate` is either negative or > `MaxRate` + * the initial `MaxChangeRate` is either negative or > `MaxRate` +* the description fields are too large + +This message creates and stores the `Validator` object at appropriate indexes. +Additionally a self-delegation is made with the initial tokens delegation +tokens `Delegation`. The validator always starts as unbonded but may be bonded +in the first end-block. + +### MsgEditValidator + +The `Description`, `CommissionRate` of a validator can be updated using the +`MsgEditValidator` message. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L23-L24 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L78-L97 +``` + +This message is expected to fail if: + +* the initial `CommissionRate` is either negative or > `MaxRate` +* the `CommissionRate` has already been updated within the previous 24 hours +* the `CommissionRate` is > `MaxChangeRate` +* the description fields are too large + +This message stores the updated `Validator` object. + +### MsgDelegate + +Within this message the delegator provides coins, and in return receives +some amount of their validator's (newly created) delegator-shares that are +assigned to `Delegation.Shares`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L26-L28 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L102-L114 +``` + +This message is expected to fail if: + +* the validator does not exist +* the `Amount` `Coin` has a denomination different than one defined by `params.BondDenom` +* the exchange rate is invalid, meaning the validator has no tokens (due to slashing) but there are outstanding shares +* the amount delegated is less than the minimum allowed delegation + +If an existing `Delegation` object for provided addresses does not already +exist then it is created as part of this message otherwise the existing +`Delegation` is updated to include the newly received shares. + +The delegator receives newly minted shares at the current exchange rate. +The exchange rate is the number of existing shares in the validator divided by +the number of currently delegated tokens. + +The validator is updated in the `ValidatorByPower` index, and the delegation is +tracked in validator object in the `Validators` index. + +It is possible to delegate to a jailed validator, the only difference being it +will not be added to the power index until it is unjailed. + +![Delegation sequence](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/delegation_sequence.svg) + +### MsgUndelegate + +The `MsgUndelegate` message allows delegators to undelegate their tokens from +validator. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L34-L36 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L140-L152 +``` + +This message returns a response containing the completion time of the undelegation: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L154-L158 +``` + +This message is expected to fail if: + +* the delegation doesn't exist +* the validator doesn't exist +* the delegation has less shares than the ones worth of `Amount` +* existing `UnbondingDelegation` has maximum entries as defined by `params.MaxEntries` +* the `Amount` has a denomination different than one defined by `params.BondDenom` + +When this message is processed the following actions occur: + +* validator's `DelegatorShares` and the delegation's `Shares` are both reduced by the message `SharesAmount` +* calculate the token worth of the shares remove that amount tokens held within the validator +* with those removed tokens, if the validator is: + * `Bonded` - add them to an entry in `UnbondingDelegation` (create `UnbondingDelegation` if it doesn't exist) with a completion time a full unbonding period from the current time. Update pool shares to reduce BondedTokens and increase NotBondedTokens by token worth of the shares. + * `Unbonding` - add them to an entry in `UnbondingDelegation` (create `UnbondingDelegation` if it doesn't exist) with the same completion time as the validator (`UnbondingMinTime`). + * `Unbonded` - then send the coins the message `DelegatorAddr` +* if there are no more `Shares` in the delegation, then the delegation object is removed from the store + * under this situation if the delegation is the validator's self-delegation then also jail the validator. + +![Unbond sequence](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/unbond_sequence.svg) + +### MsgCancelUnbondingDelegation + +The `MsgCancelUnbondingDelegation` message allows delegators to cancel the `unbondingDelegation` entry and delegate back to a previous validator. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L38-L42 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L160-L175 +``` + +This message is expected to fail if: + +* the `unbondingDelegation` entry is already processed. +* the `cancel unbonding delegation` amount is greater than the `unbondingDelegation` entry balance. +* the `cancel unbonding delegation` height doesn't exist in the `unbondingDelegationQueue` of the delegator. + +When this message is processed the following actions occur: + +* if the `unbondingDelegation` Entry balance is zero + * in this condition `unbondingDelegation` entry will be removed from `unbondingDelegationQueue`. + * otherwise `unbondingDelegationQueue` will be updated with new `unbondingDelegation` entry balance and initial balance +* the validator's `DelegatorShares` and the delegation's `Shares` are both increased by the message `Amount`. + +### MsgBeginRedelegate + +The redelegation command allows delegators to instantly switch validators. Once +the unbonding period has passed, the redelegation is automatically completed in +the EndBlocker. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L30-L32 +``` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L119-L132 +``` + +This message returns a response containing the completion time of the redelegation: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L133-L138 +``` + +This message is expected to fail if: + +* the delegation doesn't exist +* the source or destination validators don't exist +* the delegation has less shares than the ones worth of `Amount` +* the source validator has a receiving redelegation which is not matured (aka. the redelegation may be transitive) +* existing `Redelegation` has maximum entries as defined by `params.MaxEntries` +* the `Amount` `Coin` has a denomination different than one defined by `params.BondDenom` + +When this message is processed the following actions occur: + +* the source validator's `DelegatorShares` and the delegations `Shares` are both reduced by the message `SharesAmount` +* calculate the token worth of the shares remove that amount tokens held within the source validator. +* if the source validator is: + * `Bonded` - add an entry to the `Redelegation` (create `Redelegation` if it doesn't exist) with a completion time a full unbonding period from the current time. Update pool shares to reduce BondedTokens and increase NotBondedTokens by token worth of the shares (this may be effectively reversed in the next step however). + * `Unbonding` - add an entry to the `Redelegation` (create `Redelegation` if it doesn't exist) with the same completion time as the validator (`UnbondingMinTime`). + * `Unbonded` - no action required in this step +* Delegate the token worth to the destination validator, possibly moving tokens back to the bonded state. +* if there are no more `Shares` in the source delegation, then the source delegation object is removed from the store + * under this situation if the delegation is the validator's self-delegation then also jail the validator. + +![Begin redelegation sequence](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/begin_redelegation_sequence.svg) + + +### MsgUpdateParams + +The `MsgUpdateParams` update the staking module parameters. +The params are updated through a governance proposal where the signer is the gov module account address. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L182-L195 +``` + +The message handling can fail if: + +* signer is not the authority defined in the staking keeper (usually the gov module account). + +## Begin-Block + +Each abci begin block call, the historical info will get stored and pruned +according to the `HistoricalEntries` parameter. + +### Historical Info Tracking + +If the `HistoricalEntries` parameter is 0, then the `BeginBlock` performs a no-op. + +Otherwise, the latest historical info is stored under the key `historicalInfoKey|height`, while any entries older than `height - HistoricalEntries` is deleted. +In most cases, this results in a single entry being pruned per block. +However, if the parameter `HistoricalEntries` has changed to a lower value there will be multiple entries in the store that must be pruned. + +## End-Block + +Each abci end block call, the operations to update queues and validator set +changes are specified to execute. + +### Validator Set Changes + +The staking validator set is updated during this process by state transitions +that run at the end of every block. As a part of this process any updated +validators are also returned back to CometBFT for inclusion in the CometBFT +validator set which is responsible for validating CometBFT messages at the +consensus layer. Operations are as following: + +* the new validator set is taken as the top `params.MaxValidators` number of + validators retrieved from the `ValidatorsByPower` index +* the previous validator set is compared with the new validator set: + * missing validators begin unbonding and their `Tokens` are transferred from the + `BondedPool` to the `NotBondedPool` `ModuleAccount` + * new validators are instantly bonded and their `Tokens` are transferred from the + `NotBondedPool` to the `BondedPool` `ModuleAccount` + +In all cases, any validators leaving or entering the bonded validator set or +changing balances and staying within the bonded validator set incur an update +message reporting their new consensus power which is passed back to CometBFT. + +The `LastTotalPower` and `LastValidatorsPower` hold the state of the total power +and validator power from the end of the last block, and are used to check for +changes that have occurred in `ValidatorsByPower` and the total new power, which +is calculated during `EndBlock`. + +### Queues + +Within staking, certain state-transitions are not instantaneous but take place +over a duration of time (typically the unbonding period). When these +transitions are mature certain operations must take place in order to complete +the state operation. This is achieved through the use of queues which are +checked/processed at the end of each block. + +#### Unbonding Validators + +When a validator is kicked out of the bonded validator set (either through +being jailed, or not having sufficient bonded tokens) it begins the unbonding +process along with all its delegations begin unbonding (while still being +delegated to this validator). At this point the validator is said to be an +"unbonding validator", whereby it will mature to become an "unbonded validator" +after the unbonding period has passed. + +Each block the validator queue is to be checked for mature unbonding validators +(namely with a completion time <= current time and completion height <= current +block height). At this point any mature validators which do not have any +delegations remaining are deleted from state. For all other mature unbonding +validators that still have remaining delegations, the `validator.Status` is +switched from `types.Unbonding` to +`types.Unbonded`. + +Unbonding operations can be put on hold by external modules via the `PutUnbondingOnHold(unbondingId)` method. + As a result, an unbonding operation (e.g., an unbonding delegation) that is on hold, cannot complete + even if it reaches maturity. For an unbonding operation with `unbondingId` to eventually complete + (after it reaches maturity), every call to `PutUnbondingOnHold(unbondingId)` must be matched + by a call to `UnbondingCanComplete(unbondingId)`. + +#### Unbonding Delegations + +Complete the unbonding of all mature `UnbondingDelegations.Entries` within the +`UnbondingDelegations` queue with the following procedure: + +* transfer the balance coins to the delegator's wallet address +* remove the mature entry from `UnbondingDelegation.Entries` +* remove the `UnbondingDelegation` object from the store if there are no + remaining entries. + +#### Redelegations + +Complete the unbonding of all mature `Redelegation.Entries` within the +`Redelegations` queue with the following procedure: + +* remove the mature entry from `Redelegation.Entries` +* remove the `Redelegation` object from the store if there are no + remaining entries. + +## Hooks + +Other modules may register operations to execute when a certain event has +occurred within staking. These events can be registered to execute either +right `Before` or `After` the staking event (as per the hook name). The +following hooks can registered with staking: + +* `AfterValidatorCreated(Context, ValAddress) error` + * called when a validator is created +* `BeforeValidatorModified(Context, ValAddress) error` + * called when a validator's state is changed +* `AfterValidatorRemoved(Context, ConsAddress, ValAddress) error` + * called when a validator is deleted +* `AfterValidatorBonded(Context, ConsAddress, ValAddress) error` + * called when a validator is bonded +* `AfterValidatorBeginUnbonding(Context, ConsAddress, ValAddress) error` + * called when a validator begins unbonding +* `BeforeDelegationCreated(Context, AccAddress, ValAddress) error` + * called when a delegation is created +* `BeforeDelegationSharesModified(Context, AccAddress, ValAddress) error` + * called when a delegation's shares are modified +* `AfterDelegationModified(Context, AccAddress, ValAddress) error` + * called when a delegation is created or modified +* `BeforeDelegationRemoved(Context, AccAddress, ValAddress) error` + * called when a delegation is removed +* `AfterUnbondingInitiated(Context, UnbondingID)` + * called when an unbonding operation (validator unbonding, unbonding delegation, redelegation) was initiated + + +## Events + +The staking module emits the following events: + +### EndBlocker + +| Type | Attribute Key | Attribute Value | +| --------------------- | --------------------- | ------------------------- | +| complete_unbonding | amount | {totalUnbondingAmount} | +| complete_unbonding | validator | {validatorAddress} | +| complete_unbonding | delegator | {delegatorAddress} | +| complete_redelegation | amount | {totalRedelegationAmount} | +| complete_redelegation | source_validator | {srcValidatorAddress} | +| complete_redelegation | destination_validator | {dstValidatorAddress} | +| complete_redelegation | delegator | {delegatorAddress} | + +## Msg's + +### MsgCreateValidator + +| Type | Attribute Key | Attribute Value | +| ---------------- | ------------- | ------------------ | +| create_validator | validator | {validatorAddress} | +| create_validator | amount | {delegationAmount} | +| message | module | staking | +| message | action | create_validator | +| message | sender | {senderAddress} | + +### MsgEditValidator + +| Type | Attribute Key | Attribute Value | +| -------------- | ------------------- | ------------------- | +| edit_validator | commission_rate | {commissionRate} | +| edit_validator | min_self_delegation | {minSelfDelegation} | +| message | module | staking | +| message | action | edit_validator | +| message | sender | {senderAddress} | + +### MsgDelegate + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | ------------------ | +| delegate | validator | {validatorAddress} | +| delegate | amount | {delegationAmount} | +| message | module | staking | +| message | action | delegate | +| message | sender | {senderAddress} | + +### MsgUndelegate + +| Type | Attribute Key | Attribute Value | +| ------- | ------------------- | ------------------ | +| unbond | validator | {validatorAddress} | +| unbond | amount | {unbondAmount} | +| unbond | completion_time [0] | {completionTime} | +| message | module | staking | +| message | action | begin_unbonding | +| message | sender | {senderAddress} | + +* [0] Time is formatted in the RFC3339 standard + +### MsgCancelUnbondingDelegation + +| Type | Attribute Key | Attribute Value | +| ----------------------------- | ------------------ | ------------------------------------| +| cancel_unbonding_delegation | validator | {validatorAddress} | +| cancel_unbonding_delegation | delegator | {delegatorAddress} | +| cancel_unbonding_delegation | amount | {cancelUnbondingDelegationAmount} | +| cancel_unbonding_delegation | creation_height | {unbondingCreationHeight} | +| message | module | staking | +| message | action | cancel_unbond | +| message | sender | {senderAddress} | + +### MsgBeginRedelegate + +| Type | Attribute Key | Attribute Value | +| ---------- | --------------------- | --------------------- | +| redelegate | source_validator | {srcValidatorAddress} | +| redelegate | destination_validator | {dstValidatorAddress} | +| redelegate | amount | {unbondAmount} | +| redelegate | completion_time [0] | {completionTime} | +| message | module | staking | +| message | action | begin_redelegate | +| message | sender | {senderAddress} | + +* [0] Time is formatted in the RFC3339 standard + +## Parameters + +The staking module contains the following parameters: + +| Key | Type | Example | +|-------------------|------------------|------------------------| +| UnbondingTime | string (time ns) | "259200000000000" | +| MaxValidators | uint16 | 100 | +| KeyMaxEntries | uint16 | 7 | +| HistoricalEntries | uint16 | 3 | +| BondDenom | string | "stake" | +| MinCommissionRate | string | "0.000000000000000000" | + +## Client + +### CLI + +A user can query and interact with the `staking` module using the CLI. + +#### Query + +The `query` commands allows users to query `staking` state. + +```bash +simd query staking --help +``` + +##### delegation + +The `delegation` command allows users to query delegations for an individual delegator on an individual validator. + +Usage: + +```bash +simd query staking delegation [delegator-addr] [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +balance: + amount: "10000000000" + denom: stake +delegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + shares: "10000000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +##### delegations + +The `delegations` command allows users to query delegations for an individual delegator on all validators. + +Usage: + +```bash +simd query staking delegations [delegator-addr] [flags] +``` + +Example: + +```bash +simd query staking delegations cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +``` + +Example Output: + +```bash +delegation_responses: +- balance: + amount: "10000000000" + denom: stake + delegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + shares: "10000000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +- balance: + amount: "10000000000" + denom: stake + delegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + shares: "10000000000.000000000000000000" + validator_address: cosmosvaloper1x20lytyf6zkcrv5edpkfkn8sz578qg5sqfyqnp +pagination: + next_key: null + total: "0" +``` + +##### delegations-to + +The `delegations-to` command allows users to query delegations on an individual validator. + +Usage: + +```bash +simd query staking delegations-to [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking delegations-to cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +- balance: + amount: "504000000" + denom: stake + delegation: + delegator_address: cosmos1q2qwwynhv8kh3lu5fkeex4awau9x8fwt45f5cp + shares: "504000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +- balance: + amount: "78125000000" + denom: uixo + delegation: + delegator_address: cosmos1qvppl3479hw4clahe0kwdlfvf8uvjtcd99m2ca + shares: "78125000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +pagination: + next_key: null + total: "0" +``` + +##### historical-info + +The `historical-info` command allows users to query historical information at given height. + +Usage: + +```bash +simd query staking historical-info [height] [flags] +``` + +Example: + +```bash +simd query staking historical-info 10 +``` + +Example Output: + +```bash +header: + app_hash: Lbx8cXpI868wz8sgp4qPYVrlaKjevR5WP/IjUxwp3oo= + chain_id: testnet + consensus_hash: BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8= + data_hash: 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= + evidence_hash: 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= + height: "10" + last_block_id: + hash: RFbkpu6pWfSThXxKKl6EZVDnBSm16+U0l0xVjTX08Fk= + part_set_header: + hash: vpIvXD4rxD5GM4MXGz0Sad9I7//iVYLzZsEU4BVgWIU= + total: 1 + last_commit_hash: Ne4uXyx4QtNp4Zx89kf9UK7oG9QVbdB6e7ZwZkhy8K0= + last_results_hash: 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= + next_validators_hash: nGBgKeWBjoxeKFti00CxHsnULORgKY4LiuQwBuUrhCs= + proposer_address: mMEP2c2IRPLr99LedSRtBg9eONM= + time: "2021-10-01T06:00:49.785790894Z" + validators_hash: nGBgKeWBjoxeKFti00CxHsnULORgKY4LiuQwBuUrhCs= + version: + app: "0" + block: "11" +valset: +- commission: + commission_rates: + max_change_rate: "0.010000000000000000" + max_rate: "0.200000000000000000" + rate: "0.100000000000000000" + update_time: "2021-10-01T05:52:50.380144238Z" + consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: Auxs3865HpB/EfssYOzfqNhEJjzys2Fo6jD5B8tPgC8= + delegator_shares: "10000000.000000000000000000" + description: + details: "" + identity: "" + moniker: myvalidator + security_contact: "" + website: "" + jailed: false + min_self_delegation: "1" + operator_address: cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc + status: BOND_STATUS_BONDED + tokens: "10000000" + unbonding_height: "0" + unbonding_time: "1970-01-01T00:00:00Z" +``` + +##### params + +The `params` command allows users to query values set as staking parameters. + +Usage: + +```bash +simd query staking params [flags] +``` + +Example: + +```bash +simd query staking params +``` + +Example Output: + +```bash +bond_denom: stake +historical_entries: 10000 +max_entries: 7 +max_validators: 50 +unbonding_time: 1814400s +``` + +##### pool + +The `pool` command allows users to query values for amounts stored in the staking pool. + +Usage: + +```bash +simd q staking pool [flags] +``` + +Example: + +```bash +simd q staking pool +``` + +Example Output: + +```bash +bonded_tokens: "10000000" +not_bonded_tokens: "0" +``` + +##### redelegation + +The `redelegation` command allows users to query a redelegation record based on delegator and a source and destination validator address. + +Usage: + +```bash +simd query staking redelegation [delegator-addr] [src-validator-addr] [dst-validator-addr] [flags] +``` + +Example: + +```bash +simd query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +pagination: null +redelegation_responses: +- entries: + - balance: "50000000" + redelegation_entry: + completion_time: "2021-10-24T20:33:21.960084845Z" + creation_height: 2.382847e+06 + initial_balance: "50000000" + shares_dst: "50000000.000000000000000000" + - balance: "5000000000" + redelegation_entry: + completion_time: "2021-10-25T21:33:54.446846862Z" + creation_height: 2.397271e+06 + initial_balance: "5000000000" + shares_dst: "5000000000.000000000000000000" + redelegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: null + validator_dst_address: cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm + validator_src_address: cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm +``` + +##### redelegations + +The `redelegations` command allows users to query all redelegation records for an individual delegator. + +Usage: + +```bash +simd query staking redelegations [delegator-addr] [flags] +``` + +Example: + +```bash +simd query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +redelegation_responses: +- entries: + - balance: "50000000" + redelegation_entry: + completion_time: "2021-10-24T20:33:21.960084845Z" + creation_height: 2.382847e+06 + initial_balance: "50000000" + shares_dst: "50000000.000000000000000000" + - balance: "5000000000" + redelegation_entry: + completion_time: "2021-10-25T21:33:54.446846862Z" + creation_height: 2.397271e+06 + initial_balance: "5000000000" + shares_dst: "5000000000.000000000000000000" + redelegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: null + validator_dst_address: cosmosvaloper1uccl5ugxrm7vqlzwqr04pjd320d2fz0z3hc6vm + validator_src_address: cosmosvaloper1zppjyal5emta5cquje8ndkpz0rs046m7zqxrpp +- entries: + - balance: "562770000000" + redelegation_entry: + completion_time: "2021-10-25T21:42:07.336911677Z" + creation_height: 2.39735e+06 + initial_balance: "562770000000" + shares_dst: "562770000000.000000000000000000" + redelegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: null + validator_dst_address: cosmosvaloper1uccl5ugxrm7vqlzwqr04pjd320d2fz0z3hc6vm + validator_src_address: cosmosvaloper1zppjyal5emta5cquje8ndkpz0rs046m7zqxrpp +``` + +##### redelegations-from + +The `redelegations-from` command allows users to query delegations that are redelegating _from_ a validator. + +Usage: + +```bash +simd query staking redelegations-from [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking redelegations-from cosmosvaloper1y4rzzrgl66eyhzt6gse2k7ej3zgwmngeleucjy +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +redelegation_responses: +- entries: + - balance: "50000000" + redelegation_entry: + completion_time: "2021-10-24T20:33:21.960084845Z" + creation_height: 2.382847e+06 + initial_balance: "50000000" + shares_dst: "50000000.000000000000000000" + - balance: "5000000000" + redelegation_entry: + completion_time: "2021-10-25T21:33:54.446846862Z" + creation_height: 2.397271e+06 + initial_balance: "5000000000" + shares_dst: "5000000000.000000000000000000" + redelegation: + delegator_address: cosmos1pm6e78p4pgn0da365plzl4t56pxy8hwtqp2mph + entries: null + validator_dst_address: cosmosvaloper1uccl5ugxrm7vqlzwqr04pjd320d2fz0z3hc6vm + validator_src_address: cosmosvaloper1y4rzzrgl66eyhzt6gse2k7ej3zgwmngeleucjy +- entries: + - balance: "221000000" + redelegation_entry: + completion_time: "2021-10-05T21:05:45.669420544Z" + creation_height: 2.120693e+06 + initial_balance: "221000000" + shares_dst: "221000000.000000000000000000" + redelegation: + delegator_address: cosmos1zqv8qxy2zgn4c58fz8jt8jmhs3d0attcussrf6 + entries: null + validator_dst_address: cosmosvaloper10mseqwnwtjaqfrwwp2nyrruwmjp6u5jhah4c3y + validator_src_address: cosmosvaloper1y4rzzrgl66eyhzt6gse2k7ej3zgwmngeleucjy +``` + +##### unbonding-delegation + +The `unbonding-delegation` command allows users to query unbonding delegations for an individual delegator on an individual validator. + +Usage: + +```bash +simd query staking unbonding-delegation [delegator-addr] [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking unbonding-delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +entries: +- balance: "52000000" + completion_time: "2021-11-02T11:35:55.391594709Z" + creation_height: "55078" + initial_balance: "52000000" +validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +##### unbonding-delegations + +The `unbonding-delegations` command allows users to query all unbonding-delegations records for one delegator. + +Usage: + +```bash +simd query staking unbonding-delegations [delegator-addr] [flags] +``` + +Example: + +```bash +simd query staking unbonding-delegations cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +unbonding_responses: +- delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: + - balance: "52000000" + completion_time: "2021-11-02T11:35:55.391594709Z" + creation_height: "55078" + initial_balance: "52000000" + validator_address: cosmosvaloper1t8ehvswxjfn3ejzkjtntcyrqwvmvuknzmvtaaa + +``` + +##### unbonding-delegations-from + +The `unbonding-delegations-from` command allows users to query delegations that are unbonding _from_ a validator. + +Usage: + +```bash +simd query staking unbonding-delegations-from [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking unbonding-delegations-from cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +unbonding_responses: +- delegator_address: cosmos1qqq9txnw4c77sdvzx0tkedsafl5s3vk7hn53fn + entries: + - balance: "150000000" + completion_time: "2021-11-01T21:41:13.098141574Z" + creation_height: "46823" + initial_balance: "150000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +- delegator_address: cosmos1peteje73eklqau66mr7h7rmewmt2vt99y24f5z + entries: + - balance: "24000000" + completion_time: "2021-10-31T02:57:18.192280361Z" + creation_height: "21516" + initial_balance: "24000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +##### validator + +The `validator` command allows users to query details about an individual validator. + +Usage: + +```bash +simd query staking validator [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking validator cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +commission: + commission_rates: + max_change_rate: "0.020000000000000000" + max_rate: "0.200000000000000000" + rate: "0.050000000000000000" + update_time: "2021-10-01T19:24:52.663191049Z" +consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: sIiexdJdYWn27+7iUHQJDnkp63gq/rzUq1Y+fxoGjXc= +delegator_shares: "32948270000.000000000000000000" +description: + details: Witval is the validator arm from Vitwit. Vitwit is into software consulting + and services business since 2015. We are working closely with Cosmos ecosystem + since 2018. We are also building tools for the ecosystem, Aneka is our explorer + for the cosmos ecosystem. + identity: 51468B615127273A + moniker: Witval + security_contact: "" + website: "" +jailed: false +min_self_delegation: "1" +operator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +status: BOND_STATUS_BONDED +tokens: "32948270000" +unbonding_height: "0" +unbonding_time: "1970-01-01T00:00:00Z" +``` + +##### validators + +The `validators` command allows users to query details about all validators on a network. + +Usage: + +```bash +simd query staking validators [flags] +``` + +Example: + +```bash +simd query staking validators +``` + +Example Output: + +```bash +pagination: + next_key: FPTi7TKAjN63QqZh+BaXn6gBmD5/ + total: "0" +validators: +commission: + commission_rates: + max_change_rate: "0.020000000000000000" + max_rate: "0.200000000000000000" + rate: "0.050000000000000000" + update_time: "2021-10-01T19:24:52.663191049Z" +consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: sIiexdJdYWn27+7iUHQJDnkp63gq/rzUq1Y+fxoGjXc= +delegator_shares: "32948270000.000000000000000000" +description: + details: Witval is the validator arm from Vitwit. Vitwit is into software consulting + and services business since 2015. We are working closely with Cosmos ecosystem + since 2018. We are also building tools for the ecosystem, Aneka is our explorer + for the cosmos ecosystem. + identity: 51468B615127273A + moniker: Witval + security_contact: "" + website: "" + jailed: false + min_self_delegation: "1" + operator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj + status: BOND_STATUS_BONDED + tokens: "32948270000" + unbonding_height: "0" + unbonding_time: "1970-01-01T00:00:00Z" +- commission: + commission_rates: + max_change_rate: "0.100000000000000000" + max_rate: "0.200000000000000000" + rate: "0.050000000000000000" + update_time: "2021-10-04T18:02:21.446645619Z" + consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: GDNpuKDmCg9GnhnsiU4fCWktuGUemjNfvpCZiqoRIYA= + delegator_shares: "559343421.000000000000000000" + description: + details: Noderunners is a professional validator in POS networks. We have a huge + node running experience, reliable soft and hardware. Our commissions are always + low, our support to delegators is always full. Stake with us and start receiving + your Cosmos rewards now! + identity: 812E82D12FEA3493 + moniker: Noderunners + security_contact: info@noderunners.biz + website: http://noderunners.biz + jailed: false + min_self_delegation: "1" + operator_address: cosmosvaloper1q5ku90atkhktze83j9xjaks2p7uruag5zp6wt7 + status: BOND_STATUS_BONDED + tokens: "559343421" + unbonding_height: "0" + unbonding_time: "1970-01-01T00:00:00Z" +``` + +#### Transactions + +The `tx` commands allows users to interact with the `staking` module. + +```bash +simd tx staking --help +``` + +##### create-validator + +The command `create-validator` allows users to create new validator initialized with a self-delegation to it. + +Usage: + +```bash +simd tx staking create-validator [path/to/validator.json] [flags] +``` + +Example: + +```bash +simd tx staking create-validator /path/to/validator.json \ + --chain-id="name_of_chain_id" \ + --gas="auto" \ + --gas-adjustment="1.2" \ + --gas-prices="0.025stake" \ + --from=mykey +``` + +where `validator.json` contains: + +```json +{ + "pubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"BnbwFpeONLqvWqJb3qaUbL5aoIcW3fSuAp9nT3z5f20="}, + "amount": "1000000stake", + "moniker": "my-moniker", + "website": "https://myweb.site", + "security": "security-contact@gmail.com", + "details": "description of your validator", + "commission-rate": "0.10", + "commission-max-rate": "0.20", + "commission-max-change-rate": "0.01", + "min-self-delegation": "1" +} +``` + +and pubkey can be obtained by using `simd tendermint show-validator` command. + +##### delegate + +The command `delegate` allows users to delegate liquid tokens to a validator. + +Usage: + +```bash +simd tx staking delegate [validator-addr] [amount] [flags] +``` + +Example: + +```bash +simd tx staking delegate cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 1000stake --from mykey +``` + +##### edit-validator + +The command `edit-validator` allows users to edit an existing validator account. + +Usage: + +```bash +simd tx staking edit-validator [flags] +``` + +Example: + +```bash +simd tx staking edit-validator --moniker "new_moniker_name" --website "new_webiste_url" --from mykey +``` + +##### redelegate + +The command `redelegate` allows users to redelegate illiquid tokens from one validator to another. + +Usage: + +```bash +simd tx staking redelegate [src-validator-addr] [dst-validator-addr] [amount] [flags] +``` + +Example: + +```bash +simd tx staking redelegate cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 100stake --from mykey +``` + +##### unbond + +The command `unbond` allows users to unbond shares from a validator. + +Usage: + +```bash +simd tx staking unbond [validator-addr] [amount] [flags] +``` + +Example: + +```bash +simd tx staking unbond cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake --from mykey +``` + +##### cancel unbond + +The command `cancel-unbond` allow users to cancel the unbonding delegation entry and delegate back to the original validator. + +Usage: + +```bash +simd tx staking cancel-unbond [validator-addr] [amount] [creation-height] +``` + +Example: + +```bash +simd tx staking cancel-unbond cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake 123123 --from mykey +``` + + +### gRPC + +A user can query the `staking` module using gRPC endpoints. + +#### Validators + +The `Validators` endpoint queries all validators that match the given status. + +```bash +cosmos.staking.v1beta1.Query/Validators +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.staking.v1beta1.Query/Validators +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operatorAddress": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "consensusPubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"Auxs3865HpB/EfssYOzfqNhEJjzys2Fo6jD5B8tPgC8="}, + "status": "BOND_STATUS_BONDED", + "tokens": "10000000", + "delegatorShares": "10000000000000000000000000", + "description": { + "moniker": "myvalidator" + }, + "unbondingTime": "1970-01-01T00:00:00Z", + "commission": { + "commissionRates": { + "rate": "100000000000000000", + "maxRate": "200000000000000000", + "maxChangeRate": "10000000000000000" + }, + "updateTime": "2021-10-01T05:52:50.380144238Z" + }, + "minSelfDelegation": "1" + } + ], + "pagination": { + "total": "1" + } +} +``` + +#### Validator + +The `Validator` endpoint queries validator information for given validator address. + +```bash +cosmos.staking.v1beta1.Query/Validator +``` + +Example: + +```bash +grpcurl -plaintext -d '{"validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/Validator +``` + +Example Output: + +```bash +{ + "validator": { + "operatorAddress": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "consensusPubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"Auxs3865HpB/EfssYOzfqNhEJjzys2Fo6jD5B8tPgC8="}, + "status": "BOND_STATUS_BONDED", + "tokens": "10000000", + "delegatorShares": "10000000000000000000000000", + "description": { + "moniker": "myvalidator" + }, + "unbondingTime": "1970-01-01T00:00:00Z", + "commission": { + "commissionRates": { + "rate": "100000000000000000", + "maxRate": "200000000000000000", + "maxChangeRate": "10000000000000000" + }, + "updateTime": "2021-10-01T05:52:50.380144238Z" + }, + "minSelfDelegation": "1" + } +} +``` + +#### ValidatorDelegations + +The `ValidatorDelegations` endpoint queries delegate information for given validator. + +```bash +cosmos.staking.v1beta1.Query/ValidatorDelegations +``` + +Example: + +```bash +grpcurl -plaintext -d '{"validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/ValidatorDelegations +``` + +Example Output: + +```bash +{ + "delegationResponses": [ + { + "delegation": { + "delegatorAddress": "cosmos1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgy3ua5t", + "validatorAddress": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "shares": "10000000000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "10000000" + } + } + ], + "pagination": { + "total": "1" + } +} +``` + +#### ValidatorUnbondingDelegations + +The `ValidatorUnbondingDelegations` endpoint queries delegate information for given validator. + +```bash +cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations +``` + +Example: + +```bash +grpcurl -plaintext -d '{"validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1z3pzzw84d6xn00pw9dy3yapqypfde7vg6965fy", + "validator_address": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "entries": [ + { + "creation_height": "25325", + "completion_time": "2021-10-31T09:24:36.797320636Z", + "initial_balance": "20000000", + "balance": "20000000" + } + ] + }, + { + "delegator_address": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "entries": [ + { + "creation_height": "13100", + "completion_time": "2021-10-30T12:53:02.272266791Z", + "initial_balance": "1000000", + "balance": "1000000" + } + ] + }, + ], + "pagination": { + "next_key": null, + "total": "8" + } +} +``` + +#### Delegation + +The `Delegation` endpoint queries delegate information for given validator delegator pair. + +```bash +cosmos.staking.v1beta1.Query/Delegation +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/Delegation +``` + +Example Output: + +```bash +{ + "delegation_response": + { + "delegation": + { + "delegator_address":"cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "shares":"25083119936.000000000000000000" + }, + "balance": + { + "denom":"stake", + "amount":"25083119936" + } + } +} +``` + +#### UnbondingDelegation + +The `UnbondingDelegation` endpoint queries unbonding information for given validator delegator. + +```bash +cosmos.staking.v1beta1.Query/UnbondingDelegation +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/UnbondingDelegation +``` + +Example Output: + +```bash +{ + "unbond": { + "delegator_address": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "entries": [ + { + "creation_height": "136984", + "completion_time": "2021-11-08T05:38:47.505593891Z", + "initial_balance": "400000000", + "balance": "400000000" + }, + { + "creation_height": "137005", + "completion_time": "2021-11-08T05:40:53.526196312Z", + "initial_balance": "385000000", + "balance": "385000000" + } + ] + } +} +``` + +#### DelegatorDelegations + +The `DelegatorDelegations` endpoint queries all delegations of a given delegator address. + +```bash +cosmos.staking.v1beta1.Query/DelegatorDelegations +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorDelegations +``` + +Example Output: + +```bash +{ + "delegation_responses": [ + {"delegation":{"delegator_address":"cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77","validator_address":"cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8","shares":"25083339023.000000000000000000"},"balance":{"denom":"stake","amount":"25083339023"}} + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### DelegatorUnbondingDelegations + +The `DelegatorUnbondingDelegations` endpoint queries all unbonding delegations of a given delegator address. + +```bash +cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address": "cosmosvaloper1sjllsnramtg3ewxqwwrwjxfgc4n4ef9uxyejze", + "entries": [ + { + "creation_height": "136984", + "completion_time": "2021-11-08T05:38:47.505593891Z", + "initial_balance": "400000000", + "balance": "400000000" + }, + { + "creation_height": "137005", + "completion_time": "2021-11-08T05:40:53.526196312Z", + "initial_balance": "385000000", + "balance": "385000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### Redelegations + +The `Redelegations` endpoint queries redelegations of given address. + +```bash +cosmos.staking.v1beta1.Query/Redelegations +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1ld5p7hn43yuh8ht28gm9pfjgj2fctujp2tgwvf", "src_validator_addr" : "cosmosvaloper1j7euyj85fv2jugejrktj540emh9353ltgppc3g", "dst_validator_addr" : "cosmosvaloper1yy3tnegzmkdcm7czzcy3flw5z0zyr9vkkxrfse"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/Redelegations +``` + +Example Output: + +```bash +{ + "redelegation_responses": [ + { + "redelegation": { + "delegator_address": "cosmos1ld5p7hn43yuh8ht28gm9pfjgj2fctujp2tgwvf", + "validator_src_address": "cosmosvaloper1j7euyj85fv2jugejrktj540emh9353ltgppc3g", + "validator_dst_address": "cosmosvaloper1yy3tnegzmkdcm7czzcy3flw5z0zyr9vkkxrfse", + "entries": null + }, + "entries": [ + { + "redelegation_entry": { + "creation_height": 135932, + "completion_time": "2021-11-08T03:52:55.299147901Z", + "initial_balance": "2900000", + "shares_dst": "2900000.000000000000000000" + }, + "balance": "2900000" + } + ] + } + ], + "pagination": null +} +``` + +#### DelegatorValidators + +The `DelegatorValidators` endpoint queries all validators information for given delegator. + +```bash +cosmos.staking.v1beta1.Query/DelegatorValidators +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1ld5p7hn43yuh8ht28gm9pfjgj2fctujp2tgwvf"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorValidators +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operator_address": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "UPwHWxH1zHJWGOa/m6JB3f5YjHMvPQPkVbDqqi+U7Uw=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "347260647559", + "delegator_shares": "347260647559.000000000000000000", + "description": { + "moniker": "BouBouNode", + "identity": "", + "website": "https://boubounode.com", + "security_contact": "", + "details": "AI-based Validator. #1 AI Validator on Game of Stakes. Fairly priced. Don't trust (humans), verify. Made with BouBou love." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.061000000000000000", + "max_rate": "0.300000000000000000", + "max_change_rate": "0.150000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### DelegatorValidator + +The `DelegatorValidator` endpoint queries validator information for given delegator validator + +```bash +cosmos.staking.v1beta1.Query/DelegatorValidator +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1eh5mwu044gd5ntkkc2xgfg8247mgc56f3n8rr7", "validator_addr": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorValidator +``` + +Example Output: + +```bash +{ + "validator": { + "operator_address": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "UPwHWxH1zHJWGOa/m6JB3f5YjHMvPQPkVbDqqi+U7Uw=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "347262754841", + "delegator_shares": "347262754841.000000000000000000", + "description": { + "moniker": "BouBouNode", + "identity": "", + "website": "https://boubounode.com", + "security_contact": "", + "details": "AI-based Validator. #1 AI Validator on Game of Stakes. Fairly priced. Don't trust (humans), verify. Made with BouBou love." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.061000000000000000", + "max_rate": "0.300000000000000000", + "max_change_rate": "0.150000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + } +} +``` + +#### HistoricalInfo + +```bash +cosmos.staking.v1beta1.Query/HistoricalInfo +``` + +Example: + +```bash +grpcurl -plaintext -d '{"height" : 1}' localhost:9090 cosmos.staking.v1beta1.Query/HistoricalInfo +``` + +Example Output: + +```bash +{ + "hist": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "simd-1", + "height": "140142", + "time": "2021-10-11T10:56:29.720079569Z", + "last_block_id": { + "hash": "9gri/4LLJUBFqioQ3NzZIP9/7YHR9QqaM6B2aJNQA7o=", + "part_set_header": { + "total": 1, + "hash": "Hk1+C864uQkl9+I6Zn7IurBZBKUevqlVtU7VqaZl1tc=" + } + }, + "last_commit_hash": "VxrcS27GtvGruS3I9+AlpT7udxIT1F0OrRklrVFSSKc=", + "data_hash": "80BjOrqNYUOkTnmgWyz9AQ8n7SoEmPVi4QmAe8RbQBY=", + "validators_hash": "95W49n2hw8RWpr1GPTAO5MSPi6w6Wjr3JjjS7AjpBho=", + "next_validators_hash": "95W49n2hw8RWpr1GPTAO5MSPi6w6Wjr3JjjS7AjpBho=", + "consensus_hash": "BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8=", + "app_hash": "ZZaxnSY3E6Ex5Bvkm+RigYCK82g8SSUL53NymPITeOE=", + "last_results_hash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "evidence_hash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposer_address": "aH6dO428B+ItuoqPq70efFHrSMY=" + }, + "valset": [ + { + "operator_address": "cosmosvaloper196ax4vc0lwpxndu9dyhvca7jhxp70rmcqcnylw", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "/O7BtNW0pafwfvomgR4ZnfldwPXiFfJs9mHg3gwfv5Q=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "1426045203613", + "delegator_shares": "1426045203613.000000000000000000", + "description": { + "moniker": "SG-1", + "identity": "48608633F99D1B60", + "website": "https://sg-1.online", + "security_contact": "", + "details": "SG-1 - your favorite validator on Witval. We offer 100% Soft Slash protection." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.037500000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.030000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + } + ] + } +} + +``` + +#### Pool + +The `Pool` endpoint queries the pool information. + +```bash +cosmos.staking.v1beta1.Query/Pool +``` + +Example: + +```bash +grpcurl -plaintext -d localhost:9090 cosmos.staking.v1beta1.Query/Pool +``` + +Example Output: + +```bash +{ + "pool": { + "not_bonded_tokens": "369054400189", + "bonded_tokens": "15657192425623" + } +} +``` + +#### Params + +The `Params` endpoint queries the pool information. + +```bash +cosmos.staking.v1beta1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.staking.v1beta1.Query/Params +``` + +Example Output: + +```bash +{ + "params": { + "unbondingTime": "1814400s", + "maxValidators": 100, + "maxEntries": 7, + "historicalEntries": 10000, + "bondDenom": "stake" + } +} +``` + +### REST + +A user can query the `staking` module using REST endpoints. + +#### DelegatorDelegations + +The `DelegtaorDelegations` REST endpoint queries all delegations of a given delegator address. + +```bash +/cosmos/staking/v1beta1/delegations/{delegatorAddr} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/delegations/cosmos1vcs68xf2tnqes5tg0khr0vyevm40ff6zdxatp5" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "delegation_responses": [ + { + "delegation": { + "delegator_address": "cosmos1vcs68xf2tnqes5tg0khr0vyevm40ff6zdxatp5", + "validator_address": "cosmosvaloper1quqxfrxkycr0uzt4yk0d57tcq3zk7srm7sm6r8", + "shares": "256250000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "256250000" + } + }, + { + "delegation": { + "delegator_address": "cosmos1vcs68xf2tnqes5tg0khr0vyevm40ff6zdxatp5", + "validator_address": "cosmosvaloper194v8uwee2fvs2s8fa5k7j03ktwc87h5ym39jfv", + "shares": "255150000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "255150000" + } + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +#### Redelegations + +The `Redelegations` REST endpoint queries redelegations of given address. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/redelegations +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1thfntksw0d35n2tkr0k8v54fr8wxtxwxl2c56e/redelegations?srcValidatorAddr=cosmosvaloper1lzhlnpahvznwfv4jmay2tgaha5kmz5qx4cuznf&dstValidatorAddr=cosmosvaloper1vq8tw77kp8lvxq9u3c8eeln9zymn68rng8pgt4" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "redelegation_responses": [ + { + "redelegation": { + "delegator_address": "cosmos1thfntksw0d35n2tkr0k8v54fr8wxtxwxl2c56e", + "validator_src_address": "cosmosvaloper1lzhlnpahvznwfv4jmay2tgaha5kmz5qx4cuznf", + "validator_dst_address": "cosmosvaloper1vq8tw77kp8lvxq9u3c8eeln9zymn68rng8pgt4", + "entries": null + }, + "entries": [ + { + "redelegation_entry": { + "creation_height": 151523, + "completion_time": "2021-11-09T06:03:25.640682116Z", + "initial_balance": "200000000", + "shares_dst": "200000000.000000000000000000" + }, + "balance": "200000000" + } + ] + } + ], + "pagination": null +} +``` + +#### DelegatorUnbondingDelegations + +The `DelegatorUnbondingDelegations` REST endpoint queries all unbonding delegations of a given delegator address. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/unbonding_delegations +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1nxv42u3lv642q0fuzu2qmrku27zgut3n3z7lll/unbonding_delegations" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1nxv42u3lv642q0fuzu2qmrku27zgut3n3z7lll", + "validator_address": "cosmosvaloper1e7mvqlz50ch6gw4yjfemsc069wfre4qwmw53kq", + "entries": [ + { + "creation_height": "2442278", + "completion_time": "2021-10-12T10:59:03.797335857Z", + "initial_balance": "50000000000", + "balance": "50000000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### DelegatorValidators + +The `DelegatorValidators` REST endpoint queries all validators information for given delegator address. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1xwazl8ftks4gn00y5x3c47auquc62ssune9ppv/validators" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operator_address": "cosmosvaloper1xwazl8ftks4gn00y5x3c47auquc62ssuvynw64", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "5v4n3px3PkfNnKflSgepDnsMQR1hiNXnqOC11Y72/PQ=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "21592843799", + "delegator_shares": "21592843799.000000000000000000", + "description": { + "moniker": "jabbey", + "identity": "", + "website": "https://twitter.com/JoeAbbey", + "security_contact": "", + "details": "just another dad in the cosmos" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.100000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-09T19:03:54.984821705Z" + }, + "min_self_delegation": "1" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +#### DelegatorValidator + +The `DelegatorValidator` REST endpoint queries validator information for given delegator validator pair. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators/{validatorAddr} +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1xwazl8ftks4gn00y5x3c47auquc62ssune9ppv/validators/cosmosvaloper1xwazl8ftks4gn00y5x3c47auquc62ssuvynw64" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validator": { + "operator_address": "cosmosvaloper1xwazl8ftks4gn00y5x3c47auquc62ssuvynw64", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "5v4n3px3PkfNnKflSgepDnsMQR1hiNXnqOC11Y72/PQ=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "21592843799", + "delegator_shares": "21592843799.000000000000000000", + "description": { + "moniker": "jabbey", + "identity": "", + "website": "https://twitter.com/JoeAbbey", + "security_contact": "", + "details": "just another dad in the cosmos" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.100000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-09T19:03:54.984821705Z" + }, + "min_self_delegation": "1" + } +} +``` + +#### HistoricalInfo + +The `HistoricalInfo` REST endpoint queries the historical information for given height. + +```bash +/cosmos/staking/v1beta1/historical_info/{height} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/historical_info/153332" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "hist": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "cosmos-1", + "height": "153332", + "time": "2021-10-12T09:05:35.062230221Z", + "last_block_id": { + "hash": "NX8HevR5khb7H6NGKva+jVz7cyf0skF1CrcY9A0s+d8=", + "part_set_header": { + "total": 1, + "hash": "zLQ2FiKM5tooL3BInt+VVfgzjlBXfq0Hc8Iux/xrhdg=" + } + }, + "last_commit_hash": "P6IJrK8vSqU3dGEyRHnAFocoDGja0bn9euLuy09s350=", + "data_hash": "eUd+6acHWrNXYju8Js449RJ99lOYOs16KpqQl4SMrEM=", + "validators_hash": "mB4pravvMsJKgi+g8aYdSeNlt0kPjnRFyvtAQtaxcfw=", + "next_validators_hash": "mB4pravvMsJKgi+g8aYdSeNlt0kPjnRFyvtAQtaxcfw=", + "consensus_hash": "BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8=", + "app_hash": "fuELArKRK+CptnZ8tu54h6xEleSWenHNmqC84W866fU=", + "last_results_hash": "p/BPexV4LxAzlVcPRvW+lomgXb6Yze8YLIQUo/4Kdgc=", + "evidence_hash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposer_address": "G0MeY8xQx7ooOsni8KE/3R/Ib3Q=" + }, + "valset": [ + { + "operator_address": "cosmosvaloper196ax4vc0lwpxndu9dyhvca7jhxp70rmcqcnylw", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "/O7BtNW0pafwfvomgR4ZnfldwPXiFfJs9mHg3gwfv5Q=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "1416521659632", + "delegator_shares": "1416521659632.000000000000000000", + "description": { + "moniker": "SG-1", + "identity": "48608633F99D1B60", + "website": "https://sg-1.online", + "security_contact": "", + "details": "SG-1 - your favorite validator on cosmos. We offer 100% Soft Slash protection." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.037500000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.030000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + }, + { + "operator_address": "cosmosvaloper1t8ehvswxjfn3ejzkjtntcyrqwvmvuknzmvtaaa", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "uExZyjNLtr2+FFIhNDAMcQ8+yTrqE7ygYTsI7khkA5Y=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "1348298958808", + "delegator_shares": "1348298958808.000000000000000000", + "description": { + "moniker": "Cosmostation", + "identity": "AE4C403A6E7AA1AC", + "website": "https://www.cosmostation.io", + "security_contact": "admin@stamper.network", + "details": "Cosmostation validator node. Delegate your tokens and Start Earning Staking Rewards" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "1.000000000000000000", + "max_change_rate": "0.200000000000000000" + }, + "update_time": "2021-10-01T15:06:38.821314287Z" + }, + "min_self_delegation": "1" + } + ] + } +} +``` + +#### Parameters + +The `Parameters` REST endpoint queries the staking parameters. + +```bash +/cosmos/staking/v1beta1/params +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/params" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "params": { + "unbonding_time": "2419200s", + "max_validators": 100, + "max_entries": 7, + "historical_entries": 10000, + "bond_denom": "stake" + } +} +``` + +#### Pool + +The `Pool` REST endpoint queries the pool information. + +```bash +/cosmos/staking/v1beta1/pool +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/pool" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "pool": { + "not_bonded_tokens": "432805737458", + "bonded_tokens": "15783637712645" + } +} +``` + +#### Validators + +The `Validators` REST endpoint queries all validators that match the given status. + +```bash +/cosmos/staking/v1beta1/validators +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/validators" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operator_address": "cosmosvaloper1q3jsx9dpfhtyqqgetwpe5tmk8f0ms5qywje8tw", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "N7BPyek2aKuNZ0N/8YsrqSDhGZmgVaYUBuddY8pwKaE=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "383301887799", + "delegator_shares": "383301887799.000000000000000000", + "description": { + "moniker": "SmartNodes", + "identity": "D372724899D1EDC8", + "website": "https://smartnodes.co", + "security_contact": "", + "details": "Earn Rewards with Crypto Staking & Node Deployment" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-01T15:51:31.596618510Z" + }, + "min_self_delegation": "1" + }, + { + "operator_address": "cosmosvaloper1q5ku90atkhktze83j9xjaks2p7uruag5zp6wt7", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "GDNpuKDmCg9GnhnsiU4fCWktuGUemjNfvpCZiqoRIYA=" + }, + "jailed": false, + "status": "BOND_STATUS_UNBONDING", + "tokens": "1017819654", + "delegator_shares": "1017819654.000000000000000000", + "description": { + "moniker": "Noderunners", + "identity": "812E82D12FEA3493", + "website": "http://noderunners.biz", + "security_contact": "info@noderunners.biz", + "details": "Noderunners is a professional validator in POS networks. We have a huge node running experience, reliable soft and hardware. Our commissions are always low, our support to delegators is always full. Stake with us and start receiving your cosmos rewards now!" + }, + "unbonding_height": "147302", + "unbonding_time": "2021-11-08T22:58:53.718662452Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-04T18:02:21.446645619Z" + }, + "min_self_delegation": "1" + } + ], + "pagination": { + "next_key": "FONDBFkE4tEEf7yxWWKOD49jC2NK", + "total": "2" + } +} +``` + +#### Validator + +The `Validator` REST endpoint queries validator information for given validator address. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr} +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validator": { + "operator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "sIiexdJdYWn27+7iUHQJDnkp63gq/rzUq1Y+fxoGjXc=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "33027900000", + "delegator_shares": "33027900000.000000000000000000", + "description": { + "moniker": "Witval", + "identity": "51468B615127273A", + "website": "", + "security_contact": "", + "details": "Witval is the validator arm from Vitwit. Vitwit is into software consulting and services business since 2015. We are working closely with Cosmos ecosystem since 2018. We are also building tools for the ecosystem, Aneka is our explorer for the cosmos ecosystem." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.020000000000000000" + }, + "update_time": "2021-10-01T19:24:52.663191049Z" + }, + "min_self_delegation": "1" + } +} +``` + +#### ValidatorDelegations + +The `ValidatorDelegations` REST endpoint queries delegate information for given validator. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q/delegations" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "delegation_responses": [ + { + "delegation": { + "delegator_address": "cosmos190g5j8aszqhvtg7cprmev8xcxs6csra7xnk3n3", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "31000000000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "31000000000" + } + }, + { + "delegation": { + "delegator_address": "cosmos1ddle9tczl87gsvmeva3c48nenyng4n56qwq4ee", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "628470000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "628470000" + } + }, + { + "delegation": { + "delegator_address": "cosmos10fdvkczl76m040smd33lh9xn9j0cf26kk4s2nw", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "838120000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "838120000" + } + }, + { + "delegation": { + "delegator_address": "cosmos1n8f5fknsv2yt7a8u6nrx30zqy7lu9jfm0t5lq8", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "500000000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "500000000" + } + }, + { + "delegation": { + "delegator_address": "cosmos16msryt3fqlxtvsy8u5ay7wv2p8mglfg9hrek2e", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "61310000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "61310000" + } + } + ], + "pagination": { + "next_key": null, + "total": "5" + } +} +``` + +#### Delegation + +The `Delegation` REST endpoint queries delegate information for given validator delegator pair. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr} +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q/delegations/cosmos1n8f5fknsv2yt7a8u6nrx30zqy7lu9jfm0t5lq8" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "delegation_response": { + "delegation": { + "delegator_address": "cosmos1n8f5fknsv2yt7a8u6nrx30zqy7lu9jfm0t5lq8", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "500000000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "500000000" + } + } +} +``` + +#### UnbondingDelegation + +The `UnbondingDelegation` REST endpoint queries unbonding information for given validator delegator pair. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}/unbonding_delegation +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu/delegations/cosmos1ze2ye5u5k3qdlexvt2e0nn0508p04094ya0qpm/unbonding_delegation" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "unbond": { + "delegator_address": "cosmos1ze2ye5u5k3qdlexvt2e0nn0508p04094ya0qpm", + "validator_address": "cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu", + "entries": [ + { + "creation_height": "153687", + "completion_time": "2021-11-09T09:41:18.352401903Z", + "initial_balance": "525111", + "balance": "525111" + } + ] + } +} +``` + +#### ValidatorUnbondingDelegations + +The `ValidatorUnbondingDelegations` REST endpoint queries unbonding delegations of a validator. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/unbonding_delegations +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu/unbonding_delegations" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1q9snn84jfrd9ge8t46kdcggpe58dua82vnj7uy", + "validator_address": "cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu", + "entries": [ + { + "creation_height": "90998", + "completion_time": "2021-11-05T00:14:37.005841058Z", + "initial_balance": "24000000", + "balance": "24000000" + } + ] + }, + { + "delegator_address": "cosmos1qf36e6wmq9h4twhdvs6pyq9qcaeu7ye0s3dqq2", + "validator_address": "cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu", + "entries": [ + { + "creation_height": "47478", + "completion_time": "2021-11-01T22:47:26.714116854Z", + "initial_balance": "8000000", + "balance": "8000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` diff --git a/docs/integrate/modules/upgrade/README.md b/docs/integrate/modules/upgrade/README.md new file mode 100644 index 000000000..d1be1b2c8 --- /dev/null +++ b/docs/integrate/modules/upgrade/README.md @@ -0,0 +1,619 @@ +--- +sidebar_position: 1 +--- + +# `x/upgrade` + +## Abstract + +`x/upgrade` is an implementation of a Cosmos SDK module that facilitates smoothly +upgrading a live Cosmos chain to a new (breaking) software version. It accomplishes this by +providing a `BeginBlocker` hook that prevents the blockchain state machine from +proceeding once a pre-defined upgrade block height has been reached. + +The module does not prescribe anything regarding how governance decides to do an +upgrade, but just the mechanism for coordinating the upgrade safely. Without software +support for upgrades, upgrading a live chain is risky because all of the validators +need to pause their state machines at exactly the same point in the process. If +this is not done correctly, there can be state inconsistencies which are hard to +recover from. + +* [Concepts](#concepts) +* [State](#state) +* [Events](#events) +* [Client](#client) + * [CLI](#cli) + * [REST](#rest) + * [gRPC](#grpc) +* [Resources](#resources) + +## Concepts + +### Plan + +The `x/upgrade` module defines a `Plan` type in which a live upgrade is scheduled +to occur. A `Plan` can be scheduled at a specific block height. +A `Plan` is created once a (frozen) release candidate along with an appropriate upgrade +`Handler` (see below) is agreed upon, where the `Name` of a `Plan` corresponds to a +specific `Handler`. Typically, a `Plan` is created through a governance proposal +process, where if voted upon and passed, will be scheduled. The `Info` of a `Plan` +may contain various metadata about the upgrade, typically application specific +upgrade info to be included on-chain such as a git commit that validators could +automatically upgrade to. + +#### Sidecar Process + +If an operator running the application binary also runs a sidecar process to assist +in the automatic download and upgrade of a binary, the `Info` allows this process to +be seamless. This tool is [Cosmovisor](https://github.com/cosmos/cosmos-sdk/tree/main/tools/cosmovisor#readme). + +```go +type Plan struct { + Name string + Height int64 + Info string +} +``` + +### Handler + +The `x/upgrade` module facilitates upgrading from major version X to major version Y. To +accomplish this, node operators must first upgrade their current binary to a new +binary that has a corresponding `Handler` for the new version Y. It is assumed that +this version has fully been tested and approved by the community at large. This +`Handler` defines what state migrations need to occur before the new binary Y +can successfully run the chain. Naturally, this `Handler` is application specific +and not defined on a per-module basis. Registering a `Handler` is done via +`Keeper#SetUpgradeHandler` in the application. + +```go +type UpgradeHandler func(Context, Plan, VersionMap) (VersionMap, error) +``` + +During each `EndBlock` execution, the `x/upgrade` module checks if there exists a +`Plan` that should execute (is scheduled at that height). If so, the corresponding +`Handler` is executed. If the `Plan` is expected to execute but no `Handler` is registered +or if the binary was upgraded too early, the node will gracefully panic and exit. + +### StoreLoader + +The `x/upgrade` module also facilitates store migrations as part of the upgrade. The +`StoreLoader` sets the migrations that need to occur before the new binary can +successfully run the chain. This `StoreLoader` is also application specific and +not defined on a per-module basis. Registering this `StoreLoader` is done via +`app#SetStoreLoader` in the application. + +```go +func UpgradeStoreLoader (upgradeHeight int64, storeUpgrades *store.StoreUpgrades) baseapp.StoreLoader +``` + +If there's a planned upgrade and the upgrade height is reached, the old binary writes `Plan` to the disk before panicking. + +This information is critical to ensure the `StoreUpgrades` happens smoothly at correct height and +expected upgrade. It eliminiates the chances for the new binary to execute `StoreUpgrades` multiple +times everytime on restart. Also if there are multiple upgrades planned on same height, the `Name` +will ensure these `StoreUpgrades` takes place only in planned upgrade handler. + +### Proposal + +Typically, a `Plan` is proposed and submitted through governance via a proposal +containing a `MsgSoftwareUpgrade` message. +This proposal prescribes to the standard governance process. If the proposal passes, +the `Plan`, which targets a specific `Handler`, is persisted and scheduled. The +upgrade can be delayed or hastened by updating the `Plan.Height` in a new proposal. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/upgrade/v1beta1/tx.proto#L29-L41 +``` + +#### Cancelling Upgrade Proposals + +Upgrade proposals can be cancelled. There exists a gov-enabled `MsgCancelUpgrade` +message type, which can be embedded in a proposal, voted on and, if passed, will +remove the scheduled upgrade `Plan`. +Of course this requires that the upgrade was known to be a bad idea well before the +upgrade itself, to allow time for a vote. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/upgrade/v1beta1/tx.proto#L48-L57 +``` + +If such a possibility is desired, the upgrade height is to be +`2 * (VotingPeriod + DepositPeriod) + (SafetyDelta)` from the beginning of the +upgrade proposal. The `SafetyDelta` is the time available from the success of an +upgrade proposal and the realization it was a bad idea (due to external social consensus). + +A `MsgCancelUpgrade` proposal can also be made while the original +`MsgSoftwareUpgrade` proposal is still being voted upon, as long as the `VotingPeriod` +ends after the `MsgSoftwareUpgrade` proposal. + +## State + +The internal state of the `x/upgrade` module is relatively minimal and simple. The +state contains the currently active upgrade `Plan` (if one exists) by key +`0x0` and if a `Plan` is marked as "done" by key `0x1`. The state +contains the consensus versions of all app modules in the application. The versions +are stored as big endian `uint64`, and can be accessed with prefix `0x2` appended +by the corresponding module name of type `string`. The state maintains a +`Protocol Version` which can be accessed by key `0x3`. + +* Plan: `0x0 -> Plan` +* Done: `0x1 | byte(plan name) -> BigEndian(Block Height)` +* ConsensusVersion: `0x2 | byte(module name) -> BigEndian(Module Consensus Version)` +* ProtocolVersion: `0x3 -> BigEndian(Protocol Version)` + +The `x/upgrade` module contains no genesis state. + +## Events + +The `x/upgrade` does not emit any events by itself. Any and all proposal related +events are emitted through the `x/gov` module. + +## Client + +### CLI + +A user can query and interact with the `upgrade` module using the CLI. + +#### Query + +The `query` commands allow users to query `upgrade` state. + +```bash +simd query upgrade --help +``` + +##### applied + +The `applied` command allows users to query the block header for height at which a completed upgrade was applied. + +```bash +simd query upgrade applied [upgrade-name] [flags] +``` + +If upgrade-name was previously executed on the chain, this returns the header for the block at which it was applied. +This helps a client determine which binary was valid over a given range of blocks, as well as more context to understand past migrations. + +Example: + +```bash +simd query upgrade applied "test-upgrade" +``` + +Example Output: + +```bash +"block_id": { + "hash": "A769136351786B9034A5F196DC53F7E50FCEB53B48FA0786E1BFC45A0BB646B5", + "parts": { + "total": 1, + "hash": "B13CBD23011C7480E6F11BE4594EE316548648E6A666B3575409F8F16EC6939E" + } + }, + "block_size": "7213", + "header": { + "version": { + "block": "11" + }, + "chain_id": "testnet-2", + "height": "455200", + "time": "2021-04-10T04:37:57.085493838Z", + "last_block_id": { + "hash": "0E8AD9309C2DC411DF98217AF59E044A0E1CCEAE7C0338417A70338DF50F4783", + "parts": { + "total": 1, + "hash": "8FE572A48CD10BC2CBB02653CA04CA247A0F6830FF19DC972F64D339A355E77D" + } + }, + "last_commit_hash": "DE890239416A19E6164C2076B837CC1D7F7822FC214F305616725F11D2533140", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "validators_hash": "A31047ADE54AE9072EE2A12FF260A8990BA4C39F903EAF5636B50D58DBA72582", + "next_validators_hash": "A31047ADE54AE9072EE2A12FF260A8990BA4C39F903EAF5636B50D58DBA72582", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "app_hash": "28ECC486AFC332BA6CC976706DBDE87E7D32441375E3F10FD084CD4BAF0DA021", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "proposer_address": "2ABC4854B1A1C5AA8403C4EA853A81ACA901CC76" + }, + "num_txs": "0" +} +``` + +##### module versions + +The `module_versions` command gets a list of module names and their respective consensus versions. + +Following the command with a specific module name will return only +that module's information. + +```bash +simd query upgrade module_versions [optional module_name] [flags] +``` + +Example: + +```bash +simd query upgrade module_versions +``` + +Example Output: + +```bash +module_versions: +- name: auth + version: "2" +- name: authz + version: "1" +- name: bank + version: "2" +- name: crisis + version: "1" +- name: distribution + version: "2" +- name: evidence + version: "1" +- name: feegrant + version: "1" +- name: genutil + version: "1" +- name: gov + version: "2" +- name: ibc + version: "2" +- name: mint + version: "1" +- name: params + version: "1" +- name: slashing + version: "2" +- name: staking + version: "2" +- name: transfer + version: "1" +- name: upgrade + version: "1" +- name: vesting + version: "1" +``` + +Example: + +```bash +regen query upgrade module_versions ibc +``` + +Example Output: + +```bash +module_versions: +- name: ibc + version: "2" +``` + +##### plan + +The `plan` command gets the currently scheduled upgrade plan, if one exists. + +```bash +regen query upgrade plan [flags] +``` + +Example: + +```bash +simd query upgrade plan +``` + +Example Output: + +```bash +height: "130" +info: "" +name: test-upgrade +time: "0001-01-01T00:00:00Z" +upgraded_client_state: null +``` + +#### Transactions + +The upgrade module supports the following transactions: + +* `software-proposal` - submits an upgrade proposal: + +```bash +simd tx upgrade software-upgrade v2 --title="Test Proposal" --summary="testing" --deposit="100000000stake" --upgrade-height 1000000 \ +--upgrade-info '{ "binaries": { "linux/amd64":"https://example.com/simd.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" } }' --from cosmos1.. +``` + +* `cancel-software-upgrade` - cancels a previously submitted upgrade proposal: + +```bash +simd tx upgrade cancel-software-upgrade --title="Test Proposal" --summary="testing" --deposit="100000000stake" --from cosmos1.. +``` + +### REST + +A user can query the `upgrade` module using REST endpoints. + +#### Applied Plan + +`AppliedPlan` queries a previously applied upgrade plan by its name. + +```bash +/cosmos/upgrade/v1beta1/applied_plan/{name} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/applied_plan/v2.0-upgrade" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "height": "30" +} +``` + +#### Current Plan + +`CurrentPlan` queries the current upgrade plan. + +```bash +/cosmos/upgrade/v1beta1/current_plan +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/current_plan" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "plan": "v2.1-upgrade" +} +``` + +#### Module versions + +`ModuleVersions` queries the list of module versions from state. + +```bash +/cosmos/upgrade/v1beta1/module_versions +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/module_versions" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "module_versions": [ + { + "name": "auth", + "version": "2" + }, + { + "name": "authz", + "version": "1" + }, + { + "name": "bank", + "version": "2" + }, + { + "name": "crisis", + "version": "1" + }, + { + "name": "distribution", + "version": "2" + }, + { + "name": "evidence", + "version": "1" + }, + { + "name": "feegrant", + "version": "1" + }, + { + "name": "genutil", + "version": "1" + }, + { + "name": "gov", + "version": "2" + }, + { + "name": "ibc", + "version": "2" + }, + { + "name": "mint", + "version": "1" + }, + { + "name": "params", + "version": "1" + }, + { + "name": "slashing", + "version": "2" + }, + { + "name": "staking", + "version": "2" + }, + { + "name": "transfer", + "version": "1" + }, + { + "name": "upgrade", + "version": "1" + }, + { + "name": "vesting", + "version": "1" + } + ] +} +``` + +### gRPC + +A user can query the `upgrade` module using gRPC endpoints. + +#### Applied Plan + +`AppliedPlan` queries a previously applied upgrade plan by its name. + +```bash +cosmos.upgrade.v1beta1.Query/AppliedPlan +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"name":"v2.0-upgrade"}' \ + localhost:9090 \ + cosmos.upgrade.v1beta1.Query/AppliedPlan +``` + +Example Output: + +```bash +{ + "height": "30" +} +``` + +#### Current Plan + +`CurrentPlan` queries the current upgrade plan. + +```bash +cosmos.upgrade.v1beta1.Query/CurrentPlan +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/CurrentPlan +``` + +Example Output: + +```bash +{ + "plan": "v2.1-upgrade" +} +``` + +#### Module versions + +`ModuleVersions` queries the list of module versions from state. + +```bash +cosmos.upgrade.v1beta1.Query/ModuleVersions +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/ModuleVersions +``` + +Example Output: + +```bash +{ + "module_versions": [ + { + "name": "auth", + "version": "2" + }, + { + "name": "authz", + "version": "1" + }, + { + "name": "bank", + "version": "2" + }, + { + "name": "crisis", + "version": "1" + }, + { + "name": "distribution", + "version": "2" + }, + { + "name": "evidence", + "version": "1" + }, + { + "name": "feegrant", + "version": "1" + }, + { + "name": "genutil", + "version": "1" + }, + { + "name": "gov", + "version": "2" + }, + { + "name": "ibc", + "version": "2" + }, + { + "name": "mint", + "version": "1" + }, + { + "name": "params", + "version": "1" + }, + { + "name": "slashing", + "version": "2" + }, + { + "name": "staking", + "version": "2" + }, + { + "name": "transfer", + "version": "1" + }, + { + "name": "upgrade", + "version": "1" + }, + { + "name": "vesting", + "version": "1" + } + ] +} +``` + +## Resources + +A list of (external) resources to learn more about the `x/upgrade` module. + +* [Cosmos Dev Series: Cosmos Blockchain Upgrade](https://medium.com/web3-surfers/cosmos-dev-series-cosmos-sdk-based-blockchain-upgrade-b5e99181554c) - The blog post that explains how software upgrades work in detail. diff --git a/docs/integrate/rfc/PROCESS.md b/docs/integrate/rfc/PROCESS.md new file mode 100644 index 000000000..71b0c7ce7 --- /dev/null +++ b/docs/integrate/rfc/PROCESS.md @@ -0,0 +1,62 @@ +# RFC Creation Process + +1. Copy the `rfc-template.md` file. Use the following filename pattern: `rfc-next_number-title.md` +2. Create a draft Pull Request if you want to get an early feedback. +3. Make sure the context and a solution is clear and well documented. +4. Add an entry to a list in the [README](README.md) file. +5. Create a Pull Request to propose a new ADR. + +## What is an RFC? + +An RFC is a sort of async whiteboarding session. It is meant to replace the need for a distributed team to come together to make a decision. Currently, the Cosmos SDK team and contributors are distributed around the world. The team conducts working groups to have a synchronous discussion and an RFC can be used to capture the discussion for a wider audience to better understand the changes that are coming to the software. + +The main difference the Cosmos SDK is defining as a differentiation between RFC and ADRs is that one is to come to consensus and circulate information about a potential change or feature. An ADR is used if there is already consensus on a feature or change and there is not a need to articulate the change coming to the software. An ADR will articulate the changes and have a lower amount of communication . + +## RFC life cycle + +RFC creation is an **iterative** process. An RFC is meant as a distributed colloboration session, it may have many comments and is usually the bi-product of no working group or synchornous communication + +1. Proposals could start with a new GitHub Issue, be a result of existing Issues or a discussion. + +2. An RFC doesn't have to arrive to `main` with an _accepted_ status in a single PR. If the motivation is clear and the solution is sound, we SHOULD be able to merge it and keep a _proposed_ status. It's preferable to have an iterative approach rather than long, not merged Pull Requests. + +3. If a _proposed_ RFC is merged, then it should clearly document outstanding issues either in the RFC document notes or in a GitHub Issue. + +4. The PR SHOULD always be merged. In the case of a faulty RFC, we still prefer to merge it with a _rejected_ status. The only time the RFC SHOULD NOT be merged is if the author abandons it. + +5. Merged RFCs SHOULD NOT be pruned. + +6. If there is consensus and enough feedback then the RFC can be accepted. + +> Note: An RFC is written when there is no working group or team session on the problem. RFC's are meant as a distributed white boarding session. If there is a working group on the proposal there is no need to have an RFC as there is synchornous whiteboarding going on. + +### RFC status + +Status has two components: + +```text +{CONSENSUS STATUS} +``` + +#### Consensus Status + +```text +DRAFT -> PROPOSED -> LAST CALL yyyy-mm-dd -> ACCEPTED | REJECTED -> SUPERSEDED by ADR-xxx + \ | + \ | + v v + ABANDONED +``` + +* `DRAFT`: [optional] an ADR which is work in progress, not being ready for a general review. This is to present an early work and get an early feedback in a Draft Pull Request form. +* `PROPOSED`: an ADR covering a full solution architecture and still in the review - project stakeholders haven't reached an agreed yet. +* `LAST CALL `: [optional] clear notify that we are close to accept updates. Changing a status to `LAST CALL` means that social consensus (of Cosmos SDK maintainers) has been reached and we still want to give it a time to let the community react or analyze. +* `ACCEPTED`: ADR which will represent a currently implemented or to be implemented architecture design. +* `REJECTED`: ADR can go from PROPOSED or ACCEPTED to rejected if the consensus among project stakeholders will decide so. +* `SUPERSEEDED by ADR-xxx`: ADR which has been superseded by a new ADR. +* `ABANDONED`: the ADR is no longer pursued by the original authors. + +## Language used in RFC + +* The background/goal should be written in the present tense. +* Avoid using a first, personal form. diff --git a/docs/integrate/rfc/README.md b/docs/integrate/rfc/README.md new file mode 100644 index 000000000..40559b626 --- /dev/null +++ b/docs/integrate/rfc/README.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 1 +--- + +# Requests for Comments + +A Request for Comments (RFC) is a record of discussion on an open-ended topic +related to the design and implementation of the Cosmos SDK, for which no +immediate decision is required. + +The purpose of an RFC is to serve as a historical record of a high-level +discussion that might otherwise only be recorded in an ad-hoc way (for example, +via gists or Google docs) that are difficult to discover for someone after the +fact. An RFC _may_ give rise to more specific architectural _decisions_ for +the Cosmos SDK, but those decisions must be recorded separately in +[Architecture Decision Records (ADR)](../architecture/README.md). + +As a rule of thumb, if you can articulate a specific question that needs to be +answered, write an ADR. If you need to explore the topic and get input from +others to know what questions need to be answered, an RFC may be appropriate. + +## RFC Content + +An RFC should provide: + +* A **changelog**, documenting when and how the RFC has changed. +* An **abstract**, briefly summarizing the topic so the reader can quickly tell + whether it is relevant to their interest. +* Any **background** a reader will need to understand and participate in the + substance of the discussion (links to other documents are fine here). +* The **discussion**, the primary content of the document. + +The [rfc-template.md](rfc-template.md) file includes placeholders for these +sections. diff --git a/docs/integrate/rfc/_category_.json b/docs/integrate/rfc/_category_.json new file mode 100644 index 000000000..40fac9822 --- /dev/null +++ b/docs/integrate/rfc/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "RFCs", + "position": 12, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/rfc/rfc-001-tx-validation.md b/docs/integrate/rfc/rfc-001-tx-validation.md new file mode 100644 index 000000000..923e1c720 --- /dev/null +++ b/docs/integrate/rfc/rfc-001-tx-validation.md @@ -0,0 +1,25 @@ +# RFC 001: Transaction Validation + +## Changelog + +* 2023-03-12: Proposed + +## Background + +Transation Validation is crucial to a functioning state machine. Within the Cosmos SDK there are two validation flows, one is outside the message server and the other within. The flow outside of the message server is the `ValidateBasic` function. It is called in the antehandler on both `CheckTx` and `DeliverTx`. There is an overhead and sometimes duplication of validation within these two flows. This extra validation provides an additional check before entering the mempool. + +With the deprecation of [`GetSigners`](https://github.com/cosmos/cosmos-sdk/issues/11275) we have the optionality to remove [sdk.Msg](https://github.com/cosmos/cosmos-sdk/blob/16a5404f8e00ddcf8857c8a55dca2f7c109c29bc/types/tx_msg.go#L16) and the `ValidateBasic` function. + +With the separation of CometBFT and Cosmos-SDK, there is a lack of control of what transactions get broadcasted and included in a block. This extra validation in the antehandler is meant to help in this case. In most cases the transaction is or should be simulated against a node for validation. With this flow transactions will be treated the same. + +## Proposal + +The acceptance of this RFC would move validation within `ValidateBasic` to the message server in modules, update tutorials and docs to remove mention of using `ValidateBasic` in favour of handling all validation for a message where it is executed. + +We can and will still support the `Validatebasic` function for users and provide an extension interface of the function once `sdk.Msg` is depreacted. + +> Note: This is how messages are handled in VMs like Ethereum and CosmWasm. + +### Consequences + +The consequence of updating the transaction flow is that transaction that may have failed before with the `ValidateBasic` flow will now be included in a block and fees charged. diff --git a/docs/integrate/rfc/rfc-template.md b/docs/integrate/rfc/rfc-template.md new file mode 100644 index 000000000..417a795d0 --- /dev/null +++ b/docs/integrate/rfc/rfc-template.md @@ -0,0 +1,83 @@ +# RFC {RFC-NUMBER}: {TITLE} + +## Changelog + +* {date}: {changelog} + +## Background + +> The next section is the "Background" section. This section should be at least two paragraphs and can take up to a whole +> page in some cases. The guiding goal of the background section is: as a newcomer to this project (new employee, team +> transfer), can I read the background section and follow any links to get the full context of why this change is +> necessary? +> +> If you can't show a random engineer the background section and have them acquire nearly full context on the necessity +> for the RFC, then the background section is not full enough. To help achieve this, link to prior RFCs, discussions, and +> more here as necessary to provide context so you don't have to simply repeat yourself. + + +## Proposal + +> The next required section is "Proposal" or "Goal". Given the background above, this section proposes a solution. +> This should be an overview of the "how" for the solution, but for details further sections will be used. + + +## Abandoned Ideas (Optional) + +> As RFCs evolve, it is common that there are ideas that are abandoned. Rather than simply deleting them from the +> document, you should try to organize them into sections that make it clear they're abandoned while explaining why they +> were abandoned. +> +> When sharing your RFC with others or having someone look back on your RFC in the future, it is common to walk the same +> path and fall into the same pitfalls that we've since matured from. Abandoned ideas are a way to recognize that path +> and explain the pitfalls and why they were abandoned. + +## Descision + +> This section describes alternative designs to the chosen design. This section +> is important and if an adr does not have any alternatives then it should be +> considered that the ADR was not thought through. + +## Consequences (optional) + +> This section describes the resulting context, after applying the decision. All +> consequences should be listed here, not just the "positive" ones. A particular +> decision may have positive, negative, and neutral consequences, but all of them +> affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section +> describing these incompatibilities and their severity. The ADR must explain +> how the author proposes to deal with these incompatibilities. ADR submissions +> without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +> {positive consequences} + +### Negative + +> {negative consequences} + +### Neutral + +> {neutral consequences} + + + +### References + +> Links to external materials needed to follow the discussion may be added here. +> +> In addition, if the discussion in a request for comments leads to any design +> decisions, it may be helpful to add links to the ADR documents here after the +> discussion has settled. + +## Discussion + +> This section contains the core of the discussion. +> +> There is no fixed format for this section, but ideally changes to this +> section should be updated before merging to reflect any discussion that took +> place on the PR that made those changes. diff --git a/docs/integrate/spec/SPEC_MODULE.md b/docs/integrate/spec/SPEC_MODULE.md new file mode 100644 index 000000000..1b5e5d5dc --- /dev/null +++ b/docs/integrate/spec/SPEC_MODULE.md @@ -0,0 +1,60 @@ +# Specification of Modules + +This file intends to outline the common structure for specifications within +this directory. + +## Tense + +For consistency, specs should be written in passive present tense. + +## Pseudo-Code + +Generally, pseudo-code should be minimized throughout the spec. Often, simple +bulleted-lists which describe a function's operations are sufficient and should +be considered preferable. In certain instances, due to the complex nature of +the functionality being described pseudo-code may the most suitable form of +specification. In these cases use of pseudo-code is permissible, but should be +presented in a concise manner, ideally restricted to only the complex +element as a part of a larger description. + +## Common Layout + +The following generalized `README` structure should be used to breakdown +specifications for modules. The following list is nonbinding and all sections are optional. + +* `# {Module Name}` - overview of the module +* `## Concepts` - describe specialized concepts and definitions used throughout the spec +* `## State` - specify and describe structures expected to marshalled into the store, and their keys +* `## State Transitions` - standard state transition operations triggered by hooks, messages, etc. +* `## Messages` - specify message structure(s) and expected state machine behaviour(s) +* `## Begin Block` - specify any begin-block operations +* `## End Block` - specify any end-block operations +* `## Hooks` - describe available hooks to be called by/from this module +* `## Events` - list and describe event tags used +* `## Client` - list and describe CLI commands and gRPC and REST endpoints +* `## Params` - list all module parameters, their types (in JSON) and examples +* `## Future Improvements` - describe future improvements of this module +* `## Tests` - acceptance tests +* `## Appendix` - supplementary details referenced elsewhere within the spec + +### Notation for key-value mapping + +Within `## State` the following notation `->` should be used to describe key to +value mapping: + +```text +key -> value +``` + +to represent byte concatenation the `|` may be used. In addition, encoding +type may be specified, for example: + +```text +0x00 | addressBytes | address2Bytes -> amino(value_object) +``` + +Additionally, index mappings may be specified by mapping to the `nil` value, for example: + +```text +0x01 | address2Bytes | addressBytes -> nil +``` diff --git a/docs/integrate/spec/SPEC_STANDARD.md b/docs/integrate/spec/SPEC_STANDARD.md new file mode 100644 index 000000000..3608b3654 --- /dev/null +++ b/docs/integrate/spec/SPEC_STANDARD.md @@ -0,0 +1,121 @@ +# What is an SDK standard? + +An SDK standard is a design document describing a particular protocol, standard, or feature expected to be used by the Cosmos SDK. A SDK standard should list the desired properties of the standard, explain the design rationale, and provide a concise but comprehensive technical specification. The primary author is responsible for pushing the proposal through the standardization process, soliciting input and support from the community, and communicating with relevant stakeholders to ensure (social) consensus. + +## Sections + +A SDK standard consists of: + +* a synopsis, +* overview and basic concepts, +* technical specification, +* history log, and +* copyright notice. + +All top-level sections are required. References should be included inline as links, or tabulated at the bottom of the section if necessary. Included sub-sections should be listed in the order specified below. + +### Table Of Contents + +Provide a table of contents at the top of the file to assist readers. + +### Synopsis + +The document should include a brief (~200 word) synopsis providing a high-level description of and rationale for the specification. + +### Overview and basic concepts + +This section should include a motivation sub-section and a definitions sub-section if required: + +* *Motivation* - A rationale for the existence of the proposed feature, or the proposed changes to an existing feature. +* *Definitions* - A list of new terms or concepts utilized in the document or required to understand it. + +### System model and properties + +This section should include an assumptions sub-section if any, the mandatory properties sub-section, and a dependencies sub-section. Note that the first two sub-section are are tightly coupled: how to enforce a property will depend directly on the assumptions made. This sub-section is important to capture the interactions of the specified feature with the "rest-of-the-world", i.e., with other features of the ecosystem. + +* *Assumptions* - A list of any assumptions made by the feature designer. It should capture which features are used by the feature under specification, and what do we expect from them. +* *Properties* - A list of the desired properties or characteristics of the feature specified, and expected effects or failures when the properties are violated. In case it is relevant, it can also include a list of properties that the feature does not guarantee. +* *Dependencies* - A list of the features that use the feature under specification and how. + +### Technical specification + +This is the main section of the document, and should contain protocol documentation, design rationale, required references, and technical details where appropriate. +The section may have any or all of the following sub-sections, as appropriate to the particular specification. The API sub-section is especially encouraged when appropriate. + +* *API* - A detailed description of the features's API. +* *Technical Details* - All technical details including syntax, diagrams, semantics, protocols, data structures, algorithms, and pseudocode as appropriate. The technical specification should be detailed enough such that separate correct implementations of the specification without knowledge of each other are compatible. +* *Backwards Compatibility* - A discussion of compatibility (or lack thereof) with previous feature or protocol versions. +* *Known Issues* - A list of known issues. This sub-section is specially important for specifications of already in-use features. +* *Example Implementation* - A concrete example implementation or description of an expected implementation to serve as the primary reference for implementers. + +### History + +A specification should include a history section, listing any inspiring documents and a plaintext log of significant changes. + +See an example history section [below](#history-1). + +### Copyright + +A specification should include a copyright section waiving rights via [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). + +## Formatting + +### General + +Specifications must be written in GitHub-flavoured Markdown. + +For a GitHub-flavoured Markdown cheat sheet, see [here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). For a local Markdown renderer, see [here](https://github.com/joeyespo/grip). + +### Language + +Specifications should be written in Simple English, avoiding obscure terminology and unnecessary jargon. For excellent examples of Simple English, please see the [Simple English Wikipedia](https://simple.wikipedia.org/wiki/Main_Page). + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in specifications are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119). + +### Pseudocode + +Pseudocode in specifications should be language-agnostic and formatted in a simple imperative standard, with line numbers, variables, simple conditional blocks, for loops, and +English fragments where necessary to explain further functionality such as scheduling timeouts. LaTeX images should be avoided because they are difficult to review in diff form. + +Pseudocode for structs can be written in a simple language like Typescript or golang, as interfaces. + +Example Golang pseudocode struct: + +```go +type CacheKVStore interface { + cache: map[Key]Value + parent: KVStore + deleted: Key +} +``` + +Pseudocode for algorithms should be written in simple Golang, as functions. + +Example pseudocode algorithm: + +```go +func get( + store CacheKVStore, + key Key) Value { + + value = store.cache.get(Key) + if (value !== null) { + return value + } else { + value = store.parent.get(key) + store.cache.set(key, value) + return value + } +} +``` + +## History + +This specification was significantly inspired by and derived from IBC's [ICS](https://github.com/cosmos/ibc/blob/main/spec/ics-001-ics-standard/README.md), which +was in turn derived from Ethereum's [EIP 1](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md). + +Nov 24, 2022 - Initial draft finished and submitted as a PR + +## Copyright + +All content herein is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/docs/integrate/spec/_category_.json b/docs/integrate/spec/_category_.json new file mode 100644 index 000000000..0f1092344 --- /dev/null +++ b/docs/integrate/spec/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Specifications", + "position": 6, + "link": null +} \ No newline at end of file diff --git a/docs/integrate/spec/addresses/README.md b/docs/integrate/spec/addresses/README.md new file mode 100644 index 000000000..af63429d5 --- /dev/null +++ b/docs/integrate/spec/addresses/README.md @@ -0,0 +1,3 @@ +# Addresses spec + +* [Bech32](bech32.md) diff --git a/docs/integrate/spec/addresses/bech32.md b/docs/integrate/spec/addresses/bech32.md new file mode 100644 index 000000000..2c15bac68 --- /dev/null +++ b/docs/integrate/spec/addresses/bech32.md @@ -0,0 +1,21 @@ +# Bech32 on Cosmos + +The Cosmos network prefers to use the Bech32 address format wherever users must handle binary data. Bech32 encoding provides robust integrity checks on data and the human readable part (HRP) provides contextual hints that can assist UI developers with providing informative error messages. + +In the Cosmos network, keys and addresses may refer to a number of different roles in the network like accounts, validators etc. + +## HRP table + +| HRP | Definition | +| ---------------- | ------------------------------------- | +| cosmos | Cosmos Account Address | +| cosmosvalcons | Cosmos Validator Consensus Address | +| cosmosvaloper | Cosmos Validator Operator Address | + +## Encoding + +While all user facing interfaces to Cosmos software should exposed Bech32 interfaces, many internal interfaces encode binary value in hex or base64 encoded form. + +To covert between other binary representation of addresses and keys, it is important to first apply the Amino encoding process before Bech32 encoding. + +A complete implementation of the Amino serialization format is unnecessary in most cases. Simply prepending bytes from this [table](https://github.com/cometbft/cometbft/blob/main/spec/blockchain/encoding.md) to the byte string payload before Bech32 encoding will sufficient for compatible representation. diff --git a/docs/integrate/spec/fee_distribution/f1_fee_distr.pdf b/docs/integrate/spec/fee_distribution/f1_fee_distr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b9995386957cb1be5fe5c21551b0645009063045 GIT binary patch literal 185175 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íw? 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˾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®cJ;^V-pd>T?lQ>;=Q>%vyx5? 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

#-Q)Qd~0k!|-IzD88Bl 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 hEwLT^?}N!;k^-5b!fOWIAe*u0V5q|&x literal 0 HcmV?d00001 diff --git a/docs/integrate/spec/fee_distribution/f1_fee_distr.tex b/docs/integrate/spec/fee_distribution/f1_fee_distr.tex new file mode 100644 index 000000000..b6bb6b326 --- /dev/null +++ b/docs/integrate/spec/fee_distribution/f1_fee_distr.tex @@ -0,0 +1,245 @@ +\documentclass[]{article} +\usepackage{hyperref} + +%opening +\title{F1 Fee Distribution Draft-02} +\author{Dev Ojha} + +\begin{document} + +\maketitle + +\begin{abstract} + In a proof of stake blockchain, validators need to split the rewards gained from transaction fees each block. Furthermore, these fees must be fairly distributed to each of a validator's constituent delegators. They accrue this reward throughout the entire time they are delegated, and they have a special operation to withdraw accrued rewards. + + The F1 fee distribution scheme works for any algorithm to split funds between validators each block, with minimal iteration, and the only approximations being due to finite decimal precision. Per block there is a single iteration over the validator set, to enable reward algorithms that differ by validator. No iteration is required to delegate, or withdraw. The state usage is one state update per validator per block, and one state entry per active delegation. It can optionally handle arbitrary inflation schemes, and auto-bonding of rewards. +\end{abstract} + +\section{F1 Fee Distribution} + +\subsection{Context} +In a proof of stake blockchain, each validator has an associated stake. +Transaction fees get rewarded to validators based on the incentive scheme of the underlying proof of stake model. +The fee distribution problem occurs in proof of stake blockchains supporting delegation, as there is a need to distribute a validator's fee rewards to its delegators. +The trivial solution of just giving the rewards to each delegator every block is too expensive to perform on-chain. +So instead fee distribution algorithms have delegators perform a withdraw action, which when performed yields the same total amount of fees as if they had received them at every block. + +This details F1, an approximation-free, slash-tolerant fee distribution algorithm which allows validator commission-rates, inflation rates, and fee proportions, which can all efficiently change per validator, every block. +The algorithm requires iterating over the bonded validators every block, and withdraws require no iteration. +This is cheap, due to staking logic already requiring iteration over all validators, which causes the expensive state-reads to be cached. + +The key point of how F1 works is that it tracks how much rewards a delegator with 1 stake for a given validator would be entitled to if it had bonded at block 0 until the latest block. +When a delegator bonds at block $b$, the amount of rewards a delegator with 1 stake would have if bonded at block 0 until block $b$ is also persisted to state. +When the delegator withdraws, they receive the difference of these two values. +Since rewards are distributed according to stake-weighting, this amount of rewards can be scaled by the amount of stake a delegator had. +Section 1.2 describes this in more detail, with an argument for it being approximation free. +Section 2 details how to adapt this algorithm to handle commission rates, slashing, and inflation. + +\subsection{Base algorithm} +In this section, we show that the F1 base algorithm gives each delegator rewards identical to that which they'd receive in the naive and correct fee distribution algorithm that iterated over all delegators every block. + +Even distribution of a validators rewards amongst its validators weighted by stake means the following: +Suppose a delegator delegates $x$ stake to a validator $v$ at block $h$. +Let the amount of stake the validator has at block $i$ be $s_i$ and the amount of fees they receive at this height be $f_i$. +Then if a delegator contributing $x$ stake decides to withdraw at block $n$, the rewards they receive are +$$\sum_{i = h}^{n} \frac{x}{s_i}f_i = x \sum_{i = h}^{n} \frac{f_i}{s_i}$$ + +Note that $s_i$ does not change every block, +it only changes if the validator gets slashed, +or if any delegator alters the amount they have delegated. +We'll relegate handling of slashes to \autoref{ssec:slashing}, +and only consider the case with no slashing here. +We can change the iteration from being over every block, to instead being over the set of blocks between two changes in validator $v$'s total stake. +Let each of these set of blocks be called a period. +A new period begins every time that validator's total stake changes. +Let the total amount of stake for the validator in period $p$ be $n_p$. +Let $T_p$ be the total fees that validator $v$ accrued in period $p$. +Let $h$ be the start of period $p_{init}$, and height $n$ be the end of $p_{final}$. +It follows that +$$x \sum_{i = h}^{n} \frac{f_i}{s_i} = x \sum_{p = p_{init}}^{p_{final}} \frac{T_p}{n_p}$$ + +Let $p_0$ represent the period which begins when the validator first bonds. +The central idea to the F1 model is that at the end of the $k$th period, +the following is stored at a state location indexable by $k$: $\sum_{i=0}^{k}\frac{T_i}{n_i}$. +Let the index of the current period be $f$. +When a delegator wants to delegate or withdraw their reward, they first create a new entry in state to end the current period. +Then this entry is created using the previous entry as follows: +$$Entry_f = \sum_{i=0}^{f}\frac{T_i}{n_i} = \sum_{i=0}^{f-1}\frac{T_i}{n_i} + \frac{T_f}{n_f} = Entry_{f-1} + \frac{T_f}{n_f}$$ +Where $T_f$ is the fees the validator has accrued in period $f$, and $n_f$ is the validators total amount of stake in period $f$. + +The withdrawer's delegation object has the index $k$ for the period which they ended by bonding. (They start receiving rewards for period $k + 1$) +The reward they should receive when withdrawing is: + +$$x \sum_{i = k + 1}^{f} \frac{T_i}{n_i} = x\left(\left(\sum_{i=0}^{f}\frac{T_i}{n_i}\right) - \left(\sum_{i=0}^{k}\frac{T_i}{n_i}\right)\right) = x\left(Entry_f - Entry_k\right)$$ + +It is clear from the equations that this payout mechanism maintains correctness, and requires no iterations. It just needed the two state reads for these entries. + +$T_f$ is a separate variable in state for the amount of fees this validator has accrued since the last update to its power. +This variable is incremented at every block by however much fees this validator received that block. +On the update to the validators power, this variable is used to create the entry in state at $f$, and is then reset to 0. + +This fee distribution proposal is agnostic to how all of the blocks fees are divied up between validators. +This creates many nice properties, for example it is possible to only rewarding validators who signed that block. + +\section{Additional add-ons} +\subsection{Commission Rates} +Commission rates are the idea that a validator can take a fixed $x\%$ cut of all of their received fees, before redistributing evenly to the constituent delegators. +This can easily be done as follows: + +In block $h$ a validator receives $f_h$ fees. +Instead of incrementing that validators ``total accrued fees this period variable" by $f_h$, it is instead incremented by $(1 - commission\_rate) * f_p$. +Then $commission\_rate * f_p$ is deposited directly to the validator's account. +This allows for efficient updates to a validator's commission rate every block if desired. +More generally, each validator could have a function which takes their fees as input, and outputs a set of outputs to pay these fees too. (i.e. x\% going to themselves, y\% to delegators, z\% burnt) + +\subsection{Slashing} +\label{ssec:slashing} +Slashing is distinct from withdrawals, since it lowers the stake of all of the delegator's by a fixed percentage. +Since no one is charged gas for slashes, a slash cannot iterate over all delegators. +Thus we can no longer just multiply by $x$ over the difference in stake. +This section describes a simple solution that should suffice for most chains needs. An asymptotically optimal solution is provided in section 2.4. +TODO: Consider removing this section in favor of just using the current section 2.4? + +The solution here is to instead store each period created by a slash in the validators state. +Then when withdrawing, you must iterate over all slashes between when you started and ended. +Suppose you delegated at period $0$, a y\% slash occured at period $2$, and your withdrawal creates period $4$. +Then you receive funds from periods $0$ to $2$ as normal. +The equations for funds you receive for periods $2$ to $4$ now uses $(1 - y)x$ for your stake instead of just $x$ stake. +When there are multiple slashes, you just account for the accumulated slash factor. + +In practice this will not really be an efficiency hit, as the number of slashes is expected to be 0 or 1 for most validators. +Validators that get slashed more will naturally lose their delegators. +A malicious validator that gets itself slashed many times would increase the gas to withdraw linearly, but the economic loss of funds due to the slashes is expected to far out-weigh the extra overhead the honest withdrawer must pay for due to the gas. +(TODO: frame that above sentence in terms of griefing factors, as thats more correct) + +\subsection{Inflation} +Inflation is the idea that we want every staked coin to create more staking tokens as time progresses. +The purpose being to drive down the relative worth of unstaked tokens. +Each block, every staked token should produce $x$ staking tokens as inflation, where $x$ is calculated from a function $inflation$ which takes state and the block information as input. +Let $x_i$ represent the evaluation of $inflation$ in the $i$th block. +The goal of this section is to auto-bond inflation in the fee distribution model without iteration. +This is done by preserving the invariant that every state entry contains the rewards one would have if they had bonded one stake at genesis until that corresponding block. + +In state a variable should be kept for the number of tokens one would have now due to inflation, +given that they bonded one token at genesis. +This is $\prod_{0}^{now} (1 + x_i)$. +Each period now stores this total inflation product along with what it already stores per-period. + +Let $R_i$ be the fee rewards in block $i$, and $n_i$ be the total amount bonded to that validator in that block. +The correct amount of rewards which 1 token at genesis should have now is: +$$Reward(now) = \sum_{i = 0}^{now}\left(\prod_{j = 0}^{i} 1 + x_j \right) * \frac{R_i}{n_i}$$ +The term in the sum is the amount of stake one stake becomes due to inflation, multiplied by the amount of fees per stake. + +Now we cast this into the period frame of view. +Recall that we build the rewards by creating a state entry for the rewards of the previous period, and keeping track of the rewards within this period. +Thus we first define the correct amount of rewards for each successive period, proving correctness of this via induction. +We then show that the state entry that gets efficiently built up block by block is equal to this value for the latest period. + +Let $start, end$ denote the start/end of a period. + +Suppose that $\forall f > 0$, $Reward(end(f))$ is correctly constructed as +$$Reward(end(f)) = Reward(end(f-1)) + \sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ +and that for $f = 0$, $Reward(end(0)) = 0$. +(With period 1 being defined as the period that has the first bond into it) +It must be shown that assuming the supposition $\forall f \leq f_0$, $$Reward(end(f_0 + 1)) = Reward(end(f_0)) + \sum_{i = start(f_0 + 1)}^{end(f_0 + 1)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ +Using the definition of $Reward$, it follows that: +$$\sum_{i = 0}^{end(f_0 + 1)}\left(\prod_{j = 0}^{i} 1 + x_j \right) * \frac{R_i}{n_i} = \sum_{i = 0}^{end(f_0)}\left(\prod_{j = 0}^{i} 1 + x_j \right) * \frac{R_i}{n_i} + \sum_{i = start(f_0 + 1)}^{end(f_0 + 1)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ + +Since the first summation on the right hand side is $Reward(end(f_0))$, the supposition is proven true. +Consequently, the reward for just period $f$ adjusted for the amount of inflation 1 token at genesis would produce, is: +$$\sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ + +TODO: make this proof + pre-amble less verbose, and just wrap up into a lemma. +Maybe just leave this proof or the last part to the reader, since it easily follows from summation bounds. + +Now note that +$$\sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i} = \left(\prod_{j = 0}^{end(f - 1)} 1 + x_j \right)\sum_{i = start(f)}^{end(f)}\left(\prod_{j = start(f)}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ +By definition of period, and inflation being applied every block, \\ +$n_i = n_{start(f)}\left(\prod_{j = start(f)}^{i} 1 + x_j \right)$. This cancels out the product in the summation, therefore +$$\sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i} = \left(\prod_{j = 0}^{end(f - 1)} 1 + x_j \right)\frac{\sum_{i = start(f)}^{end(f)}R_i}{n_{start(f)}}$$ + +Thus every block, each validator just has to add the total amount of fees (The $R_i$ term) that goes to delegates to some per-period term. +When creating a new period, $n_{start(f)}$ can be cached in state, and the product is already stored in the previous periods state entry. +You then get the next period's $n_{start(f)}$ from the consensus' power entry for this validator. +This is thus extremely efficient per block. + +When withdrawing, you take the difference as before, +which yields the amount of rewards you would have obtained with $(\prod_0^{begin\ bonding\ period}1 + x)$ stake from the block you began bonding at until now. +$(\prod_0^{begin\ bonding\ period}1 + x)$ is known, since its included in the state entry for when you bonded. +You then divide the entitled fees by $(\prod_0^{begin\ bonding\ period}1 + x)$ to normalize it to being the amount of rewards you're entitled to from 1 stake at that block to now. +Then as before, you multiply by the amount of stake you had initially bonded. +\\TODO: (Does the difference equating to that make sense, or should it be shown explicitly) +\\TODO: Does this need to explain how the originally bonded tokens are refunded, or is that clear? + +The inflation function could vary per block, +and per validator if ever a need rose. +If the inflation rate is the same for everyone then there can be a single global store for the entries corresponding to the product of inflations. +Inflation creation can trivially be epoched as long as inflation isn't required within the epoch, through changes to the $inflation$ function. + +\subsection{Withdrawing with no iteration over slashes} +Notice that a slash is the same as a negative inflation rate for a validator in one block. +For example a $20\%$ slash is equivalent to a $-20\%$ inflation for a validator in a block. +Given correctness of auto-bonding inflation with different inflation rates per-validator, +it follows that handling slashes can be correctly done by simply subtracting the validators inflation factor in that block to be the negative of the slash factor. +This significantly simplifies the withdrawal procedure. + +\subsection{Auto bonding fees} +TODO: Fill this out. +Core idea: you use the same mechanism as previously, but you just don't take that optimization with $n_{i}$ and the $n_{start}$ relation. +Fairly simple to do. + +\subsection{Delegation updates} +Updating your delegation amount is equivalent to withdrawing earned rewards and a fully independent new delegation occurring in the same block. +The same applies for redelegation. +From the view of fee distribution, partial redelegation is the same as a delegation update + a new delegation. + +\subsection{Jailing / being kicked out of the validator set} +This basically requires no change. +In each block you only iterate over the currently bonded validators. +So you simply don't update the "total accrued fees this period" variable for jailed / non-bonded validators. +Withdrawing requires \textit{no} special casing here! + +\section{State Requirements} +State entries can be pruned quite effectively. +Suppose for the sake of exposition that there is at most one delegation / withdrawal to a particular validator in any given block. +Then each delegation is responsible for one addition to state. +Only the next period, and this delegator's withdrawal could depend on this entry. Thus once this delegator withdraws, this state entry can be pruned. +For the entry created by the delegator's withdrawal, that is only required by the creation of the next period. +Thus once the next period is created, that withdrawal's period can be deleted. + +This can be easily adapted to the case where there are multiple delegations / withdrawals per block, by maintaining a reference count in each period starting state entry. + +The slash entries for a validator can only be pruned when all of that validator's delegators have their bonding period starting after the slash. +This seems ineffective to keep track of, thus it is not worth it. +Each slash should instead remain in state until the validator unbonds and all delegators have their fees withdrawn. + +\section{Implementers Considerations} +TODO: Convert this section into a proper conclusion + +This is an extremely simple scheme with many nice benefits. +\begin{itemize} + \item The overhead per block is a simple iteration over the bonded validator set, which occurs anyway. (Thus it can be implemented ``for-free" with an optimized code-base) + \item Withdrawing earned fees only requires iterating over slashes since when you bonded. (Which is a negligible iteration) + \item There are no approximations in any of the calculations. (modulo minor errata resulting from fixed precision decimals used in divisions) + \item Supports arbitrary inflation models. (Thus could even vary upon block signers) + \item Supports arbitrary fee distribution amongst the validator set. (Thus can account for things like only online validators get fees, which has important incentivization impacts) + \item The above two can change on a live chain with no issues. + \item Validator commission rates can be changed every block + \item The simplicity of this scheme lends itself well to implementation +\end{itemize} + +Thus this scheme has efficiency improvements, simplicity improvements, and expressiveness improvements over the currently proposed schemes. With a correct fee distribution amongst the validator set, this solves the existing problem where one could withhold their signature for risk-free gain. + +\section{TO DOs} + +\begin{itemize} + \item A global fee pool can be described. + \item Mention storage optimization for how to prune slashing entries in the uniform inflation and iteration over slashing case + \item Add equation numbers + \item perhaps re-organize so that the no iteration + \item Section on decimal precision considerations (would unums help?), and mitigating errors in calculation with floats and decimals. -- This probably belongs in a corrollary markdown file in the implementation + \item Consider indicating that the withdraw action need not be a tx type and could instead happen 'transparently' when more coins are needed, if a chain desired this for UX / p2p efficiency. +\end{itemize} + + +\end{document} diff --git a/docs/integrate/spec/ics/README.md b/docs/integrate/spec/ics/README.md new file mode 100644 index 000000000..ce0cf31a8 --- /dev/null +++ b/docs/integrate/spec/ics/README.md @@ -0,0 +1,3 @@ +# Cosmos ICS + +* [ICS030 - Signed Messages](ics-030-signed-messages.md) diff --git a/docs/integrate/spec/ics/ics-030-signed-messages.md b/docs/integrate/spec/ics/ics-030-signed-messages.md new file mode 100644 index 000000000..a7c56715b --- /dev/null +++ b/docs/integrate/spec/ics/ics-030-signed-messages.md @@ -0,0 +1,192 @@ +# ICS 030: Cosmos Signed Messages + +>TODO: Replace with valid ICS number and possibly move to new location. + +* [Changelog](#changelog) +* [Abstract](#abstract) +* [Preliminary](#preliminary) +* [Specification](#specification) +* [Future Adaptations](#future-adaptations) +* [API](#api) +* [References](#references) + +## Status + +Proposed. + +## Changelog + +## Abstract + +Having the ability to sign messages off-chain has proven to be a fundamental aspect +of nearly any blockchain. The notion of signing messages off-chain has many +added benefits such as saving on computational costs and reducing transaction +throughput and overhead. Within the context of the Cosmos, some of the major +applications of signing such data includes, but is not limited to, providing a +cryptographic secure and verifiable means of proving validator identity and +possibly associating it with some other framework or organization. In addition, +having the ability to sign Cosmos messages with a Ledger or similar HSM device. + +A standardized protocol for hashing, signing, and verifying messages that can be +implemented by the Cosmos SDK and other third-party organizations is needed. Such a +standardized protocol subscribes to the following: + +* Contains a specification of human-readable and machine-verifiable typed structured data +* Contains a framework for deterministic and injective encoding of structured data +* Utilizes cryptographic secure hashing and signing algorithms +* A framework for supporting extensions and domain separation +* Is invulnerable to chosen ciphertext attacks +* Has protection against potentially signing transactions a user did not intend to + +This specification is only concerned with the rationale and the standardized +implementation of Cosmos signed messages. It does **not** concern itself with the +concept of replay attacks as that will be left up to the higher-level application +implementation. If you view signed messages in the means of authorizing some +action or data, then such an application would have to either treat this as +idempotent or have mechanisms in place to reject known signed messages. + +## Preliminary + +The Cosmos message signing protocol will be parameterized with a cryptographic +secure hashing algorithm `SHA-256` and a signing algorithm `S` that contains +the operations `sign` and `verify` which provide a digital signature over a set +of bytes and verification of a signature respectively. + +Note, our goal here is not to provide context and reasoning about why necessarily +these algorithms were chosen apart from the fact they are the defacto algorithms +used in CometBFT and the Cosmos SDK and that they satisfy our needs for such +cryptographic algorithms such as having resistance to collision and second +pre-image attacks, as well as being [deterministic](https://en.wikipedia.org/wiki/Hash_function#Determinism) and [uniform](https://en.wikipedia.org/wiki/Hash_function#Uniformity). + +## Specification + +CometBFT has a well established protocol for signing messages using a canonical +JSON representation as defined [here](https://github.com/cometbft/cometbft/blob/master/types/canonical.go). + +An example of such a canonical JSON structure is CometBFT's vote structure: + +```go +type CanonicalJSONVote struct { + ChainID string `json:"@chain_id"` + Type string `json:"@type"` + BlockID CanonicalJSONBlockID `json:"block_id"` + Height int64 `json:"height"` + Round int `json:"round"` + Timestamp string `json:"timestamp"` + VoteType byte `json:"type"` +} +``` + +With such canonical JSON structures, the specification requires that they include +meta fields: `@chain_id` and `@type`. These meta fields are reserved and must be +included. They are both of type `string`. In addition, fields must be ordered +in lexicographically ascending order. + +For the purposes of signing Cosmos messages, the `@chain_id` field must correspond +to the Cosmos chain identifier. The user-agent should **refuse** signing if the +`@chain_id` field does not match the currently active chain! The `@type` field +must equal the constant `"message"`. The `@type` field corresponds to the type of +structure the user will be signing in an application. For now, a user is only +allowed to sign bytes of valid ASCII text ([see here](https://github.com/cometbft/cometbft/blob/v0.37.0/libs/strings/string.go#L35-L64)). +However, this will change and evolve to support additional application-specific +structures that are human-readable and machine-verifiable ([see Future Adaptations](#future-adaptations)). + +Thus, we can have a canonical JSON structure for signing Cosmos messages using +the [JSON schema](http://json-schema.org/) specification as such: + +```json +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$id": "cosmos/signing/typeData/schema", + "title": "The Cosmos signed message typed data schema.", + "type": "object", + "properties": { + "@chain_id": { + "type": "string", + "description": "The corresponding Cosmos chain identifier.", + "minLength": 1 + }, + "@type": { + "type": "string", + "description": "The message type. It must be 'message'.", + "enum": [ + "message" + ] + }, + "text": { + "type": "string", + "description": "The valid ASCII text to sign.", + "pattern": "^[\\x20-\\x7E]+$", + "minLength": 1 + } + }, + "required": [ + "@chain_id", + "@type", + "text" + ] +} +``` + +e.g. + +```json +{ + "@chain_id": "1", + "@type": "message", + "text": "Hello, you can identify me as XYZ on keybase." +} +``` + +## Future Adaptations + +As applications can vary greatly in domain, it will be vital to support both +domain separation and human-readable and machine-verifiable structures. + +Domain separation will allow for application developers to prevent collisions of +otherwise identical structures. It should be designed to be unique per application +use and should directly be used in the signature encoding itself. + +Human-readable and machine-verifiable structures will allow end users to sign +more complex structures, apart from just string messages, and still be able to +know exactly what they are signing (opposed to signing a bunch of arbitrary bytes). + +Thus, in the future, the Cosmos signing message specification will be expected +to expand upon it's canonical JSON structure to include such functionality. + +## API + +Application developers and designers should formalize a standard set of APIs that +adhere to the following specification: + +----- + +### **cosmosSignBytes** + +Params: + +* `data`: the Cosmos signed message canonical JSON structure +* `address`: the Bech32 Cosmos account address to sign data with + +Returns: + +* `signature`: the Cosmos signature derived using signing algorithm `S` + +----- + +### Examples + +Using the `secp256k1` as the DSA, `S`: + +```javascript +data = { + "@chain_id": "1", + "@type": "message", + "text": "I hereby claim I am ABC on Keybase!" +} + +cosmosSignBytes(data, "cosmos1pvsch6cddahhrn5e8ekw0us50dpnugwnlfngt3") +> "0x7fc4a495473045022100dec81a9820df0102381cdbf7e8b0f1e2cb64c58e0ecda1324543742e0388e41a02200df37905a6505c1b56a404e23b7473d2c0bc5bcda96771d2dda59df6ed2b98f8" +``` + +## References diff --git a/docs/integrate/tooling/00-protobuf.md b/docs/integrate/tooling/00-protobuf.md new file mode 100644 index 000000000..ee1f444fe --- /dev/null +++ b/docs/integrate/tooling/00-protobuf.md @@ -0,0 +1,113 @@ +--- +sidebar_position: 1 +--- + +# Protocol Buffers + +It is known that Cosmos SDK uses protocol buffers extensively, this docuemnt is meant to provide a guide on how it is used in the cosmos-sdk. + +To generate the proto file, the Cosmos SDK uses a docker image, this image is provided to all to use as well. The latest version is `ghcr.io/cosmos/proto-builder:0.12.x` + +Below is the example of the Cosmos SDK's commands for generating, linting, and formatting protobuf files that can be reused in any applications makefile. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/Makefile#L411-L432 +``` + +The script used to generate the protobuf files can be found in the `scripts/` directory. + +```shell reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/protocgen.sh#L1-L37 +``` + +## Buf + +[Buf](https://buf.build) is a protobuf tool that abstracts the needs to use the complicated `protoc` toolchain on top of various other things that ensure you are using protobuf in accordance with the majority of the ecosystem. Within the cosmos-sdk repository there are a few files that have a buf prefix. Lets start with the top level and then dive into the various directories. + +### Workspace + +At the root level directory a workspace is defined using [buf workspaces](https://docs.buf.build/configuration/v1/buf-work-yaml). This helps if there are one or more protobuf containing directories in your project. + +Cosmos SDK example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/buf.work.yaml#L6-L9 +``` + +### Proto Directory + +Next is the `proto/` directory where all of our protobuf files live. In here there are many different buf files defined each serving a different purpose. + +```bash +├── 05-depinject.md +├── buf.gen.gogo.yaml +├── buf.gen.pulsar.yaml +├── buf.gen.swagger.yaml +├── buf.lock +├── buf.md +├── buf.yaml +├── cosmos +└── tendermint +``` + +The above diagram all the files and directories within the Cosmos SDK `proto/` directory. + +#### `buf.gen.gogo.yaml` + +`buf.gen.gogo.yaml` defines how the protobuf files should be generated for use with in the module. This file uses [gogoproto](https://github.com/gogo/protobuf), a separate generator from the google go-proto generator that makes working with various objects more ergonomic, and it has more performant encode and decode steps + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.gen.gogo.yaml#L1-L9 +``` + +:::tip +Example of how to define `gen` files can be found [here](https://docs.buf.build/tour/generate-go-code) +::: + +#### `buf.gen.pulsar.yaml` + +`buf.gen.pulsar.yaml` defines how protobuf files should be generated using the [new golang apiv2 of protobuf](https://go.dev/blog/protobuf-apiv2). This generator is used instead of the google go-proto generator because it has some extra helpers for Cosmos SDK applications and will have more performant encode and decode than the google go-proto generator. You can follow the development of this generator [here](https://github.com/cosmos/cosmos-proto). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.gen.pulsar.yaml#L1-L18 +``` + +:::tip +Example of how to define `gen` files can be found [here](https://docs.buf.build/tour/generate-go-code) +::: + +#### `buf.gen.swagger.yaml` + +`buf.gen.swagger.yaml` generates the swagger documentation for the query and messages of the chain. This will only define the REST API end points that were defined in the query and msg servers. You can find examples of this [here](https://github.com/cosmos/cosmos-sdk/blob/main/proto/cosmos/bank/v1beta1/query.proto#L19) + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.gen.swagger.yaml#L1-L6 +``` + +:::tip +Example of how to define `gen` files can be found [here](https://docs.buf.build/tour/generate-go-code) +::: + +#### `buf.lock` + +This is a autogenerated file based off the dependencies required by the `.gen` files. There is no need to copy the current one. If you depend on cosmos-sdk proto definitions a new entry for the Cosmos SDK will need to be provided. The dependency you will need to use is `buf.build/cosmos/cosmos-sdk`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.lock#L1-L16 +``` + +#### `buf.yaml` + +`buf.yaml` defines the [name of your package](https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.yaml#L3), which [breakage checker](https://docs.buf.build/tour/detect-breaking-changes) to use and how to [lint your protobuf files](https://docs.buf.build/tour/lint-your-api). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.yaml#L1-L24 +``` + +We use a variety of linters for the Cosmos SDK protobuf files. The repo also checks this in ci. + +A reference to the github actions can be found [here](https://github.com/cosmos/cosmos-sdk/blob/main/.github/workflows/proto.yml#L1-L32) + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/.github/workflows/proto.yml#L1-L32 +``` diff --git a/docs/integrate/tooling/01-cosmovisor.md b/docs/integrate/tooling/01-cosmovisor.md new file mode 100644 index 000000000..6f6df095d --- /dev/null +++ b/docs/integrate/tooling/01-cosmovisor.md @@ -0,0 +1,366 @@ +--- +sidebar_position: 1 +--- + +# Cosmovisor + +`cosmovisor` is a small process manager for Cosmos SDK application binaries that monitors the governance module for incoming chain upgrade proposals. If it sees a proposal that gets approved, `cosmovisor` can automatically download the new binary, stop the current binary, switch from the old binary to the new one, and finally restart the node with the new binary. + +* [Design](#design) +* [Contributing](#contributing) +* [Setup](#setup) + * [Installation](#installation) + * [Command Line Arguments And Environment Variables](#command-line-arguments-and-environment-variables) + * [Folder Layout](#folder-layout) +* [Usage](#usage) + * [Initialization](#initialization) + * [Detecting Upgrades](#detecting-upgrades) + * [Auto-Download](#auto-download) +* [Example: SimApp Upgrade](#example-simapp-upgrade) + * [Chain Setup](#chain-setup) + * [Prepare Cosmovisor and Start the Chain](#prepare-cosmovisor-and-start-the-chain) + * [Update App](#update-app) + +## Design + +Cosmovisor is designed to be used as a wrapper for a `Cosmos SDK` app: + +* it will pass arguments to the associated app (configured by `DAEMON_NAME` env variable). + Running `cosmovisor run arg1 arg2 ....` will run `app arg1 arg2 ...`; +* it will manage an app by restarting and upgrading if needed; +* it is configured using environment variables, not positional arguments. + +*Note: If new versions of the application are not set up to run in-place store migrations, migrations will need to be run manually before restarting `cosmovisor` with the new binary. For this reason, we recommend applications adopt in-place store migrations.* + +*Note: If validators would like to enable the auto-download option (which [we don't recommend](#auto-download)), and they are currently running an application using Cosmos SDK `v0.42`, they will need to use Cosmovisor [`v0.1`](https://github.com/cosmos/cosmos-sdk/releases/tag/cosmovisor%2Fv0.1.0). Later versions of Cosmovisor do not support Cosmos SDK `v0.44.3` or earlier if the auto-download option is enabled.* + +## Contributing + +Cosmovisor is part of the Cosmos SDK monorepo, but it's a separate module with it's own release schedule. + +Release branches have the following format `release/cosmovisor/vA.B.x`, where A and B are a number (e.g. `release/cosmovisor/v1.3.x`). Releases are tagged using the following format: `cosmovisor/vA.B.C`. + +## Setup + +### Installation + +You can download Cosmovisor from the [GitHub releases](https://github.com/cosmos/cosmos-sdk/releases/tag/cosmovisor%2Fv1.3.0). + +To install the latest version of `cosmovisor`, run the following command: + +```shell +go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest +``` + +To install a previous version, you can specify the version. IMPORTANT: Chains that use Cosmos SDK v0.44.3 or earlier (eg v0.44.2) and want to use auto-download feature MUST use `cosmovisor v0.1.0` + +```shell +go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@v0.1.0 +``` + +Run `cosmovisor version` to check the cosmovisor version. + +Alternatively, for building from source, simply run `make cosmovisor`. The binary will be located in `tools/cosmovisor`. + +:::warning +Building from source using `make cosmovisor` won't display the correct `cosmovisor` version. +::: + +### Command Line Arguments And Environment Variables + +The first argument passed to `cosmovisor` is the action for `cosmovisor` to take. Options are: + +* `help`, `--help`, or `-h` - Output `cosmovisor` help information and check your `cosmovisor` configuration. +* `run` - Run the configured binary using the rest of the provided arguments. +* `version` - Output the `cosmovisor` version and also run the binary with the `version` argument. + +All arguments passed to `cosmovisor run` will be passed to the application binary (as a subprocess). `cosmovisor` will return `/dev/stdout` and `/dev/stderr` of the subprocess as its own. For this reason, `cosmovisor run` cannot accept any command-line arguments other than those available to the application binary. + +*Note: Use of `cosmovisor` without one of the action arguments is deprecated. For backwards compatibility, if the first argument is not an action argument, `run` is assumed. However, this fallback might be removed in future versions, so it is recommended that you always provide `run`. + +`cosmovisor` reads its configuration from environment variables: + +* `DAEMON_HOME` is the location where the `cosmovisor/` directory is kept that contains the genesis binary, the upgrade binaries, and any additional auxiliary files associated with each binary (e.g. `$HOME/.gaiad`, `$HOME/.regend`, `$HOME/.simd`, etc.). +* `DAEMON_NAME` is the name of the binary itself (e.g. `gaiad`, `regend`, `simd`, etc.). +* `DAEMON_ALLOW_DOWNLOAD_BINARIES` (*optional*), if set to `true`, will enable auto-downloading of new binaries (for security reasons, this is intended for full nodes rather than validators). By default, `cosmovisor` will not auto-download new binaries. +* `DAEMON_RESTART_AFTER_UPGRADE` (*optional*, default = `true`), if `true`, restarts the subprocess with the same command-line arguments and flags (but with the new binary) after a successful upgrade. Otherwise (`false`), `cosmovisor` stops running after an upgrade and requires the system administrator to manually restart it. Note restart is only after the upgrade and does not auto-restart the subprocess after an error occurs. +* `DAEMON_RESTART_DELAY` (*optional*, default none), allow a node operator to define a delay between the node halt (for upgrade) and backup by the specified time. The value must be a duration (e.g. `1s`). +* `DAEMON_POLL_INTERVAL` (*optional*, default 300 milliseconds), is the interval length for polling the upgrade plan file. The value must be a duration (e.g. `1s`). +* `DAEMON_DATA_BACKUP_DIR` option to set a custom backup directory. If not set, `DAEMON_HOME` is used. +* `UNSAFE_SKIP_BACKUP` (defaults to `false`), if set to `true`, upgrades directly without performing a backup. Otherwise (`false`, default) backs up the data before trying the upgrade. The default value of false is useful and recommended in case of failures and when a backup needed to rollback. We recommend using the default backup option `UNSAFE_SKIP_BACKUP=false`. +* `DAEMON_PREUPGRADE_MAX_RETRIES` (defaults to `0`). The maximum number of times to call `pre-upgrade` in the application after exit status of `31`. After the maximum number of retries, Cosmovisor fails the upgrade. +* `COSMOVISOR_DISABLE_LOGS` (defaults to `false`). If set to true, this will disable Cosmovisor logs (but not the underlying process) completely. This may be useful, for example, when a Cosmovisor subcommand you are executing returns a valid JSON you are then parsing, as logs added by Cosmovisor make this output not a valid JSON. + +### Folder Layout + +`$DAEMON_HOME/cosmovisor` is expected to belong completely to `cosmovisor` and the subprocesses that are controlled by it. The folder content is organized as follows: + +```text +. +├── current -> genesis or upgrades/ +├── genesis +│   └── bin +│   └── $DAEMON_NAME +└── upgrades + └── + ├── bin + │   └── $DAEMON_NAME + └── upgrade-info.json +``` + +The `cosmovisor/` directory incudes a subdirectory for each version of the application (i.e. `genesis` or `upgrades/`). Within each subdirectory is the application binary (i.e. `bin/$DAEMON_NAME`) and any additional auxiliary files associated with each binary. `current` is a symbolic link to the currently active directory (i.e. `genesis` or `upgrades/`). The `name` variable in `upgrades/` is the lowercased URI-encoded name of the upgrade as specified in the upgrade module plan. Note that the upgrade name path are normalized to be lowercased: for instance, `MyUpgrade` is normalized to `myupgrade`, and its path is `upgrades/myupgrade`. + +Please note that `$DAEMON_HOME/cosmovisor` only stores the *application binaries*. The `cosmovisor` binary itself can be stored in any typical location (e.g. `/usr/local/bin`). The application will continue to store its data in the default data directory (e.g. `$HOME/.gaiad`) or the data directory specified with the `--home` flag. `$DAEMON_HOME` is independent of the data directory and can be set to any location. If you set `$DAEMON_HOME` to the same directory as the data directory, you will end up with a configuation like the following: + +```text +.gaiad +├── config +├── data +└── cosmovisor +``` + +## Usage + +The system administrator is responsible for: + +* installing the `cosmovisor` binary +* configuring the host's init system (e.g. `systemd`, `launchd`, etc.) +* appropriately setting the environmental variables +* creating the `/cosmovisor` directory +* creating the `/cosmovisor/genesis/bin` folder +* creating the `/cosmovisor/upgrades//bin` folders +* placing the different versions of the `` executable in the appropriate `bin` folders. + +`cosmovisor` will set the `current` link to point to `genesis` at first start (i.e. when no `current` link exists) and then handle switching binaries at the correct points in time so that the system administrator can prepare days in advance and relax at upgrade time. + +In order to support downloadable binaries, a tarball for each upgrade binary will need to be packaged up and made available through a canonical URL. Additionally, a tarball that includes the genesis binary and all available upgrade binaries can be packaged up and made available so that all the necessary binaries required to sync a fullnode from start can be easily downloaded. + +The `DAEMON` specific code and operations (e.g. cometBFT config, the application db, syncing blocks, etc.) all work as expected. The application binaries' directives such as command-line flags and environment variables also work as expected. + +### Initialization + +The `cosmovisor init ` command creates the folder structure required for using cosmovisor. + +It does the following: + +* creates the `/cosmovisor` folder if it doesn't yet exist +* creates the `/cosmovisor/genesis/bin` folder if it doesn't yet exist +* copies the provided executable file to `/cosmovisor/genesis/bin/` +* creates the `current` link, pointing to the `genesis` folder + +It uses the `DAEMON_HOME` and `DAEMON_NAME` environment variables for folder location and executable name. + +The `cosmovisor init` command is specifically for initializing cosmovisor, and should not be confused with a chain's `init` command (e.g. `cosmovisor run init`). + +### Detecting Upgrades + +`cosmovisor` is polling the `$DAEMON_HOME/data/upgrade-info.json` file for new upgrade instructions. The file is created by the x/upgrade module in `BeginBlocker` when an upgrade is detected and the blockchain reaches the upgrade height. +The following heuristic is applied to detect the upgrade: + +* When starting, `cosmovisor` doesn't know much about currently running upgrade, except the binary which is `current/bin/`. It tries to read the `current/update-info.json` file to get information about the current upgrade name. +* If neither `cosmovisor/current/upgrade-info.json` nor `data/upgrade-info.json` exist, then `cosmovisor` will wait for `data/upgrade-info.json` file to trigger an upgrade. +* If `cosmovisor/current/upgrade-info.json` doesn't exist but `data/upgrade-info.json` exists, then `cosmovisor` assumes that whatever is in `data/upgrade-info.json` is a valid upgrade request. In this case `cosmovisor` tries immediately to make an upgrade according to the `name` attribute in `data/upgrade-info.json`. +* Otherwise, `cosmovisor` waits for changes in `upgrade-info.json`. As soon as a new upgrade name is recorded in the file, `cosmovisor` will trigger an upgrade mechanism. + +When the upgrade mechanism is triggered, `cosmovisor` will: + +1. if `DAEMON_ALLOW_DOWNLOAD_BINARIES` is enabled, start by auto-downloading a new binary into `cosmovisor//bin` (where `` is the `upgrade-info.json:name` attribute); +2. update the `current` symbolic link to point to the new directory and save `data/upgrade-info.json` to `cosmovisor/current/upgrade-info.json`. + +### Auto-Download + +Generally, `cosmovisor` requires that the system administrator place all relevant binaries on disk before the upgrade happens. However, for people who don't need such control and want an automated setup (maybe they are syncing a non-validating fullnode and want to do little maintenance), there is another option. + +**NOTE: we don't recommend using auto-download** because it doesn't verify in advance if a binary is available. If there will be any issue with downloading a binary, the cosmovisor will stop and won't restart an App (which could lead to a chain halt). + +If `DAEMON_ALLOW_DOWNLOAD_BINARIES` is set to `true`, and no local binary can be found when an upgrade is triggered, `cosmovisor` will attempt to download and install the binary itself based on the instructions in the `info` attribute in the `data/upgrade-info.json` file. The files is constructed by the x/upgrade module and contains data from the upgrade `Plan` object. The `Plan` has an info field that is expected to have one of the following two valid formats to specify a download: + +1. Store an os/architecture -> binary URI map in the upgrade plan info field as JSON under the `"binaries"` key. For example: + + ```json + { + "binaries": { + "linux/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" + } + } + ``` + + You can include multiple binaries at once to ensure more than one environment will receive the correct binaries: + + ```json + { + "binaries": { + "linux/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f", + "linux/arm64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f", + "darwin/amd64":"https://example.com/gaia.zip?checksum=sha256:aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f" + } + } + ``` + + When submitting this as a proposal ensure there are no spaces. An example command using `gaiad` could look like: + + ```shell + > gaiad tx upgrade software-upgrade Vega \ + --title Vega \ + --deposit 100uatom \ + --upgrade-height 7368420 \ + --upgrade-info '{"binaries":{"linux/amd64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-linux-amd64","linux/arm64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-linux-arm64","darwin/amd64":"https://github.com/cosmos/gaia/releases/download/v6.0.0-rc1/gaiad-v6.0.0-rc1-darwin-amd64"}}' \ + --summary "upgrade to Vega" \ + --gas 400000 \ + --from user \ + --chain-id test \ + --home test/val2 \ + --node tcp://localhost:36657 \ + --yes + ``` + +2. Store a link to a file that contains all information in the above format (e.g. if you want to specify lots of binaries, changelog info, etc. without filling up the blockchain). For example: + + ```text + https://example.com/testnet-1001-info.json?checksum=sha256:deaaa99fda9407c4dbe1d04bd49bab0cc3c1dd76fa392cd55a9425be074af01e + ``` + +When `cosmovisor` is triggered to download the new binary, `cosmovisor` will parse the `"binaries"` field, download the new binary with [go-getter](https://github.com/hashicorp/go-getter), and unpack the new binary in the `upgrades/` folder so that it can be run as if it was installed manually. + +Note that for this mechanism to provide strong security guarantees, all URLs should include a SHA 256/512 checksum. This ensures that no false binary is run, even if someone hacks the server or hijacks the DNS. `go-getter` will always ensure the downloaded file matches the checksum if it is provided. `go-getter` will also handle unpacking archives into directories (in this case the download link should point to a `zip` file of all data in the `bin` directory). + +To properly create a sha256 checksum on linux, you can use the `sha256sum` utility. For example: + +```shell +sha256sum ./testdata/repo/zip_directory/autod.zip +``` + +The result will look something like the following: `29139e1381b8177aec909fab9a75d11381cab5adf7d3af0c05ff1c9c117743a7`. + +You can also use `sha512sum` if you would prefer to use longer hashes, or `md5sum` if you would prefer to use broken hashes. Whichever you choose, make sure to set the hash algorithm properly in the checksum argument to the URL. + +## Example: SimApp Upgrade + +The following instructions provide a demonstration of `cosmovisor` using the simulation application (`simapp`) shipped with the Cosmos SDK's source code. The following commands are to be run from within the `cosmos-sdk` repository. + +### Chain Setup + +Let's create a new chain using the `v0.44` version of simapp (the Cosmos SDK demo app): + +```shell +git checkout v0.44.6 +make build +``` + +Clean `~/.simapp` (never do this in a production environment): + +```shell +./build/simd unsafe-reset-all +``` + +Set up app config: + +```shell +./build/simd config set client chain-id test +./build/simd config set client keyring-backend test +./build/simd config set client broadcast-mode sync +``` + +Initialize the node and overwrite any previous genesis file (never do this in a production environment): + + + +```shell +./build/simd init test --chain-id test --overwrite +``` + +Set the minimum gas price to `0stake` in `~/.simapp/config/app.toml`: + +```shell +minimum-gas-prices = "0stake" +``` + +For the sake of this demonstration, amend `voting_period` in `genesis.json` to a reduced time of 20 seconds (`20s`): + +```shell +cat <<< $(jq '.app_state.gov.voting_params.voting_period = "20s"' $HOME/.simapp/config/genesis.json) > $HOME/.simapp/config/genesis.json +``` + +Create a validator, and setup genesis transaction: + +```shell +./build/simd keys add validator +./build/simd genesis add-genesis-account validator 1000000000stake --keyring-backend test +./build/simd genesis gentx validator 1000000stake --chain-id test +./build/simd genesis collect-gentxs +``` + +#### Prepare Cosmovisor and Start the Chain + +Set the required environment variables: + +```shell +export DAEMON_NAME=simd +export DAEMON_HOME=$HOME/.simapp +``` + +Set the optional environment variable to trigger an automatic app restart: + +```shell +export DAEMON_RESTART_AFTER_UPGRADE=true +``` + +Create the folder for the genesis binary and copy the `simd` binary: + +```shell +mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin +cp ./build/simd $DAEMON_HOME/cosmovisor/genesis/bin +``` + +Now you can run cosmovisor with simapp v0.44: + +```shell +cosmovisor run start +``` + +#### Update App + +Update app to the latest version (e.g. v0.45). + +Next, we can add a migration - which is defined using `x/upgrade` [upgrade plan](https://github.com/cosmos/cosmos-sdk/blob/main/docs/core/upgrade.md) (you may refer to a past version if you are using an older Cosmos SDK release). In a migration we can do any deterministic state change. + +Build the new version `simd` binary: + +```shell +make build +``` + +Create the folder for the upgrade binary and copy the `simd` binary: + +```shell +mkdir -p $DAEMON_HOME/cosmovisor/upgrades/test1/bin +cp ./build/simd $DAEMON_HOME/cosmovisor/upgrades/test1/bin +``` + +Open a new terminal window and submit an upgrade proposal along with a deposit and a vote (these commands must be run within 20 seconds of each other): + +**<= v0.45**: + +```shell +./build/simd tx gov submit-proposal software-upgrade test1 --title upgrade --description upgrade --upgrade-height 200 --from validator --yes +./build/simd tx gov deposit 1 10000000stake --from validator --yes +./build/simd tx gov vote 1 yes --from validator --yes +``` + +**v0.46, v0.47**: + +```shell +./build/simd tx gov submit-legacy-proposal software-upgrade test1 --title upgrade --description upgrade --upgrade-height 200 --from validator --yes +./build/simd tx gov deposit 1 10000000stake --from validator --yes +./build/simd tx gov vote 1 yes --from validator --yes +``` + +**>= v0.48+**: + +```shell +./build/simd tx upgrade software-upgrade test1 --title upgrade --summary upgrade --upgrade-height 200 --from validator --yes +./build/simd tx gov deposit 1 10000000stake --from validator --yes +./build/simd tx gov vote 1 yes --from validator --yes +``` + +The upgrade will occur automatically at height 200. Note: you may need to change the upgrade height in the snippet above if your test play takes more time. diff --git a/docs/integrate/tooling/02-confix.md b/docs/integrate/tooling/02-confix.md new file mode 100644 index 000000000..19c637ba9 --- /dev/null +++ b/docs/integrate/tooling/02-confix.md @@ -0,0 +1,130 @@ +--- +sidebar_position: 1 +--- + +# Confix + +`Confix` is a configuration management tool that allows you to manage your configuration via CLI. + +It is based on the [CometBFT RFC 019](https://github.com/cometbft/cometbft/blob/5013bc3f4a6d64dcc2bf02ccc002ebc9881c62e4/docs/rfc/rfc-019-config-version.md). + +## Installation + +### Add Config Command + +To add the confix tool, it's required to add the `ConfigCommand` to your application's root command file (e.g. `simd/cmd/root.go`). + +Import the `confixCmd` package: + +```go +import "cosmossdk.io/tools/confix/cmd" +``` + +Find the following line: + +```go +initRootCmd(rootCmd, encodingConfig) +``` + +After that line, add the following: + +```go +rootCmd.AddCommand( + confixcmd.ConfigCommand(), +) +``` + +The `ConfixCommand` function builds the `config` root command and is defined in the `confixCmd` package (`cosmossdk.io/tools/confix/cmd`). +An implementation example can be found in `simapp`. + +The command will be available as `simd config`. + +### Using Confix Standalone + +To use Confix standalone, without having to add it in your application, install it with the following command: + +```bash +go install cosmossdk.io/tools/confix/cmd/confix@latest +``` + +:::warning +Currently, due to the replace directive in the Confix go.mod, it is not possible to use `go install`. +Building from source or importing in an application is required until that replace directive is removed. +::: + +Alternatively, for building from source, simply run `make confix`. The binary will be located in `tools/confix`. + +## Usage + +Use standalone: + +```shell +confix --help +``` + +Use in simd: + +```shell +simd config fix --help +``` + +### Get + +Get a configuration value, e.g.: + +```shell +simd config get app pruning # gets the value pruning from app.toml +simd config get client chain-id # gets the value chain-id from client.toml +``` + +```shell +confix get ~/.simapp/config/app.toml pruning # gets the value pruning from app.toml +confix get ~/.simapp/config/client.toml chain-id # gets the value chain-id from client.toml +``` + +### Set + +Set a configuration value, e.g.: + +```shell +simd config set app pruning "enabled" # sets the value pruning from app.toml +simd config set client chain-id "foo-1" # sets the value chain-id from client.toml +``` + +```shell +confix set ~/.simapp/config/app.toml pruning "enabled" # sets the value pruning from app.toml +confix set ~/.simapp/config/client.toml chain-id "foo-1" # sets the value chain-id from client.toml +``` + +### Migrate + +Migrate a configuration file to a new version, e.g.: + +```shell +simd config migrate v0.47 # migrates defaultHome/config/app.toml to the latest v0.47 config +``` + +```shell +confix migrate v0.47 ~/.simapp/config/app.toml # migrate ~/.simapp/config/app.toml to the latest v0.47 config +``` + +### Diff + +Get the diff between a given configuration file and the default configuration file, e.g.: + +```shell +simd config diff v0.47 # gets the diff between defaultHome/config/app.toml and the latest v0.47 config +``` + +```shell +confix diff v0.47 ~/.simapp/config/app.toml # gets the diff between ~/.simapp/config/app.toml and the latest v0.47 config +``` + +### Maintainer + +At each SDK modification of the default configuration, add the default SDK config under `data/v0.XX-app.toml`. +This allows users to use the tool standalone. + +## Credits + +This project is based on the [CometBFT RFC 019](https://github.com/cometbft/cometbft/blob/5013bc3f4a6d64dcc2bf02ccc002ebc9881c62e4/docs/rfc/rfc-019-config-version.md) and their own implementation of [confix](https://github.com/cometbft/cometbft/blob/v0.36.x/scripts/confix/confix.go). diff --git a/docs/integrate/tooling/03-autocli.md b/docs/integrate/tooling/03-autocli.md new file mode 100644 index 000000000..e0804979a --- /dev/null +++ b/docs/integrate/tooling/03-autocli.md @@ -0,0 +1,157 @@ +--- +sidebar_position: 1 +--- + + +# AutoCLI + +:::note Synopsis +This document details how to build CLI and REST interfaces for a module. Examples from various Cosmos SDK modules are included. +::: + +:::note + +## Pre-requisite Readings + +* [Building Modules Intro](../building-modules/01-intro.md) + +::: + +The `autocli` package is a [Go library](https://pkg.go.dev/cosmossdk.io/client/v2/autocli) for generating CLI (command line interface) interfaces for Cosmos SDK-based applications. It provides a simple way to add CLI commands to your application by generating them automatically based on your gRPC service definitions. Autocli generates CLI commands and flags directly from your protobuf messages, including options, input parameters, and output parameters. This means that you can easily add a CLI interface to your application without having to manually create and manage commands. + +## Getting Started + +Here are the steps to use the `autocli` package: + +1. Define your app's modules that implement the `appmodule.AppModule` interface. +2. Configure how behave `autocli` command generation, by implementing the `func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions` method on the module. Learn more [here](#advanced-usage). +3. Use the `autocli.AppOptions` struct to specifies the modules you defined. If you are using the `depinject` package to manage your app's dependencies, it can automatically create an instance of `autocli.AppOptions` based on your app's configuration. +4. Use the `EnhanceRootCommand()` method provided by `autocli` to add the CLI commands for the specified modules to your root command and can also be found in the `client/v2/autocli/app.go` file. Additionally, this method adds the `autocli` functionality to your app's root command. This method is additive only, meaning that it does not create commands if they are already registered for a module. Instead, it adds any missing commands to the root command. + +Here's an example of how to use `autocli`: + +``` go +// Define your app's modules +testModules := map[string]appmodule.AppModule{ + "testModule": &TestModule{}, +} + +// Define the autocli AppOptions +autoCliOpts := autocli.AppOptions{ + Modules: testModules, +} + +// Get the root command +rootCmd := &cobra.Command{ + Use: "app", +} + +// Enhance the root command with autocli +autocli.EnhanceRootCommand(rootCmd, autoCliOpts) + +// Run the root command +if err := rootCmd.Execute(); err != nil { + fmt.Println(err) +} +``` + +## Flags + +`autocli` generates flags for each field in a protobuf message. By default, the names of the flags are generated based on the names of the fields in the message. You can customise the flag names using the `namingOptions` parameter of the `Builder.AddMessageFlags()` method. + +To define flags for a message, you can use the `Builder.AddMessageFlags()` method. This method takes the `cobra.Command` instance and the message type as input, and generates flags for each field in the message. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/1ac260cb1c6f05666f47e67f8b2cfd6229a55c3b/client/v2/autocli/common.go#L44-L49 +``` + +The `binder` variable returned by the `AddMessageFlags()` method is used to bind the command-line arguments to the fields in the message. + +You can also customise the behavior of the flags using the `namingOptions` parameter of the `Builder.AddMessageFlags()` method. This parameter allows you to specify a custom prefix for the flags, and to specify whether to generate flags for repeated fields and whether to generate flags for fields with default values. + +## Commands and Queries + +The `autocli` package generates CLI commands and flags for each method defined in your gRPC service. By default, it generates commands for each RPC method that does not return a stream of messages. The commands are named based on the name of the service method. + +For example, given the following protobuf definition for a service: + +```protobuf +service MyService { + rpc MyMethod(MyRequest) returns (MyResponse) {} +} +``` + +`autocli` will generate a command named `my-method` for the `MyMethod` method. The command will have flags for each field in the `MyRequest` message. + +If you want to customise the behavior of a command, you can define a custom command by implementing the `autocli.Command` interface. You can then register the command with the `autocli.Builder` instance for your application. + +Similarly, you can define a custom query by implementing the `autocli.Query` interface. You can then register the query with the `autocli.Builder` instance for your application. + +To add a custom command or query, you can use the `Builder.AddCustomCommand` or `Builder.AddCustomQuery` methods, respectively. These methods take a `cobra.Command` or `cobra.Command` instance, respectively, which can be used to define the behavior of the command or query. + +## Advanced Usage + +### Specifying Subcommands + +By default, `autocli` generates a command for each method in your gRPC service. However, you can specify subcommands to group related commands together. To specify subcommands, you can use the `autocliv1.ServiceCommandDescriptor` struct. + +This example shows how to use the `autocliv1.ServiceCommandDescriptor` struct to group related commands together and specify subcommands in your gRPC service by defining an instance of `autocliv1.ModuleOptions` in your `autocli.go` file. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/bcdf81cbaf8d70c4e4fa763f51292d54aed689fd/x/gov/autocli.go#L9-L27 +``` + +The `AutoCLIOptions()` method in the autocli package allows you to specify the services and sub-commands to be mapped for your app. In the example code, an instance of the `autocliv1.ModuleOptions` struct is defined in the `appmodule.AppModule` implementation located in the `x/gov/autocli.go` file. This configuration groups related commands together and specifies subcommands for each service. + +### Positional Arguments + +Positional arguments are arguments that are passed to a command without being specified as a flag. They are typically used for providing additional context to a command, such as a filename or search query. + +To add positional arguments to a command, you can use the `autocliv1.PositionalArgDescriptor` struct, as seen in the example below. You need to specify the `ProtoField` parameter, which is the name of the protobuf field that should be used as the positional argument. In addition, if the parameter is a variable-length argument, you can specify the `Varargs` parameter as `true`. This can only be applied to the last positional parameter, and the `ProtoField` must be a repeated field. + +Here's an example of how to define a positional argument for the `Account` method of the `auth` service: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/bcdf81cbaf8d70c4e4fa763f51292d54aed689fd/x/auth/autocli.go#L8-L32 +``` + +Here are some example commands that use the positional arguments we defined above: + +To query an account by address: + +```bash + query auth account cosmos1abcd...xyz +``` + +To query an account address by account number: + +```bash + query auth address-by-acc-num 1 +``` + +In both of these commands, the `auth` service is being queried with the `query` subcommand, followed by the specific method being called (`account` or `address-by-acc-num`). The positional argument is included at the end of the command (`cosmos1abcd...xyz` or `1`) to specify the address or account number, respectively. + +### Customising Flag Names + +By default, `autocli` generates flag names based on the names of the fields in your protobuf message. However, you can customise the flag names by providing a `FlagOptions` parameter to the `Builder.AddMessageFlags()` method. This parameter allows you to specify custom names for flags based on the names of the message fields. For example, if you have a message with the fields `test` and `test1`, you can use the following naming options to customise the flags + +``` go +options := autocliv1.RpcCommandOptions{ + FlagOptions: map[string]*autocliv1.FlagOptions{ + "test": { Name: "custom_name", }, + "test1": { Name: "other_name", }, + }, +} + +builder.AddMessageFlags(message, options) +``` + +Note that `autocliv1.RpcCommandOptions` is a field of the `autocliv1.ServiceCommandDescriptor` struct, which is defined in the `autocliv1` package. To use this option, you can define an instance of `autocliv1.ModuleOptions` in your `appmodule.AppModule` implementation and specify the `FlagOptions` for the relevant service command descriptor. + +## Conclusion + +`autocli` is a powerful tool for adding CLI interfaces to your Cosmos SDK-based applications. It allows you to easily generate CLI commands and flags from your protobuf messages, and provides many options for customising the behavior of your CLI application. + +To further enhance your CLI experience with Cosmos SDK-based blockchains, you can use `Hubl`. `Hubl` is a tool that allows you to query any Cosmos SDK-based blockchain using the new AutoCLI feature of the Cosmos SDK. With hubl, you can easily configure a new chain and query modules with just a few simple commands. + +For more information on `Hubl`, including how to configure a new chain and query a module, see the [Hubl documentation](https://docs.cosmos.network/main/tooling/hubl). diff --git a/docs/integrate/tooling/04-hubl.md b/docs/integrate/tooling/04-hubl.md new file mode 100644 index 000000000..97d02921d --- /dev/null +++ b/docs/integrate/tooling/04-hubl.md @@ -0,0 +1,73 @@ +--- +sidebar_position: 1 +--- + +# Hubl + +`Hubl` is a tool that allows you to query any Cosmos SDK based blockchain. +It takes advantage of the new [AutoCLI](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/client/v2@v2.0.0-20220916140313-c5245716b516/cli) feature of the Cosmos SDK. + +## Installation + +Hubl can be installed using `go install`: + +```shell +go install cosmossdk.io/tools/hubl/cmd/hubl@latest +``` + +Or build from source: + +```shell +git clone --depth=1 https://github.com/cosmos/cosmos-sdk +make hubl +``` + +The binary will be located in `tools/hubl`. + +## Usage + +```shell +hubl --help +``` + +### Add chain + +To configure a new chain just run this command using the --init flag and the name of the chain as it's listed in the chain registry (). + +If the chain is not listed in the chain registry, you can use any unique name. + +```shell +hubl init [chain-name] +hubl init regen +``` + +The chain configuration is stored in `~/.hubl/config.toml`. + +:::tip + +When using an unsecure gRPC endpoint, change the `insecure` field to `true` in the config file. + +```toml +[chains] +[chains.regen] +[[chains.regen.trusted-grpc-endpoints]] +endpoint = 'localhost:9090' +insecure = true +``` + +Or use the `--insecure` flag: + +```shell +hubl init regen --insecure +``` + +::: + +### Query + +To query a chain, you can use the `query` command. +Then specify which module you want to query and the query itself. + +```shell +hubl regen query auth module-accounts +``` diff --git a/docs/integrate/tooling/05-depinject.md b/docs/integrate/tooling/05-depinject.md new file mode 100644 index 000000000..17eb62872 --- /dev/null +++ b/docs/integrate/tooling/05-depinject.md @@ -0,0 +1,169 @@ +--- +sidebar_position: 1 +--- + +# Depinject + +> **DISCLAIMER**: This is a **beta** package. The SDK team is actively working on this feature and we are looking for feedback from the community. Please try it out and let us know what you think. + +## Overview + +`depinject` is a dependency injection framework for the Cosmos SDK. This module together with `core/appconfig` are meant to simplify the definition of a blockchain by replacing most of `app.go`'s boilerplate code with a configuration file (Go, YAML or JSON). + +* [Go Doc](https://pkg.go.dev/cosmossdk.io/depinject) + +## Usage + +`depinject` includes an expressive and composable [Configuration API](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/depinject#Config). +A core configuration function is `Provide`. The example below demonstrates the registration of free **provider functions** via the `Provide` API. + + +```go +package main + +import ( + "fmt" + + "cosmossdk.io/depinject" +) + +type AnotherInt int + +func main() { + var ( + x int + y AnotherInt + ) + + fmt.Printf("Before (%v, %v)\n", x, y) + depinject.Inject( + depinject.Provide( + func() int { return 1 }, + func() AnotherInt { return AnotherInt(2) }, + ), + &x, + &y, + ) + fmt.Printf("After (%v, %v)\n", x, y) +} +``` + +Provider functions form the basis of the dependency tree, they are introspected then their inputs identified as dependencies and outputs as dependants, either for another provider function or state stored outside the DI container, as is the case of `&x` and `&y` above. + +### Interface type resolution + +`depinject` supports interface types as inputs to provider functions. In the SDK's case this pattern is used to decouple +`Keeper` dependencies between modules. For example `x/bank` expects an [AccountKeeper](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/x/bank/types#AccountKeeper) interface as [input to ProvideModule](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/module.go#L208-L260). + +Concretely `SimApp` uses the implementation in `x/auth`, but this design allows for this loose coupling to change. + +Given the following types: + +```go +package duck + +type Duck interface { + quack() +} + +type AlsoDuck interface { + quack() +} + +type Mallard struct{} +type Canvasback struct{} + +func (duck Mallard) quack() {} +func (duck Canvasback) quack() {} + +type Pond struct { + Duck AlsoDuck +} +``` + +This usage + +```go +var pond Pond + +depinject.Inject( + depinject.Provide( + func() Mallard { return Mallard{} }, + func(duck Duck) Pond { + return Pond{Duck: duck} + }), + &pond) +``` + +results in an *implicit* binding of `Duck` to `Mallard`. This works because there is only one implementation of `Duck` in the container. +However, adding a second provider of `Duck` will result in an error: + +```go +var pond Pond + +depinject.Inject( + depinject.Provide( + func() Mallard { return Mallard{} }, + func() Canvasback { return Canvasback{} }, + func(duck Duck) Pond { + return Pond{Duck: duck} + }), + &pond) +``` + +A specific binding preference for `Duck` is required. + +#### `BindInterface` API + +In the above situation registering a binding for a given interface binding may look like + +```go +depinject.Inject( + depinject.Configs( + depinject.BindInterface( + "duck.Duck", + "duck.Mallard"), + depinject.Provide( + func() Mallard { return Mallard{} }, + func() Canvasback { return Canvasback{} }, + func(duck Duck) APond { + return Pond{Duck: duck} + })), + &pond) +``` + +Now `depinject` has enough information to provide `Mallard` as an input to `APond`. + +### Full example in real app + +:::warning +When using `depinject.Inject`, the injected types must be pointers. +::: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L219-L244 +``` + +## Debugging + +Issues with resolving dependencies in the container can be done with logs and [Graphviz](https://graphviz.org) renderings of the container tree. +By default, whenever there is an error, logs will be printed to stderr and a rendering of the dependency graph in Graphviz DOT format will be saved to `debug_container.dot`. + +Here is an example Graphviz rendering of a successful build of a dependency graph: +![Graphviz Example](https://raw.githubusercontent.com/cosmos/cosmos-sdk/ff39d243d421442b400befcd959ec3ccd2525154/depinject/testdata/example.svg) + +Rectangles represent functions, ovals represent types, rounded rectangles represent modules and the single hexagon +represents the function which called `Build`. Black-colored shapes mark functions and types that were called/resolved +without an error. Gray-colored nodes mark functions and types that could have been called/resolved in the container but +were left unused. + +Here is an example Graphviz rendering of a dependency graph build which failed: +![Graphviz Error Example](https://raw.githubusercontent.com/cosmos/cosmos-sdk/ff39d243d421442b400befcd959ec3ccd2525154/depinject/testdata/example_error.svg) + +Graphviz DOT files can be converted into SVG's for viewing in a web browser using the `dot` command-line tool, ex: + +```txt +dot -Tsvg debug_container.dot > debug_container.svg +``` + +Many other tools including some IDEs support working with DOT files. diff --git a/docs/integrate/tooling/_category_.json b/docs/integrate/tooling/_category_.json new file mode 100644 index 000000000..a01a4fcc4 --- /dev/null +++ b/docs/integrate/tooling/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Tooling", + "position": 10, + "link": null +} \ No newline at end of file diff --git a/docs/user/run-node/00-keyring.md b/docs/user/run-node/00-keyring.md new file mode 100644 index 000000000..6bf2beed1 --- /dev/null +++ b/docs/user/run-node/00-keyring.md @@ -0,0 +1,134 @@ +--- +sidebar_position: 1 +--- + +# Setting up the keyring + +:::note Synopsis +This document describes how to configure and use the keyring and its various backends for an [**application**](../../develop/high-level-concepts/00-overview-app.md). +::: + +The keyring holds the private/public keypairs used to interact with a node. For instance, a validator key needs to be set up before running the blockchain node, so that blocks can be correctly signed. The private key can be stored in different locations, called "backends", such as a file or the operating system's own key storage. + +## Available backends for the keyring + +Starting with the v0.38.0 release, Cosmos SDK comes with a new keyring implementation +that provides a set of commands to manage cryptographic keys in a secure fashion. The +new keyring supports multiple storage backends, some of which may not be available on +all operating systems. + +### The `os` backend + +The `os` backend relies on operating system-specific defaults to handle key storage +securely. Typically, an operating system's credential sub-system handles password prompts, +private keys storage, and user sessions according to the user's password policies. Here +is a list of the most popular operating systems and their respective passwords manager: + +* macOS: [Keychain](https://support.apple.com/en-gb/guide/keychain-access/welcome/mac) +* Windows: [Credentials Management API](https://docs.microsoft.com/en-us/windows/win32/secauthn/credentials-management) +* GNU/Linux: + * [libsecret](https://gitlab.gnome.org/GNOME/libsecret) + * [kwallet](https://api.kde.org/frameworks/kwallet/html/index.html) + +GNU/Linux distributions that use GNOME as default desktop environment typically come with +[Seahorse](https://wiki.gnome.org/Apps/Seahorse). Users of KDE based distributions are +commonly provided with [KDE Wallet Manager](https://userbase.kde.org/KDE_Wallet_Manager). +Whilst the former is in fact a `libsecret` convenient frontend, the latter is a `kwallet` +client. + +`os` is the default option since operating system's default credentials managers are +designed to meet users' most common needs and provide them with a comfortable +experience without compromising on security. + +The recommended backends for headless environments are `file` and `pass`. + +### The `file` backend + +The `file` backend more closely resembles the keybase implementation used prior to +v0.38.1. It stores the keyring encrypted within the app's configuration directory. This +keyring will request a password each time it is accessed, which may occur multiple +times in a single command resulting in repeated password prompts. If using bash scripts +to execute commands using the `file` option you may want to utilize the following format +for multiple prompts: + +```shell +# assuming that KEYPASSWD is set in the environment +$ gaiacli config keyring-backend file # use file backend +$ (echo $KEYPASSWD; echo $KEYPASSWD) | gaiacli keys add me # multiple prompts +$ echo $KEYPASSWD | gaiacli keys show me # single prompt +``` + +:::tip +The first time you add a key to an empty keyring, you will be prompted to type the password twice. +::: + +### The `pass` backend + +The `pass` backend uses the [pass](https://www.passwordstore.org/) utility to manage on-disk +encryption of keys' sensitive data and metadata. Keys are stored inside `gpg` encrypted files +within app-specific directories. `pass` is available for the most popular UNIX +operating systems as well as GNU/Linux distributions. Please refer to its manual page for +information on how to download and install it. + +:::tip +**pass** uses [GnuPG](https://gnupg.org/) for encryption. `gpg` automatically invokes the `gpg-agent` +daemon upon execution, which handles the caching of GnuPG credentials. Please refer to `gpg-agent` +man page for more information on how to configure cache parameters such as credentials TTL and +passphrase expiration. +::: + +The password store must be set up prior to first use: + +```shell +pass init +``` + +Replace `` with your GPG key ID. You can use your personal GPG key or an alternative +one you may want to use specifically to encrypt the password store. + +### The `kwallet` backend + +The `kwallet` backend uses `KDE Wallet Manager`, which comes installed by default on the +GNU/Linux distributions that ships KDE as default desktop environment. Please refer to +[KWallet Handbook](https://docs.kde.org/stable5/en/kdeutils/kwallet5/index.html) for more +information. + +### The `test` backend + +The `test` backend is a password-less variation of the `file` backend. Keys are stored +unencrypted on disk. + +**Provided for testing purposes only. The `test` backend is not recommended for use in production environments**. + +### The `memory` backend + +The `memory` backend stores keys in memory. The keys are immediately deleted after the program has exited. + +**Provided for testing purposes only. The `memory` backend is not recommended for use in production environments**. + +### Setting backend using the env variable + +You can set the keyring-backend using env variable: `BINNAME_KEYRING_BACKEND`. For example, if you binary name is `gaia-v5` then set: `export GAIA_V5_KEYRING_BACKEND=pass` + +## Adding keys to the keyring + +:::warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Applications developed using the Cosmos SDK come with the `keys` subcommand. For the purpose of this tutorial, we're running the `simd` CLI, which is an application built using the Cosmos SDK for testing and educational purposes. For more information, see [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp). + +You can use `simd keys` for help about the keys command and `simd keys [command] --help` for more information about a particular subcommand. + +To create a new key in the keyring, run the `add` subcommand with a `` argument. For the purpose of this tutorial, we will solely use the `test` backend, and call our new key `my_validator`. This key will be used in the next section. + +```bash +$ simd keys add my_validator --keyring-backend test + +# Put the generated address in a variable for later use. +MY_VALIDATOR_ADDRESS=$(simd keys show my_validator -a --keyring-backend test) +``` + +This command generates a new 24-word mnemonic phrase, persists it to the relevant backend, and outputs information about the keypair. If this keypair will be used to hold value-bearing tokens, be sure to write down the mnemonic phrase somewhere safe! + +By default, the keyring generates a `secp256k1` keypair. The keyring also supports `ed25519` keys, which may be created by passing the `--algo ed25519` flag. A keyring can of course hold both types of keys simultaneously, and the Cosmos SDK's `x/auth` module supports natively these two public key algorithms. diff --git a/docs/user/run-node/01-run-node.md b/docs/user/run-node/01-run-node.md new file mode 100644 index 000000000..289ce28b6 --- /dev/null +++ b/docs/user/run-node/01-run-node.md @@ -0,0 +1,151 @@ +--- +sidebar_position: 1 +--- + +# Running a Node + +:::note Synopsis +Now that the application is ready and the keyring populated, it's time to see how to run the blockchain node. In this section, the application we are running is called [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp), and its corresponding CLI binary `simd`. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](../../develop/high-level-concepts/00-overview-app.md) +* [Setting up the keyring](00-keyring.md) + +::: + +## Initialize the Chain + +:::warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Before actually running the node, we need to initialize the chain, and most importantly its genesis file. This is done with the `init` subcommand: + +```bash +# The argument is the custom username of your node, it should be human-readable. +simd init --chain-id my-test-chain +``` + +The command above creates all the configuration files needed for your node to run, as well as a default genesis file, which defines the initial state of the network. All these configuration files are in `~/.simapp` by default, but you can overwrite the location of this folder by passing the `--home` flag. + +The `~/.simapp` folder has the following structure: + +```bash +. # ~/.simapp + |- data # Contains the databases used by the node. + |- config/ + |- app.toml # Application-related configuration file. + |- config.toml # CometBFT-related configuration file. + |- genesis.json # The genesis file. + |- node_key.json # Private key to use for node authentication in the p2p protocol. + |- priv_validator_key.json # Private key to use as a validator in the consensus protocol. +``` + +## Updating Some Default Settings + +If you want to change any field values in configuration files (for ex: genesis.json) you can use `jq` ([installation](https://stedolan.github.io/jq/download/) & [docs](https://stedolan.github.io/jq/manual/#Assignment)) & `sed` commands to do that. Few examples are listed here. + +```bash +# to change the chain-id +jq '.chain_id = "testing"' genesis.json > temp.json && mv temp.json genesis.json + +# to enable the api server +sed -i '/\[api\]/,+3 s/enable = false/enable = true/' app.toml + +# to change the voting_period +jq '.app_state.gov.voting_params.voting_period = "600s"' genesis.json > temp.json && mv temp.json genesis.json + +# to change the inflation +jq '.app_state.mint.minter.inflation = "0.300000000000000000"' genesis.json > temp.json && mv temp.json genesis.json +``` + +### Client Interaction + +When instantiating a node, GRPC and REST are defaulted to localhost to avoid unknown exposure of your node to the public. It is recommended to not expose these endpoints without a proxy that can handle load balancing or authentication is setup between your node and the public. + +:::tip +A commonly used tool for this is [nginx](https://nginx.org). +::: + + +## Adding Genesis Accounts + +Before starting the chain, you need to populate the state with at least one account. To do so, first [create a new account in the keyring](00-keyring.md#adding-keys-to-the-keyring) named `my_validator` under the `test` keyring backend (feel free to choose another name and another backend). + +Now that you have created a local account, go ahead and grant it some `stake` tokens in your chain's genesis file. Doing so will also make sure your chain is aware of this account's existence: + +```bash +simd genesis add-genesis-account $MY_VALIDATOR_ADDRESS 100000000000stake +``` + +Recall that `$MY_VALIDATOR_ADDRESS` is a variable that holds the address of the `my_validator` key in the [keyring](00-keyring.md#adding-keys-to-the-keyring). Also note that the tokens in the Cosmos SDK have the `{amount}{denom}` format: `amount` is is a 18-digit-precision decimal number, and `denom` is the unique token identifier with its denomination key (e.g. `atom` or `uatom`). Here, we are granting `stake` tokens, as `stake` is the token identifier used for staking in [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp). For your own chain with its own staking denom, that token identifier should be used instead. + +Now that your account has some tokens, you need to add a validator to your chain. Validators are special full-nodes that participate in the consensus process (implemented in the [underlying consensus engine](../../develop/intro/02-sdk-app-architecture.md#cometbft)) in order to add new blocks to the chain. Any account can declare its intention to become a validator operator, but only those with sufficient delegation get to enter the active set (for example, only the top 125 validator candidates with the most delegation get to be validators in the Cosmos Hub). For this guide, you will add your local node (created via the `init` command above) as a validator of your chain. Validators can be declared before a chain is first started via a special transaction included in the genesis file called a `gentx`: + +```bash +# Create a gentx. +simd genesis gentx my_validator 100000000stake --chain-id my-test-chain --keyring-backend test + +# Add the gentx to the genesis file. +simd genesis collect-gentxs +``` + +A `gentx` does three things: + +1. Registers the `validator` account you created as a validator operator account (i.e. the account that controls the validator). +2. Self-delegates the provided `amount` of staking tokens. +3. Link the operator account with a CometBFT node pubkey that will be used for signing blocks. If no `--pubkey` flag is provided, it defaults to the local node pubkey created via the `simd init` command above. + +For more information on `gentx`, use the following command: + +```bash +simd genesis gentx --help +``` + +## Configuring the Node Using `app.toml` and `config.toml` + +The Cosmos SDK automatically generates two configuration files inside `~/.simapp/config`: + +* `config.toml`: used to configure the CometBFT, learn more on [CometBFT's documentation](https://docs.cometbft.com/v0.37/core/configuration), +* `app.toml`: generated by the Cosmos SDK, and used to configure your app, such as state pruning strategies, telemetry, gRPC and REST servers configuration, state sync... + +Both files are heavily commented, please refer to them directly to tweak your node. + +One example config to tweak is the `minimum-gas-prices` field inside `app.toml`, which defines the minimum gas prices the validator node is willing to accept for processing a transaction. Depending on the chain, it might be an empty string or not. If it's empty, make sure to edit the field with some value, for example `10token`, or else the node will halt on startup. For the purpose of this tutorial, let's set the minimum gas price to 0: + +```toml + # The minimum gas prices a validator is willing to accept for processing a + # transaction. A transaction's fees must meet the minimum of any denomination + # specified in this config (e.g. 0.25token1;0.0001token2). + minimum-gas-prices = "0stake" +``` + +## Run a Localnet + +Now that everything is set up, you can finally start your node: + +```bash +simd start +``` + +You should see blocks come in. + +The previous command allow you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time, and see how consensus happens between them. + +The naive way would be to run the same commands again in separate terminal windows. This is possible, however in the Cosmos SDK, we leverage the power of [Docker Compose](https://docs.docker.com/compose/) to run a localnet. If you need inspiration on how to set up your own localnet with Docker Compose, you can have a look at the Cosmos SDK's [`docker-compose.yml`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/docker-compose.yml). + +## Logging + +Logging provides a way to see what is going on with a node. By default the info level is set. This is a global level and all info logs will be outputted to the terminal. If you would like to filter specific logs to the terminal instead of all, then setting `module:log_level` is how this can work. + +Example: + +In config.toml: + +```toml +log_level: "state:info,p2p:info,consensus:info,x/staking:info,x/ibc:info,*error" +``` diff --git a/docs/user/run-node/02-interact-node.md b/docs/user/run-node/02-interact-node.md new file mode 100644 index 000000000..8215becff --- /dev/null +++ b/docs/user/run-node/02-interact-node.md @@ -0,0 +1,291 @@ +--- +sidebar_position: 1 +--- + +# Interacting with the Node + +:::note Synopsis +There are multiple ways to interact with a node: using the CLI, using gRPC or using the REST endpoints. +::: + +:::note + +### Pre-requisite Readings + +* [gRPC, REST and CometBFT Endpoints](../../develop/advanced-concepts/09-grpc_rest.md) +* [Running a Node](01-run-node.md) + +::: + +## Using the CLI + +Now that your chain is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command: + +```bash +simd query bank balances $MY_VALIDATOR_ADDRESS +``` + +You should see the current balance of the account you created, equal to the original balance of `stake` you granted it minus the amount you delegated via the `gentx`. Now, create a second account: + +```bash +simd keys add recipient --keyring-backend test + +# Put the generated address in a variable for later use. +RECIPIENT=$(simd keys show recipient -a --keyring-backend test) +``` + +The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000000stake --chain-id my-test-chain --keyring-backend test + +# Check that the recipient account did receive the tokens. +simd query bank balances $RECIPIENT +``` + +Finally, delegate some of the stake tokens sent to the `recipient` account to the validator: + +```bash +simd tx staking delegate $(simd keys show my_validator --bech val -a --keyring-backend test) 500stake --from recipient --chain-id my-test-chain --keyring-backend test + +# Query the total delegations to `validator`. +simd query staking delegations-to $(simd keys show my_validator --bech val -a --keyring-backend test) +``` + +You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account. + +## Using gRPC + +The Protobuf ecosystem developed tools for different use cases, including code-generation from `*.proto` files into various languages. These tools allow the building of clients easily. Often, the client connection (i.e. the transport) can be plugged and replaced very easily. Let's explore one of the most popular transport: [gRPC](../../develop/advanced-concepts/09-grpc_rest.md). + +Since the code generation library largely depends on your own tech stack, we will only present three alternatives: + +* `grpcurl` for generic debugging and testing, +* programmatically via Go, +* CosmJS for JavaScript/TypeScript developers. + +### grpcurl + +[grpcurl](https://github.com/fullstorydev/grpcurl) is like `curl` but for gRPC. It is also available as a Go library, but we will use it only as a CLI command for debugging and testing purposes. Follow the instructions in the previous link to install it. + +Assuming you have a local node running (either a localnet, or connected a live network), you should be able to run the following command to list the Protobuf services available (you can replace `localhost:9000` by the gRPC server endpoint of another node, which is configured under the `grpc.address` field inside [`app.toml`](01-run-node.md#configuring-the-node-using-apptoml-and-configtoml)): + +```bash +grpcurl -plaintext localhost:9090 list +``` + +You should see a list of gRPC services, like `cosmos.bank.v1beta1.Query`. This is called reflection, which is a Protobuf endpoint returning a description of all available endpoints. Each of these represents a different Protobuf service, and each service exposes multiple RPC methods you can query against. + +In order to get a description of the service you can run the following command: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + describe cosmos.bank.v1beta1.Query # Service we want to inspect +``` + +It's also possible to execute an RPC call to query the node for information: + +```bash +grpcurl \ + -plaintext \ + -d "{\"address\":\"$MY_VALIDATOR_ADDRESS\"}" \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using grpcurl + +You may also query for historical data by passing some [gRPC metadata](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) to the query: the `x-cosmos-block-height` metadata should contain the block to query. Using grpcurl as above, the command looks like: + +```bash +grpcurl \ + -plaintext \ + -H "x-cosmos-block-height: 123" \ + -d "{\"address\":\"$MY_VALIDATOR_ADDRESS\"}" \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Programmatically via Go + +The following snippet shows how to query the state using gRPC inside a Go program. The idea is to create a gRPC connection, and use the Protobuf-generated client code to query the gRPC server. + +#### Install Cosmos SDK + + +```bash +go get github.com/cosmos/cosmos-sdk@main +``` + +```go +package main + +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func queryState() error { + myAddress, err := sdk.AccAddressFromBech32("cosmos1...") // the my_validator or recipient address. + if err != nil { + return err + } + + // Create a connection to the gRPC server. + grpcConn, err := grpc.Dial( + "127.0.0.1:9090", // your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + // This instantiates a general gRPC codec which handles proto bytes. We pass in a nil interface registry + // if the request/response types contain interface instead of 'nil' you should pass the application specific codec. + grpc.WithDefaultCallOptions(grpc.ForceCodec(codec.NewProtoCodec(nil).GRPCCodec())), + ) + if err != nil { + return err + } + defer grpcConn.Close() + + // This creates a gRPC client to query the x/bank service. + bankClient := banktypes.NewQueryClient(grpcConn) + bankRes, err := bankClient.Balance( + context.Background(), + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "stake"}, + ) + if err != nil { + return err + } + + fmt.Println(bankRes.GetBalance()) // Prints the account balance + + return nil +} + +func main() { + if err := queryState(); err != nil { + panic(err) + } +} +``` + +You can replace the query client (here we are using `x/bank`'s) with one generated from any other Protobuf service. The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using Go + +Querying for historical blocks is done by adding the block height metadata in the gRPC request. + +```go +package main + +import ( + "context" + "fmt" + + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func queryState() error { + myAddress, err := sdk.AccAddressFromBech32("cosmos1yerherx4d43gj5wa3zl5vflj9d4pln42n7kuzu") // the my_validator or recipient address. + if err != nil { + return err + } + + // Create a connection to the gRPC server. + grpcConn, err := grpc.Dial( + "127.0.0.1:9090", // your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + // This instantiates a general gRPC codec which handles proto bytes. We pass in a nil interface registry + // if the request/response types contain interface instead of 'nil' you should pass the application specific codec. + grpc.WithDefaultCallOptions(grpc.ForceCodec(codec.NewProtoCodec(nil).GRPCCodec())), + ) + if err != nil { + return err + } + defer grpcConn.Close() + + // This creates a gRPC client to query the x/bank service. + bankClient := banktypes.NewQueryClient(grpcConn) + + var header metadata.MD + _, err = bankClient.Balance( + metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // Add metadata to request + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "stake"}, + grpc.Header(&header), // Retrieve header from response + ) + if err != nil { + return err + } + blockHeight := header.Get(grpctypes.GRPCBlockHeightHeader) + + fmt.Println(blockHeight) // Prints the block height (12) + + return nil +} + +func main() { + if err := queryState(); err != nil { + panic(err) + } +} +``` + +### CosmJS + +CosmJS documentation can be found at [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs). As of January 2021, CosmJS documentation is still work in progress. + +## Using the REST Endpoints + +As described in the [gRPC guide](../../develop/advanced-concepts/09-grpc_rest.md), all gRPC services on the Cosmos SDK are made available for more convenient REST-based queries through gRPC-gateway. The format of the URL path is based on the Protobuf service method's full-qualified name, but may contain small customizations so that final URLs look more idiomatic. For example, the REST endpoint for the `cosmos.bank.v1beta1.Query/AllBalances` method is `GET /cosmos/bank/v1beta1/balances/{address}`. Request arguments are passed as query parameters. + +Note that the REST endpoints are not enabled by default. To enable them, edit the `api` section of your `~/.simapp/config/app.toml` file: + +```toml +# Enable defines if the API server should be enabled. +enable = true +``` + +As a concrete example, the `curl` command to make balances request is: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR_ADDRESS +``` + +Make sure to replace `localhost:1317` with the REST endpoint of your node, configured under the `api.address` field. + +The list of all available REST endpoints is available as a Swagger specification file, it can be viewed at `localhost:1317/swagger`. Make sure that the `api.swagger` field is set to true in your [`app.toml`](01-run-node.md#configuring-the-node-using-apptoml) file. + +### Query for historical state using REST + +Querying for historical state is done using the HTTP header `x-cosmos-block-height`. For example, a curl command would look like: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + -H "x-cosmos-block-height: 123" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR_ADDRESS +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Cross-Origin Resource Sharing (CORS) + +[CORS policies](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) are not enabled by default to help with security. If you would like to use the rest-server in a public environment we recommend you provide a reverse proxy, this can be done with [nginx](https://www.nginx.com/). For testing and development purposes there is an `enabled-unsafe-cors` field inside [`app.toml`](01-run-node.md#configuring-the-node-using-apptoml). diff --git a/docs/user/run-node/03-txs.md b/docs/user/run-node/03-txs.md new file mode 100644 index 000000000..9e9061698 --- /dev/null +++ b/docs/user/run-node/03-txs.md @@ -0,0 +1,387 @@ +--- +sidebar_position: 1 +--- + +# Generating, Signing and Broadcasting Transactions + +:::note Synopsis +This document describes how to generate an (unsigned) transaction, signing it (with one or multiple keys), and broadcasting it to the network. +::: + +## Using the CLI + +The easiest way to send transactions is using the CLI, as we have seen in the previous page when [interacting with a node](02-interact-node.md#using-the-cli). For example, running the following command + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --keyring-backend test +``` + +will run the following steps: + +* generate a transaction with one `Msg` (`x/bank`'s `MsgSend`), and print the generated transaction to the console. +* ask the user for confirmation to send the transaction from the `$MY_VALIDATOR_ADDRESS` account. +* fetch `$MY_VALIDATOR_ADDRESS` from the keyring. This is possible because we have [set up the CLI's keyring](00-keyring.md) in a previous step. +* sign the generated transaction with the keyring's account. +* broadcast the signed transaction to the network. This is possible because the CLI connects to the node's CometBFT RPC endpoint. + +The CLI bundles all the necessary steps into a simple-to-use user experience. However, it's possible to run all the steps individually too. + +### Generating a Transaction + +Generating a transaction can simply be done by appending the `--generate-only` flag on any `tx` command, e.g.: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --generate-only +``` + +This will output the unsigned transaction as JSON in the console. We can also save the unsigned transaction to a file (to be passed around between signers more easily) by appending `> unsigned_tx.json` to the above command. + +### Signing a Transaction + +Signing a transaction using the CLI requires the unsigned transaction to be saved in a file. Let's assume the unsigned transaction is in a file called `unsigned_tx.json` in the current directory (see previous paragraph on how to do that). Then, simply run the following command: + +```bash +simd tx sign unsigned_tx.json --chain-id my-test-chain --keyring-backend test --from $MY_VALIDATOR_ADDRESS +``` + +This command will decode the unsigned transaction and sign it with `SIGN_MODE_DIRECT` with `$MY_VALIDATOR_ADDRESS`'s key, which we already set up in the keyring. The signed transaction will be output as JSON to the console, and, as above, we can save it to a file by appending `--output-document signed_tx.json`. + +Some useful flags to consider in the `tx sign` command: + +* `--sign-mode`: you may use `amino-json` to sign the transaction using `SIGN_MODE_LEGACY_AMINO_JSON`, +* `--offline`: sign in offline mode. This means that the `tx sign` command doesn't connect to the node to retrieve the signer's account number and sequence, both needed for signing. In this case, you must manually supply the `--account-number` and `--sequence` flags. This is useful for offline signing, i.e. signing in a secure environment which doesn't have access to the internet. + +#### Signing with Multiple Signers + +:::warning +Please note that signing a transaction with multiple signers or with a multisig account, where at least one signer uses `SIGN_MODE_DIRECT`, is not yet possible. You may follow [this Github issue](https://github.com/cosmos/cosmos-sdk/issues/8141) for more info. +::: + +Signing with multiple signers is done with the `tx multisign` command. This command assumes that all signers use `SIGN_MODE_LEGACY_AMINO_JSON`. The flow is similar to the `tx sign` command flow, but instead of signing an unsigned transaction file, each signer signs the file signed by previous signer(s). The `tx multisign` command will append signatures to the existing transactions. It is important that signers sign the transaction **in the same order** as given by the transaction, which is retrievable using the `GetSigners()` method. + +For example, starting with the `unsigned_tx.json`, and assuming the transaction has 4 signers, we would run: + +```bash +# Let signer1 sign the unsigned tx. +simd tx multisign unsigned_tx.json signer_key_1 --chain-id my-test-chain --keyring-backend test > partial_tx_1.json +# Now signer1 will send the partial_tx_1.json to the signer2. +# Signer2 appends their signature: +simd tx multisign partial_tx_1.json signer_key_2 --chain-id my-test-chain --keyring-backend test > partial_tx_2.json +# Signer2 sends the partial_tx_2.json file to signer3, and signer3 can append his signature: +simd tx multisign partial_tx_2.json signer_key_3 --chain-id my-test-chain --keyring-backend test > partial_tx_3.json +``` + +### Broadcasting a Transaction + +Broadcasting a transaction is done using the following command: + +```bash +simd tx broadcast tx_signed.json +``` + +You may optionally pass the `--broadcast-mode` flag to specify which response to receive from the node: + +* `sync`: the CLI waits for a CheckTx execution response only. +* `async`: the CLI returns immediately (transaction might fail). + +### Encoding a Transaction + +In order to broadcast a transaction using the gRPC or REST endpoints, the transaction will need to be encoded first. This can be done using the CLI. + +Encoding a transaction is done using the following command: + +```bash +simd tx encode tx_signed.json +``` + +This will read the transaction from the file, serialize it using Protobuf, and output the transaction bytes as base64 in the console. + +### Decoding a Transaction + +The CLI can also be used to decode transaction bytes. + +Decoding a transaction is done using the following command: + +```bash +simd tx decode [protobuf-byte-string] +``` + +This will decode the transaction bytes and output the transaction as JSON in the console. You can also save the transaction to a file by appending `> tx.json` to the above command. + +## Programmatically with Go + +It is possible to manipulate transactions programmatically via Go using the Cosmos SDK's `TxBuilder` interface. + +### Generating a Transaction + +Before generating a transaction, a new instance of a `TxBuilder` needs to be created. Since the Cosmos SDK supports both Amino and Protobuf transactions, the first step would be to decide which encoding scheme to use. All the subsequent steps remain unchanged, whether you're using Amino or Protobuf, as `TxBuilder` abstracts the encoding mechanisms. In the following snippet, we will use Protobuf. + +```go +import ( + "github.com/cosmos/cosmos-sdk/simapp" +) + +func sendTx() error { + // Choose your codec: Amino or Protobuf. Here, we use Protobuf, given by the following function. + app := simapp.NewSimApp(...) + + // Create a new TxBuilder. + txBuilder := app.TxConfig().NewTxBuilder() + + // --snip-- +} +``` + +We can also set up some keys and addresses that will send and receive the transactions. Here, for the purpose of the tutorial, we will be using some dummy data to create keys. + +```go +import ( + "github.com/cosmos/cosmos-sdk/testutil/testdata" +) + +priv1, _, addr1 := testdata.KeyTestPubAddr() +priv2, _, addr2 := testdata.KeyTestPubAddr() +priv3, _, addr3 := testdata.KeyTestPubAddr() +``` + +Populating the `TxBuilder` can be done via its methods: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L50 +``` + +```go +import ( + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func sendTx() error { + // --snip-- + + // Define two x/bank MsgSend messages: + // - from addr1 to addr3, + // - from addr2 to addr3. + // This means that the transactions needs two signers: addr1 and addr2. + msg1 := banktypes.NewMsgSend(addr1, addr3, types.NewCoins(types.NewInt64Coin("atom", 12))) + msg2 := banktypes.NewMsgSend(addr2, addr3, types.NewCoins(types.NewInt64Coin("atom", 34))) + + err := txBuilder.SetMsgs(msg1, msg2) + if err != nil { + return err + } + + txBuilder.SetGasLimit(...) + txBuilder.SetFeeAmount(...) + txBuilder.SetMemo(...) + txBuilder.SetTimeoutHeight(...) +} +``` + +At this point, `TxBuilder`'s underlying transaction is ready to be signed. + +### Signing a Transaction + +We set encoding config to use Protobuf, which will use `SIGN_MODE_DIRECT` by default. As per [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-020-protobuf-transaction-encoding.md), each signer needs to sign the `SignerInfo`s of all other signers. This means that we need to perform two steps sequentially: + +* for each signer, populate the signer's `SignerInfo` inside `TxBuilder`, +* once all `SignerInfo`s are populated, for each signer, sign the `SignDoc` (the payload to be signed). + +In the current `TxBuilder`'s API, both steps are done using the same method: `SetSignatures()`. The current API requires us to first perform a round of `SetSignatures()` _with empty signatures_, only to populate `SignerInfo`s, and a second round of `SetSignatures()` to actually sign the correct payload. + +```go +import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" +) + +func sendTx() error { + // --snip-- + + privs := []cryptotypes.PrivKey{priv1, priv2} + accNums:= []uint64{..., ...} // The accounts' account numbers + accSeqs:= []uint64{..., ...} // The accounts' sequence numbers + + // First round: we gather all the signer infos. We use the "set empty + // signature" hack to do that. + var sigsV2 []signing.SignatureV2 + for i, priv := range privs { + sigV2 := signing.SignatureV2{ + PubKey: priv.PubKey(), + Data: &signing.SingleSignatureData{ + SignMode: encCfg.TxConfig.SignModeHandler().DefaultMode(), + Signature: nil, + }, + Sequence: accSeqs[i], + } + + sigsV2 = append(sigsV2, sigV2) + } + err := txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } + + // Second round: all signer infos are set, so each signer can sign. + sigsV2 = []signing.SignatureV2{} + for i, priv := range privs { + signerData := xauthsigning.SignerData{ + ChainID: chainID, + AccountNumber: accNums[i], + Sequence: accSeqs[i], + } + sigV2, err := tx.SignWithPrivKey( + encCfg.TxConfig.SignModeHandler().DefaultMode(), signerData, + txBuilder, priv, encCfg.TxConfig, accSeqs[i]) + if err != nil { + return nil, err + } + + sigsV2 = append(sigsV2, sigV2) + } + err = txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } +} +``` + +The `TxBuilder` is now correctly populated. To print it, you can use the `TxConfig` interface from the initial encoding config `encCfg`: + +```go +func sendTx() error { + // --snip-- + + // Generated Protobuf-encoded bytes. + txBytes, err := encCfg.TxConfig.TxEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + + // Generate a JSON string. + txJSONBytes, err := encCfg.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + txJSON := string(txJSONBytes) +} +``` + +### Broadcasting a Transaction + +The preferred way to broadcast a transaction is to use gRPC, though using REST (via `gRPC-gateway`) or the CometBFT RPC is also posible. An overview of the differences between these methods is exposed [here](../../develop/advanced-concepts/09-grpc_rest.md). For this tutorial, we will only describe the gRPC method. + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func sendTx(ctx context.Context) error { + // --snip-- + + // Create a connection to the gRPC server. + grpcConn := grpc.Dial( + "127.0.0.1:9090", // Or your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + ) + defer grpcConn.Close() + + // Broadcast the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + // We then call the BroadcastTx method on this client. + grpcRes, err := txClient.BroadcastTx( + ctx, + &tx.BroadcastTxRequest{ + Mode: tx.BroadcastMode_BROADCAST_MODE_SYNC, + TxBytes: txBytes, // Proto-binary of the signed transaction, see previous step. + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.TxResponse.Code) // Should be `0` if the tx is successful + + return nil +} +``` + +#### Simulating a Transaction + +Before broadcasting a transaction, we sometimes may want to dry-run the transaction, to estimate some information about the transaction without actually committing it. This is called simulating a transaction, and can be done as follows: + +```go +import ( + "context" + "fmt" + "testing" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/types/tx" + authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" +) + +func simulateTx() error { + // --snip-- + + // Simulate the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + txBytes := /* Fill in with your signed transaction bytes. */ + + // We then call the Simulate method on this client. + grpcRes, err := txClient.Simulate( + context.Background(), + &tx.SimulateRequest{ + TxBytes: txBytes, + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.GasInfo) // Prints estimated gas used. + + return nil +} +``` + +## Using gRPC + +It is not possible to generate or sign a transaction using gRPC, only to broadcast one. In order to broadcast a transaction using gRPC, you will need to generate, sign, and encode the transaction using either the CLI or programmatically with Go. + +### Broadcasting a Transaction + +Broadcasting a transaction using the gRPC endpoint can be done by sending a `BroadcastTx` request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +grpcurl -plaintext \ + -d '{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/BroadcastTx +``` + +## Using REST + +It is not possible to generate or sign a transaction using REST, only to broadcast one. In order to broadcast a transaction using REST, you will need to generate, sign, and encode the transaction using either the CLI or programmatically with Go. + +### Broadcasting a Transaction + +Broadcasting a transaction using the REST endpoint (served by `gRPC-gateway`) can be done by sending a POST request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +curl -X POST \ + -H "Content-Type: application/json" \ + -d'{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:1317/cosmos/tx/v1beta1/txs +``` + +## Using CosmJS (JavaScript & TypeScript) + +CosmJS aims to build client libraries in JavaScript that can be embedded in web applications. Please see [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs) for more information. As of January 2021, CosmJS documentation is still work in progress. diff --git a/docs/user/run-node/04-rosetta.md b/docs/user/run-node/04-rosetta.md new file mode 100644 index 000000000..3d8467aea --- /dev/null +++ b/docs/user/run-node/04-rosetta.md @@ -0,0 +1,122 @@ +--- +sidebar_position: 1 +--- + +# Rosetta + +The `rosetta` package implements Coinbase's [Rosetta API](https://www.rosetta-api.org). This document provides instructions on how to use the Rosetta API integration. For information about the motivation and design choices, refer to [ADR 035](https://docs.cosmos.network/main/architecture/adr-035-rosetta-api-support). + +## Add Rosetta Command + +The Rosetta API server is a stand-alone server that connects to a node of a chain developed with Cosmos SDK. + +To enable Rosetta API support, it's required to add the `RosettaCommand` to your application's root command file (e.g. `simd/cmd/root.go`). + +Import the `rosettaCmd` package: + +```go +import "cosmossdk.io/tools/rosetta/cmd" +``` + +Find the following line: + +```go +initRootCmd(rootCmd, encodingConfig) +``` + +After that line, add the following: + +```go +rootCmd.AddCommand( + rosettaCmd.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Codec) +) +``` + +The `RosettaCommand` function builds the `rosetta` root command and is defined in the `rosettaCmd` package (`cosmossdk.io/tools/rosetta/cmd`). + +Since we’ve updated the Cosmos SDK to work with the Rosetta API, updating the application's root command file is all you need to do. + +An implementation example can be found in `simapp` package. + +## Use Rosetta Command + +To run Rosetta in your application CLI, use the following command: + +```shell +simd rosetta --help +``` + +To test and run Rosetta API endpoints for applications that are running and exposed, use the following command: + +```shell +simd rosetta + --blockchain "your application name (ex: gaia)" + --network "your chain identifier (ex: testnet-1)" + --tendermint "tendermint endpoint (ex: localhost:26657)" + --grpc "gRPC endpoint (ex: localhost:9090)" + --addr "rosetta binding address (ex: :8080)" +``` + +## Use Rosetta Standalone + +To use Rosetta standalone, without having to add it in your application, install it with the following command: + +```bash +go install cosmossdk.io/tools/rosetta/cmd/rosetta +``` + +Alternatively, for building from source, simply run `make rosetta`. The binary will be located in `tools/rosetta`. + +## Extensions + +There are two ways in which you can customize and extend the implementation with your custom settings. + +### Message extension + +In order to make an `sdk.Msg` understandable by rosetta the only thing which is required is adding the methods to your messages that satisfy the `rosetta.Msg` interface. Examples on how to do so can be found in the staking types such as `MsgDelegate`, or in bank types such as `MsgSend`. + +### Client interface override + +In case more customization is required, it's possible to embed the Client type and override the methods which require customizations. + +Example: + +```go +package custom_client +import ( + +"context" +"github.com/coinbase/rosetta-sdk-go/types" +"cosmossdk.io/tools/rosetta/lib" +) + +// CustomClient embeds the standard cosmos client +// which means that it implements the cosmos-rosetta-gateway Client +// interface while at the same time allowing to customize certain methods +type CustomClient struct { + *rosetta.Client +} + +func (c *CustomClient) ConstructionPayload(_ context.Context, request *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) { + // provide custom signature bytes + panic("implement me") +} +``` + +NOTE: when using a customized client, the command cannot be used as the constructors required **may** differ, so it's required to create a new one. We intend to provide a way to init a customized client without writing extra code in the future. + +### Error extension + +Since rosetta requires to provide 'returned' errors to network options. In order to declare a new rosetta error, we use the `errors` package in cosmos-rosetta-gateway. + +Example: + +```go +package custom_errors +import crgerrs "cosmossdk.io/tools/rosetta/lib/errors" + +var customErrRetriable = true +var CustomError = crgerrs.RegisterError(100, "custom message", customErrRetriable, "description") +``` + +Note: errors must be registered before cosmos-rosetta-gateway's `Server`.`Start` method is called. Otherwise the registration will be ignored. Errors with same code will be ignored too. diff --git a/docs/user/run-node/06-run-production.md b/docs/user/run-node/06-run-production.md new file mode 100644 index 000000000..31d2932e0 --- /dev/null +++ b/docs/user/run-node/06-run-production.md @@ -0,0 +1,269 @@ +--- +sidebar_position: 1 +--- + +# Running in Production + +:::note Synopsis +This section describes how to securely run a node in a public setting and/or on a mainnet on one of the many Cosmos SDK public blockchains. +::: + +When operating a node, full node or validator, in production it is important to set your server up securely. + +:::note +There are many different ways to secure a server and your node, the described steps here is one way. To see another way of setting up a server see the [run in production tutorial](https://tutorials.cosmos.network/hands-on-exercise/5-run-in-prod/1-overview.html). +::: + +:::note +This walkthrough assumes the underlying operating system is Ubuntu. +::: + +## Sever Setup + +### User + +When creating a server most times it is created as user `root`. This user has heightened privileges on the server. When operating a node, it is recommended to not run your node as the root user. + +1. Create a new user + +```bash +sudo adduser change_me +``` + +2. We want to allow this user to perform sudo tasks + +```bash +sudo usermod -aG sudo change_me +``` + +Now when logging into the server, the non `root` user can be used. + +### Go + +1. Install the [Go](https://go.dev/doc/install) version preconized by the application. + +:::warning +In the past, validators [have had issues](https://github.com/cosmos/cosmos-sdk/issues/13976) when using different versions of Go. It is recommended that the whole validator set uses the version of Go that is preconized by the application. +::: + +### Firewall + +Nodes should not have all ports open to the public, this is a simple way to get DDOS'd. Secondly it is recommended by [CometBFT](github.com/cometbft/cometbft) to never expose ports that are not required to operate a node. + +When setting up a firewall there are a few ports that can be open when operating a Cosmos SDK node. There is the CometBFT json-RPC, prometheus, p2p, remote signer and Cosmos SDK GRPC and REST. If the node is being operated as a node that does not offer endpoints to be used for submission or querying then a max of three endpoints are needed. + +Most, if not all servers come equipped with [ufw](https://help.ubuntu.com/community/UFW). Ufw will be used in this tutorial. + +1. Reset UFW to disallow all incoming connections and allow outgoing + +```bash +sudo ufw default deny incoming +sudo ufw default allow outgoing +``` + +2. Lets make sure that port 22 (ssh) stays open. + +```bash +sudo ufw allow ssh +``` + +or + +```bash +sudo ufw allow 22 +``` + +Both of the above commands are the same. + +3. Allow Port 26656 (cometbft p2p port). If the node has a modified p2p port then that port must be used here. + +```bash +sudo ufw allow 26656/tcp +``` + +4. Allow port 26660 (cometbft [prometheus](https://prometheus.io)). This acts as the applications monitoring port as well. + +```bash +sudo ufw allow 26660/tcp +``` + +5. IF the node which is being setup would like to expose CometBFTs jsonRPC and Cosmos SDK GRPC and REST then follow this step. (Optional) + +##### CometBFT JsonRPC + +```bash +sudo ufw allow 26657/tcp +``` + +##### Cosmos SDK GRPC + +```bash +sudo ufw allow 9090/tcp +``` + +##### Cosmos SDK REST + +```bash +sudo ufw allow 1317/tcp +``` + +6. Lastly, enable ufw + +```bash +sudo ufw enable +``` + +### Signing + +If the node that is being started is a validator there are multiple ways a validator could sign blocks. + +#### File + +File based signing is the simplest and default approach. This approach works by storing the consensus key, generated on initialization, to sign blocks. This approach is only as safe as your server setup as if the server is compromised so is your key. This key is located in the `config/priv_val_key.json` directory generated on initialization. + +A second file exists that user must be aware of, the file is located in the data directory `data/priv_val_state.json`. This file protects your node from double signing. It keeps track of the consensus keys last sign height, round and latest signature. If the node crashes and needs to be recovered this file must be kept in order to ensure that the consensus key will not be used for signing a block that was previously signed. + +#### Remote Signer + +A remote signer is a secondary server that is separate from the running node that signs blocks with the consensus key. This means that the consensus key does not live on the node itself. This increases security because your full node which is connected to the remote signer can be swapped without missing blocks. + +The two most used remote signers are [tmkms](https://github.com/iqlusioninc/tmkms) from [Iqlusion](https://www.iqlusion.io) and [horcrux](https://github.com/strangelove-ventures/horcrux) from [Strangelove](https://strange.love). + +##### TMKMS + +###### Dependencies + +1. Update server dependencies and install extras needed. + +```sh +sudo apt update -y && sudo apt install build-essential curl jq -y +``` + +2. Install Rust: + +```sh +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +3. Install Libusb: + +```sh +sudo apt install libusb-1.0-0-dev +``` + +###### Setup + +There are two ways to install tmkms, from source or `cargo install`. In the examples we will cover downloading or building from source and using softsign. Softsign stands for software signing, but you could use a [yubihsm](https://www.yubico.com/products/hardware-security-module/) as your signing key if you wish. + +1. Build: + +From source: + +```bash +cd $HOME +git clone https://github.com/iqlusioninc/tmkms.git +cd $HOME/tmkms +cargo install tmkms --features=softsign +tmkms init config +tmkms softsign keygen ./config/secrets/secret_connection_key +``` + +or + +Cargo install: + +```bash +cargo install tmkms --features=softsign +tmkms init config +tmkms softsign keygen ./config/secrets/secret_connection_key +``` + +:::note +To use tmkms with a yubikey install the binary with `--features=yubihsm`. +::: + +2. Migrate the validator key from the full node to the new tmkms instance. + +```bash +scp user@123.456.32.123:~/.simd/config/priv_validator_key.json ~/tmkms/config/secrets +``` + +3. Import the validator key into tmkms. + +```bash +tmkms softsign import $HOME/tmkms/config/secrets/priv_validator_key.json $HOME/tmkms/config/secrets/priv_validator_key +``` + +At this point, it is necessary to delete the `priv_validator_key.json` from the validator node and the tmkms node. Since the key has been imported into tmkms (above) it is no longer necessary on the nodes. The key can be safely stored offline. + +4. Modifiy the `tmkms.toml`. + +```bash +vim $HOME/tmkms/config/tmkms.toml +``` + +This example shows a configuration that could be used for soft signing. The example has an IP of `123.456.12.345` with a port of `26659` a chain_id of `test-chain-waSDSe`. These are items that most be modified for the usecase of tmkms and the network. + +```toml +# CometBFT KMS configuration file + +## Chain Configuration + +[[chain]] +id = "osmosis-1" +key_format = { type = "bech32", account_key_prefix = "cosmospub", consensus_key_prefix = "cosmosvalconspub" } +state_file = "/root/tmkms/config/state/priv_validator_state.json" + +## Signing Provider Configuration + +### Software-based Signer Configuration + +[[providers.softsign]] +chain_ids = ["test-chain-waSDSe"] +key_type = "consensus" +path = "/root/tmkms/config/secrets/priv_validator_key" + +## Validator Configuration + +[[validator]] +chain_id = "test-chain-waSDSe" +addr = "tcp://123.456.12.345:26659" +secret_key = "/root/tmkms/config/secrets/secret_connection_key" +protocol_version = "v0.34" +reconnect = true +``` + +5. Set the address of the tmkms instance. + +```bash +vim $HOME/.simd/config/config.toml + +priv_validator_laddr = "tcp://0.0.0.0:26659" +``` + +:::tip +The above address it set to `0.0.0.0` but it is recommended to set the tmkms server to secure the startup +::: + +:::tip +It is recommended to comment or delete the lines that specify the path of the validator key and validator: + +```toml +# Path to the JSON file containing the private key to use as a validator in the consensus protocol +# priv_validator_key_file = "config/priv_validator_key.json" + +# Path to the JSON file containing the last sign state of a validator +# priv_validator_state_file = "data/priv_validator_state.json" +``` + +::: + +6. Start the two processes. + +```bash +tmkms start -c $HOME/tmkms/config/tmkms.toml +``` + +```bash +simd start +``` diff --git a/docs/user/run-node/_category_.json b/docs/user/run-node/_category_.json new file mode 100644 index 000000000..2a302bc51 --- /dev/null +++ b/docs/user/run-node/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "User Guides", + "position": 5, + "link": null +} \ No newline at end of file diff --git a/docs/validate/05-run-testnet.md b/docs/validate/05-run-testnet.md new file mode 100644 index 000000000..e9a06ed34 --- /dev/null +++ b/docs/validate/05-run-testnet.md @@ -0,0 +1,101 @@ +--- +sidebar_position: 1 +--- + +# Running a Testnet + +:::note Synopsis +The `simd testnet` subcommand makes it easy to initialize and start a simulated test network for testing purposes. +::: + +In addition to the commands for [running a node](../user/run-node/01-run-node.md), the `simd` binary also includes a `testnet` command that allows you to start a simulated test network in-process or to initialize files for a simulated test network that runs in a separate process. + +## Initialize Files + +First, let's take a look at the `init-files` subcommand. + +This is similar to the `init` command when initializing a single node, but in this case we are initializing multiple nodes, generating the genesis transactions for each node, and then collecting those transactions. + +The `init-files` subcommand initializes the necessary files to run a test network in a separate process (i.e. using a Docker container). Running this command is not a prerequisite for the `start` subcommand ([see below](#start-testnet)). + +In order to initialize the files for a test network, run the following command: + +```bash +simd testnet init-files +``` + +You should see the following output in your terminal: + +```bash +Successfully initialized 4 node directories +``` + +The default output directory is a relative `.testnets` directory. Let's take a look at the files created within the `.testnets` directory. + +### gentxs + +The `gentxs` directory includes a genesis transaction for each validator node. Each file includes a JSON encoded genesis transaction used to register a validator node at the time of genesis. The genesis transactions are added to the `genesis.json` file within each node directory during the initilization process. + +### nodes + +A node directory is created for each validator node. Within each node directory is a `simd` directory. The `simd` directory is the home directory for each node, which includes the configuration and data files for that node (i.e. the same files included in the default `~/.simapp` directory when running a single node). + +## Start Testnet + +Now, let's take a look at the `start` subcommand. + +The `start` subcommand both initializes and starts an in-process test network. This is the fastest way to spin up a local test network for testing purposes. + +You can start the local test network by running the following command: + +```bash +simd testnet start +``` + +You should see something similar to the following: + +```bash +acquiring test network lock +preparing test network with chain-id "chain-mtoD9v" + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++ THIS MNEMONIC IS FOR TESTING PURPOSES ONLY ++ +++ DO NOT USE IN PRODUCTION ++ +++ ++ +++ sustain know debris minute gate hybrid stereo custom ++ +++ divorce cross spoon machine latin vibrant term oblige ++ +++ moment beauty laundry repeat grab game bronze truly ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +starting test network... +started test network +press the Enter Key to terminate +``` + +The first validator node is now running in-process, which means the test network will terminate once you either close the terminal window or you press the Enter key. In the output, the mnemonic phrase for the first validator node is provided for testing purposes. The validator node is using the same default addresses being used when initializing and starting a single node (no need to provide a `--node` flag). + +Check the status of the first validator node: + +```shell +simd status +``` + +Import the key from the provided mnemonic: + +```shell +simd keys add test --recover --keyring-backend test +``` + +Check the balance of the account address: + +```shell +simd q bank balances [address] +``` + +Use this test account to manually test against the test network. + +## Testnet Options + +You can customize the configuration of the test network with flags. In order to see all flag options, append the `--help` flag to each command. diff --git a/docusaurus.config.js b/docusaurus.config.js new file mode 100644 index 000000000..0454ec6f8 --- /dev/null +++ b/docusaurus.config.js @@ -0,0 +1,231 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const lightCodeTheme = require("prism-react-renderer/themes/github"); +const darkCodeTheme = require("prism-react-renderer/themes/dracula"); + +// const lastVersion = "v0.47"; +const lastVersion = "current"; + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: "Explore the SDK", + tagline: + "Cosmos SDK is the world's most popular framework for building application-specific blockchains.", + url: "https://docs.cosmos.network", + baseUrl: "/", + onBrokenLinks: "warn", + onBrokenMarkdownLinks: "warn", + favicon: "img/favicon.svg", + trailingSlash: false, + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: "cosmos", + projectName: "cosmos-sdk", + + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: "en", + locales: ["en"], + }, + + presets: [ + [ + "classic", + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarPath: require.resolve("./sidebars.js"), + routeBasePath: "/", + lastVersion: lastVersion, + }, + theme: { + customCss: require.resolve("./src/css/custom.css"), + }, + }), + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + image: "img/banner.jpg", + docs: { + sidebar: { + autoCollapseCategories: true, + }, + }, + navbar: { + title: "Cosmos SDK", + hideOnScroll: false, + logo: { + alt: "Cosmos SDK Logo", + src: "img/logo-sdk.svg", + href: "/", + target: "_self", + }, + items: [ + { + to: "/develop/intro/what-is-sdk", + position: "left", + label: "Develop", + }, + { + to: "/integrate/building-apps/app-go", + position: "left", + label: "Integrate", + }, + // { + // to: "/", + // position: "left", + // label: "Validate", + // }, + { + to: "/user/run-node/keyring", + position: "left", + label: "User Guides", + }, + // { + // to: "/", + // position: "left", + // label: "Vision", + // }, + { + href: "https://github.com/cosmos/cosmos-sdk", + html: ` + + + `, + position: "right", + }, + { + type: "docsVersionDropdown", + position: "right", + dropdownActiveClassDisabled: true, + // versions not yet migrated to docusaurus + dropdownItemsAfter: [ + { + href: "https://docs.cosmos.network/v0.46/", + label: "v0.46", + target: "_self", + }, + { + href: "https://docs.cosmos.network/v0.45/", + label: "v0.45", + target: "_self", + }, + ], + }, + ], + }, + footer: { + links: [ + { + items: [ + { + html: `
Cosmos Logo`, + }, + ], + }, + { + title: "Documentation", + items: [ + { + label: "Cosmos Hub", + href: "https://hub.cosmos.network", + }, + { + label: "CometBFT", + href: "https://docs.cometbft.com", + }, + { + label: "IBC Go", + href: "https://ibc.cosmos.network", + }, + ], + }, + { + title: "Community", + items: [ + { + label: "Blog", + href: "https://blog.cosmos.network", + }, + { + label: "Forum", + href: "https://forum.cosmos.network", + }, + { + label: "Discord", + href: "https://discord.gg/cosmosnetwork", + }, + { + label: "Reddit", + href: "https://reddit.com/r/cosmosnetwork", + }, + ], + }, + { + title: "Social", + items: [ + { + label: "Discord", + href: "https://discord.gg/cosmosnetwork", + }, + { + label: "Twitter", + href: "https://twitter.com/cosmos", + }, + { + label: "Youtube", + href: "https://www.youtube.com/c/CosmosProject", + }, + { + label: "Telegram", + href: "https://t.me/cosmosproject", + }, + ], + }, + ], + copyright: `

The development of the Cosmos SDK is led primarily by Interchain Core Teams. Funding for this development comes primarily from the Interchain Foundation, a Swiss non-profit.

`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + additionalLanguages: ["protobuf", "go-module"], // https://prismjs.com/#supported-languages + }, + algolia: { + appId: "QLS2QSP47E", + apiKey: "4d9feeb481e3cfef8f91bbc63e090042", + indexName: "cosmos_network", + contextualSearch: false, + }, + }), + themes: ["@you54f/theme-github-codeblock"], + plugins: [ + async function myPlugin(context, options) { + return { + name: "docusaurus-tailwindcss", + configurePostCss(postcssOptions) { + postcssOptions.plugins.push(require("postcss-import")); + postcssOptions.plugins.push(require("tailwindcss/nesting")); + postcssOptions.plugins.push(require("tailwindcss")); + postcssOptions.plugins.push(require("autoprefixer")); + return postcssOptions; + }, + }; + }, + [ + "@docusaurus/plugin-google-analytics", + { + trackingID: "UA-51029217-2", + anonymizeIP: true, + }, + ], + ], +}; + +module.exports = config; diff --git a/go.mod b/go.mod new file mode 100644 index 000000000..8c4b0e58c --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module cosmos-sdk-docs + +go 1.20 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..4b4c1b8d1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13268 @@ +{ + "name": "cosmos-sdk-docs", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cosmos-sdk-docs", + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/plugin-client-redirects": "^2.4.0", + "@docusaurus/plugin-content-docs": "^2.4.0", + "@docusaurus/preset-classic": "2.4.0", + "@mdx-js/react": "^1.6.22", + "@you54f/theme-github-codeblock": "^0.1.1", + "clsx": "^1.2.1", + "prism-react-renderer": "^1.3.5", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.4.0", + "@tsconfig/docusaurus": "^1.0.5", + "markdownlint-cli": "^0.34.0", + "tailwindcss": "^3.3.2", + "typescript": "^4.7.4" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", + "integrity": "sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==", + "dependencies": { + "@algolia/autocomplete-shared": "1.8.2" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", + "integrity": "sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==", + "dependencies": { + "@algolia/autocomplete-shared": "1.8.2" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", + "integrity": "sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==" + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", + "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", + "dependencies": { + "@algolia/cache-common": "4.17.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", + "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", + "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", + "dependencies": { + "@algolia/cache-common": "4.17.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", + "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", + "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", + "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", + "dependencies": { + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", + "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", + "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "node_modules/@algolia/logger-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", + "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", + "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", + "dependencies": { + "@algolia/logger-common": "4.17.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", + "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", + "dependencies": { + "@algolia/requester-common": "4.17.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", + "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", + "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", + "dependencies": { + "@algolia/requester-common": "4.17.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", + "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", + "dependencies": { + "@algolia/cache-common": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/requester-common": "4.17.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.21.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", + "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", + "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helpers": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", + "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "dependencies": { + "@babel/types": "^7.21.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz", + "integrity": "sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", + "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", + "dependencies": { + "@babel/compat-data": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz", + "integrity": "sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.5", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.21.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz", + "integrity": "sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", + "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz", + "integrity": "sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", + "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", + "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz", + "integrity": "sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-member-expression-to-functions": "^7.21.5", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", + "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", + "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", + "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.5", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", + "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", + "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", + "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", + "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz", + "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-simple-access": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", + "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz", + "integrity": "sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz", + "integrity": "sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", + "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz", + "integrity": "sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==", + "dependencies": { + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", + "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", + "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", + "dependencies": { + "@babel/compat-data": "^7.21.5", + "@babel/helper-compilation-targets": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.21.5", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.21.5", + "@babel/plugin-transform-destructuring": "^7.21.3", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.21.5", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.21.3", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.21.5", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.21.5", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.21.5", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz", + "integrity": "sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", + "@babel/plugin-transform-typescript": "^7.21.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", + "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.5.tgz", + "integrity": "sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w==", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", + "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.5", + "@babel/types": "^7.21.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.4.tgz", + "integrity": "sha512-vDwCDoVXDgopw/hvr0zEADew2wWaGP8Qq0Bxhgii1Ewz2t4fQeyJwIRN/mWADeLFYPVkpz8TpEbxya/i6Tm0WA==" + }, + "node_modules/@docsearch/react": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.4.tgz", + "integrity": "sha512-aeOf1WC5zMzBEi2SI6WWznOmIo9rnpN4p7a3zHXxowVciqlI4HsZGtOR9nFOufLeolv7HibwLlaM0oyUqJxasw==", + "dependencies": { + "@algolia/autocomplete-core": "1.8.2", + "@algolia/autocomplete-preset-algolia": "1.8.2", + "@docsearch/css": "3.3.4", + "algoliasearch": "^4.0.0" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", + "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", + "dependencies": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^2.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", + "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", + "dependencies": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/logger": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", + "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", + "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", + "dependencies": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz", + "integrity": "sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg==", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.4.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-client-redirects": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.4.0.tgz", + "integrity": "sha512-HsS+Dc2ZLWhfpjYJ5LIrOB/XfXZcElcC7o1iA4yIVtiFz+LHhwP863fhqbwSJ1c6tNDOYBH3HwbskHrc/PIn7Q==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "eta": "^2.0.0", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz", + "integrity": "sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "cheerio": "^1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz", + "integrity": "sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "@types/react-router-config": "^5.0.6", + "combine-promises": "^1.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz", + "integrity": "sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz", + "integrity": "sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz", + "integrity": "sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", + "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz", + "integrity": "sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz", + "integrity": "sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz", + "integrity": "sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/plugin-debug": "2.4.0", + "@docusaurus/plugin-google-analytics": "2.4.0", + "@docusaurus/plugin-google-gtag": "2.4.0", + "@docusaurus/plugin-google-tag-manager": "2.4.0", + "@docusaurus/plugin-sitemap": "2.4.0", + "@docusaurus/theme-classic": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-search-algolia": "2.4.0", + "@docusaurus/types": "2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz", + "integrity": "sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w==", + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-translations": "2.4.0", + "@docusaurus/types": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.43", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.0.tgz", + "integrity": "sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg==", + "dependencies": { + "@docusaurus/mdx-loader": "2.4.0", + "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/plugin-content-blog": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/plugin-content-pages": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-common": "2.4.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz", + "integrity": "sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA==", + "dependencies": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.4.0", + "@docusaurus/logger": "2.4.0", + "@docusaurus/plugin-content-docs": "2.4.0", + "@docusaurus/theme-common": "2.4.0", + "@docusaurus/theme-translations": "2.4.0", + "@docusaurus/utils": "2.4.0", + "@docusaurus/utils-validation": "2.4.0", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^2.0.0", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz", + "integrity": "sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q==", + "dependencies": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/types": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", + "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", + "dependencies": { + "@docusaurus/logger": "2.4.0", + "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", + "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", + "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", + "dependencies": { + "@docusaurus/logger": "2.4.0", + "@docusaurus/utils": "2.4.0", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "dependencies": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz", + "integrity": "sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz", + "integrity": "sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw==", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dependencies": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "dependencies": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/docusaurus": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", + "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", + "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.34", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz", + "integrity": "sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "node_modules/@types/mdast": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", + "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/node": { + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/react": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.4.tgz", + "integrity": "sha512-IvAIhJTmKAAJmCIcaa6+5uagjyh+9GvcJ/thPZcw+i+vx+22eHlTy2Q1bJg/prES57jehjebq9DnIhOTtIhmLw==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", + "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", + "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", + "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", + "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", + "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", + "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", + "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", + "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", + "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", + "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", + "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", + "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", + "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", + "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", + "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", + "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/@you54f/theme-github-codeblock": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@you54f/theme-github-codeblock/-/theme-github-codeblock-0.1.1.tgz", + "integrity": "sha512-SFbkHzwfsfShYd9yL818P9P7AlSBQgDC92pyQWZqJV/PMdgfCh5ZsK/pt/1s/jy0wvYi4pFTwOEQ0+vhdy324w==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", + "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.17.0", + "@algolia/cache-common": "4.17.0", + "@algolia/cache-in-memory": "4.17.0", + "@algolia/client-account": "4.17.0", + "@algolia/client-analytics": "4.17.0", + "@algolia/client-common": "4.17.0", + "@algolia/client-personalization": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/logger-console": "4.17.0", + "@algolia/requester-browser-xhr": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/requester-node-http": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.13.0.tgz", + "integrity": "sha512-kV3c1jMQCvkARtGsSDvAwuht4PAMSsQILqPiH4WFiARoa3jXJ/r1TQoBWAjWyWF48rsNYCv7kzxgB4LTxrvvuw==", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001482", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz", + "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", + "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", + "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz", + "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", + "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", + "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "dependencies": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", + "dependencies": { + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.14", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.382", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.382.tgz", + "integrity": "sha512-czMavlW52VIPgutbVL9JnZIZuFijzsG1ww/1z2Otu1r1q+9Qe2bTsH3My3sZarlvwyqHM6+mnZfEnt2Vr4dsIg==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", + "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", + "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "dependencies": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", + "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz", + "integrity": "sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.43", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", + "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", + "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", + "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.9.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdownlint": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.28.2.tgz", + "integrity": "sha512-yYaQXoKKPV1zgrFsyAuZPEQoe+JrY9GDag9ObKpk09twx4OCU5lut+0/kZPrQ3W7w82SmgKhd7D8m34aG1unVw==", + "dev": true, + "dependencies": { + "markdown-it": "13.0.1", + "markdownlint-micromark": "0.1.2" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/markdownlint-cli": { + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.34.0.tgz", + "integrity": "sha512-4G9I++VBTZkaye6Yfc/7dU6HQHcyldZEVB+bYyQJLcpJOHKk/q5ZpGqK80oKMIdlxzsA3aWOJLZ4DkoaoUWXbQ==", + "dev": true, + "dependencies": { + "commander": "~10.0.1", + "get-stdin": "~9.0.0", + "glob": "~10.2.2", + "ignore": "~5.2.4", + "js-yaml": "^4.1.0", + "jsonc-parser": "~3.2.0", + "markdownlint": "~0.28.2", + "minimatch": "~9.0.0", + "run-con": "~1.2.11" + }, + "bin": { + "markdownlint": "markdownlint.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/markdownlint-cli/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/markdownlint-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/markdownlint-cli/node_modules/glob": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz", + "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/markdownlint-cli/node_modules/minimatch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", + "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/markdownlint-micromark": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.2.tgz", + "integrity": "sha512-jRxlQg8KpOfM2IbCL9RXM8ZiYWz2rv6DlZAnGv8ASJQpUh6byTBnEsbuMZ6T2/uIgntyf7SKg/mEaEBo1164fQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.1.tgz", + "integrity": "sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA==", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz", + "integrity": "sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz", + "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==", + "dev": true, + "dependencies": { + "lru-cache": "^9.0.0", + "minipass": "^5.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz", + "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.0.tgz", + "integrity": "sha512-qLAFjvR2BFNz1H930P7mj1iuWJFjGey/nVhimfOAAQ1ZyPpcClAxP8+A55Sl8mBvM+K2a9Pjgdj10KpANWrNfw==", + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", + "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", + "dependencies": { + "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", + "peerDependencies": { + "react": ">=0.14.9" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", + "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==" + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", + "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "dependencies": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "node_modules/rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "dependencies": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-con": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.11.tgz", + "integrity": "sha512-NEMGsUT+cglWkzEr4IFK21P4Jca45HqiAbIIZIBdX5+UZTB24Mb/21iNGgz9xZa8tL6vbW7CXmq7MFN42+VjNQ==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~3.0.0", + "minimist": "^1.2.6", + "strip-json-comments": "~3.1.1" + }, + "bin": { + "run-con": "cli.js" + } + }, + "node_modules/run-con/node_modules/ini": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", + "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", + "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", + "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "deprecated": "Use String.prototype.trim() instead" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/update-notifier/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dependencies": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.82.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.82.0.tgz", + "integrity": "sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.13.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", + "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz", + "integrity": "sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..813f58e1e --- /dev/null +++ b/package.json @@ -0,0 +1,51 @@ +{ + "name": "cosmos-sdk-docs", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@docusaurus/core": "2.4.0", + "@docusaurus/plugin-client-redirects": "^2.4.0", + "@docusaurus/plugin-content-docs": "^2.4.0", + "@docusaurus/preset-classic": "2.4.0", + "@mdx-js/react": "^1.6.22", + "@you54f/theme-github-codeblock": "^0.1.1", + "clsx": "^1.2.1", + "prism-react-renderer": "^1.3.5", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.4.0", + "@tsconfig/docusaurus": "^1.0.5", + "markdownlint-cli": "^0.34.0", + "tailwindcss": "^3.3.2", + "typescript": "^4.7.4" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "engines": { + "node": ">=16.14" + } +} diff --git a/sidebars.js b/sidebars.js new file mode 100644 index 000000000..85d1b9852 --- /dev/null +++ b/sidebars.js @@ -0,0 +1,36 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + // By default, Docusaurus generates a sidebar from the docs folder structure + developSidebar: [{type: 'autogenerated', dirName: 'develop'}], + integrateSidebar: [{type: 'autogenerated', dirName: 'integrate'}], + userSidebar: [{type: 'autogenerated', dirName: 'user'}], + validateSidebar: [{type: 'autogenerated', dirName: 'validate'}], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + 'intro', + 'hello', + { + type: 'category', + label: 'Tutorial', + items: ['tutorial-basics/create-a-document'], + }, + ], + */ +}; + +module.exports = sidebars; diff --git a/src/components/HomepageFeatures/index.js b/src/components/HomepageFeatures/index.js new file mode 100644 index 000000000..e7a59f85a --- /dev/null +++ b/src/components/HomepageFeatures/index.js @@ -0,0 +1,104 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.css'; +import Link from '@docusaurus/Link'; + +const FeatureList = [ + { + title: `Learn Basics`, + Svg: require('@site/static/img/innovation.svg').default, + to: "/develop/intro/what-is-sdk", + description: ( + <> + Get a quick introduction to the Cosmos SDK and its key features, + including its modular architecture and developer-friendly tools. + + ), + }, + { + title:`Build a Chain`, + to: "/integrate/building-apps/app-go", + Svg: require('@site/static/img/link.svg').default, + description: ( + <> + Learn how to build a customized blockchain application using the Cosmos SDK, + with support for various programming languages and consensus algorithms. + + ), + }, + { + title: `Build a Module`, + to: "/integrate/building-modules/intro", + Svg: require('@site/static/img/cube.svg').default, + description: ( + <> + Dive deeper into the Cosmos SDK and learn how to create + custom modules to extend the functionality of your blockchain application. + + ), + }, + { + title: `Node Operation`, + to: "/user/run-node/run-node", + Svg: require('@site/static/img/node.svg').default, + description: ( + <> + Learn how to set up and operate a full node on the Cosmos network, + and become an active participant in the governance and decision-making processes of the ecosystem. + + ), + }, + { + title: `Join the Community`, + to: "/develop/intro/what-is-sdk", + Svg: require('@site/static/img/public-service.svg').default, + description: ( + <> + Connect with other developers, validators, and enthusiasts in the Cosmos ecosystem, + and collaborate on building the future of decentralized applications. + + ), + }, + { + title: `Our Vision`, + to: "/develop/intro/what-is-sdk", + Svg: require('@site/static/img/ecosystem.svg').default, + description: ( + <> + Learn about the long-term vision of the Cosmos project and how it aims to create an interoperable, + scalable, and sustainable ecosystem of blockchain applications. + + ), + }, +]; + +function Feature({Svg, to, title, description}) { + return ( +
+ +
+ +
+ +
+

{title}

+

{description}

+
+ +
+ ); +} + +export default function HomepageFeatures() { + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css new file mode 100644 index 000000000..998fcf73e --- /dev/null +++ b/src/components/HomepageFeatures/styles.module.css @@ -0,0 +1,12 @@ +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; + font-size: 14px; +} + +.featureSvg { + height: 102px; + width: 200px; +} diff --git a/src/css/base.css b/src/css/base.css new file mode 100644 index 000000000..e6d485266 --- /dev/null +++ b/src/css/base.css @@ -0,0 +1,32 @@ +/* + Copied from https://github.com/ignite/cli/blob/develop/docs/src/css/base.css +*/ + +@layer base { + html { + @apply font-inter; + font-feature-settings: 'kern', 'liga', 'calt', 'zero' 0; + -webkit-font-feature-settings: 'kern', 'liga', 'calt', 'zero' 0; + text-size-adjust: 100%; + -moz-osx-font-smoothing: grayscale; + font-smoothing: antialiased; + font-variant-ligatures: contextual common-ligatures; + font-kerning: normal; + text-rendering: optimizeLegibility; + + @supports (font-variation-settings: normal) { + @apply font-intervar + } + } + + *, + *::before, + *::after { + box-sizing: border-box; + margin: 0; + } + + svg { display: inline; } + + ::selection{} +} \ No newline at end of file diff --git a/src/css/custom.css b/src/css/custom.css new file mode 100644 index 000000000..da7dfca7a --- /dev/null +++ b/src/css/custom.css @@ -0,0 +1,509 @@ +/* + Slighlty modified version of https://github.com/ignite/cli/blob/develop/docs/src/css/custom.css +*/ + +@import "tailwindcss/base"; +@import "./fonts.css"; +@import "./base.css"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #5064fb; + --ifm-color-primary-dark: theme(colors.gray.1000); + --ifm-color-primary-darker: theme(colors.gray.1000); + --ifm-color-primary-darkest: theme(colors.gray.1000); + --ifm-color-primary-light: theme(colors.gray.1000); + --ifm-color-primary-lighter: theme(colors.gray.1000); + --ifm-color-primary-lightest: theme(colors.gray.1000); + --ifm-code-font-size: 95%; + --ifm-breadcrumb-item-background-active: transparent; + --ifm-breadcrumb-padding-horizontal: 0; + --ifm-list-paragraph-margin: 0; + --ifm-spacing-horizontal: theme(spacing.7); + --ifm-blockquote-border-color: theme(colors.gray.1000); + --ifm-menu-link-padding-vertical: 0.6rem; + --ifm-background-color: theme(colors.gray.0); + --ifm-footer-link-color: var(--ifm-font-color-base); + --ifm-menu-link-sublist-icon: url("~/img/ico-chevron.svg"); + --docsearch-searchbox-background: #f7f7f7; + --docsearch-modal-background: theme(colors.card) !important; + --ifm-navbar-height: 5.563rem; + --ifm-navbar-sidebar-width: 100vw; + --docsearch-highlight-color: theme(colors.fg) !important; + --docsearch-searchbox-shadow: inset 0 0 0 1px var(--docsearch-primary-color); + + /* temp: local search bar */ + --aa-primary-color-rgb: 0, 0, 0; + + @media screen and (prefers-reduced-motion) { + transition: ; + } + --ifm-menu-color-background-active: none; + --ifm-menu-color-background-hover: none; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +html[data-theme="dark"] { + --ifm-color-primary: theme(colors.gray.0); + --ifm-color-primary-dark: #e6e6e6; + --ifm-color-primary-darker: #d9d9d9; + --ifm-color-primary-darkest: #b3b3b3; + --ifm-color-primary-light: theme(colors.gray.0); + --ifm-color-primary-lighter: theme(colors.gray.0); + --ifm-color-primary-lightest: theme(colors.gray.0); + --ifm-background-color: theme(colors.gray.1000); + --docusaurus-highlighted-code-line-bg: theme(colors.inactive); + --docsearch-modal-background: theme(colors.gray.1000) !important; + --docsearch-highlight-color: theme(colors.inactiveLight) !important; + --docsearch-hit-background: theme(colors.lightfg) !important; + --docsearch-searchbox-shadow: inset 0 0 0 1px var(--docsearch-primary-color); + --docsearch-key-gradient: linear-gradient( + -26.5deg, + #5d5d5d, + #3c3c3c + ) !important; + --docsearch-key-shadow: inset 0 -2px 0 0 #353535, inset 0 0 1px 1px #7a7a7b, + 0 2px 2px 0 rgba(45, 45, 45, 0.3) !important; +} + +html { + @apply bg-docusaurusBgColor; + /* Banner */ + + #__docusaurus > div[role="banner"] { + @apply bg-gray-30 text-gray-1000 font-normal; + a { + @apply no-underline w-full text-2; + } + } + + /* MAINNAV */ + .navbar { + @apply py-2 h-auto border-b border-b-docusaurusColorBorder shadow-none bg-docusaurusBgColor; + &__toggle { + @apply bg-card rounded-s h-8 w-8 flex justify-center items-center; + @media (min-width: 997px) { + @apply hidden; + } + } + &__link--active { + @apply text-muted; + } + &__items:not(:last-child) { + @apply justify-between; + @media (min-width: 997px) { + @apply justify-start px-3; + } + button { + @apply order-2 mr-0; + } + } + &__items--right > :last-child { + @apply right-8.5; + } + } + &[data-theme="dark"] .navbar__item { + @apply text-mutedLight; + } + &[data-theme="dark"] .navbar__toggle { + @apply bg-fg; + } + + .github-icon { + @apply hover:opacity-50; + } + + /* SEARCHBAR */ + /* algolia */ + .DocSearch { + &-Hits mark { + @apply text-docusaurusColorBase; + } + &-Button { + @apply text-inactive rounded-sm h-8 w-8 bg-card justify-center mr-3; + @media (min-width: 997px) { + @apply w-auto justify-between; + } + .DocSearch-Search-Icon { + @apply text-docusaurusColorBase; + } + .DocSearch-Button-Keys { + @apply hidden; + } + .DocSearch-Button-Placeholder { + @apply pr-10; + } + } + + &-Logo path { + @apply fill-docusaurusColorBase; + } + } + + .navbar-sidebar { + @apply w-full; + &__brand { + @apply px-6 h-auto; + } + &__item { + @apply px-6 w-full; + } + &__back { + @apply px-0 hidden; + } + &__close { + @apply bg-gray-1000 rounded-s h-8 w-8 flex justify-center items-center ml-0; + & > svg > g { + @apply stroke-gray-0; + } + } + } + &[data-theme="dark"] .navbar-sidebar { + @apply bg-gray-1000; + &__brand { + @apply shadow-none relative; + &::after { + content: ""; + @apply absolute block h-px bg-linkHover bottom-0 right-3 left-0 mx-6; + } + } + &__close { + @apply bg-gray-0; + & > svg > g { + @apply stroke-gray-1000; + } + } + } + &[data-theme="dark"] .DocSearch-Modal { + @apply bg-gray-1000; + } + &[data-theme="dark"] .DocSearch-Footer { + @apply bg-gray-1000; + } + &[data-theme="dark"] .DocSearch-Button { + @apply bg-fg text-inactiveLight; + } + &[data-theme="dark"] .DocSearch-Button-Key { + @apply text-inactiveLight border-inactiveLight; + } + + /* BREADCRUMBS */ + .breadcrumbs__item { + &:first-child { + & > a { + &::after { + content: "Docs"; + } + & > svg { + @apply hidden; + } + } + } + &:not(:last-child)::after { + content: ">"; + @apply bg-none; + } + } + .theme-doc-breadcrumbs { + @media (min-width: 997px) { + @apply pt-[calc(theme(spacing.7)-1rem)]; + } + } + .theme-doc-toc-mobile { + @apply bg-card px-6 py-5.5 pb-0 rounded; + & > button { + @apply p-0 pb-5.5 flex justify-between; + &::after { + @apply order-last ml-5; + background-image: var(--ifm-menu-link-sublist-icon); + background-size: 70%; + } + } + & ul li { + @apply my-5 mx-0; + } + } + &[data-theme="dark"] .theme-doc-toc-mobile { + @apply bg-fg; + } + + /* SIDEBAR */ + .theme-doc-sidebar-container { + @media (min-width: 997px) { + @apply ml-4 border-r border-r-docusaurusColorBorder; + } + & > div:first-child > a { + @apply m-0; + } + } + + &[data-theme="dark"] .theme-doc-sidebar-menu .menu__list::before { + @apply bg-inactiveLight; + } + .theme-doc-sidebar-menu { + @apply font-normal; + + .menu__list { + @apply relative pl-0; + &::before { + content: ""; + @apply absolute block left-3 top-0 h-full w-[2px] bg-border; + } + ul::before { + @apply hidden; + } + } + + .menu__link { + @apply pl-0 pr-5; + &--active:not(.menu__link--sublist) { + @apply text-docusaurusColorBase font-medium; + } + } + + li li { + @apply pl-7; + .menu__link--active:not(.menu__link--sublist) { + @apply relative text-docusaurusColorBase font-medium; + &::before { + content: ""; + @apply absolute block left-0 top-0 h-full w-[2px] bg-docusaurusColorBase; + @apply -left-[calc(theme(space.7)-theme(space.3))]; + } + } + } + li li li { + @apply pl-5; + } + li li li .menu__link--active:not(.menu__link--sublist)::before { + @apply -left-[calc(theme(space.5)*1+theme(space.7)-theme(space.3))]; + } + li li li li .menu__link--active:not(.menu__link--sublist)::before { + @apply -left-[calc(theme(space.5)*2+theme(space.7)-theme(space.3))]; + } + li li li li li .menu__link--active:not(.menu__link--sublist)::before { + @apply -left-[calc(theme(space.5)*3+theme(space.7)-theme(space.3))]; + } + li li li li li li .menu__link--active:not(.menu__link--sublist)::before { + @apply -left-[calc(theme(space.5)*4+theme(space.7)-theme(space.3))]; + } + li li li li li li li .menu__link--active:not(.menu__link--sublist)::before { + @apply -left-[calc(theme(space.5)*5+theme(space.7)-theme(space.3))]; + } + } + + &[data-theme="dark"] .menu__link { + @apply text-mutedLight; + } + .theme-doc-sidebar-item-link .menu__link[target="_blank"] { + &::after { + content: "\2197"; + @apply ml-1; + } + } + .menu__link { + @apply text-muted; + &:hover { + text-shadow: 0.1px 0.1px 0 var(--ifm-font-color-base), + -0.1px -0.1px 0 var(--ifm-font-color-base), + 0.1px -0.1px 0 var(--ifm-font-color-base), + -0.1px 0.1px 0 var(--ifm-font-color-base), + -0.1px 0 0 var(--ifm-font-color-base), + 0.1px 0 0 var(--ifm-font-color-base), + 0 0.1px 0 var(--ifm-font-color-base), + 0 -0.1px 0 var(--ifm-font-color-base); + @apply text-docusaurusColorBase; + } + + & > svg { + @apply hidden; + } + } + + .menu__link--sublist-caret { + @apply flex; + &::after { + background-size: 16px; + background-repeat: no-repeat; + @apply order-first ml-0 mr-4; + } + } + .menu__list-item--collapsed .menu__link--sublist:after, + .menu__list-item--collapsed .menu__caret:before { + transform: rotateZ(0); + } + .menu__caret, + li li .menu__link--sublist-caret::after { + @apply hidden; + } + + /* TOC */ + .table-of-contents__link:hover, + .table-of-contents__link--active { + text-shadow: 0.1px 0.1px 0 var(--ifm-font-color-base), + -0.1px -0.1px 0 var(--ifm-font-color-base), + 0.1px -0.1px 0 var(--ifm-font-color-base), + -0.1px 0.1px 0 var(--ifm-font-color-base), + -0.1px 0 0 var(--ifm-font-color-base), + 0.1px 0 0 var(--ifm-font-color-base), 0 0.1px 0 var(--ifm-font-color-base), + 0 -0.1px 0 var(--ifm-font-color-base); + } + + /* RELATED ARTICLES */ + &[data-theme="dark"] .pagination-nav > a { + @apply bg-fg; + } + .pagination-nav { + @apply pb-7 mt-9; + & > a { + box-shadow: 0px 0px 80px rgba(0, 0, 0, 0.07); + @apply border-transparent rounded pb-8.5 col-span-2 pt-6 px-6 hover:shadow-none; + + @media (min-width: 997px) { + @apply col-span-1; + } + } + + .pagination-nav { + &__link--next { + @apply text-left; + @media (min-width: 997px) { + @apply text-right; + } + } + &__sublabel { + @apply mb-3.5 text-gray-1000 dark:text-docusaurusColorBase text-3; + } + &__label { + @apply text-4 font-semibold; + } + } + } + + /* FOOTER */ + .footer { + background-color: var(--ifm-background-color); + @apply border-t border-t-docusaurusColorBorder pt-10 mb-10; + &__link-item { + @apply hover:underline; + } + &__bottom { + margin: 0 calc(var(--ifm-spacing-horizontal) * -1); + } + &__copyright { + @apply text-center mt-9 text-2; + } + } + .footer__col:not(:first-child) { + @apply basis-1/2; + @media (min-width: 997px) { + @apply basis-0; + } + } + .footer__col:first-child .footer__title { + @apply hidden; + } + .footer__link-item { + & > svg { + @apply hidden; + } + } + + .theme-back-to-top-button { + @apply rotate-180; + &::after { + @apply w-1/2; + } + } + + /* MARKDOWN */ + .theme-code-block { + @apply font-jetbrain mt-3; + } + + .markdown { + --ifm-heading-vertical-rhythm-bottom: 1; + --ifm-h1-vertical-rhythm-bottom: 1; + } + .theme-doc-markdown { + @apply mt-7 pb-8 border-b border-b-border; + + h1 { + @apply text-7 font-bold leading-10 tracking-tight; + } + h2 { + @apply text-6 font-bold leading-9 tracking-tight; + } + h3 { + @apply text-4 font-semibold leading-8 tracking-tight; + } + h4 { + @apply text-3 font-semibold leading-7 tracking-tight; + } + h5 { + @apply text-3 font-semibold leading-6 tracking-wide; + } + p { + @apply leading-relaxed; + } + p, + ul, + ol, + blockquote { + @apply text-[1rem]; + } + code { + @apply border-0 px-3; + } + blockquote { + @apply my-7; + } + a { + @apply no-underline hover:underline; + color: var(--ifm-color-primary); + } + ol, + ul { + @apply my-6; + } + ul li { + @apply relative pl-6 mb-4 before:absolute before:block before:w-[4px] before:h-[4px] before:bg-current before:left-0 before:top-[calc(1em/2)]; + } + ul li li { + @apply last:mb-6 before:border before:border-current before:bg-transparent; + } + li:last-child li { + @apply last:mb-0; + } + ol { + list-style-type: none; + counter-reset: item; + & > li { + @apply relative pl-8 mb-5.5; + &::before { + counter-increment: item; + content: counters(item, ".", decimal-leading-zero) "."; + @apply absolute flex left-0 top-[.2rem] text-3 font-semibold tracking-tight; + } + } + } + ol ol { + counter-reset: subitem; + & > li { + &::before { + counter-increment: subitem; + content: counters(subitem, ".", decimal-leading-zero) "."; + } + } + } + li { + & > ul, + & > ol { + @apply my-5; + } + } + } +} diff --git a/src/css/fonts.css b/src/css/fonts.css new file mode 100644 index 000000000..9b98510d6 --- /dev/null +++ b/src/css/fonts.css @@ -0,0 +1,64 @@ +/* + + FONT FAMILY GROUPS + +*/ + +/* + Copied from https://github.com/ignite/cli/blob/develop/docs/src/css/fonts.css +*/ + +/* Inter */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("~/static/fonts/inter/Inter-Regular.woff2?v=3.19") format("woff2"), + url("~/static/fonts/inter/Inter-Regular.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("~/static/fonts/inter/Inter-Medium.woff2?v=3.19") format("woff2"), + url("~/static/fonts/inter/Inter-Medium.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("~/static/fonts/inter/Inter-Bold.woff2?v=3.19") format("woff2"), + url("~/static/fonts/inter/Inter-Bold.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url("~/static/fonts/inter/Inter-Black.woff2?v=3.19") format("woff2"), + url("~/static/fonts/inter/Inter-Black.woff?v=3.19") format("woff"); +} + +/* Inter var */ +@font-face { + font-family: "Inter var"; + font-weight: 100 900; + font-display: swap; + font-style: oblique 0deg 10deg; + src: url("~/static/fonts/intervar/Inter.var.woff2?v=3.19") format("woff2"); +} + +/* JetBrains Mono */ +@font-face { + font-family: "JetBrains Mono"; + font-weight: normal; + font-style: normal; + src: url("~/static/fonts/jetbrainsmono/JetBrainsMono-Regular.woff2") + format("woff2"); +} diff --git a/src/pages/index.js b/src/pages/index.js new file mode 100644 index 000000000..94d320a4d --- /dev/null +++ b/src/pages/index.js @@ -0,0 +1,34 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import Link from '@docusaurus/Link'; +import clsx from 'clsx'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import HomepageFeatures from '@site/src/components/HomepageFeatures'; + +import styles from './index.module.css'; + +function HomepageHeader() { + const {siteConfig: {tagline, title: title}} = useDocusaurusContext(); + return ( +
+
+

{title}

+

{tagline}

+
+
+ ); +} + +export default function Home() { + const {siteConfig} = useDocusaurusContext(); + return ( + + +
+ +
+
+ ); +} diff --git a/src/pages/index.module.css b/src/pages/index.module.css new file mode 100644 index 000000000..6ae82fd4c --- /dev/null +++ b/src/pages/index.module.css @@ -0,0 +1,31 @@ +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; + background-color: #5266FF; + opacity: 90%; +} + +@media screen and (max-width: 996px) { + .heroBanner { + padding: 2rem; + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + margin-top: 30px; +} + +.tagLine { + margin-top: 10px; +} diff --git a/static/.nojekyll b/static/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/static/fonts/inter/Inter-Black.woff b/static/fonts/inter/Inter-Black.woff new file mode 100644 index 0000000000000000000000000000000000000000..a18593a096e8005f2596651a837a4480bc91f0e7 GIT binary patch literal 138764 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

E^2obT_|c0me#AaV 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 VBM+r4O@i+xOU)e7am5<&{2S&wy;lGL literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-Black.woff2 b/static/fonts/inter/Inter-Black.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..68f64c9ed98c55061b983702c6cfd9939a43606f GIT binary patch literal 102868 zcma%i19T-ziOV_!f2z2Stz;Re?s;RRGmLl^)B zOv1o~*HVQZ3c${)0s*swkb%z1gAswpKtTqK(`!fJH%}{@biMMwuB6&`x`8-bXc(k} zEgr_pCW9ggM!hq@CW(@<9QKI*lm;kr;5+WGs_6y}epcgha=4{%CvR43X*>f{n|%Iv z+Zw+S@h-cRf4DFiZ+(lnWs?UbBaV+pqz(qLJ~5!J#s#xNj}WX8%u!(7S4|*M6w4ey zmVp_iqPB$65d?(kiM#|ABU>;}X(GFl{m~%FicW6^fPqTh`YRm zC?%sR{9LIHB0oa!FbIvD?A^)M7wsb>KX0sBtQ0}id^@#fNW(?09uGx-fI-=z@7g%< z@)Z26UfF<0TGlZ-mY|N^xBi1d7fc58ouuBX24!HiG9+Gf*~<_g*~*&d-oaHGA-zc9 z0TCM}@v&%4#)QM`V&7T{9LD1f;}4mxyL)1MP)k^nh(9fi#|>5|-YRL*tvOZfe&)tF zfR6$@aT$Q$hWtHydMBc--o>T9KH8u#ZDE%j58bHXjq74Obz$Q7ItO(jPUidgMbS^P zO5Q;DUgv2wcu?hAB&qUo8_g4yymFzqaW89YI&gE)ThLrw);e$MQs;;m*7R*kK2b#n z{8LE+i_2gDJz0Do9KIjYuc@o(@oNY}iWP+-$H66wb_|qpDoRW&2a@dlnA+cv66+gu zy4<@rbqLT>He(6>UIm4fKj5}hG{}_6fA0l%u577*$=)R!$egOtJJw%%G~T;UdLIy* zC>q*lP&U4Vana?uQJVF~abg}g1?b;FBAbcF5|4XdtVRb1S^Kpzf*fr}~aOnMNl1j$B-~bwhicdh62g zb9divdXK=?{RupCSi|5Z#EiNLrOWXR6O3zDU6u%TP5zPdwh?6&2*-irv`bV(IgHNp zTxUBuCm%mtFIHgEMTyN)3;{2|(HCo{rmDGwOxQOa3cEVnXrp>yxms!|uVWzgwS-{w zhm3vM?VbRf-}4(B)$gG7hddEdjqJL+fHtFr9ZY9&uuGEm!&EC(nCG!EDajng9yD!b zInj^`h;qpiB*JO<*ahS8F!-Wk1G4k7eHpZpsM_9i{cp4^F>O}GQOEYbzTM}(5q3cX zQ;*b~(E??LGf2a!)J!v+Idl%u6Vxd@hXgWgth^U%53(XkQOZNoEan#tg*~<0n;rg! zkfCqs4-EGgT?yV-vPHuXHzZYd3NNQJG+fXMQCd!q$u=@JWc&UC+C1$SPDMdYQQ=Wm zTwYEUjtS!g1p@*@0|Qd%9uOWG$w5$2QnHa+TAEs0ZG+z$d+;;1#%rl^ky~wT^|a3Q zt%m;7-oF)lA_AGKsEzCQ!_@m>q0VrfZb=h}^J;Rql16@bWWGjlKqR|{#jJt&^i|FK zn90_f981kr+h@GVN`qC74Sjr_16c0_9ur!*7U&tg4w3XT=0h0~f9=)%EI*2>9pJcI9l;B$=E4KuA*}Jrmrp*lQlBn>cWzIzbL~G-f+8ZI7J-4F@9x{s8WupX z`(mB;QJTJb^?GCG*S+2rUd=(mOc7+` zWJqZ#iTr#A-9O*5(V)YiO)}(aOfPZ*Oaw!5g&p99av9CEr^(GA{S?JMq!Q+e($Fl? zR#Kga+)vY|=~MNE-z``}u1aN;iMd1qCv!(L#@%aQAY*-RYdvqKDp#R##J+t6#$|vz zP=1+s!sY|1MFxWa68>~z0_xlN>Gldc$n;YX#oEH}$&r}siHO%GkM|01vg^amc24J= zm!8>5$pDnlmiIKwS%y(eWo)dT`0A3iRbMhE{RB^$LTTD{3oMC|Jf0~-Wl$dYgaha$ zMd>?!hf@lT15cX148Q~Y zMX>DXuczjNg3O1{+*EN^z9Jt12(UoZZ~mpw$j)XU@P60sE%u9ODQRCTo9mtL$+cBbg#Er^A z8tLj#zRZkQ^~{9c0Ej$vzt2AgiDN{MBG&EjP;4sZruSU#M_0E+TtU4^$Y@H{Dv8>7)IMR55zrCPxwOgUmNg_VmshQt65g9^%Ygw&K#BCXIe3+bvC}4(|aDqez zQoSIGdh@H$(p5^_D7Bg8^(rhgHxqH0Ep;BCg0jORvHXA^D- z5!`WO$N^x3*}}m&dZ7%bD9w+=!cV`FLLY6?)h(0c23W^4Ug65TWis7U4D@&uy8U4ik9%?K#*+0KS14q zbg%-0K%}_IcM7z8o8B2_vA@%+`|dDkuzouIMlehuS`bWKwh+>K`&4hSc?K6EHZE#D zOXtRn3B^^mI34%|yA;F<9|cuHVbp6F6k8#%}0N6(MMu($65$MiZs~EV@!z+-P~r2xW`T=G*JIO#n^I zZOYD5Y2L{oE?oAwg0{2g{P%B zMNDr%dJHrW4FCRW1^DS5a`CP#Ug)y9X3(5l+!9PHK+5W)d zR1O^W)1U|^NTl*qJ`LN}56_nZfT0-!5rP;CSyEAn@GL_t%&Puh4@-WRsyzqRsp6sx zVo1oy&_9DIOvq5l>{kxm9*QqN6}tWe=$ge?;~V3#Rgx5vkdRm{tiST>yRVnWWu{GC zyg%B3;aH05K%!Y7!y*hL?t zeZDzSO>$1xvFi5b@q^I%e!by=JF}yWSy_b_1`R2AmY9paQS*^xVrsd+O{hZSXR{j` zPfL4P$YN$8Q`u$~%F<8e;i=NQ%Ti=0A!fLqLW`HqOI1UG%?4cHa-N8W_Y2qnfv$^{ z8Y5)Zf=Iaro#^|Ar&)A?_mq*q$j~9w6xG=qc-yuV;+lx+PR}DNrxJ|cXEGajQSVJ? z%vIk^TN;;aFDCHyN{X!A%-;!O_pU>EH^MR3=9*LA@WmJbqUpg3y?F3zVp<6CwLvA9 z4mr%abmlagV$>rk1r#}i6~hNGjx|Uh#ZHp|+m=(lYVo+pb98u52~vKv+0o3a46~b* zC)0YSk*gR+W2aEMBcihsN8cBJGEpWlhY$#IRMhsq)MR_e#4W~0jx zh3m%^__a%v3~eiL+<;Io1HxPKcUhSlfMvZgb>EwxEBo9?pGOr@5YvmnM3sR_GW;dYh}g-8 zM-Jc#HZPuY__w@#EGZLVS=1M6ciKaa_=RHGa8W%-kAlyHeLX7L?M`xdnsl(#Q?ud; zpI^n|^-F$pblh|a`&C|HHh#XPeG1ROCCz{&Fa&#_xgN6mOWqG$9F9Uz-1^1}ndCsN z-#0jKt6XN6RbcSW?F=gvs`HO|-WAw*pH|fUCQLouC{w8Q3jLiYz#IPOob_xL@$-1? zmT$8b%BqORQX|BdF+Ol`nNSu&BLu<%3iet0)Y=mX`bsJJ0sLvOk8lS6MWzMW!Q3_l zc>NRjbb!MHCO08)mI(RfWA>nrCO{B@0Ag8q2Pgzi5fVMz0N;ns%panbM%rwU`G>&f zwSb+w_l&WZ>9lo9!$4X9y?sfW^2F#RTyZ07mMlm3)WbfZ%YHGwY%1lM$@f3|_`;)z z*NRT-Va7*xJK9n&IEbkpmm8bB7ePF8HLv(CNBkvS_An8O3xawm$=?gC9O7RdOrEDl zX}XW_BQNM9^=HDlU`0)41)tf};&=Vzdw2arFW?{-;C#2Fr5OXN)-5zt@HQ2Q3m)-J zNSVj@q8>ATbH^1t67!RLuXg*vz8g}LNp#twS&5-lZQYW*SMyfv-GZ6EcpP=2y|B`3 z!dNor#^bg}9ZKRiIpyYif8+9-@haf-gT4&$d;P`N2B&CvbQ zHdtE8uub&)koS4c1P)b>Z8s-1gHXIurH`T?BTfW#uzL3gq4676w^L2jP*6whD zgG+?%i7v9#E-T#;19cWXnU}Pr+CLhom3Qh51^@I1vG-pW=C}+x&%4S>jzE21xe7ww zaxpjE8r>j?B&ofGqUa*O6z4ahi-HOFyrnL=f+kRefng!6i6-vVZPN~IWo4{va$QN! z;~CkS_BKmfV1Uh(YnTuPrp1zc1bV@4#B|AM`3$)R*~3qJ%tvtTerL%MGR0>~aN_rs zbBEllteZk<`(^JS2J2ssFdk7}AaZklRZ`cOE z!K6lV59+zQJf&vNX1d9Lf5h6W4B>MylMmB|GDAq?%Fy?@2agXHmvjU^evouS+7whZ zkBi*oSDxbicxaGF;e>d~htN77Z9|{h!`2lTcEBb^T-$Z+rQAqd@qIBDli0q>bS57G zKG*vJ*1W7cLyrgQ1>}~dXtv#kvGO{oDsX#tp|=~Y+c+IV3kwjvdW&zSv;kKX*nCW$#x!I_Y%paek4aq9Nn@JBG#Zs`rZ#ehwWgTeM=w1B@~r>> zaXBE)D}bnm^I))FrP?o5RxQ>FikXt|wV04P9_N6%E*hI|kL>oi9{7EGkXzY_17mC^ z%{5#2l`6n>D*oiyM;{2`qGq=?fJGAR%39Dd-=N=K^b>iGhu{aT6lo&F+ddo~ zvp`sE9-enYQ80nG(JaDRoG@D8$(~c(V;s(=n4`!Z3M4=!#-CBZ@+|B-fB&j&Q=%Bb zLio@ReX97EqZ5ys?>IB|A1MxUFbOx%JNk{Ym)Jkpdeh(V3F|)T@kP;0p-7PC!gH3J zV%4M#9D_(*uKbG}%8&5s+y~hhfMIg z^l&}qPdmLTT3fHuo(@e>Lud95>RervI9Fbz)LC&c^GI&O@v1wguWvBz7nr;AYvckk z&zVrgn*Wk=Mwz4-q}F8Mk{`Yq|CtW-QacT8zmFh>HE~yPN;15-`;*NmI09Nlb~@8- zu24+k%ICm#*bTqtxgrU_hMN#L*HJeXi}A?2y&$EHFs618<&0Xe2};UK$>dxD;38Pv z8D!CkAoa}!3zQU?!pw4+6WY-cRVG21n_mb!SX8PcDOpTN2>~6@F>#zos}9J;VMDk0 zsZ0#}sdtRDAj9{=t3+Kk7lO#kUev7bPZ*;hwlK3~`EaGWJ`9396Dmbu7CZhA!f^+o zv13t*W2|9GOXi3OriRF*hhaVt{E35NYl_FDGSYE{1ZiQpA}H*!@XE&Qno~2{`E4~m zLkv$zq2~GU zsiQho%&eIo2i$XCrAB-{%<`J6t%Vvme`Mk!Pa~(F=f^FmQ>w+*>&1ra?Iy}>8iCS* zQ~D<)>hp^Ekb94o@h+_IL{pg4rM*b0&cp$*3@g&ZvB|~IVU1uxK^Ef+B;_Vsq-)vO zmyN>s5V8l5DLYtP1xC(Y*UKb*g18m)H<}-Z@Chh13NJ(vy6%erN~5&4WhTie-vomY zK+W80cK?)j>HXZl_D@gd%%1~-=Y~tCMm+VdSs*zPWsKu-^y&tJa_lCOZY;Fw3}6Bx z#u8%ACZf(X!r z3`nLCtEAd+(a4gdjbcKH0YQB&Ckbu3-Y7zqLY)eLQzLKBlsVPV+;IURCc_(JK5g-S zOX$y>c>t!QX4#BDnI*Oj1%^4^{mwK)N^py>;7;?o{A-%Xn9eC;(wqGEpOjzy46aRK z$l|7X9zWC@ZY#|~O!f&u&_C3s)it46m-5idkEn;ybV{ld0oh7RicEB*CF&e6ix>3; zB+OZI%=+CaWa1ir2$Vqr=;cSlxcUy7Bud-kI%72Nlxf5mx2O_AkBTW7Ch7aY5g6y9sN4 zx{Hc?B zJgm}%$po~!s2P0W;o*|hJyPGf@kusCr=D1(dy-xD$x;$CWuWtJ)sqV`8|8tNOAv_c z;}929(J66%DWzbLt8&i9mfzh`xP^Mngy>OUTlr5KNnfppM1uRD#j?H7*x1Wv`HzH+ z?<^h#xn|$=#6kebVPxo#B!tPdXEa?u_P9Ab`i*n1vh&fic{Em%M^>Rx_ZWU1oqF&K zb|9bO``LdJgL9;OQh6|Cm6l#_o%=FZIjUZTM6z*f+B$@?#CPu^{kBAluBs3v`k#F> zeN_h0)?IvhK*5~<^dLbjf28RAum9@HQ1KYU6RXQJ?b1^R^*`Sv2D01;dx4MwkClU9scR`BJsIduqtgulEl^Eh(^`Tyd23~i%lsG$B(s3ReF z3FDD$xUGMdUk|$oeQ$1}IP`trz@gB{G{O}P^M8o>n?hWjLqZ4w0db!(!u?eZH`*t97 z5B#PDTJh(ObGDHYM4ZfghN|PCNG29 z>?au2U1tkkYDXA4&J6f zWx%d|sgc(&JCa!L11Du7C-yr zO-Up0B8?0#8gqmrgRk>AOVGaoy+IGf^@L0jn)_z&f!)cz%G(98?p@Ek>eez* zdwvM^Jbo5>d7y}oGt$O)KGBa3GO(cGR6@|dJg&R2i9V13G=xiW-^6RTm5NCQOv_vLGp$S1m4K?x2g(6F( z+_TVC0N#~}@`$m0tw;pl9KzAzCu+2+5zf;4-yeM43*PuPuIlE0~8RRE=Ai! zDA)jO*degkBJ|+z$X2rSzlF93_pfRIlA$m*rZOny->L8B?X7*CfDuUezucP$?jLdQ zzmuRGhwS7|o!>{%_H-AbJ`mIZROAkr)I8kebs*Jvq;$>v=^aGTxJ|?AAA}zb2Bq${mlW~=N(F~gJ znaw}SbFie888$F=|DNoRvRRiK-ef;GS~x=r$B6`tf>x0)1uDXgZIVddv#F*8#xOY! zE#{aJ&@t%>LyaPif+hw<9E>Ck)j{`H550aMY}idA;Z`X%^fp3((5Ka&ZJqSU(D$Pj6=w~f!m=rU_dietLmTBs3t`GU7GyxQ$pWI%X4$)Y|O@Hx9L?!S!`neR!k%~_DoljSjGz#OXliU;$1_l~G z_-9vKl-|B$?_n>Z%)R4Q{qbA(h;bUj)^?LZoMs`rZ4pL|SAk=}SAqIFY4F1`z9Hmb zqrn!iO9&_UPu6CZpnTFE;ZiMrtqQhb4Sar!L86K|ng-mB>ym9L8rLB6>XS5F--2I; zU|%xeKiahy$|!+=u|2j ziBzl+>sOHnS1hK$DoiH*Ggu>5>i=nCWs~REFGEm7KZ02p$R6?7jTX`!QJJ5A&3rTk z+J^w4NYgZb!#ZIxnV6u^`*x?(uhkrUS!YVCR-?%%#BRe1$?NJB$HqLBa2C{^=}~g` z{q!}QpWz+N!+t@+Tl<2AJp>K9=wSFZ4NO_lo)6Q9W|Q_ zk0lh$Amd+v(o!sw9+EL!*%S@%3;tIlzI@v2=a!zxNFKR?F-S%M1AKEahSpDm;>mbw znO3}xoBcr=#d6686i)Y&38dtx?m}UjbD*Hc%3qE%oF_YbnR!@~T}9zKRtp{CBC?~p zd#R@f^LTTp(=9Ca!Ub!8hW>CYg&$v2%Zq`OwtqiD(Zs=j-^voRZ3U7Bq^XDrj!JeQgF->W?vFN4>F|`1c$LHT1t`c$Z@lkM zz2Nndr*rI@|t{rf1ao3RF2c9Yt@epNUT;(m;( z=?jO>^{<@;(Lf}!RC~hQ*Ze0cs~=<2ADlzOj;B3xr_EK0n`vEW_@9^feNB(GkGs;i z+x-QoP?Y#wW+)VJuwMb3Myh6hg1aYcz=B2FY2&ZHn!RiA#L26hpBW^asURA*qTnxV z_U~lq>pek<{Ec@1_o(ms#d%nPzVg98(+PRsW<5+YjSBYnPaOSw5@j?v%KyIMKe-ac z7gtJlB!16#$*pip?aQ5g4P<0lKd|!~c8T-a7`-Wp^2=i#zsmr(I@2c=L?Y9GDpWN5 zksul_DvlgNqZO?Y!=FK~mbI~S=MMZYpot;%52*QHzLqtLh(-g40`m{_WjdZps-Eku z0S<#stp);Fr-~iuRG?^R+==%h24TP?YiOpPBl0w=m>DynT@@HYvs%!&2Eb8W%*Q!> zT$t*#scgN85q1mRBkPFrD-h4Mc5y+wbm*y{X@#OM!|}ts-j_r8j_6#$m8f$Io|-OF z4~@rnz65A!b{dAiu>t9U-d9#L%B5WS)wi{&V=JZ9Tss_ZTF9eApiiVz0Vsj|8%Y1n z_$`{4YxnXw!XmDVgy3{3%Qz_Ceh(|-cKz?@xMdB z?QY|+*bJ33^X{2V8JX&N$MG9-QR)_>>X6>M5Ln+D(h@itvL`1JCyfJM_4M?&@kLSwMl%+`Y=SS+)s*GrL? z`b5N5r5)KC3cqk`l9`r8iJV58RqoHDXS^hy17c;EXhkkIM(&^^?IoG%kE`%(6WG zQwP?5;Yk8RgMXb!MR61#uYkr=^xnl}Mpy1JB}D;W}9p(+!x z&a5TXQ-Q9J5rd<**wfGXaQBFEd0e?GlA2hx0WazQP2bYi_U8jSS{zzkb%z z%IrED);QPiFDHtEFDkI5o2s}Bq>P-&^=?rgQN1%WMG-7Bagrrt^DZWQM$yTOe;o1EEn!s zF(082UdH_^s3-D9v8k$we8Fi~9mWrio5;oOAa2JmZ}@lAzUTsa@*iV5e&0mm#T2VK z|IgU_tl%e*^wU^>h6K6L%o=^ep@~r$e)3nJKj>dk1lGI%76Mq(Fb|SzT|Uga$Ue0@ zC1})VA8Uk00)s#T5gPd$zqermDgDowF2~{hdhJ!GC-h$+{0oWJ3ko6vj7>VbreBGP z*wB%&97n(n(vmkY0!E5Ln-^;g>&-?n{H?`U`9ryKdA+VrzgR=w|4<58(MhSq|BF3T z{zV@4)P3{-_=~D7Ke6fl3iqOslY6kiBtSzBnTE8}U3(V9G`6Byvw)J*DqY}mB7d)+ zvd*@w2dv5lG?k5tV({M=mkTPm*RNsR1$L}HJbcRKBN-)Qv>YK1FANH1NT?|87vR|G zSG5YGYfa#!$D5$C9Y)C82b|qLl$C&i@B-4jN2BGwK@i$A;VxK_!Nj@$cxS|&JoVI{ z7K}Lc(d{VB*P&fGJ3U+VeP;DQA!~_MVk$dE9(0mGrZ?V$RUYH73<6$^ z9HOnw>A9&m3<7V?FTpQc_r$2h3=4mybSlr|z%^m5bl=PGO{OvMDyO1Ci5cZ(hJwdp z4k5t)O*ZD9?LX|fv?~@i$H(`+p2Cp{~~&oClE&eVU#X|&3I;bU;)H)5!jx8 za#RZp>p6J?BuP|U`T7;|W`vmnjW~srzYRM5Ez>GnH*@#=6P6g~f_eT{V)!qC2t$wW z_9pX)_cCMyvxx-g2jUb99c2~gpyqVQnM)9&D4=6+APLi+-@E33X5cH32~NPuL)YPA^_Pk~j4Qr*a|XzXBNef0Ehw{}`ix{r2UOoM+q})51VsOU4NL zZ=JaEOC~-Noc)(Ln4qxwI8*vR6|w&b;l@;)J8rQDcN{#t1DHt9zKD#ZGS5F8szH<{ ziME;BSpLMOq4Okl?V|lmZ(aXx;tyM$*I?G>P41)5wg}<#GG*^oNuBpO?$*o9qwn_3 z6G#CRkl`1n|I*mh=n^LOVM?U`p|NSwYW~qV5_gEMP@>mBjToEl5;@y=;M0u&Y67AG zlSDGK6a{Dgh;>hZN?eVl+mBZVrz#9?tW<8{SpcwBinaI!^v?iJkEq?6bR)gdxGm*>J3@~0D4Yv!Ka56%CJQZYmD@xU-w~v0%$HJ; zmHZv;H!a$FNR-BVBXON7eLgXbgs%VA2Bs5if01g1YB6Wn4+omMDTG``n>L9w7~RZh z{c3kI5p0TV&RXxpgtn%*{D3x(0(^8i5H)5d5`ojjA~%=pt2`3J!jV~0;_U`mH|>5- zPNn~|irPO2sG@v+L3f^5jyc8U7N0%uyl#8DqdyJ@Mmw=J#XxLJ88 z36eM<{VhUp?YnAwq+ueKFa>w?#gx|JA|ye3xcB=-Ij#}GvLSNWr*4mkNi3xf_EOzw zAi&fq1!GgD3v)-#3G}QGF)Xrc2-RNs_d#nQ);hBz#`X0&%)QymB-*^uL@s=Y0SW4{LhDqqy+xnVg654;K9 zS~gyoG$sPpyl~NN^~{!q2V%~FSJ&gQCL=Xu7!NV(Z|6caJId;eBs!7E7)js#Vyfr} zLMzFJQz-7=B6wiOINh4E??O96LH^XU*rM2EJBN)mvz_^bzdg?G%P<%hko(|PR#L(H z{&ekPmkaV6M`S?YdcLF;zJwa7|3E8SYHMaE^VNx}O8+@MVBkycaC$I7AT(=~=Z#(IgCzztS>(>{XXCbxIpT`Mf78qiQMhRAzfNA)bRT z7>+5a7>7Aj=<2;e|Mw>P93$#39u{Mnp zqXt^D9FQ8a!l`U36PQIdPT$sB@`++;SIcj&ES@lMqKxBRnPSI(_PA)>hV2;B1x5G0 zoj|zb@_|W(Ycn<}+9Y+`iAFOW-&l6f@ECiOS3_~IQJK>&%BPgFVE|5_;aTOB)O0?K zc|UT$^~Aemgt5pDn%IZ}doz+E=mvzA^OKgJ&#={E;oNOMmv5pdBbTPrR$f~Qo&kSz zG`6ZG+m<3Zv$yf#ab=_MRD#e{(R5_!?;XC^6aiiH)8e8YJR&s$kK+T_}-Rewp*bvjJPq z#C6tnpx4=7^ox==%NSI~H<|U|Y!7`r{MrZk`_EL3i-1?3!l!?j&U@my>ac+oLjn5_ zvd#!~QE5x84aPjHhSq%rR%d|abB`fz2@Kn<#%`|Fk^QdU&k_ms6|y|?&k$Vaml#lI(>kpWkZ^D4RV_``Sr?06_w?s;HnbD{0PDMW zTxmYaW4Y&=5XK-4^(zZHx06JQi8LSCwOn!2_8kLu z6I62BOF~L|Ie2ugaz$@K{uC%I`Cjvm|% z#QJk-D1aLrC9P&5PysWZ#yw{U?A?#H2K){>fkN)(-4`zd=M2V`JXZJb2DK`tQ-{nXkOBk6$^#?o!twH+tn$_R^hc$d@yCd^&4Apnk60kfp3{M;p z<|_QhwdJX#liYvaYd>n|#7hvEG!Q?{KZ`lIm{yti!KcNtcGSVFslRfi2j0)a9iAWK zLXd4^1u`F2WVrr8mEDF#YTJU@CToqsDljnxCE#ujWY^n&ZR!0&vaX%^ybTEyZi8cpYhzB>nU@_82vP_Ls1Z! zUOzVWsmAAO9YWG>iiMTR&JA@>lsu%WFd3u>HxSN6aov?~v=7eUlzFM-9aC|LEWuwN zn7mtve}8vUxV2RB)+ochxFd*-WKEtG<03WJna<#5#hH1dn(OTZe^Kx2f6Ang)t2*l z^a}a0|EPAO3J_t$6ZcT*^BI&pBx8Fh!?f+y^EM=t37FMS)of@X7>8Ip$LC;n(s3PT ztNp%CU6$jx#C4?WGJJ36uooQ>rU%c~eLWNA^YC$wd1~HKbJRGh$bu9?Nbmsy4TUnG zQ7np)Xo4_)?i%@#hEJ5z5m1U6Z;JrzJiS*W8q%8DXlEIgL-wZ;B;^&0p}joD+74k0 zu*dz~cjrJUC=_hALU)wa8xGoE!>+D6hzfOIjVM)`AWb~736%mK&06o0jnrrZh?5+hjEmdhq z6DF{h4#)&KM4iq69Fs1#)wrrJcFx=ZkziYL7}kawFa^5W{{2KGazWSNZ=aO!6sidT zm<}2zKBe=`MJ1n3?%%(8d$cIo8^D7hi^oj3q`;Q;7&1#m~O;8Qi z1mZ2Mue$t3f|vrJ<5?5Ng)#!E9ear+)1nJf(AriUbxZ1w62iN;31Pjm3n!nY)GFzMqC!q*SY=_t+IiVm6b!h zg}ctuP6Xurs?{t~+TIYu@AtZWhZ+NRQbeTsp#Xm$={&65AAKq* zr-V>noU>pFDTf1k{5eO}@2^y0>u3QACV~${x!NDv+Hgi&iDBQ|mC%dWFI_&dc&bgR zgSQGIT8>eEdRDI6&F-N6%OD>^OH>ltA(O-*^aTjMNqHMji#+G*4#f<)9fZ6e5ZTWr z?SF8@u7La`D7KBd2$EO9(_bbp3<3*>gtCv_S@1i54;DT9 zrx71InF$rS45^qhwW1hTWu?-Vc96JLq^g#xQWY&z014ONLj$j>hki!{PJnQ6G( z;l+rosL#fc%f}BA;kK*{Y9sDj6@9(*k)|-#aBKe`yNnp{QN%EAEhxrH;f@31oJ!wRMbPzX zhKdY*ezuRp2JH2MMERh@Tsy_HP@_SGE}v4X1+5 zEVL#L*B-P5PxErN3XbeSDiBt)fJI{wSk@=+f1zn`pn_Cl568eT4Ja~WVxihYke7%* z?*I!qB%wl3I}{Vv=|nusCIk$yPV2a$TLu}1XkP?(S^eO9l*sYdG(McxCbEDs+l>4c z#5EL~yGE^4Eey{Gfm54@HBP+{0+i4QTwff6J?fYlI@S3WFFFtUCx8=Xq|lXbk)4MM zevU)fLJ<$?8y&ft3(^f2p6;gH9MXZbt@snplc%V@$-Fp*l8Iaw1xeLTPE#p2SW6|xwCNK?c;fZe3s(t>%kxkDc6Nk|2A$fQSV%pi<|K4zJNJwBoXJoHUMyM+fh zI${cPf>W~Tv_TLif?d+;ls(l%9>A$WhH@gtc$SMT7CElX>yj_OJ+PB})#bUd9K|i3 z&bCDQNsWDm1kT6cL}F$_vu7gd`W@bYyiB&oU#mYJrJw4wg&8~>G)r0jwh-Ij>I&<$ zKe>Xf2BkIy_Y4`HAsK;M8h8{urBb;Wn$ErylwmGc&V6nmO^Wy=b)Y*vllKk)EiG6>JgWSc+hdDq@oJ;SpBTWMVDDh4V*+R(4Wsiq<4J zb`ELS_n@mUW2+c(HTHaL*Chq&?cb)JZ3$+^df(JSqUVySYKa}Bmlul{PCUU*&1r`> zy1?3$tFg^-0$K5-S@rCMuqbGf=v&|p%^JD72Mr|aeLJ;qyo^VQem@+QqRGyF1fF!X z7G+wloWOEyb*2Kf62e*aw=6iRc7LU)Qtm*#ehH-!3}j>;Dju6Aw4(T{#N&? zE8T7+tIZ0fDt!1&?$#xnrfheLXVLrv{bAx{;@)a{(F3i6${YCh?#MV__hl8|W4A@l zv_Lw+NaYTbVFZiy5AzDYdiQQ-pZA`b&_}jP_gIdMmJPwduzU)Q(DOl>nh>9^jqz2l z19cNxHIf=Jjm$yiTWR1yMR*efMY@`H@UYBVFy+xfYcP!JT%zv2s8h%~78ivlN<6=o(E~)1dj*f*Qc|(%*iTFnzd|pSts&U7XuLt1i1&h zl5gUqCs}G_X8{LZJLeFk-J*+UpAbJh z{Ar!R)GxwoR}=8bD|&*2N@}gbtuyoQ?bUCkt1y@yezbzCxykiQ*;e)vvd!za>lZxRV9cyiKgJv9@OU&xd;@W=r_CjM|aNm8r==-s9TvKHA)Ej(|=xJRsukMEXAqJ(q zR%_fpF;v^OwKP>+rtskxI1ycJen4#vaXaeQ#j+ft#=+e0td2uLQh~EJbKkFqh;ZD&5q>Xjq;ORGJV(KBT>hidtwzD}Fi!QpUaXOF#G0tFe8Q6DXr zFYJysj18dG+Czk;MfCrY5Sa=Wts8!3nwv%ToVFfjM){=zQPbKJCD{75SXr_|-+<>e$9n8+qp~eGa+V1#d-P zwQ2zM5Wu{W zJ89Y~>xfTX?K{EoO}|fy%9uauYDfk&_JLjyH{YLn))vQDXIAJ0`e zeTfWL3gC?X`5v^ApjtpNruBF1Xv6Vz+YXi*7at-K1uhHnJWaiz9DGemwWDBbLrY@s zU(QRyxhzecx}&(~@|%g#+6ogEPCgXgT{)R#GIn5Bow&1$X!?|9ns#ke`b^))sAJUR z^=I#fpy8Dw$=_gZVm*KI!Es*M`QF6MTX3%S?J)#Ez)=?G$?`%Ps3T)N)wn^g&Jv+# zcV;bN+?eKN*X=@Lw2fav~UgV zb#l)smJCI`{GCPf(|@OYpLt7MH&TKoe_PlO$o?~83Q)2Oo;J);=?0Pihrp6w7W^Q# zj15)5KxZq?DkVuc8Jgr0b|lY0DW#UR`h=}VJ*P4usdN#_Z(=vFmU1uCBW-C|Y~nyF z*vU+7L#%N3<-P~qj*A8>_UOkwJq1N+|9gt)Sh~}-ZVSfU+F8$JlzG-2PfoGog7kz} z1w(k2t;}(%OBt7@qR-fC~v=GK{ZnFVp?P{P*l zt+|dbplg&rR;Oc;k=gE}d+u{DFZWnfyq=GR!qfUql9%bv!jKcs za$YY}aDOXL!AQrTl3ZU)Wt@S2BtLI}kifIUnzewvtw9_6Z0FN}x*h6amd-8gz7aa; zt`1oH1ApUfm!+mZy(nbK9$OckwVRNBPPqdZ)oJqq0)6=twA=RS3sJNhAjO?GPp{k- zSHF{Dy>@*V;U@Jt^Xix^6+_c7TQWaH%U?@n{1LegbJ-K(c{sqg1tP4arH^+;o~(ml~PtkKQA0u{6HWkeNV2 z<}m?(;9?ix%;!Jnw3+&}SK=+uXgqAj>OBRM?pAV%Azkf}X(NEkj4C~fo(bbw(d)>LS?%%Te0|P+EYGjH z=e26A60--@KFqR0fH{U}kn2m1?d)NI0-Yw4ftALQYWcR?C$CvH-tjY&y}QgPB&%Bb zw%;lK0Uz=iei;3!ih-B%F+R&fJ(Eusb?P|dpqoS%uQ0lpty2QLtpO@uB+q6orimqg&1f!Oq^rK()0Ph}PYDWN; zCFxMTr_}%axB|D^G3M$LE9OuAL)jfjulW}IGef2X9KWrS2EoE469ulrKD(q-zI>)m z?kojNrpGSwZh@I8-rpC2YXAz*&^#}LMDELBZU|7- z3YmbWa~|!~*pfJn#IB8-nx}`Yu!AidzY!11TmO&}GFGK-VRsWYGAHLa1f$g)j6*9$ zxr!%w9>S>Hb26*H(6?9J7!vbb9Z$7dvMA81L@4#nLX^posrv~Y7KP5KBG}5@FF(`a z0x(8mMCenG!_>9p7cm><3?z-w?5xt)0(z+GjB?qe+{D-t!(Y>~v&y{vC)XsHVMfrr zj?|Itq_XSi(|#a(R2sJ;IUECx?gn}nZ<#Ce!%pAt1VVw(j^uxXah2!70EI}UGZ@SS z1`|=NG+C{i>-jF39z_qb*?1c-(AK(h`CK7wo1oh_YB@d7FSJ5qv;0F-p=ZG}!w|}Y z1XgDMinA0*vy@TBm{&%lcZM2nGaZOLjL~8354VoQVhZ$lQ2BhZKfLM9eM%gCx{bo& zNC`B0(2{;PIwYM{z*Xp072D$dU=;c}wABj!;iZtlla0tz_7X*=AY#lEpnbQsD<%H% zyD2iSVeMD&vm}U;?E+(C$tTs;>I*7`<@B|70b@7!_xIO5(gW!4A84#)n3DFy;|k7_00~at;eDe!X@J#0Wm)CModor5ZCqUr0Hf+U{EZT2* zGF5M0M49DMTv0sEzf#@Ty}w) zZlc0=qXw^UwxJ@cz_(YtUCz5N5do>ai5YwxIH zUX7lv;b+eb5B$xh4nCY0j!sCupT@c@e7`_6GN*7jFNWHP8#mPPF3$- zyLZ26exF>K(i4JpGSueiLU~inmGY)YrvjDbqTHkiH4>LaruZKX5-8srhx_u1i62I_ zyvlMM@Ga_F({ByE7wC*B?M#XH(SQ}cC!1X~5b$gLsvETpH76$O+muZu6I5;?Ku}tB z6Awt{ZK2B_nn3kkw0J8Fl$M@w#L4RX)Q*GU+gIU}PNqX@E09W!(}uL(1(hrFDZ=YU zfr2@8Y+ZAdz&n*mWXgZ-_Lv#{hBa*3I6C-9XV0LBB;!L0LG#A~Aybq`ys=jGn06JaDnPK>2C6wIxK5 z!?5l$-_Aq_6#PR>_y;jzrIF5Q;c>6xD}M-kfFyK(M7G#kr?*Ybgd~!1(8AdRfEyB1 z(z*qoe zdJiR~7=0*4$ex~;(^(z`p46wquZCO~#KNy$4!|g}mPBrb0r7P~(ifrb=z>!dZFNLW z%hH9*IyNlFSVoe+;NjsfW+|%L9>kZ0tMg0H8FrI*PhWf6`qKcBKl(vGr|O9WJSkp? z)nAuuT`n)1j-0+CdD4oPH3QuoT{*p)Wwx~~*Ut_a7OGBq3Sg>!DvWYtsfJ3Bn`dsl zFSl`v=jVtnOhPiCMqQznKM8#zd-AU?4`>3GEg$QaRQ`fPcw!kBK`@u%vYOWaWpbjThoa&~3Oui!%`ydbK#c+LM2`Wb&SPX+gRak= zFhxY6zv4iDNKc<#qwcaU`6-T!m2N(;&~VPBO3gm7Bw@y@FqjOe%tcwDL%z&ndJZi{^U<{$ zN&4L7+fq+5o=_@NZ-=a`YE>!z6I;O=vc9aOW>%GJdT4kvIHFktN+!xAO$1>9Z4;{Q zNy{3k7s{Bh4{eBO5j|(jdg$KduaxzwWQt(WmyE(CyXDe!ln+uyt;&&0Gm(M1QVDcN z+_k>KJv(B_Y7Rxg+IU{eqCc8ZI`ah_1y3fT_v5T!*1n?xRAJzswN-D`-nU)T&QH_Y zKEPvZA9ZO(>lX192o&O;&Anz@BxI_3{GO2ZIh5Q`GUM$ztYGCO%S!0cgzAzJIIGf^ zFuLc-*aQ2#qT-ehQ7zBj5G&wVhQpCWlp>;+6d#}z-p!1eL-%uUaPX9D+2)M#fK1W6 z2FaOq-6WTiG}C^Nsu{N=C46h{p!!}Fsc~!f+%RvJV$GtJWxH~>R8()TdeV7n^}#P$ zVpmS35lQUy>-1ieOh@ZY{Q-tMhP%isQPd{J|b9Z&q!l& z;+-VESn!eP3$~K*2!n6_(=EN(jH}$ggiLxW&aBZ)Tkcl731HP06Jf!G0#fRWA2se2 zbE8@Rcf+&OIQuwp%oBcK3@#EuF-3HLcLB!E8=N!++Hqb!5D*FGr+1lAh(xZ-3n%r~ zvgxsK3e&jzx>UF84+lm$18^{>r|PjrQF`>s6RLr$z&j7kbMVU(Mu&nQj(d5)V2adkZUd2Tc#$;K8j+L28$_x zkW~kP5o2tJmK9pxWk`Ck-^QQEz}7ZfkW~b^+E&Qe+g2t$NOYoUISnJ#4y(lbr!)KVNn8QE_Txl9YmdB@C7Sqa)kdF_CFXN`SV{{PE$v-SY!tXj#($H{oPviuTx;4*>LcE{IQ{2w!9vv_PU%LZN{0lQ68C4eGyaup*aoN9VJXTk)*ldq4GX{{ zjL-&vJb-NU$VkO|u5`W$u~fn0R1LdQp$Z*^!wAq_Ys`o!qB&qnrpyVo%{%2EhXxCn0pn7#acpGf^8$)>vQ)sDiTow6b{_)w|s6IfkcMwtP+EwI&E1PUb<%{ zeDJ6<;$3rs2|6P05W%S*GavHMH6ZkeN#K$gO;IVYEs$$?5l^n1#|iXXGBTEv$XolP zBWLv#W|rVk*9XjQ<;K&=*A1DUN=-qOvdBp}1`dLsnII%b;AcEPP{ssvQ2_Aa@EaLe zT=Z}TKt)yJD7mZXgHaMwS+2lX_MVVr9GOi1Tez8fnW`+a(7h0`5Iy0!9<|37hIy3Q zYlx_T*gBAdd;A^({G5ZNM&v_K2 zeGw+lGy1BP_YrPDm4ICH6x&|-s{paao(9Py4CjSNyf~ygqj3+xs5=0L1BhJq6w?)x z^(&XRV1H0IHWtE;8|2KGo9w0!oFjpwVi;eb1lE4IDEE0%0&1F}DoQ=~+zk{!jH0F} zTmOwbB;^_`h-Hl!QUty1%%IW^^376JmQsZj1YjRAJC_{qV*X@f=N+pH=*S!Vzpcm0 z*f@S1&G~evUH;tT-ca4F+w`U0=)F)@umtu8J*h?dAm+^-smI!&fPP!ais;6Phg(8H zDc9F_G>=ceNjMUx0TORfMEV#3oQWZ+YXO;M8Tb>I2vK09!D}nRUNqros7TSeDu*4wEQ2>R zM2RF*Hs1RQR@KVO%5tZ&$@_b~HrjF?iu!j7ljjv>Zz&aF(^tz_wS;Ivz3gW7>fBl8 zCxV{efxNjXvZ9A7|3Rd(!!WJExTMlY1xzP3NQ@T@GWDue)r0gz28HOmqmImkdYz*q zAxq={IMg6h%sT496O@;m3^^?B_wzl=PEUR} zoJ7(*au6~_B5^Z8QY2!u`4Do3aO0Pi!}{ef14vb!h)%@6QbK$1LuLD!O?W-y5mn0? zrq;F77D(%o$9dAooJ`REAMA{NKtinww~v^ThZIvWGXHqXYPV9OzlpawqY7i5uK&{d z;)%(`5C8y7Oi}eWrL7K5(b$Mpn`qe|1vCe~o*ti5coE?e;y)Cr?QvW}Eb;thvJ#2J z2&lNk5X_|1zH(yw;SDv?$Rh9&2<`YRz}+PB6IoxY)fS@-m(~~*loRSgIm5tIg#+OV zRyCdbrkXY8SN`&-Ztez#^bp1hR7ML0V%*8t?8GtZANNy*3!Fzo>?|}R)a&-g6JSEo z$Q%X4gMEZ${e2@WA+;XM1`4p`Y#mcMdwqZ^0444iu}0^D&BbZn(iLu_yyFDNk*-91Dp4t04l}d}al{&Mmg^{SsYoV^JC3U7vbwi4qTQ{(7C6h9B ziu^D>unv%7z{dF{&`2~-@NkjX_VMPyB7EE@8hEO<&YDcQ$JQsD_l|1pgHu*|ONn6^ zuEERE3@>e2n11&+;P##bxdXw(PRF99dG_2nbgNok<00hjJ2aaRC1eE2N{Wlv8R;78 z>uc+?cW+Bq1NV+T`@ghHp8~KH#ynjAunA%b$wXiP|BMWiZunDHMRe!?UKuRne{=r7 z_y3Omy#)dQFdzyMNF*ltH|(350-c`vcQu57N&H(^i@E=KxOy=CzSaLdBRB3Y|L@OE zZdA(zai7ziLm-G-F=!v;wSHoW0Lb%$(6|Ml1LXgDhMwhs+f~IPZLIrR;r1CPvSSaM zn=t}i+#~7D1OZo&45V3PAhlq;maI_v^6Qm}Vv1@P5#K(~)Dn%{!6#xnI2Mu(_=n=0 zuJtjY?~}*sCFiVB4BQNs5AY&7Synhw_7>J*!I9{G@L!K!F+p_sIprR(%JB-q{bk@& zSF0MeRXvYCTzm%Hp`A`ylbL(j&4B(j6r;bS#Fa&6H#V3% zlup(6`6^7;Qj{|_ZLpA1?NhhE!oB0_3W<`NQT~dzyKzgszRl8zDUzR1z+63g%7+T< zaqtJ?fS=Sr(?={LP~rJs!Knc1S9T@=%B8P@41Khw+|bNSmga$Lui~2}NuhT!)K)dI z?|{l_$phq;Z`DxvE1&jp>1lMtx8)0sR||n$U#P1=m#(WpX4vQQqP-KYU!q>v9RGDC zzhU1Ms4b6r*qCCxy6(OqwR6U^5wlGEIg}2I$D2hvDZ|(ziLN?0@dR7d>6}Je znj*P5^K1Mob0RXYjaO@2%kJxz?CNI%7>4(bM{34t+UkCDxXNpWcLYZ2!c*GJn}5!E?D*Ind@t?IA^ zby^G28jenT8xVaDhs*D4%>3wUd4SB~20u`(`%`;n!1)IWQ% zm1Xoa&2&UadvxLE)(9PDbpk1q-FgF5G7(uIkP1lo{I&%ay_4G_|2)%HZ9mxM>+kjT zxZV5s4QIqIPs$LF{NS39*}7MeL>HN-jMqtdZZ}J@-7Pm;-K(knYd_hS4|Wt_z>D>; z5ST3M_DSG*EKBl@=Hyj9y+>`f>T4*HY*sr$%PL?6_`Wh>$SUO-*>!>MeAsKHK*=t2)aN3) zXfD6+p625-=tsdgep(hu$Af($9iEg!^)mbFW>NdRZ9!IdiPw@@$>_JK7bCv%YB&Nr z64`;MD5j(woA*(8f{}-)T+RrW*UAvz`-fvU$L^{Zbh26leQ-#ASE4c?bg;E>a1Q`b zdTfAWEm9mf!oOiafP)*Xt2aVEkw1W`App5K0wW?IJ=7n50SHQR2|3_CYiNLX(M-Fm z5nv*K6McZO)x$SWaU+RRS+S#Tkr*t&~p6==%G!FfS2(Y_@ zLc26LwA#|6QTFco^2Ng{Ywp5^+&-uEXjy%y|n}e9?n-?bgC&wq(p-!7OCQY;`?A}gVIj<_!3gF+`Pz5lztIZpq%(7nlM;grIG_6F_ zZjD0%?|z*r{ox@?m>M-IOI32#DjbM67e(JI_JgJkN~^8WGxE~AtPxQ(O>F*E;OD|WO}^#q(v?U(r%)u23m9d z<5tIwc}Pe`6p3s|BOUfZiq=<0j{Z`y6lxlY0_cEW6oVLpeDo({I|m9ibFO-!0q4Yx zMR-tCJG44h{jiYT=x=jW%c@Tp!A#0&8boSfmJalrPc|F<2s2*r&*XkSz9Laq`CWEf zF`@T@#=!c#7uo*`i|I)o%g=WIHtzJ4HO&Pa=J|t;wu|K?Seq}ix^1|eUDe>u}B0sZZYS@QV^ zOh|l>-R!pFJ!18i6@XtNIqF_e#`aQDUX#8aGVn{W?^Oq(EQ-1a8)5jy643r!88a_k- zhBPP$X$R%K1XZT~v0C)}h-#516Pk6v9G zeFX=do3Eh#L*Bur%mnC9YZLYnsXbHMisBw=eT(9rQ&f(Rw%B9Ms7r;xmA5RF)Fko) zr3$}je?O{M^JeQrwTa*Lj+N5g+7HNVHMTus%|2@;LJS?~OTIm4Q|6`f^n<}7#vfS7 zvj_p9P6_vyHc84<7abyVqhDZ2f;d;%yZK-as>3=U6jy69U`kJX`Q_H|+!qFXuC&X@ z9$;2&+A^X5M-bP;!{reW5!2ovwQxO)+mJEbG93gCx8%-(80YpEv0+CwT<9<=600P) z;<#Y2T5jw%H3Lwl4oM~`H5b)wo7^6ljteLg2Np4%?PboYl*&c&j^jT!fLiw?oz8%A zoKmc|-MxD|thf0+AK6v<+ZV6-^_{gk>Ptwv&P$*y7fInP5c1Wek?W6nmIT3g)|!vx zKj0cmsXNp_SSPK)N3?xfxd#<+^v=(c*|Xk&1Dy}!gVVM!MxEGS7Q{!s0iW)du-p5c zS4c5fy?yAn;6hk`y?Z#RXkL7TvRl( zswx++t|fS0nJooRYE(3IDRwP%4e4U&GSaoDtyrnMNIzFy_$?n-hP>dxI%m7bi?VWz zjTdIvO5)Fz@ha_>_b&go@wogvSQJ0Ebo8SutZ+(q!Si|H{)^e!2l0&wLc^R50Fc&& zh*1;-$6V!)WaE(8zU71mLr}3^xxm6W=Yv6r3(#`nH#bEMLHX84=zKXRki2B+EzEqR zetw=jVA(o!dO3_f(sq2LW=Gt!$%IU6p5j=RUkMwbJ5&9e2_t zw#N;)4WI3@;|m64Do)hNi?FS_lM&MCbucdKf|T8bX#Vbk-tZ+rcEmf)PQ&@Z!%n5- z%iR&nZrGDq8j?D_IsfZlg#UxBcH3X-2E~TNXEAUOCh2MifRM3;%`c>$gFfJT%WI>v z>||KYEkd}EiNO51b=9$JxqXkf3d+&RAE2}qRO4yG;c*C z30Rb`BVL{ymj(3$ek(tpL(b3Q=Kbu2rE%X6OWN=p*F1+O8n@ZB+2_x<_u7}2X42L~ugt>IO_E&y zxjnR)_V48fOhvZzKg)io6sR`O*Rx0hOqAp>||_QZtL+2_E#~)UWSx zlXmw#-p6_!_jABSaN3XbZ-RLDL}pw9bSX&n?uq%1y_?0?w}%?~Q-77>m}Idzn?&SV zA)$M~f`0$GRq4QfKtj7aYrMBb0YYp2A>07~p26(yRwt1qw0caqnd9N0@wi9k*$7_t zd|P{zgjs`MDwstpm7#R$*{bgsDc8~iDceZtU##9iP ztD%sPFhz^i(9lVLWs+lO^?%ls%>uLeQj>&eL(&SKlW0SuBDyPHcex4&3y>Pc3kEL! zPL>Yq;c&VcTzfZluh`IUdU9Nkqnqlq){;GSN zXgoXH2%T#E&K<>OU=d|h#SRPkgTq22eu-ci*AWc0`Pa5hu+V0cPrEQ^)JP}obUHgu za6b-jwD$X0l2}B_Hwu?IVCGb|B}y*3GHbs*=!M##h65KXfes_LBN;YPDJH`&GX^sEv-DIH$fPR<1?w{>$9$JKISbYw4h3cZQFtTxtu~QtEa0lTM)j@x7@L>xtT; zEV~?Dt)hvFX601QJG*%#lGR!o(QVVisQ_<5lh)Vig0-m+6T`}EvS z)B608nE7#~+IkYS;0s?yeiwE2UX9r6E|sRgjz~g1{y>5j%$(AX58*7Av``>UEt{d< zF}n^mn3GEGnt0S}E7s<42r0%C%pQ4x4U+1<9Rn;8|* zX+2uwZb_jEZF;54#l8DEeQjivzPUU7c?a9kp@mKs%Ai7-Td8((vRr+?v4w+O9PmTa z=#=Kv-j;;E+H88WezTR&HN{7}gHWPY#KXgJTEE54mKT#ean9kxp{qn8G1+Bh`!em7 z<5S%AR=YHV<^h+}hIS7f42{}#u)5jUz4LL|>Gs)u>r>ra(&$MBo9T0aBa=7!_IrE! zbv652zP+3Miwrk&5Hs@n;o>(a%KGf&+i%wL)%XhlHg^bK$^lFMt1oT44SCDLE!V9i4Tl@OX7R@-v(C-4`S55U6x*t=74T zFq|WFr+9;;krgf$?%?Y z77R8q-DB-#hL|uGOA`Cb#E%wp>>O_x8Ggym{=g=Lv>Rc?(+eMzit#mh^F@?D>+kH! z9;a7SQ`l8dMeFra^D|T3k6AMx;Z7W!uv_#271COp#S6b9?Wx8$x8T9C^}@T`sUXx% zHZhG%?|WtX=E2%HTZ_P_F}oJcvptw~&x@EIGbvm%p&Y_Gp&n}(K@&@yC|T>MxFm@{ z(%|g`LN1>ViKM(Q=v$x|vI6$}6BMb4IZ$&y*{#yZGQDWH{H&M6qSM&Acd#2z^+~!5 zWp_EsL&*t9Sij}Gz`OiV6Dq!?e2Ttv-ME_GO5 zA(&Eu`2K$0WhpYOfhMBXsQD}5;v1G$Q|njQ;oI)HOc&dRxe^}AoG&56^NV(;ST}d| zdv~I@Z4_C0pBDW|-YelVeAmOqyh5L>*&d>5Q$O@=F?<4bC`ks99L}rzp=ph1%kxp4 zITIH9SdZj=O-t*DipeK1j>6T0#N}b5+^U4x&Bu3rYawF9K`kRA6~B_)R9smm3NcTl zCeYN_(bCA9+QdwRGtC0jj4D8FYcw3^wtkU7>_cMVDa44Gd^I@_IKA2%<^H^tYI2@0 zILuCE#bZ&`*7a-%!D~ttT9^>JpJRt)2?%odwsQaz}mQVtqbQqHn=1_!lyl{J9k$pQ&T61M+cUtS0#&GBGFGR zkPg;INMIh=$4FoG71rEozCAeNQ^6%&6=Gr% z;XT>R%F&DbH5nvlp+gB+4w4!dFDefb$OWep(`0E-AXzIb`pjq*kAl`r-~v+_7sty8 zbJ?Ad)x18r15h%R&UF?)NR4d)V2*DNZ%%IxZcc8FZq9!8AKyXlC$77@H!_{TKPzsm zMLVmH#$PyZ^HQ`31Fc_67+XBUp#>NR;;T%)YY3!&p$ z=1BZV0!jQy0!sW!0*m~M0byr>z)=10lvSm<9ycLr?jfu0gUA0@u-2x5`Qx2q_vqt0 zHTzByuR_F6Bv8n2#Lpx=$Yw~yW?9(XhfJWTEQa$qW@Kl=fYo{5RW!LK$=mP|vila) z+fXE<(Pm7cAB9Yej(w2fVVc)|I(yjNoYi3td_22J=E^%gWL;&;v_R7jSi(f(lG^x+ z*rKO(O4;$XBdXT0148>mGg`V5J;kFLbE1#BSJ}~0M)UF_$n?1HB#A#6!4-83s-zPx=2p!QU z4mxdi!#@J81WCc4fHsvcE%u<4a}ckDAUPo@?h(FD^KgHdcPUC{#$izKgm@bAR7B;o zo7+pYZBW{3Q@Edz(XX$RIDuTuT%>jsZEO2g;}cD(Vb`0jJON1VYY|fqxHp9VxQJRv zL_f~6bd=B=@vZxC0ID?rFQw)A`iV$s_+|3z+|vy{0nR8s&Ze|L`Re zrnzZg*|`9RkYa#ar-*xHxqHbvtEg0|xmwbKd!<)%1LXK%K(PWN39$A?1_1CN(bs3U zYj70eFObj$7(`V3Csa5R5ZdM5Lx0U!uqQ_P4>VhL8iFXgS&_om%DkrvrcpG>2qx7i z`ynxgU6(eJG`v~C_>&AnO#QhjL(=6)#9#zkoS0CfdLZy5iDVNnjt&|$H0YIVpbCQo zB`U?Rs3x{@%2engHjrWKH3Rw7j+9@wkwJ;)a}viClTev^>BV+z^~U z|6=urEcx0TBuZpqF^hNtA?k4Cv{J#)KS{{7a!GVhtSkgicjZLNXJ6l*mr9#BB2i&3 zr3$1)@};zEfe^XbglT}v zHllSMx9f5*!qPuCug=Z~{if|Fd2*4nX0p+5*b(2@m0#KB&KH5V3(b$SF^74r z2#t9Q!2Mn?CUXSOsF9vHgI%g!zW0M3qF3%g#$RI%?!yON6$ylm0dfiL;)(c=`C17f zxxgjVH~H4%hzOIZ<68BCgB2>LRqJ;HB{H+t>k5XeHD4Qx7VIW|aWY`n=KKY*Ai@H& zK!o_EY=i7hqEqcs2tRK`ML!>!0T*Mve-)1W{xU*BwgVLaB^Vb3rdC$#x5(`=Zg7%U z8KVnPOZi8!9R`aZva9gs$>ZC{Mnfl5RXH6W8IMnL`5|vuYe8c?Ofy&q35rIiTP%^& zaP&eT8KpC_n2t=TpG?W9*U`s@jwF*vomZ)^*O^uar>>;JU=>@hZ&(z@FuGn{H7~1j zc)iGOSeVg(!Qx_bXbwgsmA-6j_GdJrq0zoL9A8YwWPNY7f8OowA+}t^%>KkFc;M7Rwm?^i98fPt#B@uhd2K z+3Y|1ZxU4na9Lwa=Tt4yj?SBsTw1YZHIrGh+S{oU+2ieO$yLLy#WKS^D1{B!0>N!c zfmWJQ9F93WA-!CtvtjJBk22_x32Xn!jXne5eonQM_sLry(=m&x1IdNE0@DSD0n%-v zv(p`rO{=C7`K&lm0dl6125{$*2fG`g+9PFq@29bKFy9qzx><|<=SuKe(N=G}HQ3eg zGMN8?`<(qmL%juKw_njwZ@@eFiyNW>fEQ*8l-E@z_OPVHILp1b*M6FOv7B`qf>zc2 zv;a}t#kgx#oAWq=1*Loiik@vpx3zW)U--&;cmihl%peW(g{%wtg>3-#h1dc9_2FLY zeTen>HshxF-VZnPn3P9-gx1^E>Fcy*#d=UqiiKgFOKy=5@@#2BjsE2)*!hbu<2R_y zPmieutgvKm$?!Cc0j9})Nb+^Cr!?dRBr!6Z8a7hzgbvw5poL3R*uA8qV<-DPmfSPYia z%@)c1UVk8&+<2G!{M|{lEErDqoR!;9(1mamCs)Qb?Y}VhJWVFt{+|bkXs~z8EKT3w zNxn7EC7w1wWPL1FWcEp$z}P)GZe0SPN&ftk_I$sSjM89)k$Rli{YZM0YH?XgN@`?e z98{o44~=MbLkK;Gz*+wLmcnY_sT6cyxMbts+7yiYvt<3Jq83TwXyQZ(b|qTiucD3# z*9CDSv~#hM(M*yg>49;=C|@qD)5#(4=eR~w86qYAgwHn=rqX^bPXoZK(-a$5%fI8;6DXdgvN@RmnjiyNC z`ik{|27af3l7N#2J<8Yz3Ul4$T7kz-n_SBEEBT70V@f1ncx7ByuqON~K=b_=R_X?E zttgrklL(TIa{2tE;#5HzB9aHxxrgx6zbFd9L8_s2|BlI6YE^aWS+N(h8dM8(Ht7HB zV&`teb9vszrmt^fEN)|1$11i3Y!guiWYa8TXJd5J{>^#V7wcu_-cRegFMho9&1*I5 zxnN;L=XJ05Dck|Ifp<=D#yI90YQ0*j++2v3N}eivQ+-bxASTm|3?{b2Jq~8Vox$p9bSTt=i}1@|qjANm!q|&{GmRB=Xpp@pyrys8 z;B`M#t|KDLMRU{KU>nnD3NsoS^VNXDfVAdfmsz*#ecBhGlH*W~D;DePaB#$EHX}SC z;(D7RD!g>)gd*pq;T=`K_c|G(R^K)skoUP}L zo?JVI5TI8EjQ^IJ77TvhEEv)hh)?b44$%D&ZNKju0dLS%pzR|Yjm|Cc$wrET<&8Gf zy?~$Vev@EN7FbvmUn<~u<{5AJzV6RJ>^_DLfKY*rFJ$Wv@La*5C^2kX$WYaEYj+aU zKbGOUzdAEi)-cC6))LF&h^|!A{29dkun&R72uKc&0|zOS6i~3<@2FC>216p*6&8d9 z2sf))&da0tnyS=6;2aoc^y94Gk+D9h6 z^0zL~A1M~D&48d^zRj8*I~6-RSPxuu@F9@FYX!g$_VjI1Z(y}SJS`|iJX-&G*-f2` zmCvB3C72tcMMx&l4*|7*MyU4+_cNA=P5>5gGO7e06lgOu3t$7$lf}aydjL;E= zUib+WijpKYn|MG|a9mAJ0Fpwpm06esi4j_Gz0Z~$&5J{qrq(ZkVs9NSLW-HO)Zjt7{i`t5oxv~T*@0TCX=Rvv!A z?8yBI+S4Uf)CX!RvM-z)lwWX4Fy9~5d^L5?x5*y^djoelXAJMRx3RQZY2PpJ<5|5( z06^NB08bSt#9&hOx;(*PctlF&c=}bY0X}m%Y(0c3)@ktz9rRmhgWP(&ej;l=Ogp-+NYFpIa6k{>kJSK1lly!&8a9ukp>UwwbdVnYy#52W|L<85i!tZG59gCSu+%ed4;?j7&GWLYF`H^ z!nBZ2g4rnQhyPaV(f$o^WuV#3oOUiFp{BQnISjK=EhLRXZ5GpnpThN+;(;f!}XjiNz>Jx7sCta#OuHWpM?OkSreEMrqynfUx6Q;*t-*EA&TzXEu5=l zKplc=h8(@74MIX%k!FlQQj)%Rkb%mEG!x_tYuwM>&wifV%Zp&M`dQ9n??(O1U9cK| zebV*bZS?#``5QJFuwqZr2d*{lJ`I_PQdWDCD$7`5I!y=M1QsL8cbb3(g) zh4YEfG9DH*b##sMfvIBSer`4%$$(CxZZIJn=`7J?zB&}{Ae7DCN-W{1)qwn3ETv}Q z5BP&C2;*!69|V1(g5|7y{xq?x%zjxlO50L9SX0aQ(@L?sgAV|Y zmK7#0ClL|CPtOm}iZ~8FIMn4H@z3$XipQ(?{y?H6!(vfUNgIa8cdo4LxGXOenrWF> zS)3}}yj-FthJ&>9?+502kujFX7X$!E3V~cE7>}P+UXHP>wu=nIJXe_?D%>AAJDb z)HDOnGSj_zTRtZM#^SOxPm<%TC}ozTvm%0KspIm@&$hj^s^d28H)LF3!iv?bZmv~5 zV$J&D+Nly26tHM9eQbE_DOk`e_(TSdhJGq{Eb z1GLDZqJ^4#Q`D8ch%?8WHch*A(^?b^zyrSwBM`a24i#7-xo(d! z0N6*RvP7X|3Lvg$S%?@e###NSrsqM#W3H!Vl38y1zugF{*M3Npt|!GVRqa~W%Lb}l zm%>?fYm4V8PUq{+=1CA7Ht$DSA6eekNfubo=gdtQ9_9B_(jZ-} zz~}C@sSe)UnC-UX+un&=KVAwa;ag>`MjgBa^9F}#W#xUx`6WUH23P}4iwNwHJOkPL zieNce3fY33Cr=8+BGY;UkC~-Vm`jg=p4z$EP8*Z0^VPu zlVq7}GQkv6OgGh3mYU`wJ2BmK)|%m3uVki~a?LW!F0;)h;^gW`Y>OZGwB)QN+Zvml zlW(WpcC~{8`Q9PN^mO8!gmS8#84%*Ev%;NoPQ3H2aMQ)UFKc8LpnIV}%=Tn(bD*JK#m#@39-D2Oe1cR$61Ns`hAD zukzSq>pk%l@7bx%o({N~_UF;?&aYM87S7T)D9cvit=mAbY13Ov{ z2yCQfHv*HEy&f5(f|_`gpBIBJW5H#M5^+2HY!K;>@~Hc z#wY4WolqLIyr+G%Hz9N!P(b(Sa*N*4<8JBC<94rsHT+&fYxpu^aE- z+$raYVw&pmWUF%ZS7Vush6%pxqLiEPTlOu zeYkZVL{U8~N>b{FC(qx2*lPi(AJ z+(h0=jgJC`nh-?-YGOorYSPU+Bp>+Le-W))0OUc1aA6A9PEC(22sPu$@@85?qOx@E z&YHc4upBu+mFuD3H_zIL$(L^j7M4gAi1dGIVdwg+MZ5kfJ|(w=3fB!HczD}ysdXlx ztPuwH-g0XLMm!bYRH#&G^Q~&t1`?9hs`f;#$RdkEr97OE8a2em5}cx>(zFDIfniyR90$hp zk_7=;6n&N?owAIqD9luqsirB^bp?h&(KNlVEETp*+2PRP3^X6wqISgEN0W(Vn1$C?fu3bC=_b?a7TxQz@0 zn=nbBri(J4W-iJ?S_N-zK!^}VK?JyImF~G|w#sfA$&r&xjT$;FTI!iGLvz+y2#-9H z=&5Hd?z;`_mL-G;;ZvbvkpTnC3>n#E#>@tP{{9LRW<{h(t5{h6Rl6wLY1g}6!lU+b zm_DL*qBZAVrk4&(%ZS2B2R8D9bd>heIXlWWJ&1_9RH)EbB!BKyf2xs@b)cZ=Mn%O| zr%tcNPot(!6B?RPbacFGb~BR}Ee5Myl!0_iMZTSmr7$7r1l=H2MvZd6v z?MC|B2eJ4=j=bU05C(yM@5p=U_Y2*~z8B04gMTgIVH zG2}fZ7wcSG)JQs_MJo~`20^S?)#Ajd6)#?+1pV=9fD2brrE)jWKpqAeZl_(gtI{n(?6#Y@J@%5c&wlC-I6=orub6r5wGZ`O z_-N*SJW=!hv^JCPFRSkP?YBo7HM*}!lgHKUMkXy<{MM>fvj6=r&L4lk{Pp+0gn#pF z5C|d-MWtiE8HnxUaHz$v=ea1LC}Q-HvpMD%df8(UgahO`jttL}5(L*oQG-h5p(LTG z)g&|;0$Q!e%F}&$_IEqP6@|23Z}z=eW5{4oYcv|J*%K*?#ftT;!KHQ4nZ3^Bx0Lk-nj!}Pc@`-g8%8gZtaxtV%q(fv!$Zc;U9=2I;q)j@x2 z_*bYTkqV%a2C9Hc2!4P{E@T3geAspP_g&AK$1nKUkpG3 zAaH*dd_|w;{6t*yg>;gGo^azu4FGujh_O(}QPWFW1F$D}Ny?J%xPdAlBBOMrD8i(? z6;EtfC6z%6A$S8*&g94=-z#0_3nkXKw4Rp&@fT1J5lbCNF+SM`L)uXU8h{?pf*Y{{ zF|1;VW-Eap#@9d^a zt!Tu4v6)cM4dfnSeMMfziz%xcL`9#|S5d?sEQ^pA# zDOzY%wpc)rt+=T$9ssQ@C#*i;k&&qPgm2l^M#nW#&SfHtL`$WOh>F)H_I-6B)795bZl=n9r2vs3YJ z=)&Gl6;v%u_}O$$aV!mZ_*c|En4Ki#=HI}x)272e?eWn2`(qtP+t|mkCsCi2 z3XJetX(62=esV}1m<$F~QzDB;yTx`ADX0az#c!d;QG!~)5jO~01V(~?`;S&4$wM7Y z0+had!GOdB{4@|>UL{zh6msa9&jzY}{+7ii9g)DlMZ1uB@{i#0^NGk@kUnGVjX;Bt z$RJOLtwU6{nM_gtZ##4FL^ZU~Xo6{XRc_4g{kgh=3lW3$^kQ zV?i_kM^$0&aUg14TPKw((!?Nzui4b{{{G5Uip|;yM{gDn}MMXgcYtRUtagbXo=BXKfG zD@Tz1(=2@BHOxC&pA!GJu&??nMq%-%}PY{T8K&+ ziAHsOS8BR`mNQiqcJco9byGxoWr^VF%U+NB3SNN~k=d=W0&P!m1Vjs(Wic|={_^sF zKhhb=6vha;SONgfKCqJjBV20^Cnml@1W^X%eB&2|MHC7fPEB;0RI`aQ+9Y;Qu&T|) z8ROcB#d=?JbcgU?xVKb|#&IvBh@#bJTRNL{Ic-DmaCC2gjBM+d(sD!sz{97#9y9Y6 z*6IUu^^&4eUs|FReS6nz6X!BAg7|%l%N9dQqtt`s(h~7PkLRiSM+ST^+HxUnCh7Ax>6#7_#n^Mb$$GTxA8+1rqEVNhK2#?kqF?|7K(gyB47efwZuIzJuHsV}!_uPTHWXGZfX zFPVajb}s>JU@PaH9Ce}Tw)C{X>>Cp`g_+tG3KqoV&Z=R0^S(-L(XY}|W9^tX<_~%D zv+1d)3>4r-xzNN)G4nQnwpjN)xyMpJ{F^_WTg2y1`w*gHAri};;uP4k5>|5wY{iTB z%mpvtOfuP8EZMo96Rzoux84_bK)dhQ5q_;>WtMYW_Md&PDM{%pYJXEC#Ku%HO3VFu z^smsH$7H`6JKGtnBjsu{a(4!^_=IZ%ru>%rj#KAGz-r^U268E)+veDtz-FT9^HFcq z7o81u@DLs-a#)cprC4PyvE-&dRQN}?{#Vo!CjHx5G$2{FP4?3+`_rK7T-$f0^Nz>M zS!E?JvF?`27blvdMY+ruTpNCUch_BTtT9ThKpPdSL@u$xg@*|fV|1nzGT87?MjWpU zGr)ZeW$f|yp%ldvwI~M_RCovvFeIaXxRdoWkQ0`Z86XfsGSFaB9kqk9RDofk%8o6F zE{jeWlQh{Wcyn9E0Z5Cqd-j&92&8*7wP%u(N5#}IWOgBka;A=%6qHZVy^gUqunDAP zB=Doy18PAjmug#k&Ot&S&F!?12mYG9A1{|x+-pP`%qkEvDUu0GEFDfJ<%iSM3}sZv z;M_G0J2P+9+6xQ!z;AA99qm2UFxth;$@{-& zpd)lKEk>B*woP%*;y1M}^l3sm!>3A(+VC8(tfoNF_Be*G-mLKf5VaFrb zXxapb=eWyk-J@Y$I{-nqQ%#l%%Nh#IuPMQ54!Uv(@rEVPyhNZ))*qM9%b}gtup}-8 zjL(Jc%<9y>n{Jt-w_?b!qB{snSBPj!=zE0&HH4%K1KX5YW0DqleVN%ALa}~>G2am@ zj2mBNuc#c#msfXDZW?W?$8q`a4OjPf@qj7B<#+r($!OBALr*=8SAW zH8m@orh?*#CFOf@E_&dnrjre;0+4f^RV*d{rj3L%_ue`-5J6{$-Y=GZrFJ-xRsY+q zs}0udS%?a0A(o{9Fh|v_t_XXfxvMd9DdaI+|ljvb_VJ(8HUdpNntJSpCOE~(0bZCgeD(($0ig1Mv zjEl{-v9I>ePkc&>7F{~pG=l*OL`^Atz^UAV1m2ImgD~+NPBhqFxqv~pspxzn)n>(r z2v`~V3T&)TQQ)Opr^-RqnwnHdrCGwz5s3+c0=`f?p-@$6CZn&cp4n#0y%v_jI^Psr zpRFmQPr@j5l>1WLtOBu>Yw!5sEm;NO5K-tkZ3xO^-I0loQlE#MLW^RMw#iw4|5VPT zj|8r2a*l#Id(b0B0k@!3-|ZFo5sXiKF~*uU1>-0xAsbKjGH58wa?w2oTK=80dEhZ z7M=mqs*>F1j!#4%i!XAj4SfI;Bq)jXnn3G;oGCE0B&G8~Wpw{_vjX$kPO|P8DNwmW z?#^&^tV(jAJ=8ZtV?HMW!kAWbAukly%GH||s{hxzlcyF$w{-2Y!JSEZVK+3P!n9kT zGTVRA6LRyP1I&cvM(;&DSGK0puZjf};daA4mniiU)sZW6f~t*VG3dp|ojpcg15>mM z<>REuX?L3*wR;TN_>Z@vEi*pXt{q%;OP_hF5N_;)(Q-V(os~#z{#lmyUt;RIMFFcu z-JoYb43Z*Ey3KPH=Q?UY<9;ck-wPE5)#yFVf02VlhYi{!$;~jMx#2unQ}4+3O*!fB zPzNBRf;^+ry-gspa`5p%G~(TO+zSm`_jRm4f!0p}-kP(JiuBJXbL~kpgxjhPL)opH z9=~eMItjl{;r8SU;zUrCLIC^mVCJKnlKl%4(NIlBIYxaD1T>_X+pLo1hN_!`h~}Lh z?4+ookBvsZB{^T6ctXk=*mgT{mTOALTWLepRK21Dnq*%E5^E%hAUSEk6+NYQrnkHt z7yYB;W~{dL72r63^;LQ!;q=%AGQ78M*;u2!BP;GfWYf`bYhVg1R<)@q>bjPf3Yp%M z$aYp~P?W%*n@;_}=gKkieNf9A(Zc20UNL|NcP7yvzNdU=f z*3_=m>mjuR&JeGmV0nkCGl0rk5RP)$0n=Kr=}xL^vPF&Zu5+tSrCmu4Om?Kx>C18W zI%+&t<1kF+$vuY?V!_hJw^ems1NA$fEP>A7Hf{7efe!T37&W#Y7KM*zB{WoB45n*8 zdlcx(*4>Mjz$jKw^mr~3Oyr;-5>kdqH?nZm~jwvUfgkyms}bRZFjKaeZw-{=rZq_KEJ>SyCIy z<2NhKNejE9ubv{eR<0KIzhcQMniy9&{&&RhVcarKpS1dxp4&B06{W43ZW?+-cDmgk zyr7++Va{;PZevH$Hqrttz($TAe|N_LYR?V4?FX=@Wip0No7EM6{L3aPH&)XyY(ay5 z;K@Py<6TSep^U6FCV)mdty7%NaNBX?Q^p8JgizbA()|#}$wj6_=$+|-rMn&AovVHy z5(OHP(qVdEHJ{e1Il~!xW5dPf5@tHPH=_5p>R1mHmtGrpqC*3s;pTl$uj0z%tpJ_t z-GA}}CH0nmF}4DW@~&8^?!NF z;e-)IyO`sG(2Wm35((5vMa_$Yl+bwbA!Ke>8z{D3AQg7P|ArfZO5pt*Aj~NbEzY^x zku-k-3xt#XeH^yTju|EQ652IK1nw}oJLn{OZCwo`wYjkf8?Q`!CmGeZS%0&7Vg2Rt zZ$k=M3QDe+kfgv%@85O3i5!YdUkW>33MbvDs4V~TEomMy5+`Nk(fp`rtctP zdq@L~X~ zWV_nQC^mINJTEwvI2@_GaGHr!rR7$~qJ(u}w8(jNB+fsi0r_A`Co$W4mNm;uRo$k?G6lZT5;H8*LA6gJr z40O!5^m=ZT;DW$3qH{9#PWrB{U4u@Y7ky>`!)uDp5ztK$J+RsD3~*G6;1$yt@mXf&Wy0u_C}N-m3d(h?gnExw$XXB1DaJMzToJLaNufmUOVRQ3;c(gqkh>vkjyvDJ}$v~ zGf(8gqKE^h$#(_us8Im(WLDgPqK+JShc>GdPJ;8S{ZlpLOkie!we+yGEMs*x!E^@y zZzt+E`cLQIRSu(3H?h^oVf0&-jHz(HE&vDXSrtne!QDWqYjtJ!UMcXnF}7HOYT|)B zqV*q?=w({Nc93i*$>W;$Uo zgel}DA?;c-6j!UduchM5&sm)xZC*$6T6!!1vh_g8%s+XYwzsEO36+Y1|Mwql*NL(n z6&T?d0Ja_wvKY}v{9BB%_+6-t$Oa0mMbK%n>Tp6wNwaxF%oY^REP;rUgB;qfHxec1uEfcL%lLwLQ zN>i_v&wE-~mxY6wP}U>kKJmvf)GPT}IqtZFIDgGnojRNrP_uIs{xa@$rSn+&4?{VC zTE#(bT<4M`&*W;1T?5qe&}9If)38vB&qfIg$sqGSR-%e0VW4)MSUni&v~&4CP>keC z)~rt(3*7lx6$q#?aZ`}N#r+fDzd!9wf7T0(BL#96!BC2ZXM{VHk_P5#G=5U5;Xv)7 zMbl25|CFN~Xw1%9t3kQ~<+cqs^t#RpHuaiDm5#E_C;A+4X67yWYK)*K3T^ZS6S+8F z$~yF=8fy_L<{9}C#pUB4|iMhib|Y12>63D5yogL|$N~>1h|py}LVn34QGj z#ISMbUZG`S$MrOSw?hNuOa>1^w{`rnH6o{YsLbWNXbRf?jPiHJ*qDqMp5=FxENEg9t8guk`T@f`FSuFRf$gR&Fx*A@(L~|(R zn_LoJ$|ufGLF#YblDiC9S?uc6qE>`c3shpNTCkK?wNbz*4<5ziiI6yF`X!NH7;S+u z1nTe&icu9fV~;*bG!>zcc)J#-;*s8q0ZIx_3ydy>=3a^vhU) zIkoE^1T%@u?Q$f&ykJ>FQdpSJuB>=mz~Tvse|^4w9O1G&WaeZ`SFV=ooZ(W|uO8N9 z_Chi0qYSFpCr0dyl4Wxwa^VU`HJR^1!++!LnZ#6|RmYiX^%t5z1A*k!BEqPhh^V@t z($x;%)mwm=$C2ERkv0*r=ZGbjVil>R_|e0oIuNTdi=g%G5?BUpxg%Y|bBuzWKuH1U^1D=5;4~+ewx8`R ztQaxG5p#qsXI!G|O5IUQdBBc$%tZwlcL`a$RZ&Rbl`;-rx0SPLnJiYiP(Tz{PTiKK zSIF&im&d}AL|#&^_9|C|p=bSMEgd5$KLQP#vDjZVPU%v&Rx|gi+~|-70wvRH&c=9k z6^}gH7?ptu;7J6is*F4o(tRC8JsjeIDhk4Fqp_6_E~N<1`fdbvO)m z#`eOGj!m`JMCG108kxn}#(+Pi`1S%Mou96Aq+AlUSjZLF6QKf)f~ci1#Ru;O=4TR# zqF2|XYA9XTj&>X?wLEmMS-XrJ<>r9M-zi_$RFgtB5SV*Yo0L0@z5&n)SV>vs?=G7n zzor*+bW5LBD2ZlYjoC*-O@v!d|7;Nc@Tvi%2+t9dEw(-Eh;aO@PSWr5E|s4EY(^BBm;0oHwq z7ZR7Pp^E$j*$Zaak(mX>dmVohT}D64{1TGus~Am{yC;|qPXu2A%6Th|awxQQ7^D3W zqt-y^w#D9nvyKN3?R2m5TrUT>RE8V`S_~=oBrU9R3${T?UzMlPw?R@)T$fu4ggc)i z=}K>G>zM0Jy>^cR=>h|jt5WztQT;*J)aGk&R6l>J$-8ye6_W;UP@#~D@|7ycv|L2P zFT0*r^|~A5>X}+9teF4-aCv3E9O25P7bOvDk+2-d8=L^OL)BrlaGK3)e)RNJLg%&` z-(_*Pz)=Op398;2OA@7T`J%w-9Pb~Ga)10fWKILsqhq{x#8(w>iLu)x{qSf%w23g1 zKsJZ8_I7Z>1OiqTKAqLnM9 zk>=pi>%PA{{l9l`@s;ai=Ev&6!%X&4Cnz5^sp7<4O|vr`%f^-AON3$N>d&?VQLn3q z(({qviYF+mbACg%DG`yNBZ)jBqa%?JHp2d|Du{lfiDzoI{CEKc-BQMA-d%}s8nkrj zF3E|gWA3y$6@ff|Q`YQ=ny8<&(g0~`dA{4|)C#b!`!P|2YG;%B$>S4u|8|aU3@IaF zQ%?g5Yvqtr2JKp_0l?sV@}(^Dkb1w09lFr@f3l5S4Kf8`C0PE4pYn1$Juj|dOW+m0 ziM>rWTj@o`a7^w#8H)|PDc8cy4Y`iix?-`3YrEJ8JRT&SwOCAtHtQBfFZja z{7Yy3wWh9CqMNHGEbJ8~KT6}2%Ipzly$Qutk6iwcjK;0Ia(*$3+zrVqD!5n@70zqb zZx`g&0J^`wm@rp%66r7+&AAL~#2m=%!D4b`!UWHT7x*d-cLnA308vGOE%(*uc3pYW z7r|C`H4;ef(m4Jo^DcKJf=#}j47nfj{(uFZ2!yBHLZ6r;hEDOIc_sS?8yReSe6q}d zhqJ9Lzy(*szu7skJScu0WO(z!`!gmOK}?0ILOaKVI8Fof)wL+yxO*T=_j*rcYMx1RwnL@H^PUZ2r#*DLVST z7cscmyX#dnt4SPt7~rBDKgCG$yRy#}2P;3e*r@5u{~2c+vvRlwe+0T+lX?2T^f%J9 z6V_+vwe@SGS%+-2B=j5zWTp0tpM*|49h{Re4iPdL2+ zmrG}ht!=awPeU^~dYatmUe|)5M1{V`5wHj{6-$Ep+5nj{tqGu?D&44&f6piVVrwpq z5>m_svzm&eyVM||>0~}@`~w$9Dnr=WyMs*)vzLH|#XMc_96oLHu`?yYpE`=t=l$~C z47p$>v?kHWTAuLbm2A7j0<+WKQk~3mzg?Wlbj%V)C8)K8ROWdoiV=Ai5$1>}xc;+z zBs!ewu544#?u60mdEVL1&aL2%ws9=iLJf6I`Sbl90n*{5p4D znOv>k5PJlS2sv9O5g)YE`P`Fx)0g=U60&gmyz>f3MA{b;3zZ^4**O}Xa_#h2W7+2o z&7X*F_O$LTU%+kms}J-(d#lf2EH7LQo;cu`1}2PT_2YlHN=S)yyUn~*0vLWLB zrtr#X0}RW$T;yGNz@18E{f?bPt_?&SiP6Sp?aHG`fdbpSS`Lgy5!YtaN0Pw7QXWyKoi#Bq)T~|(M8I-ppwd!C}?;I z`d3#*TRAC|TbX9VYr-&_PBMm#4QfXnd%xzNYwg+I@cw#^N3Zkr$2mHVJJMMCYc<{c zagROg|B6I(Q z%h~)IUFbvN3*+3_4->$uhd}-eSZP%DMwBk^?GdlzW+Hz(&AQ!2M$pD4Ba?2&=j=hV zht>JVJ3>HN@V{?NQ|;7b3uAbDWB)B{W9s-|ymw6|Ld^ui6M7ZeS;b>WWFJOEcm;;C zv)|VZMtz}n2t0vDa)3a*YPx>sOH0oE8)d$XDra|Zr{v^d9km3h|7nNoreh6sHRO_X zlTWNn9L29Mn(xZB)Ph3FCiyL#CwOq9|XfDDtrDPtvS}t1=G}-;vybNz5X#r)2Sa#F3*qd7w;>?(`7wF zTU5PpMCQW9nw)D-js<1VBHdDYJ4RoGhYzB`&J>^wnd8iOVG6g=25U(mt3Y41m}Ak} zfYVJh>fimFci*djjVa&{HdJe(O&1nO8^Z2{x zY-yL1hM%o~7{2;28px;8$VKi7z zM{?cHW!Yme1lXPC92*HXf{kg6DUbh*Q)SH31nAc5oRigSn%iTmT$H%f?0%Ue8B7bX zwX+FQv>Wc_&6 z@bp)rZn&Uow*I(FB5S%XcYrGRek66lv6^1GC5^`Fs1m%+!PdhzKrpKDw3O%-r?Sm} zT~T8eYAtbGe$!dxDq<+5h8JP^+8W0U_}Se#^#ER&b-7-j%!~m)wcvo=5pA0dq-AH@ zq$R0_Hc_db*Cpk*3CN`6!EX}XnQZHv_b)Q8xBK(`9oX4*iV`ltd$?u)YVB@sxp`WL zV^S7(wrsBbIMB3PrXMZ>RyI@N?RR&qnNl_{mM~i~fWQ`XVQJn~w4H?4TwPkzZELbN z?`~(l35;mYebZb+07Pa-*FRFLbip#2OSxqUK~XNgp4r{TMt3 z!R#?CD6II^i1H2eVb@P7fmNdNevFe=o6G2G0GDzPpZ_mCxdnD#Z7hJF=9^!pL8Uh< zx-MCbC=&_P6nzreMTJVbpoUN(1%k~WXI}7dk4;Cj^-x$dDg+rUrV|1~N(hlf62u9! z0M;1+a+|wAS`&D|OO4*Xf6}g+Xec&uedeBQ z^p(YgleTOw_#O((nN(+3z1=8@(Oa43+I>J_@D&oE-8BF*I!zSBi9t|ZG0|%Pru+z5 zNzb@VnbsgDBatbBCJtQ$H5E`J?vEDPac_5u`a}$POwt&d4A7{60#$4-d>r3G88{8A zX>7)W-X@73tK$^)oII9-vu+EF26WA625LZBx^uxYt7JpJy+s#K=guv{xb|0&4ST^(_P@jd9jV2#gLZ zQA-9aXF42Rek=uTwcj&y%{+R#3F zqLi<&wCxC-@+RQFaUydbe)|`gadIF0@I}I;bO%R1@ks~t_@_VRsUfiRp$~j0HP-En>EP+12Jf7txM z0vA_9%pTrodFfbB`m%sw8!m+VkqD~NOS(x7#BG)fgS5+C7aDxe^jaDc*BlMdwp~tV zg?bfgIx0}KU`-Ia^OKBA>^|JjF%WuupS>@3<+d2U3)a?`k?gO%OM2N2OtOCR2Hq#h?T*@X zqSKO#D+VSvcIxcOi7XoQMWB@Tby85$e=?@;^)Z=<@6*pQUu1=9!ib%_Uzv5a4>n7xq6AnJwfP|-5CxlcNV^P%*v zRoyOc9G#1J*9eAM)#ZldxbCC85zo6L;V(`jBWPODjsXyhdv-LHvze4j+5i;+uXIOpTCa!dZX)IGz%$Q~A67)yr{v*J zfx`Qx3YO{WTiT@S4(=WJT`Gr3pUU!0g-oUx?5=WUD(gyZJp#_A?#_%f*Ee|Qz3+eL zYe0B60JLPnn`GG6oI({>bs=`-+5j$qc79p`SnG(&ucMKs6sVeFKJTzPlKnpeu~oA( z!}a|zRLRHgI+O#8+vp2JJ?Mu5`q=~57D7+oyQuzW))FS`N~KL&Nv!s)cuVUCH~Kar zF;Y3McXHJVKE2)aarcEcb)KDF_2n3M+XDvqfc^OI{)tE-+6s_H_3-I8wN$A`b4b=y ziB7`iA%@Dy1XY9`R)wV3wLXmKDWVk#SK(qAMLfyKzf=_}9Oa?7kf&WKCsfgE3SG%m z?!z8KJ5yl2m9zO4+SQ6rdfo0;;CWvlVUfi^!VcJ5A!0Z`TJN%MMFOfx_3)KWMe*3d znyRT_7dHpz?kxx_0#OzdjGlz6<+1)N$B7b6n%5kUI@eZ&WD6%U!)vP%{`c7tWB-MbJ%SJJM@NCv_!)aQ`HhBP6^^xH5)?`L+_F z|CYEpFTMty*WfU!?ySc0CK@VzF|mQ%nw_BIL5tug^An z;mYVomam0dvQ7!PU2TN6sa5pGm*&+4#Wx(kd3%A3xM)5ZVk~gV#LP;ztG@!hA-(UG zjI^nGlOvmSaSmF6A$2JGZGQ5yr_D-{|I16gN<`J8EuOaKj@2>S{|XbUcR-V|of$pz zGKF!CX(5rc14&}GC>#_s%7hY1fYfVs=p_un9(Z3vDx#f9NY3#qH#NAJLW?8d2ts*> zf(J?Dq8>Gm2%?8EM+aX;6J5zr@bV~RfpA*`7O#fqHD>h07vnPKTwZnb)It^;vim^H zUCqHc3X8MeG+5Se6$?h^+}}bEu8gGu^Ivg^gwL2);ry&xl*A4c@F+H6H*yIj}%Ts!u82 z%a`n97qq3Dm-kqwaEM4um!^L%9N_qDHHW#u)sIg3a$c;`BixK8GB(kAbva9!vjvos z8{y+F?s28Vc9qPi)HIgvMbA)>QFxFSNkjEl4R@$)upo0zPamhROnEDNvkZK?nv~cP zRCumE;IO7$a36dxzd6F_wb){E=XvG-D#BcD(P0lbQ^zylzFM_Up6Tb7U-cVV=(=_y zDg7zn$letrtnB#K4|&wF3)PbtNXr3IX{+W~g?Z^^dLLBd8q@@30U6tfsAp2|&svoc zvq8am3nQC~lV}+3si46zXf@Jr+i?sl@^W53zTm_TKssR4m^nJNB>wElCx+pMM^r_G z^|4Mig}Rv|noUE}Hnax8$ptN#L^*Vn>mkrXRO~4ME}gQ(oRl+R5RZJgV-jdIi!6z# z9%MAa9Fn!Ga52TaD+YCR6$0 zF~|Ht{9(vDwue`c>ETbW>;&&$_0xpEH?r?@GV(n8@3FDD&Vzoofjm^#;^8h?dN6fO z?oVbgvk$BaJe}E*`1M_%hRfIg%Q*ey9a=u8wXWwjk6y_RUBqkmvJPu1@3I3I@YyYp z7v#j}a^3nTdZBNz4t3uSwXYF8ZhIgCJ8C24*`f49{j-5~sYD->eYMe%Ayw+GZUM~n zD^<=9_1PAlzi#&uY>;Qu0E4}C{q%Y7Di03P6)^yv z;^M?pELs4nN|mW|Lj}1;mgT@KhFO=QNp@O+Z1`5>&&B;aZ4HjYmjGCb<7$#UN9*JAVXCw$Z+N3=C6R05 z+0nh{|L5}$+@Yl+mBDl{_o;!W!t!%HEF>cCWi$*em4OGsGLcGlNX{9A?VtA*cGC;O zuO8fq#=W~CU{K(%9B0oDJ`-{$gK&ELYtGn#=0H-;UL>Xdjm+-A3`_ELFwW;g*&m4b z&k$=`-e4A~I(KYW)`AV@SzTJzKF)TZ+vy0G+X3Y@Hq1DdZH6hEHjhn9Xq<7LZbRab zZO7NvsCy83YE3d5{1lwn(m^b)RH8z~9Hz*Qh$S;CT}kdbH>^Wp-xmbWwZrPQ3Z{?v zVcWM;EK+zRutxp&MukCATdm_W$~fJ>-gS`#jDG&+3o3nK%3El1@-1$NUaT1}oD$n^ zA>Se6Omz0f2Qkzz>0e4%y~O0laY&dxx~`EMI`Wn5rrW`{a9UBwP}VI9dFedN3)a5P zKh!1$vi`I@pNa03{cRzPUT?}_|4s(}H+J<(%E`Uzq)g!Ez`H59D;nWOxF21an-)co zeTist|9hw=kC2z;QdO-+ths_D)bjDYBh}FQ2vr z7DsGJCNWJNQ`RQ;3=E4ZvEmO>(UUBsBzrOxN(fE5BCl;aT)L9%eZG0(5qmhtgvF6_ z8?xhviCjzZs+_Fak1OF;fszg{qtlWIDmjxfCJwIPak_oep1a*R6?EDL$HfQEsQ0nqa`jZ|E?t%5_mrlUnop)#~Uq zSlcJov*)A7yiV(}fwEgXv>x+a9;2q~v)&gvg?CQ zMfVrI^A>#xmF2LmZ81Anax(jHW&-I$d+ig3(t{zE9rO#!lYSO*bS2l$e-51|?tqh2 zdT!I)!5O{rdBuKPDxim^7`x;CK{FQ;dvrWRxBN!1@cRJ~u{RXyo-7#ou_WQZlU=G^ z9pYC~?y!b14kou`TZz}zxFMRmC=lJ3Ux@_PWdQ%CH!N=Ux&woE$KDWh8kwpptgFrt z(uX`2G`oAeeg4ybq(29zhY?5z014`}Z5=ycwh>O~YA2>9dn;f1#BUD%fzERZ&#>WC zkt;^gud^?SsB`B(f3|Gwe9jLtr#`#qHnnJ9c{g6gK0Zv(FpqL3Mea(l9K1u6Rz#t5 zHj%cdTT?RjV!mUOig2|T1~F>B<~b`gf+tlC-i)fu$o4(QW2*6ARell0wdZg8BRiup zNxY{TGK7q&2=1bEVmIx9Wt0<=Tl|TPF4B14b?2Y{NFcK~!jP2M^8!gjVqkS=zxi?s z=3>BQ<_}mj91FE4FR|3Id2$+IQts53<6Yu-j$BiKCrBAS*piM;p3oE4Yuf)}$U9G` z*OZ%U3F_=eh0@>ugD7l+HoJpVSzh0)+tU+4>wt@^&V(*&mKTwm8LUPsB94A%4w~YS zx(BkZ)f1wA)M&0Y~gj5%+URomEJ8B7%3mdbcH}B?Lz5 znj_Lmbh2YLGvq*YxyvG~{>^lDwrxUjmn|*HWBQLKiz9My&Vy=x!#M54eO&#+rL*8t zROr~rW>oM5PbSV_vF*NHFLrz3iX+^75M!k~3}=8?(=lnj&1OFs9VB@arF_NJ*I~n&f}}=twdxI6 zD`fCekYfYcbe;A(VjUbCIIaUk#hxA&?M*`#Js!kkR958lO?c0Ti`Bv?|MTSl&|6^_ z1*qctg^oQ8(sX(79xevi_&WRTiz}czhsGRaehjeH z1r(p6%Wd^fUXf)ti&gJc_wsPq z{iQl0Jgjuu(rCp+pH@>MJtzYvMa_B$Q3Tt)V{Lg64(YZ|$+o=D1Ygo4Ph5oy#u#(b z*WLN9@;43K9uyYfnEC^eNmY2Ucn>wDC#?ok|5Fr&-R*o$o*~noA-l0|Pvs%k5r6^H z>;B5GW(wt>yLVR9rzUyNf>>{#J&XT56T}yRwX;1Zha~~7vN;ZrMyoYv6XdMe(U#!~ zKagP%cLGg9Yl%#A0s>U;Mif-#-=%^q%sLh6IA6vH{6wh7P(2VHc0j&#Kz0Bc?l>T? zjcU;^92?nt540?>VH`RaoD=Du^8_NiHVpe~dw}c7=*jM|=W0g?Lx^797b7f?kvY1M zB?8C8Tl!#yTgfN!oG0(L$;ds@pB@}KivUGHy1&d#EG{Ovy(vET1fw_l|5}fY`^x(_ z|HFOF>shhD-GEMsu8atY`#odZn9@6ta!k>qNKNGmho{SI4kiOyEPm!L^h=OXpbsut z?{0b0uAIHYq6*7)m<_f^;~my3OC(v4%n^dBs6UhT=WL#mLv-Pzuf>;t?#10S!k3+7 zah`l8$;v&^e~LTy+LYkcPci;SS9QSp{aqP0l;QQ;&7VhiTkROMx-NUj(^qjMI8A)v zco*~IKHJ?bPcACUcIuByZbf47Ga}i^4GV9LquT)`1+YNcgH$6T=^1S$j0rVgOH zo`w^gaczRZv==!u4g`*@NY!-=%EE_KwJWX zPI$>-N;vQ%|dPE60r^H}x8E~$a+o8RP znmv8;J}37ScMZkzI5A&%j8%H~821!Mo`|=Nj}nsV@zvDK@LFWg$4uaGr(PqzfRY(z z8m#}|pyfnLJp@$t@10@l?|nX28sD-9&v@p5g{ zFJSq0$18MDhQnbY%i^~oKQ0EvKqsKV^u)9Kn(d338&&~_KN!=oi{(u` z4!5bITm;*rBwpXP?w}qY?@nj}g-TnJ%V|Be`qM#&Ci_r~MT*$Yhv09RSysE)j+b|7 zK2oF=NjT2f#cx+ob|Tlb?oIV&f$8}a?w3POKo=t`tN%xlByU(&`Uq;eX7=sV0iAK@ zy5D}`6G8!1RNlnmaGQ>ni$EMkq$YkOxvOxo-Z!tZrz%azueToL3dqdwl<`;lo*VSm z+@?^izhWv{7D-9{EU?bcHQkp0XciPRcH8dztbC2-UOI5=d7N*A|z1vz0TZ7 zRs{Cv)mio(uV#g8968(CLsUtUW3O5<^^N<>0o7}UnLU;Q^GvXzv}h!#7l*C_Nv;t3 zm>JuJt3($T4|Y_Jvu!s>Q4BA~JX7yrhTrQ2n^EuxIdwOcIe*X@>FJE@7jANM1eErq zGZLg2h(H8?cuhSqAiWNaGt>`z2lBhpfq_zT>4SDO$>_Wr;ZDcMrfI-UuuRU(aY;2g zOh-z=22_U8?P$7e(ThflTykd_F0U6pU?J8%gavowBo-19Tfh>~r+pRlH9D8DxW%PK z;FqypvmAZQz|~ny!J=OfDuO5;E0O2}*bwN1rgRln`!ol#AwUU$#GnsAQm}A$6&;Ss z;F3DQS_ElB7Q-#Yr(jZ{e>*JMUa>2MSeKZndh~pSv_kKe#Brn9p?&88SL@b{D}``( z&PM(5x-f)gc;54XF za#d~tADRssxvX^B>vCR8^_9GLUe&eucn)Q@C!7Mf-s>}R_uRPLd8sQoJhph{TE143 zJ9Mr0Sn0*P^QRvC9hNF{eSN(t%bMm(=ZQ3IyX3WXk>{4Sm%N*?$h|OELa?63*s^D1 zROQMY@evlcEgLqf9I`#*896KjcVrLT&znu1SYwnTf({t)sq~@^&}alatk0lo*&qCb zAKHooM74lRCJR#3#!U!pEB?Dp&lg%xJ^aHsCo5dvklcZdj;vcUDp`2BH-B21Bx8aB zJP+zLr>&Q^V>@Jh@tgQ^zBL0rWpBvwO_|mSK8Y#9LKd3)aaVqJ$)w~{(b!=#ky8HS zp~6M4YeV$^*o*ksp0ae$mSk7Pd*!<8AINNnFZAc*HbSF+BN1Gf5mvN01LhPb6%Gmf zWn9{Q754GkrY?|8Xbb@m;QwF_Cq6v0Z7TlQXlvUsVSIe^d|O*)JKsj|MH3V2_%>cW zoN?N;Lg24(NYGFS#nG5$asNL{6JXMYud_T6^sUEsuRUN`>jI89By+gP?vH%W#62Ah zd8HCv(1iJYnFLoYQsagT-#L)qCx#Dpt^XsicLoW$Duwq(b zi=w>!>a}YS=n>z#7PJ|V+QLYXVK}IN+;MCt;xX`iPy17?jdJhm`aPp5(S>oEFR`R08;XNcoZ2PJ4t$F&6TPlBSN@eZOv8QjL```q$ta*Fj z#FbMal8UXg3bGd?v`l9vu2XNPWPQ7}DaP;id2;l6XyCrOw6;CET%X0Syqsdp?vT48 z3YR)T*5}zXcOt~i!adny^pR}Ce953?|dKcjVBiheN5@5&>~Y{x&m;=ZXQ%f5M@{*7cc0Yy3n&L5wM1&6XZ*BLO1bPLaUgEavPL%v3J{eAql5>80$)uB<)4vX+ZOAO zTxGiT{ z{$mOUTm3LDUA_wYDlIy328Krxwvz;$-)EIobA?#c!zUYKdOwsY1^pJ+GfBRHyHsRV zM_OhFXN+xCoF-nGHQ(FDh(;GNN_-Fa(f#*_hHB72wGrYDG$ef*3Gu)5X{IBw^>e<8 zf5-hLL~vn7xK=1WwL3vJ%X;rIyP7n zww?iqHe=ipx%IIou7u5~MHe?v`e77o#Fn+D^Nq`uTqGPwaA%y<#tg6HF{920 z%1_Ls&~bZ6oS0I5`G7u8R4dojU7k|i{*Otw!2oICQDaIPi<6g?vkF^PsqyZtG(obN zpM#Y+$X3%2D?{|)*9=TS)^}T5VghenV8lo1h%i+=PYi`C#75F>4HS3JpSI1@<#{i{ zr!b_o9nj@_Fs;AlX*6JpTIC(<-n^wElvu?L=mQ&Y1}A!qRae1el93fR!T`!(rR&x@ z)U%?id#$&QopX)E?ua@QP!CwPt*&3pvEK+!1?&c?(N1?;=M4R??Ft#x^eW)dSmyQ} zLXl8@c5TFH0vcYWQ}R`feUAp}I=)17!{Oi0*OdW^CDAEC;My*qntn?@sD z7y@pe2ecMUx~t?d(imTAVHT!Rj^6k`^VYWDx1=R96}EXBvxzHYNP9se0oeSBm1pLP z5~ELp7K$g|oXS7taocz}(MIj-L zg9;6p;;ctoo121i{!}#7>zjmFY`5nf z2>&}Bk#@7Umy8jyO$<Z2>vSJM1(BoqLb>IAWXiC1&)nu%q`4gdmWHCk4aG`r0#BbMGdZ6ji9W#TGFP9oyFrYhkBYpjX28HwJ?TOl?PQ zn$)sX#~?7|mB`=*s@(4Jank~CBE>w~+7jbmRLOdzU6L9lc;z_b9=Z)vI)m097)=W&!>2IFddEoSo2CIv;URU76DmrPO3aEsW+c9nD&3fa~$&3^Q^t(wLVEK z!x6y%I&_VPL}elt$@m@!0&!{E;@W!Y-+lb;8(l97NTeFq%#>8OkANy?I7hX%!Htdi z-i5PgqpAYsDX0BW;_D-#aU)%*&;w|PLo1o0Z|^#+4Tci)A9?e=MVgm__b6jZ^QlYf zu98DVUS^c?!_eTGtqZFs`i*G&UeVkpniA|OA~`j2_sDLbj*ymW+xuVB#OFT;VG4R$ zS8dLItV6m4rxeFqxwR;~|12@vrO1sKZ+)1ay)xo}o2yeCA+&NWB;>=?K6y|2SK>=n z$kl0)Xn?ifArX2Sy^w1wYk-lDttM=D>rX*@{aOOU3>TVdH5UHXRaaD57vQ7PM6fDQ z79WFNb-=+X3~99vb1ZHp;0{3a zG1%M+PhWm~sa5m0QzEkWzu%L(|DKj0s4srIHXi#=Fd?F9AYSldcTI^+X6w%;+x_r` z__a}@S0 zcM(a%E%e|@OQ&!F9e_p7n@-Hn4OOP9N{(4!{=d+|^M@z9hxY^M^e>mzDRie`4||6>&?Sn6-Kj%O|}Yq-HSP|Pw!X9rlN)diPAOew(N};+9}DO>2nD)xb;#CWW8mu zvq~}w2}tT-!`8Z?`2sh}?l`ZI96Fe?&uhJ}ukzjYv^2jlSJ>@#M{`QbN(i_M6d4~~ zel3>W7~Yr=D+yPJiR1DQg;3LeI#!e3>CVoHs))+rxclMws)Pm02~0`L2VD4-UXg+9 zNO3Psn)-d6+)p)Zro6t=XE>!jvp)n zG3AX+Y|}OEdEqt9iV2yeO0wSqc_}8F7p14hL>XIC4R1ih!h9mwP-MUWj6Glnvn<&> zTd@;^J%s;P(5D}#&=^2CU+*F|@w%-x*MfmlX?AO~5>0jPHa!HK5M2vZ|1b?A{KlVG&;p;d&gq2_!)JN?sHyF%-faP(CoTg{`_wPS5$+;-;sC&HXY*}o?-omQ!__O{b27R3kHWbib^UCb>Or!4G zoc}>NF>);cHVM-_{2Tivd23!qWv%)IZcRx6m|5_>hUXAxw2=c_t?l`Nvv@IHjESAC z)nPLN7KB~O3q%nSdT@l_lbfGv!v!M*tvWu%v?T?hL?|vK=Z&++Gi#F(3WSUsA5pz^ zJ7REf_P%=P#NwP^wFm<L9P1>{Rpu6{=r4p7$7A$?IM~ zj-ej*E;S~KfwAvssAE@|y@lNd38cbr9smt)fMR;oJ2q&C&hI^oI{hQQ6G4-3pWZ7I z0fXrSVHpZkW*OWFTQ6-q3B@&cU!dSRC`LpZ%C6?o>3_LhKxZhJWr=SfQS$ihG4!wc zBPF*buxscYB`|RFZR{WPRCd{;zZXY#9AX|VKOSAzVavcQOFQc77cIhIig3s)gdUR>D&`pw~MjX)9k8F#4SD~?jkd7&sK4(>nP<9yS5(H zLY}&O;%xuvez|*_y9kaiYR6iNPaQPdfC$ubzVW~<`-&Q-c=^S!v6-@TwRDLf!R>mz zAF2R|1;X$~zq;QI&I3C4UR*QF+CP`5vCzIODsMW<y+7w7Y)2FqH|Y^ObZetm z#qa)JUbN+X?V;<%ugAj@zy2;v$`Mr*KU$CaON3NrH_+y=-< zP&DT|Fz4BI?=duftr6~T5HWsmx}UcX@%i7Rnn`ropyU($7^3s@l|Qk1{uXuawI5SD zD@w8P7w>*aUl%c>{oQ@vZCocMd$hPr@T4E8tf%nV9HJ3?)bRg9Y27^L>c^jmCak*{ zoK7iyCGQ}VyG@`vbFZz=Zbc}OqVRSk#Ido0&hz&hp?ECGigq?W!Q7kStDT5pqgZuE zF|wfmAq?oezSv7I8IQ}e-g$G12=OLYJ>Iqot z-17hZzlSn{mVUfD+$VH+eS=3)`Fu3#iY+DHg<5)~H|*dWgjnZ{lg>^Hmh%csJpUn;u=XbA`cHc)YPcgYTgeO%c!(RhNmD$%yN+Cr5FrCZCYe|GAJM|Hmli> zBLf5ie06K_dTTLJ{W36=4Ddh#xa#>yz2mxBVl(;kNPoW|A6`U;`?nu~uKrPYn08^| zAOBvV-3!8r*zcmwEcNLB*E)CM;CRW?w4>bK`(5+G0>qotaq*(Dqxf7IyL0s6*I%xaoC2&C-`NR z$ptQ}>S)S$a01j72O`hWJNQMWY}OsO{>;eT?AK<;A+x+MRr}6!w(-)9|9zyFFkGyp zI1XZb8Sa|0jYIG|iriXbjl**y1U6QD8wnOd-j6K@9;I1H$(?kW)qZF+Y#SUmi}~z1 zHDvKRY=Vk&-L-m0G%pUoX6PLsqeni>`DJ=HK4linU^i}ilc_8VV=FSRTov^Wj&g+N z|M^VZU>iStoT`1Z4>GN0txw=CRBY`o(M?MMzXjLEY$I19+4)!rpKWCm;gl0*q==_G z;P>L8$Y4eW2E;?-Bv@#t(R~#1`DZAVIUY*82w&SoXV}5K%42Km@-EfH?X~I7OX{2| zk|KR8N!15|kO(pga1FbEkVf18TGx&oCAfAkA^WZO#*~Mk0x~_boqZa%95?(bpsT3Q zFaCk-wVmBkcLEZ%8!OBJ@oi<_cO z(WEX|_81>rq-5r8h95uiq7K|ZYx%iBTcFGoGjg!@<8C0jK-<`J&vsAiYg@0hU#se4 zUU%tl69kYGaE{X9wL>_T1|>`E zj(u5VbVs3e_`P@19mQVEzJd=;cOU6>@b}zXxaJvh_SaEC?>UD3k1CIGTUT|$qKw8u zNkrPA+Pbv%h}fo?y4s93=mQ%VGtu065`U|6NcFJvbPQvX_Qd0zC*Ha?v=yk};ch2uyB5-vI%mPr3N4$@W@jfvqANScbz)AKD4#q{I^W!+iPcyi^oSTrD7$=TSH!hjW|4C* zVB5&%1qvE$0BzX3V1ou5Ktmtc0HLXx>u>g6K!5(h)_IgM^YkV>U43o0LVh-)pm~?{ zH~ULiPYZ$}(S5(BuMFV3MCRU6Z<*Jv^ zb4o4C00HzMaNWFKa)-%(^UeWVM_Y{)alr;4vS!B)8S=$E8f?G}K{OCKvNhO%bvL#- z8f*YstuQQRJagz&9zd&VYq5P?nbo#Qvd*XVSfuof6s5qHD{Ic-Akjd|7+|d|tn~*N zUSyyPAzp`m^MCH$8OGuw0ax+=5@}eF&u*M-X~8tM&fly3(?|0p;J5wFlSqf7Mx(TP z|F*2%S}>(U$s9L1iw={mD|vv*6jEYr8M4k5&3>AqoG`)@avZNgcYGoNG&D@3ZE$aj z)xcvcZqMQ}c3Jc`fz~??tP4%sFKbSOV4A>fSkn~!I68(`*otprlKIKaueGN$1|2r{UxQ&PhK1JpN9!I)RI z7s=Z5h}Z#`qotWZcg8J2oj8_JD6e844PHuBDv~e4b_a*Kizg|bF5)>MUf6~10+i~N zreDrb&!9>-$4B#tmTG%rip*b zl4LKhwaV(2h`u}BZ4H{kziSS1y1Ke8hDCenbI7cPI*^O&4x3`5(V@OQ5NHKTt_do~ z%J_G$JAFa(3w;q@x4s&&t<8~zWC9?_aYh#$xekZn@R2J8MR9#F3$t;<0LyzNezzWS z+dw%r4jnMm@x`X#)i~IIufm>in;E3?Sye1E%v|2yLs$^=Uz5M1um~Ti=D*P`@wC(` zgak2iH>C!P!`1Q$WOTEyC>E2ycKisGZ~kF+fLxi&HXoJLZ8HOgO zk8V$lR#mui|Bl-CrbuqXviF1j@P);`VA|Cc;&F|b_ut;DR%$Et75ZAILTD4V&o?Ws zGx$&IU&fs3f3x@Q{MC-FaR;BYmg;^sA5qwORGHb`M&afBS>*AWe|8j+PLmpRcSGFr z9m0O_JPXMX-&++$O;AaR^}uz**s7?E0fkCL2X$$HM_=OuQkZ8!mwR=T9C_1Ldy|v# zM#sn)rfbmfzO3KYANy9qYc+Zq+OposrHPrq8fAb9VL>j(#r+BWWfrE*7Ytm}CfLGoU> zpYHfe|6w_W_ez@#mja&&%swxS$ki5Q0Q~E>a#jy6c#FjZ3_ds?1s};u3N^wNR43Dn zzHUC4WFrTp`fx$0>+8mvaXU51@l&Tz8rHG!Dt;lJ>|StHLCaiXrr14NJ?&aE%rkSg zJNYV9aG>E}UZCW`MR28;miVvGzh#m-6RJQ)T;*b`Bo*aP=T=*7Tlc$?UnkXu%%+G^ zK;#-{najMwgRyaywk%oa)29xs^I-<&31yF2Gtr0@88|Z6;4rAt{mx1<-bIs)U`GR0 zg8SbLoc_>1`Ulyj8IO`-R2v2Cv^)N|-vkavq;LTa#~amn6RI^2O;Bfm$lPkAIM+2) zOB%*>Vf^455v{cUGcG;Z1tsw4xo+m5)=|Q~vLr+$LRV5#Y6SfWLHJJ_h|y%vBS$~4 zC#8)ul4M=_xl!_Kov&K<2_MC{%0jc>b{j-Q`PqBFpLF$koaj6*?-eJ$)_K&A+GCVk zyDyT|1o^HN$DI$iT%LGym3laO4#(*Ifjmr6)n#7@bR_?8G0GrAFF)=HAnJ*O4rxx+ zU^31OuvSPbegm=lrKe*la2noLP%6oQL7#F^mGa!rp1^zdEFht%=6Bb~4>;)`qA<&o zQND`E>oq3hM_go9$Hu4HkCQjiyoWPS7d`x#rb8Vr7-`0p@y_aw7CuW!`#OI*+U6-= zQ~WimLa^(Ycs`9_Z|lQ1c~MAOXU;lzR)NopE~~ic_TQg`ZXVrMa z!YWMxx!Tbi(A-Bc$>TF=nJ<>ubG^B9liayJHb8rpFs`>pc}CH>1JOvYsKo5&_9d1- zVQp_O7F)c)!e|cEHkjePR-z)fvOlefk(`;er>N0&ivBE`piBr@C6r{OrY6vZpuh{h zYc5h9_G=a>RHvOY8I%ga*kRo9rB#wTJf>uI<>^>O`5-NKkek~;dseI%dunxC;x@+O zcDd(mZa=oOA6n#nZ|x;XM&!sf_Rb!GCc5 zZ`mZ&VX;d!@b=~Kb>DCM{{IL&>pDxuuvZk&8 zD|7CYg84G;RvO;0Ti`nWID*R$Qc*jQ@rlr zvA1V>Vb5xptQreYJik?mC0TzAl#(rl^1mpjRKXo51m@W52~8kI1^48JJX6Z46I&66 zFrlX7%2m_0k1j;c8(0(jEHd}!7jL$KIaio)#@%kdZhOF*t6et#90fV`M%;pPa%A~l zqXC!EFYKi74Rb}s*% z)w*h1CrMsPic|^m|8NV?6g~-8cN0b06uEK=A%{Q!k*g;p5piXUuB;Gx1{LE1EC0TH z4q`~ZGgbMYlG2XvFQ-5p|L9HSpG~7>17y%a{0Ys0vR+NZ9?*q)hTWO{Gf@aI7iFh^ z>;$pw_fb|}JO4=X*4%`I{z9-|A6z#Jn)>veSu0W*Ne+7Tzw$pfM(Qxcp~E@vw5skq zyK_Bu9#E>Kt|bbNVSjWSJ2--co;Jc#bo012VwhkRaV|5)!mo$*u%2Jfrd3ikQhy4R zv@Y=iILFgjz!>_yPOI%#`=nVH>~QbCL);l)ufM+Z6i&T->4k>3;J+~zvh*#CHbQf?$ z>w1=$h3g&*Z0<=I2~L~{YGdNMLFpgmIO2N1Uc;_nSG!gzXa_Ue%r<(M?5Qj=o)@NnysE<$aEdpDDA--=P_UYoYq%-f$ zmpV9>I^I~_Opg_zLR+K0>+`HyV^Y%2dTu9!KTAO*1mD|Rb6)b?Md8A^C~T6v;D_AW zQ;7Aud)ik|9RFBSTKpr&FNlNk(M=`I2KS8l$Chof2_=*n5r_t7dxqzdzNH~bOv|oS zYqM=S(y0_qNQ81-1eebT4y1=Akt2(MBmvUM9;5Nu&_gs$Hh>8#3+fYNrt6^+OuHI@ zWJejr@^f`Zc?^gorbcd11rLKhb4mMmE`%nhgewy)NmPD`f}dVno&|`zqYBoR8_!%a zzW6oN*ZcmYXEfc=chu-b9sVW3<>^L~I~N&AsU#84-ftOw>iXoxlhi?*8W4$y%BI*; z^@uoxspUE%nd{nkmCpAiXKy;>Xw+h+Z&hOJrSHXgpXpoDjtaN9t5Gjx2uC_D@Q%K|^TI*Z^c9(c%Y_K`RE`wCZG@H$1m+_vr!vh)%api<0n_VEaaQw^` z+{@78OVhO#dHG%9uDtw;+Ues<^PyXCd&*K0qWsIHj~%Qwb;dUlN&AUM*(6SyLMTgvuH2nWi%h?N?` z*q|r#YHU%hfGt`S!Nkr;-&`k*3HcyX!Wa!;44T$n8E6)Di9-0)`YXxFS5nhzFS9JQ z;c~JpEw%Pa5kq%16`2}Qn%eUh5|l7T;lmHH?70#6_-6axlXX&^odjx3(_hO<0|^Q!opq-cDa<=GBKC1Gb`piG<*O97LL)* z7gL&lTyopEN#_ffK|=!CFj}Zf7RX85AVhH}<1%CiM5mA?@Oi*-EGCh(RSX0r`eUT-U1FhJ#UX-vv)HN%c()wGyVW$Jm{kN zOjc?AQEx!8;q`B!9~*QzV~!LstdvRHLACkOAnA3&yA9ih>&`z~dxY>Ay!Ay{&wrs-f4oShF;>IJv1QIdOj@ zH9FClm^{%04t!Y|+DK@Gwo`~5uDaa=$2bz{R~fbYa(RaA%uN!H%5>h@%pGppt53gv zSNEjEU};;_T^n3OV#x2K{yp4odnEsry(uLjs|aZ>TfbvD`dv`hq0k)luRAOyMOJ2T z;IX+or#!Zt*Mm7#&ReD2==W^qy_|J!dzTxeV&B5;OOR!Qo?eK7i2<&5jk%)5qAn2t z+cSw8s~xKx7Sw8B_8Ogdj_*R$;y8{k+Ez%4LFX;u06@9|Z+;-s>>m@MbhVFy@>4z|C42iMQq^QWDU zAc4&1R^_2)U6wV|4-t1J*u}{&^esBD5H)8|h!uFouF9h+yGz-}ABHhP*s;_oRvfVq zM1*g4PVO@?`tvwMJ zHe-$52zQBs{m z2$B%+l(_fljMDM9BpLrdMg1N5!#1t9Kg}<|!ZK;4m}}-M@oEo#@N3Ukaj4F;$8GS| z7y2ocQa8|*mzX!uUKiL+w}|JGI(NqK=xWMfQl6niS9*mbS9(NlG9eE!M~~GCZ`9_< zWqgOBNVJUqB3!YpQ+_pNH>qRd9FC0PWjkAY3ldR%@#S9Jx z=ZE@5j*klW^bc-7H85xpe?oXir#9FtDfH|o)lW}5SYoHb;aw*N4NmtBZjYT)9i<*i z@DX(^dv@0{C~7Hx5JYiY<6Zgw>6Nqmz-@6FvS%xkHJSmWeEbvEV9 ztFH6;r|rV!J^Sw%#|;ebTy{mQ8@v#(@a?s8-&MQk#22lW)WbSMC@S9bR|)E*Qy^G? zuptKE_V&3y+vlE*#{i5i=s#jwe1vH%fZYlVpp|Zbl^C#F0Ti3DMZAcRTxr{=xa;Qg zy1y|%tEP>gl%R)7|Jg?E_3+r_1(~f=Ke^zb zf18{oF42=Gd{{^r*!)U@<#X;`CJs=ZxP8|u_p%j{Gs z=vyD45bgi1nIk=ElZ(3l$Xfeo-rS$Zwsr$$`rt zBmkfiq935Yb+IX>=2l%ilKfMj>@N;ajf|u*{=lX{RdTa5TiO*7k>2jp4tRcPO;O`N z|8CUyYaV`*=%x-*tm%`>D_IsyW)DsB)Zcj|3s5)>`_!CLM$I){j7$8vr!VFGjUy~Y zSqznZ2Q$swgrqLD`?$47L`yroso565^GiQBDg5(InfUJbTv)+}TeM2=Af7NZ(;LT@ zID5^?cN{6Tpb1$Vp+W?q7_g_i zr21w0I!=Rr1?^lT@Aa-+I`ESHCs)-&=>kz$Ly4XlWEN06i*Mgxxo?5{>?|(+{j~fvxiGwOJCkF z7^2kgrWZ@)__(<>yzkeHkNa<}MEBD-AFcpV1njwDqp2;cuSl86w|dHd-y->_q)k+e z?OTanfkVc}T1-&bFhsAR#PprlD$o}{SsY8&iy>J87Xb#yVrk)EbTq6ofRktAL@uVz zPT$DFR9G8Bi)p?J4g?Uu!lC-PuBXb`dJjUocO zr3QoFn&RR+X@*@>?SOK^gNfhhRxR#Q+k5nY7PM4|mCVy4BjY(ZTs$W-DqiSJE-;N; z>PS2rLa*D~aVhZ}xITeCDWw)t>;=kwuvG&3^JJSyWhR|g9M2QxvH9v-B=LLxVszFi zR^i2$S3=WSn3rS-(Z5?hJ}!A7#Y>Cl@pMFTXmOl+8awUg6B`_w9?9fu!~NBW@{*Qi z|0lU(!$dh8bBb=c7!fm5nl`mMlSwa;WeW|W z*KgxlU?;#@M5t%M=RpnX$&BKWv>TWU`RLA*bncw0HL5ovK@kxXW+&x*lcje{+{s_3qh5H zb3cqTcnd}hDMiYlFvJuw1Crf*qX$Odr5qqXChz@1&UY83|*EVmkamd1vikkJ=7-fw`?xFby4Lu4^ z#Yo3!K8>26Cgf<7IG$BS(5Kcx!dPI6ao!zd=<4@+W5`U&D<$3Pe zvoB6DFRdkAqC4Z|X*ks}T-NjF$5z9Mc`nmbUO;abTK_lEyJ8F?2}MWK(;_OeL@^c2 zMOrj1S|{-PL8$_X%o3g2aQaz9A+zP68DqYMJ8&>`3BAx8-7B^5IIP9NJSjS9+JU+8 zSw!k*Hl7%{)5^Z9+I9z9hNy1wLA1Gq%SaM(V^)ip%Ss^K7PIj%x&UrlPG_WZH5pCa z{GolUXx8*0rcOWMMw~xn&Q4^1ekfTxbiSbRYBGIeG~QH>&qaOR(Iq2B%(-{NSR_;_v_I;)jbgIR(?GlWW1#eG{Xa1R(ykA<|7a#+?EzgwIRVrzUr zR!=NQKrF_1DZAppnH0(UCOdU-AYZnRaz*(rSvp<1a#R(5-#lr5XRbJAQ&4?7@5V{> zc+KU!TK+u*{2i6q3U=to@bwXhWf?wm{F;6cSs(bz*Ci@c=k_9}M(he*p^bz~ess8` z_uubr)Bm8UC~1T2y>^Zp4|bi^|Noh-LcO1yf?+6^7dimhx>T$=6e*Ewh+SRgC9!{G zY}Jq8AUuxyy4yn%Jw2OF=zHJxzKw@_%>hTTt9|{lS6Ad2Kd-k51kt)Cm;QAR`H;%t z`s96G?YknA#+5J0$p-GczEd|dSZf83JPNn|zemvEoc8|_tFB*xQO?_|(!tXxvs-;O zLOsDn9B_Rbu9rmLm6Zr`oj%@WC){13nNs6CcLEw_3^_O~5VgB})TH61vuetMm?ths zdtYMSm$oP_o9UTj+gyHDh(8(=E8UEJmj`OEU7zx|lL$GpKX01MxNv zS>?3~=35hqN~3kzN)IO1r<@SkT)*M+OhOq+6S>=5b3f80>#B@D9(m8tGu49abGEze z0hw^dTCjV`=CMX35;I_oU@agBZJ&wC3^!|lv3o&p*`lN06nnElKCutJZz-H{pO}Z* zh0s@HvmtYD_PKZ}efiGpJXjrq7mIlQ+Aa*daRD;fzzOnfMSj(ehXEBueFlidXUrFh zwb$LBgg6ak*>HdD8APdUX6^FGb~|r6!>*tPF&~#^V$hJn<*_Qt_ntD@&@5lAF+=6v z#B%hB&)cPSS-QJ2Rn3+RKR8BI)Io;C?*u#rZn=pKHXU2>s&BubUGSoNF#-xLJylhq z`6o#!b5C*0As<7SSt=jbj9UuGnmbWRO%F-d0IYdZniOogde`ZD=cSs8T?E=@ot#MRVlB@kD0 zhKt@^e?=U5ql$`&n!O#94}o+&1^#ek%lESjb5{1#{QG(6AprF8LJTWJms*XWYlaBHM`N*fElE4d8I!#iMfMJ+sGsE|z;La@XjA!Xc(GB5dyWoI`moID!I+g+l$# z1gR24mVhfoG3>Yx*i!HvJd-WJ4(#%Sc_Yp;uwVu0n+f!`lPyNXU9p}5!1nQcSG|Hz zTww<+j*N~BPPRzO;^625o*F}PKt^qv>@C6Ir$3;S(=xB8rrdx=XqtZgL270bHIjB6 znxJvUjeDuPt+1UW<>0X{_X&Yq-jH1upNK6QOMg%I>SV2UMmIKSqZbE_KV_9(uyHi# z5PT4fEaMA{%Mb$KkI+f;A9BH$Vp}()i8<-a`nskDhM1AwRNu{+Et#qG^Z*nHAcl)M z4bn+B7ZZh38DA`h1}tfHVP9d|7r3SkSPn{Z|uHE zVNEw=6@KUq(MJvLE{MpFh(isA>chpqK0;$^cL_lO0LGZKt>S=#xasu}BO^}=gMCc; zA^TqY0X*4{I?bNUK;wTL5R=#)YVGPudoo34|E&==6PINwY7=e(GJN& z95=Cyz|`tllVPSK)MCSCxBEP?Hb{PYvU$o5z7yAPc8_M68sP27WMCrpL zIf#?*yv}%$u%jSgi8KU)$1Eu8x(PhYNZ8=X8zIy@t1{aD>|>_#8_8Y^4v zv&J#czzP6psDeqGm-E4wkDb}EvbU2DR1V~=JP=HfS- zO$T1N0C-(zF;&jkbihPdoKO7jn_S{+T_HpORBJiVhWf!h6!VKc_hSHcibqzE6>9j{ z>f}2w-%>Gz`c+w`9Aa~md(T7}Gxjj41;keE3zd`umZH;=@r9U9e|DW>Ne5u?5SC@> z7vE>OLR?>_y>6ghEF(j};2|ta#_tV0cuH$$XDirW`mJ;gU_|5?Wf%af0-vf*=@tJP zCl{0=p>?{)wUS5#3gFkfTQ~R!+`;NXTRX()4 z<$2(#JCZPkx2pJ7#13R${e=PX&l;hsdI$3PZL8N`Jos@A!~Wcfy*d^~fq?`S+|7+f zcUoMh&>w25KT7|->FQz_n7AS20)yxOibs%m^i9 z7uVZX`2{@#l2uUduxIRUNl;FEX+zw6pCl5CZfvDZifszN5%thG*8*xqqp>q~K02%S zggVr!+WCrwW`lvhkKQQLh9(;ro`9|ytV9iJU$P$U3ZuF;0iX7AF}(R6*0;i!{!JG-V0_XdulpUOQ7c!yn*JS5DVL{T2p~h46PlS?kfFBh@uQGCQa1N>Pi!Ql9ft`I~0ZHd11x>mbc3 zW8f|s7>V~&mR2rDGOuEn7`$5+-|-zqafyv}x%lbC<&I-_s$jJQg4LXVVI|arZMb9p z^fR1j??btleV|)1;z|0mjz2)f9w-H;a;MFm zaHVdvPK0?`M0;O^fppn$Z6%;Cp^afU4PXPy?^7`iI6&~J_66)bY`$JwYo9VK9V=TX z&0MA4?C_i>PG9u&xb)p8cYXKzTKn2sHgTBPWNZKFN)S4dUZM;b_9MbFf8l9EwJl8M z1FWC`Y>&-GE7rZtvXNcC^#j4;J^t~BCX-VV?mT$iG-n);D^yZvud;1cI(Pzy?^pAi zgNyaJ&@lxl4H*bcZDLymH=(r-P#P^DG-Y!R;$1(YJ@9kUy$jQLr)YjoRAq9yYO_ z^(SiEIpVpPZEb(yD>e&Ok8C{&Eb?yGvGU?N^Zlm^v+|-_>+)Cf>sYOMS*K1kn2(++ z&gxo>xiER)gZa|rftcyVokMqq?(AHQX`MW`CS z_?|Q0*>S3xHRJi!(}iBgf4?(~)VWe@%F!3gfKM)JEv1YsJsbV{(2aR?u|c6$S*562 zSzG@)^y?CNsVM$XFMW%Ky-Ni^UN!1M0oFAxdSO{~@ynTGr4Mo_x`FWHYTJGARp5uh zA~IrWg_43rxGe(ICAfa!=RF7sX{VGuWY>0nu`Hry^ns5 zco#mcIG}pi?%v1QZTf4sd5q1!FGty<-juY6r9E(H5{y4rJuouV0UVttvPfRKYunR9 zxH@fQ2K(hX0zA*Jel7D~R`0xn!V?_g%$eer(VhpdiOcO9&g^78GP{L@88DkX7?(>%U1j}RL&`# zH1EW9vOIfKg?XTAxu9~LdmKVAeAO^6N8fvl`$Z?mXPc;-Qy;t@BNRR?Ap?euqkH+< zqtFJY^wNoAVyo}=?NaF|~N3=lLr4`6k4F!yC zS|tx;|HLD23+HU$pdR%(e1E^n0tpdZni6T~O@Z!-P!*-el=r0r(siG7A4A4ikZ4V} z5!x<+raXO7eUUOt$4nYB-iKQ=b*M#_!1wwCqb(3IrV+GR@OLSFfL za{IbMVv*;JKQq5kDT;E6Vb;}YEz(aqI+-4CED?1noRE~NjY&!G7n3+)8;)D8uTh}TbWXv+nd_L`ni%Mr zJ82G^^cH{rG8Dmx5jrNgof8$@;JfgRD*Z=>nwG60UH%hw3kC_B3>r^+KqKcL&!h$7 z-1c)QWbhE;oViD}sQq|?d!>;QSa(@cTfNLxVt;5oE*7Cfu#eliqand~-EWrax7$xD zVf+bdZLAOBLT#C^D`T-7AXX zAhQ{&R^WSl#3B*Y@YmAmC{;R0a#`RrH_J+(?Gc*m&aprKaxpQMS(%n(?-*X8$Ud7s znr@?l2z|(}9w3<)%T=1x2fS z^N^KhF4JaKVD~w29X9OqiUs~-+_;G|)r)ShO_Fu4V1C~vm;~R?F7GN4PoRIUqQ*C8 ztCalrlP-gpNh?W63C&?nAP`otD;sN-?)gW>JwMAoiZThCbU7KvVY@ke?q!2xLvSwU zGg6F0{zxtYBBo(1vWy&URg*oxs}pg8JAa%X2p632cCgV`=`M~Q056kV{2 zd-c?x&}qU#hcESu)wsfRbIgq=r6 zJ+_^U!)ywhgYaVBx?`fl#~vyLcBXn~ccuj@I?}weJ5s-o_Q^{Fwm5c(X@ow@?me<` z^O&7Qvu*&_%*8QtN}M{4I=5NH<2OH?)pZ4YE~i$L*Nk1m;Ww!Ba_iNQ+7G?dIMrD5 zrS!Vpa^rpSy5ilW8)AKOeez%N7)dA29|D4C(iOO~RdQ9G2H3!zTA-3Qt5Z{fJzaA| zjV*!HIckNxUj5)x|9klO2K0I8Lt;bby73a+%tCOr?xp+5+>s4(GNEW*C?>Zki?RQWMV!DMI^n3DZ=yW|FarcB^+fI4Ad@q-3f&^qDcZgzk|y5smHZJwvx-2G*A7 za4s2fC(Tw%rxR-!7}h1t>5GIeWpRxbp#{xkb(-8z zfKY*UycQN$_Q!Ly{C;Fnda`4Ja;iJZIDedMa#ETjo2Zz&IvHmVT?m1|O$g|>Alq|= z40bduTqVg4{Ogpn%`F0h_sdr5)<@-m4nz5fzFc_aCWJ|hMOkYZ16Eog&j!emdu*{1 z>S&LZ2-V!*+U_A2nj@TJv+u;NZhszKa48!u?7J^@O2RslX6t!6oTy; zFDD~d5_?I#VPK?;i1QD%lcxUvoXr#CuEs~amhJwciVb{G79fOkG|cExmUXKjCRE;= zky5=kUP1;AZg_9Uw(2)s_zH2*-y+1MRBLV`RZih)dZkN@;SUHW|M?_A{gEn+VK4<5I=0?>Iv1hM9FSM?n(LDZ`62B6@1CYdW zwQ*%J4#3`Gx={&ZsQL}ug-f~Xj$AZ}nB1LC01N~`H7|L3iCTxkbs;KuQY+E=94b*O zl|8FvLZ3q?Y5`Jo(g*CN{152-AM{g=?cKt)-jB492PAVP{f}L;@;wGq=Ztv0uHLSH z!Xe{yso|tD4&_uuJuhJe#Y3AWOyzk;OpQ%YtO$w4bMsE)3;t*=HS}stMF4#>a{WDZ z)lnpp1R5SUlkIe(t;bJsm>N)^Dv}^1^DuW&LO=i7fA%+;s53pkpCsOQy9_u;kuBo! zGcbd5!-=mmd=>e5m^t7LNue{6{x(eiRKotGlxyhoS6BlX=%zK+Z>d`c^rf7=RvPuv zw9U`}9j%W|Q}4~0p5uRj$|`BU69?QSMP%q`B*Hax(7eO@OhA1Br^(B1@!NI7qBcb+ znMZi}n@WnM71&YWet}D>F=`|@O2)_=e}oS{{{YYm6MS-J;k2H8G{$_WoC~T!(9p2Y z<6tD83|*~82s?Lvydb|55ra^Q@6TWrq)Ntg&uC_% z%(oxv27zhhaYYY%^%;Pj122!X11TgIcC<{aK1 zU86##BTL>l(-Z|GARwzoqu&yj8bA!ZIx$#71Hhl#NY*70fSFVgyeDrv~hEGyF^!GZ3Lmr;)lMj zt-o%k4)MpPK!-~|^rKiHdI6^B_9(it(E9*`tne9O(2KzXqX+W1JzkoPyR1}$^qd~R zBH%5}xP*9)`1UELjy!c9+7R~>q=fcU60r!~DZ7M^OC5izBZlGF=j*TNdRC1fUbeq@ z1&8*hr6H1lJ0-l&p1?YByY6B|sOp=HLqFU`Ht_4tpT5wfCtd8<%OzUW3s z+HSS6GQ7a6d(V_>%N#5a)>3t~9%CUe|zWgZ0UnRxeS#@7S-5vIV|H(dLgE#dkf{iH({% z5A;%fx!E&579KNO@Z^j#Iv2$N=%VSh#WkIgmJ0;EJbtUcH_M(4&j!!jvDKwjX+2=37swSY1q{ug zGYeG8+5&-PMuAd6Dj)`xLJ9j1yqL#pOKY)~Z2;|GaVue9c26wTA$LPO*n}m}WXF-i z$3*LnfdV~STi(fxt?9@6&w)-B_YLQ{F{h~4M{73xt6&8v3Ftz)`4*{#I-*-5dFme%EH3|@>Kp)n!Hjk7~s(K!jBC$dbO&(8VRZXDXE{CYRx@L66u1g9&j9+&n%i5q_>qAU7&KnQL%&2uQpN)}Z2B|?mOc{y9@<2m z7+3xU+qaZWC)zAN`T|gZnl`0fy9X@z%(~MDRr0sj5O)Stt&)jD2m_!e)%=}+_lUsO ziJ==44oQLdv(rn&J5*_SYS7Gbnf)ySWlP_OlZJkeV{Whz=j3O zGI(`6zdh?k!f0xX%T36K*g^;l8mpKAokq&}<(eL&6#xKROULk#y(K%dX)GI5pvmWE zWbWhom4yV%zJ9{qpgJ4|Z#-5N`xt0Jm7l#sd$VD6H?r})-!>>ej-hu?eBWsM*daSr z*aB&?%I5mm#PNEll$n|upg=cJs}WziuGCeWrjJ2rBP2+m__`tL;jo$~oc-WuS3&rpD-=H*6rMIKFz#j}xsa&YOkOgoZw>DnKLXjEMI)b@<6e!dn^nHj3#G`T*Zw*YZoKbN=cU&wcV;~$Q;lyn zB>X_@xX9Q%s(RNtQsT5tnNByex+`iko$hVsT$Pm}K}o&8%RNcQV{FKXh=Kb)F~`D3 zb}`bP>YeY1TXiIm={KTrkUBiAy0B1#-vAG1XFU9}Bt56cjc>1>?>a)a{OtKHu`w(g zcwv%zPy3AeIT2h?rG+gW9eA_YKXUQDS>smtTF@_;Hg=N=9sSRwWe z8Wshda4azb*C)aF7X^WoK%qpn0ms3~0(%Dh(o-GiVLExn6y>0v$ z-r4vO*}rD3Ir=fAv*n}a=a%=e-HjimM^^3hranfsLFmcA`t0HpmOCioMbn>=fkCbp zRP;I0tM5T2ruh7esP4a>16fest6yZPn!i@xBDk9f^-NCefdN8g@S%zzZBT+=7|Ze2 z9>|`(D}1jhs46JlH;lDauQjmoRBo%`s8Ffo^(qL#G!=V>*QY!dL)IK!9i19{+fv1m z?s@cdY;bD3iNz#2IEfU4NTBw_dgtmyY6}9^@C`9O88L3s^|5e_$AS!5QNT7bUgUwgO6p2xlAubd$4Q%J0AZG5;_ddL}hT=lL4O6@ zf5$ont_css0of~PXB(rHPEs3Mymmk2fxO{?P-Zdei1yRfYDQo!5CkZeC)B&bZ%%OG z5+yXAmv?w?BMw8}@-1A0YpI|2vUa_vANv5e5(iiVAq;%*{!Ohe_C~7z+%_HkoG4on z`M3|H6fBw<^PMmReh-7}OEl&CswdoTv# zw^eQs$y+X@9Ng$%nv-%Ok>hITc5n<8RQWFT!nVYbDCs(unb9>A>9(P$^WGCO>I210RV9| z?@lWauZqkWhrSY4A}-uCdko=a=kMhL60D*%Vo>~o!F8aSK%43$)NVWl%}~GKR3f3e zqZ};IES!Wy!l)`UzDAmsHCRTl@=@|1jd)GBQ>B*u$bWI$Flg@rVKMmZnBj~1$b~=$ z6}RlkIn``0AFDE+t(VknuGpqBMCi=p#l}J^m#{JO1`rU8TcbVaPxvD*T|V0Dv7gsA zxvAdP>x;15%gCF8woP_ z-$M7-cujhNg-~drCu)IeG~}MlN?t@rHd~zEZ-3I`C{|tVLJ{)hRBd#v5g_+{Fq zKB%xYoZozjB>WfP;_u^Z#|zbBeQB0fX$DJBme+t3qpYqBs?i5WKYNP$e8l3lPsuaR zX`b&vjBmZ#vMFrOo!u-t_`&U$(zi6m&|_U`Db>&lXKQHo`A`l@05?k={!$%HuLq>9 zdH^3 z`k}NKPogiMJ$y-?6dJtWv)Z$2PQ?2{n2bTPSj6BUox<^wQ6ENj*LBx1B|qRkEsgPw zp{LsAHbRBa)U(;Cd^UuH4XW7tc#ZIa8M0<_H90l-$u1RpFVDTFLxNM=w_CO+ z2PcJzJnU)dnaPld07my7%xZ-=!e=e*i@$4z@`j4bgKd|AY+e=9y6eQ6NKK@ek6VaB z=DD2}pab2(n%w-otYkEbWt#v25{d30V;IU+g$^>fsJr^>pV_MM_9f8dvoq4h*q{N` z#`e7wPj|bfrj_5?P*>O1($?q$IbVOisqXZJM&Rov8*hKKG~D(+MCs$0i|xx04Wpkm zqv_rqQ=CVj3>^l;2|dUC|LCgsBQ^wz_I?4HuABchvV%24xH?0!;Ke70df>cC?Trv?rLzaZgFgwz7iD~U zAtt9~^ajjEf6$KYG1TIJOeoE+bJ?);9ghf!Pl!u_$h_#))lF%-q_b6AqJV9M64)lj z2{}MR^uZgi5cOC@{f#$+Bg1d{BIkz1!=tVy)d;R~v@@v_3u5cY7YGi!j6k6m+4f+Hlmfkf32|0>-_SH1#K6?h%f7Rh+mNM;5+*j$(Z8T+vY3_V?0?J* zl1P!SkOkMz0-Y||S^c63(^37n$|N%wbpmMjHUyCJVr@qcY*_cFy)CsW9mC&g3_goO zVv)cs?rQR2HdXE5_qW0{RWCNxedVej#IIGBJ<^ts z$W7yG_n8#duYp)gfAGi52^k{oqaZUhqEJ|!=`(fk4Fw25Yeb2{3 zvi=DhGZ7p7{AT{(cMFc_zVB z43zxJ`(R_j()}Qlm3(7xqQM5x?eMH{^o*NMR*aK>VE0E4>4-UuhN}I}hprh7>dyy7 z%>j$}h2}uJOJ8mpoVcK3^>iLIX_m;)%u4JhRD71xl-H4Br6v=!Pb5Y!Ve|`?$Y{u# zp;r{v>LCjxGb{2HO;ymV^HS0$uB=GP5$<`UWYmSQbsq7iQ#-u>>WY0L7sG)|Uqy!b z=Ot2W*i~YYAHN||gtj)!NWwXN=R>-tOx54&dp_JdapA$!cX+@6lhlybY3IaHy7!4E zjIk;ii<--x)Xn(AhcA$kIn+yUuM!D_n(&QLj{-aQ9FNn$Z)TmDiMpb%M4V*3{#1${w&E>XlhGjFPa#j+sTqP>`^o8`Zx=&YRZ}7Ue}E_PcevazxWVJzAnz}~d?Vm-gcpEAyf2Op;K)xF z9T|pMm_5>0RB+@99ERDjDb$>l*4oyujqp4w!9`A*pJ|J7F8=k< zI(6DNyvSMo6Kz4>nQkhbtQD*{-M!#9gMVF1UHv2jY`X<+K~xMjfDTbW>QL=}22^u2 zpnD~PqX&!XwkMWs;pX9#4LumNzeA=Db3EP%gD+lDLX0M67pf-k^B`RpA@ozPYq98&}6B)U4ZK&-_{%UOIkFiKS%?- zlT~&LBBjuq9MS$Y9UIOckzG-#z01r>>hGb={sauhphdi&jzX+M8_?W4!9yCT`P*p9 zUaI*!p92~0{8iVy5v@c0kmk3#@ zkv?HD*iWq)%^QUhy61zKzZmi+_;G^jshWE04z9gT*%J7xtMRhUoV4y$YeB})&5WGi zL;0&0iP}L@wpM2}!XyC#to)kjwrq1u%NdsZoYDyZL6H=Xa3#D*H$@nkd|@=3PK;}F zf)w)H*{-jhd#3#{>w@#n-C={>Y%wQ$#eK<e%LLxdRe41HNp0;W@iHz-;N??^td{@a4i zR&lOmI3Kzm-Ft>|`77<+NMUf}lQAoBs-(6?pw!hPT9bHD_8?gjl8-D^j#(i+UB0QX zXLH{@*tW88oJqv8%Yj`acI=+rCbbP76ANRW3@4|ZeRCW7VaLF=furuRYs(L0zNidw z^N#)$(I`iw3evNO;MZg>UQ6$`G0WCQ3R0yvvl%Zwl!a%-@F6paAzHj@g8x_E2?W)C z%Iu>qMc`&Y7pBSRtA3;EMDK2X-Gpgtp02j>C;qkGZDz81rmt}B;F~S;2lsOf=@|Zg zBg7+S=j#DPc{`$fdf>d^cDno!?6_{SmnZaGRB#hBk~HrbWtI8%vjRt;dkVZ^Sah7)W?Xg)jIkKHc>6KpxVKgKoDWQRwf!G>-_qxcB9EM8)*eAFo( zA(9z1699+R*NrL(1J$m=#uG&;2h+1xZ zZeIMM7S3`P5CpXzn9NJ}sR23MyG>8Q;b-+~t)43YL!;CB7-e?oA zt+B9d%T)#GQWNef_1=E0t|T1zSrc;bs3}_u=@#J?)qrF$+*+NMbkhqP_=VbOoLJ}V zk=rH9zk-J-FTK-eSy%X(J%@T$`hQGkHqT_58-WvDP9hivTzzj=M9qnLl&nz9{xB{h z6}2aBOqfuGNwIVRn@kmO=&?f1+3gHobV{&? zwTh8N0P%=EeB%}D%ZJQ2!$ZSwKGw8pSUfm-$fUXeGV9Vrv2{eEUw5M&8H;kUN{Gow zLb1U%K7lqiZnCaKC-4I#TW`1>?n)>xMx2{oo!)p%J8bVyH0b?HHKb6%kzFPeC9Pgf zC&d}|nXEoXM<=OPjq%Y!FeS>%PH07gFaP+dq-9lryPSxYXdQp_Z!S14t0GVH8eSKV zil~lwaYrh3Z&fG*N%BSW->qel$>5;`i6HtqDx6zpQJ!X zMB}N*!el4`Rpw#dUzH`Wu8(D{m5W6?T!){`gmp|tZdTZzytZ31`0R~lT@ibmL&du{ zC(LivmPNEwMI6tJzXTK(+&U(%At%Pf6)l2r^^W;#U0Tx}n`hcDs`<}cUboHzX{`Js zi&|Y$psp^KW*dvu1;!Gf4grUO=9Ny!$gTJQNO^e!wKB5tqWULoDzF<4G%C9sX_LZn z;x-*KB{Fj9uW1z;)in-$XXPW^(kYi!ww%Aw z&&>2~+(p&w>;Y%ScMluuG_IWov@aTL#z7jZ_IeQDHRcsE)EJ;clJ@O>?Tf4_v+8VY zI_E0d{1UxSV{*utyL$O-rXJ5Camy)WH#;k9A3G#ulAWHlo3ougNau6X*Pf2I$?SCV zL^jkIc-O4yD(mj@;zjodNA9}ETw4ZJr|I?A2jBssx@{#hkWGIB9oQ$15cU|uS;OlY_Ow#?N3g}f| zl;P#C6p{v$B>uZf_zh3^*mqCKbw_XreGf@FdfUY6Rcd`p0g+$M6Xs~N@RB$x9=$i* zn6JuBdT#I&JmIY1D>iW-uxrAP<=)#)dza3pP{QiT(;M3%2`>H?JqW!(;=6BmR;~03 z7kMSE4A5=Y$dD~WBt)d_Z1HWeq@2L#owocIiXo|Md1g*j1F#{h-FXcS)EIBGR_V43 zYId-=%FK1&h~+r_x~ddCO(&_XjVKa{G@XHNf+D%6V|~?OlZVzphadgEdU^8yn7qZ6 zFrH|$2p_#8B&)H{XIJ|Dh*I)BYpcWE{|`wr6mmTV&;{0r^|DszG4$hu@*B0D<5BjL znz>t9&1u=%UMFIDKuR0+aQE3lNuE0U3u1Xr%l*^1vS>Zkhs1?QkKkNwEfwn@12_CJ*9)Bm9JY4`=TQo08VSr*dk1!5*< zz@R2Y8uC3MR>~9qw9L*}l97bj$=gtzY~{}CDzIF|QT(hz zNG{H9Z|IY;1CKV?;Ei%DJ6lIjrE{U5MyTOHU+2{78VUR(@c#@A{8IJvxSub7leGlk z|Lbbcs)?!Cdc$~N(%WfQ*kQMJlQ)PVas>kHhTCCBeuqw1$txNtP>cgKl+>U5{i~WN z!2dhc`|EB}&t2xp(Xik@CtYhPKSxfE(4V#Uy?We$AAkLv{(G@Z`N3UdJe^BmL%$GY z^-ur)$yQovWH+5mTFl>&QJ$&w6|494?wftS+Zt`Y8C9z3=hOp(+#MK=Zb{A0F-yORb9VDM+TPGkpj;E4V?xjS3h3Ho84YtzO<^#`OR&B znaX{SGwvt2{qN4h44bb8JLl_R=|b5dYxx(ixV)a zzS@;FddBtT-|A`$*BI$J?0$FVg|6sZMMK}rYqeO*t`_q@be?gFh~@n*0zTg{#Z9A0 z#MprSyy7~Y&MtzTLYKR2R609gn|zUOMqS9&>vVC#AL0 zE-mQBg`UhYd6Q6Wrcv9s7AuQR*`DF`*aj2@7hiNzsVsWjbBS1X|EXH!$x9J4V8>D* zaFO+zf4TcPr|qfdE;-amg#p-7&`cKFj}3Jhr3e!H-63z8HQ47)uT8IkZBNb6GUVSm z_)=gQ39#TjcGKNw_7?v2 z!ER4^zAXS`KuB_k*@ID+V zJE8}q7Memq$~$G_p)FCFyt@aVC8^L^e?v>ZpOFG6IqaCwqI8p5smmddRb{^8o0Gp= z`0qQvdqB!A<^I%xlv7f$G=?4naYhk@TjDKKk9Z|5%3UpX6+2Zf+`gZ>9}VbUixQGL z(Vhiev6G+Q9zQ?X*iIGj(1V)O&1akI>rS^cw456pPcVtbflocmADgq6BiS(8_gPa$ z7OZQdaF7+5r$*g}2Zs?w&QRq^uCOOUOB$vvcea3xva%?h94Is;w9eHyG%mwiC3;5! zR3Bze3Qar*<;htxjBL9h8|&AFi}AO?nJs7;Pdwe(Xle_cLa0cVrf7r8lonP0IrHs#Xy6E zD}`QRVi6G&qm)={gWn7gfHhhyx;`S>J;ouLY{My^;$iL+-6$swMP$ zN6a-wqnUWt(i;ChI)hEx6gUZjK@YPYW-{zXZ-5p1nPu0zCzps~k=o7lQa;*0c%N>;I0X@WY z6%47Wx>VsZ;*4G@PRut5kU?1!|39W4C^H+7t9W@)hm?#u%oy_npKm<+@3a~RnV{B; zRxN9E8507XyUH>AozR@GbV$R88U`;8s^dCEn8Zt+&VM!QW+<05#E?b)h;i*LYrwg< zIvO?~&jA>-Z}~QBa7BPnCLN5$;8N~_Zoj{i$vrA9%O##_dw(%hF)KhQDf3lf3yH8+ z$4(1vlnZO^*<1bvR;Zt)>~uw9s5Ol=H%sA$+Rt!?@wZP${%lDv6q`1^X~C1jl&o0R zSgw;07S3b`c(Y1j3N%AQvh~~!^GyC;2dqs6=F=fAwLobckW|GG+)gn!7QmoOIznA5 zDw+T%DOy7Kkq?sxPlri@@)j;4e_$(szTb-l`b_5peBn24h@sqsj)Ld0TnVr6ZEl=# zo=(hIWl?Ot=}8YAMv|gF$`>xAdvqK-*PIo&$qkRmdZ+I2hj5e0PhIEA>p1`3;Cd8l$6B`Ukm(}C$jE97jRalJ($5=OjaJUzveN% z(c(@{V^Zhnnv^7l2O@w#8WP;G22nC!cP3`3yP~x#59S}ssu6CKf;MyW@Y2Dz>kjmx zoqPC9Y33z0vj)gPC?O|+2O^>eB7z6!NPQHSFy4x8Lgwr`XhPpQQ(iP?I5=a}rr^KJfT+u&eDiifSvNGTTa6xUrWS#KeOvCTo81siVS+a zj`X((m#oHax9F|fKbCkq(~7P->kJ{M+*KBr8*a1KrPc>xUGWwr0y{%DaRAJELmeL# z2d{@r_+x=tv|*04Y|184ubd#!M|bvnyt%Mmb+uWeL)_el7=AZGPQ~tuj7BR6z2*XudPSi)4G4cY3aO)KzEavvIPQmUdFDbs_NlBv*giu^6ISlLBD9Mr@0LgYw z`24ztGQBhK27>k&aU1JFQw#8H^t5Tw8 zB>%3!3Qv`nxr&QNzZFsarXT8NxNxI!{YSxF%LMeopll3cXcfgI^NmqdbrE599`-Hv!n@IA zQ+$5S2#!bDJ9IB8=mDeMfyVtLu&6NNHGoC9av1^GKc znFqasn>-^GUXZ^JW}{f~EdYw?mEQ~dVyR$!;Tt)k2^8!Kyfb>Wz(l>(9MPr`xRYMh z5~uIlsSnhHpdPhKj77Gh4bYv#dmgSE?pdJnB90x9N`{YPB ziw96YjyqEh^F6keV~oPuaW=LI6U1M%61Tgxq>7^cjQ}8#L{jK|$?Mt@vdY$roC^`+ zD`U|4$@{FRv<;<>Q2#+eF_7*ZPY#8cg^C$m`tucisTWFS(#f9BD^~k9E^T{oDZ(r&Ds5C4j za*z1ArAZ#!z8RM1)0lUX^Oi z{|a8kyUJ`p#t^l}iTj-#Bya&2e+J=0GAiz@O8#dfFRyp&XtEiduhjFWP}`JAe3nV@QW$w@=aFk4~Pp_13;WnQ5gFeSmNr$?+c7WXp)cdHM{*p{^x*%i68Y8n zp70#}JjT}EeUs3U*bqUBY|V!emdBWAF~6dn3lh)0yDT(E6{D&H-CJ$yA`@}e=*1MN zM41hGO?W4%{vJ%?xB)Dgyob8d+!MUTQ?-}EhQ1?{ay#u59laO-QOEB8$|Gvp!J&G! zaJT5rbnfVb{LH9e!ASVJ;qPz2AIXHQ$!Rcw%5UaL5)gxz;)AKZBuCt(xKG!rpxi(R*XQD$Xj=$*`nuqK~24cW*a z8;Pm6fF1GF(l~FxmV||wTU8kriiY5eA3KHUCZ0tvMB>519k(MTbAF2^ui|EMKN=U? zh$nLypi${vc5VQ#$)!v<8B&@bUmF~Ghm?5FBP`=r|NM*mN-wUs2!BQ@Pty5*^Xjup z^;@9$_TkkHJJCZ{B+Xz|JiingtLT>5kW9D1eF0TDs)|gjk_WY2rFH4xFreLbijU}^ zN(&AA(}@-NddAi7C<(G?h)-{sg+I!;^&RQ85T+n&rSpV z_$xxg!K(IaM&fYkyY{(jTng5@qi^tL&a>rQkq;akPw>Srb>SK@A`de5rN6?aW}J0b zWmqdRG9k{FLbRFBO^B@r$-kf8A04a%2AFmbV3=N>0md3=+jN~}?inlkWBJ9&OROSD z2-1Ntyyz>ONdWssEF0>;o$p}Fj)7Z*-p`@Lxs`1xpbKNksqa!gH&NI*1Fb17KBD*C zAz)&_C{Q$CD=wAQCV6Y#hM4ZXJcwb3W8vOY=#Jw+mCqP*b^5rYq~pf&q9ba>1&ymV z?nAU`99iyKG3n#%>Uz5;d~)NEN*lnvpbx>H4r&X~y||C!?s*ez`o6-d?qYR4?i^Zg zebc=MIn-l!&s>V88!QpU?F<4}Vn&jXNgMQ^^QBn|tBpyDE0z?+g=?~8Ydb2-9E&*T z7m5>9L9G97w9VtcbndoqQ#Bn020cF4gS!^)3!JAt;e=s95SNTQ}dr{Lj3xIy&oFx1eM#yL#b z>A^WouBMUDmDjnX+-)$HYN=jxMO#zlwwnVxXMd1v06#H+8UJ1(fU>?_27jl$U4gEQ zmr2)p9gw%x0$&wp9T$;*5rUQDJFVOuG9448bCXy}9oVz~rx8?SeFw65 zUK&?Ni&o%x5#2!D4s~DlIe`WI4r5b zwFXFwd%Rh=R&4avF=s)wNYd2;CJUZ^V4zCg^YE*f09KKDlX-&zOYPk|5tdSZ)2b?qjB682=91L& zY~YvKoO$+8zIn8`crx0%M%u%LdyH}l8B7QetPe75pIE37p-iequ3{OZTE>PhV;Z$A z)B5rv+!jzCLQLyeCTB1auwH? zSffKFWIj8;Q_QImbx%(a>UEV>`L*{N^P5bz=KQC@O@-;p2q;*WXOWIk`X{FxE>)N> zRfpPv*`;Is%#7HMFzTL(qbP~7Do2$*)50g7n#pup!+DNiG{>H??0az~;bge>O-9{V zDb%@>pMsq^xA5_-!#dse$TG;sh4b{y(|5uXA8E)JP{B5la(F@|p?rr-y|Mp-p4GQe zD{sAyt}CID#yfO6cfit;C@o6LI==k+dMM5dskk;t@zN=OfMLK*chAHj0oDcRfO zQ?W1MOljO8+a>VjoYY5IGg7Ti4YU9JkfXV2g$E@|KcV8Ivalt@!`&wr!hf!cx2lt> zaPgYwn5EbYQQ`k}?U+bDF+!SJS@j>5U5d{Q!?k7Rvk)5vFqd~$`(`vzlIvu*9@;8| zk3Qx4_02~(%6U02xhkW_Vn0v+S*}2u)|V#&ZfB>PGhB@#S_i^yyh>wzG->gb^Ik-l ziIDR65WhNYx_YG>P^<4GT#z_|JcSSQ%nlh_)vUYrY0GRw+R8WUfmYfkO{i@}nnQx8 zE4}^8mkiF!Z+-3hZ*@1O zy4Ct`4(=A3S&O^e_to|6kpS0WbLUu*nCcD%YvJyS@y@qRljUqK%g3~@Yt8dfOaCxO zzajpRfKTqp?ywt9quj|u5w5eWceby6v}v2A-*b`u>GqUU^K?%k-Csg$ z2?MOTD+{@BG`+8Nysx=Z6mBiQ`#zQ7>vTjntvn2|A-Bowu-)DL{WV~2OZ2B53LhP# zTAuc@kR2t`-u+jUE)C>0C#p4Hi1|7d2-eat13pPUMfoT;Twh_m%h>_7y#$6o@q=l` zf2q44l7lXD2K&}QF=eX<*Yc4G2UL9?&Jofc&sCe0(LQbW69$J&yul4>XUe8w)O5Gy z`0VO%GmD>bT$nZf;nyJ!qymN%!&jwS+hR@?Rmr>>RY#(bs*wVS- zVzX`EJj#n$!6>Ne3`gD_b=@?ozU@ZItlHTX_bl>}HvD^W5=)Bpo!&aN6S0il{-|rp z8@L;^s5d&r$!S~D^-h-KV_RPX^RgM(l**gbY#6>80B1W!DR?-{A5pU|l43STybnlzPwgioq5%xP98i z&&c3p9qT^#;weyfisP+JloH$ctDh=$b`%gMNf}mXp_D57Lt$(bAhbwb_Vht17A%eT ztguxgv$5rXtwA=Z%*#!k<0B|o#rn!~$h($C65FUo)Z({(l@q0iQpL5wGM~@R5DV+~ z@_2z_{df}`!w;#v+ zV&R@t`${@r>~axk(e12r{29KA_+b~$}O5sI~++yJQlH_I4 z^{UV=&D2Uy+s3%;v(Dx7fl2T4MpdfV?I|Icsz(OA_wv2aLZ9L52ZP+J*Q+sl+xtHE z)NQ-V{@X}+RO%k2;pVf3+3Adv= zv54Lk=Tray*dIu^YrCJBECTJfalG14I(CMy-fx%F`twk~lH2``uNOYF(oR00FGp*v z0T+O&Z-9Krdg#lr#oIRSQ3y|=8`dQ04yLo>N z`Myjq95uI4`R{i9yPxGSF*QVd z9Xep=#oVq}o#c`;9yR}U+gsL6@Crs3^pi9c4=i7_unX7F>rcc~KV|q|k@iXHQ$+(Z zbU={HL)*zZNmCFeRIZ#jKE^d-Ix{}^Lu+z@7SP(u74}Ns48)+M6eLaRU03@=6j&Xs zEQ2^Zdbo%9=hL{VwQ0P0QEAs~T|)Ivf6ixL#;q^VH_yRVk32i~a0RaPGdTdU@9hhe zZE%Ud%or>JZ-g? zbDjTi&!iTm^^y_9ya!U-jRWrRG@f60loy)K??W%f{g`B=Of9g{iQ~=bgt|R>U*WDc z4Jx|yt}Qd=th6I0Y0}7XMJQ|#b=p||2>#6k_+xo$rfqt8{+mC%V$N6@J=3hR8fi6I z`;}`&n({W9-8x3Ky77dj1bv-vvL#7no3`YWtpaJQx2Fvbc)h$a;9wY-A3`N|YT7io zFz$(!kg`EG536ZRowz<4L^C_c-c%5|ePl!G-o^qf56a7KQh@V>{Lgds@?~N= z#3WNI0P=8|_v&4luSTBvqMBY$ta@39)&PqB(j5Q9kc$Q)l^}-UviO~zR0g9AM87P& zJ2cGQe^XObj z!m3=tmS8_m#5bdqx3c6Tm%OFHs-YX51C2@KBHvZ6W}W5IR91aVCd;|_vjpmgE(0F;FY+RU(KQ{u&{!en}jEITtnCSm^M15hOs+Y!)sz#5;!O zH{c;oE#5=uWvz2%#+MMfesgM^&R_@G10`cKf*2*4#-*|xH#vF}`&&YMcb|QG6$l-K z_ZP@IpbjEo!mWNo!*tICSws*(d2a6m!Egk6YeK2K_Js!tbyF6=2j-viXbTsmKAb{V z4E#0?eiK=hb62W#w&%pyxnCC+Uf06*{S_1c?5v7Thd`iE7xoUOLuBcgyMtq$1bhT2 z!xKG>7>$WC#K~@ih*s@samqI2b3D;@u?@jDi+ELW-=Sn_YoYjhMSQuZ>}SQaEt9h8 z|3o8Nz2g;RK-Gx91{=4C zV#xoJ)0u}fdzeX*wGfEwR|XI{o!H)NjaQje)*fV=spi$m!g@apsMiSXL>yu+&p7{^ zI2I1yERdJTj*=Qgbw(?wN0HFfEzBiPsS%=KOSH%jNfI!cS_-7*Q)Wvb6y+BPwrl`* zDFsQ8;2CZAR;V17E#-9=uqwk}0=*%Aw;<$>ktAExdv??_Jj-lzxdK%fedacTD!3o)z=O zJihuc`7)XUPH%F3JCbnU#2$nhv~m{TrZpC>;KfI?Wa_3vX?dQ>!Ev&_c18e4aIyd~ z0&;~HgVgmt3ueT0fxjbXC)+ArDSnJ4;LIw`owKs{oQ#PXq2DPSU3}mLwdf%3mu!Zu z7|vI!(c<_(+wPb3Nx3(8&7t7;UUx&Eh3w}C<02Q}YyF8ODQ(%Bi~x$8A-kQTZsx$F zK?kzLAI>gj$XD<>(p@PKF8fDlR<;+rc(e(Rt{(C;{Kb z%f`NL(@eY7Cg){!4VRzSHpbrqgvh>17Rh0UUp&%|sS(o<%Z6ruh(518ISnfAqFtY4 zf50!iFxbp4K-ubs4SjVeeRbT{FIt?upHXzJ!YqPLSN#Hs+Q9Ka>G8@NmB(zp02wvN zJP^ldTk_U+uG0rlReW^$<+Sn$vf_d`e=)kV-#lC-y)wvm)oi4j#JOhuW1P|f_@GLV z@adRIO*5x!BQ<9VeiFx-f4?|enhXer{PX%qN)}EGYM_)5piS@E{3_)Tw2jY2_C9a- zmYDN7?P@%C#-5!%uLi!IXu#UY2tgfFc^t@?)+(y3OWC61X_pH?1Ytwtxw8js>edk8fGA5tImF=xKqMA#~~ zCk4(7cSGkTsUa^})qeRnW0Gb3C1C>42~aDbB`-RvRI<4UQESRgvbeiQxPCaXjp<`7FUl9u$_dnG*bdQpHQyow zEndB}>30E#W?yYZ%@1xG8!0@ZpJ0^5ByP4#NmncU&-7ua+A&tI5zoXeks`UcVT+%_HnIt(< zXCUV4xB;2@IBs@KuN{a~B&D%ZXRslm<1fy!|MYb5_R(Sjbc!Vgm%%m8dhL}UJWGku zrIW{&M_oWud899-*4^}oV8Pf3bY`G`iulWJn~P2-dRA{s@5dXhytACc;V6;q70JY9 z6lqmbDzth$o6BKw3TSGDYV2Yr@$lz>I7Q8?DL2@cKMsE>oNKPzUQ-uiUC(VZ(%z7Y zcs))Y9a|M*-qK(8gi<0rY%kxKnZn_Ak| z0)DB4i0dX`ase*0VE4C#B+DgRl3f7X7?Wr;D`%x39h5dD*%wwvC%g+*{QB3ol55S@ z2RKqMAKOxM#i3N6q~EZzo@0|rEk|F)Bi}F(@&;g1w2X%qD@(+o{w;dAl9dp(h(y+k zpR;ffIj=UWNr?D6z3^yuEKDIjZl1&KneD%)(C(E8WPiEbU6IOb%1F1HkZPX!{P$>y z^oDeAsC_Gq68{vAR3dxgz}0{&saRQW7C|h}awF5Hbw{eKn`j`4o01atN!8K$7DNw* zZp$)#mbUfFqrunElP&Ft>-MFK#XYSvd078l(z8B82Yjc>DHj_CLRKcSOkLHo{fsfR zb2#IDH7hqSoAxbMywvJUxbU=%9Ofb0FLZ2Q0s9-X8e06K>gIOcI?coc=f?qe;QYcT z^5X(IO-~P*s98@hx!IPjF~tm6-DALJ`~>iAuz3}vb+>oP*LR|_cxB2jb0@MAr_-cw z&N9E@fg+jkMb1}UHrvLbQDQ8;O=WirXpB^0@V%v^Uq2)`pePm%ZdzZ_d*w#`u%oKq zT;{_93^aXB#9!JB@*#UGrWX`PrP&EJEA!09hvsyoGZ>4g-u|JbU%S0|B0PYJWowe2 z8dS7uhgLi8QOo6sZ};Jg#<+?J%>#YQW}L3`8s%oMhR*b#TZpPvLD9Goc$pMeX73?v zcWp(T@0lIkd~a2DKHytxg78X8`-SIcQQe1In2G-hHvuxFY0~cIxp6-hQ+SdZfGhY~ zud}n~^Cd>;N|aB~0);IH`4zmsGH@c*IWdZqXJ$vpu8^kA+re)|yrS-N8#(%-WXkgi z0Rh3OOdrYO-G=$~6hQZ;xY_Gx;aNIzU!9|EHIb82U_P}>cLq6S*P`Gsq4X%1znN@8khmCnUjhpQm3r+Xk=0r~*9I~KJ6FQ&RxmRX<=-X$N zE>`zmP!5@9-M|}+waQplo#BIgZ6q3X+gTPS>5QAsV1~t0yq+tre%da+;vb?&cRWdO zp79dJd@z7Nd=oju&sJM8Bv)5FHV50Y|L$TGFN<|$FD5E`LnoVU9@6xut-Ed9U1~Ic z73Z_={SivHI9=EZ{;-K|Iyq-qS5Menv6j|;4ab^MJZ~-HQvYcCi3_>y%Zj-( zAtNp=_K2O&1x<`y)f;hmEHKMrRn2P=d6`EY7jq$3$h{r1(gq~$ZV_9pAMeuK9N(OH zBGOAvh?`DH>c6~uiG0HbfxQ^A5D)* zAc7pIH?s!*oqt(M4MGV|cKQKDWt&coaKZtYd)obJPgN^?u=(Gjb^07ci^u$G1GFDNhnfRS~ga=B`zk*g_)`|m9&IP1@}=@S za<-T}sv)G%yzt#32W6X!6qgP1`BDvOn#1OWDbJ}_le&_=LNn-5!<<5aQns@G0CJ zwt-n%kGomHv9yV)R)EgQ(Mi6Ysaya?#!#(P*dkt>rZv`csV=GK2s&&THo9c+CylYL zE4LamOi?WE!rZ)A5O!EZ#b}Q@-l&G*)cNbU29Pmk zBlW19rkb+KLMseT-v`uFxHy}WCPWIv{@@s}{ZQtt+Ey3A3}?S|84d+EHoZT2qTpdB zzP&b=(t&F_sqKZ3s{1bb@QkDIX3$!)f`Ey#6e0~#eswEoshLcg`#RNUek0&tW-XRy zb_edkp5=2lYpXOF5tnVe{as3`qky{d3>BMbcsiQGqzT{vh`i#Fe}J<0F)lAzsNCqw z7b7?Q0@y)Il~WB<;gf$hSBNE%q(d6m?ErEwUaNGAjr6*smj(`~A4&i7N{5qG)QVoO zLK1J{62?hpJv%UlHr0Wbn$R)4nxS4Ox*?zb>QWt;R!M)p7e;KW0yu;Q3D=Ws#r=7H z<%cG9MFrbn$rzwXZ6ml@2nNesw}o>TIJK~W@_E~UdUBk2SdkIBifxMiE7RGW{9@C! zQRc=Vbj`;>n<>R&^IEr3yXi-IshT^&tjL34N`oAjGtP_IYy9Q5k>y8;ni_I(VSH+N z2T82bM|><&r|(x+`|2K72+2cnB*mPR_`!>j2My^N8>P{f)uP&B8qV^|=LNG77uO9& zu2ns1Erh{lE~ZO68+?Dyow*K6$!kpoFo9DETul_K|ATCDB}B^fLH?5}MT8^-*}h>OChEws;r zV}pXR0B<3-q%=_W^#s~(-U&q+I&ujpi`J(<$sNy0o=}m}!FwiCtA}?V)B#p5R&>{a zF`&teOWVuOA=;2Mg?GXP!&PCe*2$J1-J3n<7;t@KIWhruYQ5G4D-ls^>AzH#5LQk) z30!z*?N&Q^;auIIXmqZeWs)Nr=%m~WCa!C#JQQeb#UH&{UppDFuHro>Qtw!WaDrJS zqM0^fT<94cv$!ukt!j@8`^Ycn< zhJkt1Dx&oYMK70!pH+cG{slcdkguwK@jL44xI!;)#d^SP>z!OXrlJ_|z=Jkr@bg3vu5OyM6B5vDV- zs00SIALY_GIv#m&_K8~D-e^}VPouJfP6(ntwa=lg%Z(+_#0DP*%w(dgA3fr6kyE(~ zOYGrzRe@B&N5V>SFC>p$@)dm2#(LvrRS6&{9rFqN?Q^5|E7^Oas&;{U4`D{upW6JQ@ zh_z_M)EX)8{=o`_fix#}+H^FhRxhQ{oxP1X9uNQWC*HEDcy%5O9hP(tAlNhE33#X0 zyeWO&+a9K@wcegBFnss)tN64s#ndMa;7OSPU@RV_M)yc15ES{qv$NVUXg3wnKFQE9 znGD*M9~oeUI50M6V2>IYgy0!QrgFMy***tti z8(MQ~f^urzg7b%alHhkn!oLYWJ}WZsafRPmHGh(AqC>r^x=J==1irs0^f0KG5%TP9 zSbR_M*45cu${fGL>I>?$2M^j zL<{g5mNV8(ap!EHr<*_#1L(^%;~kG=*24ya{~r9^4I96i>2TL%oodWSlb}j^&k|Fh z#!Wk%5q5mhqO+N7W?J?E!fBScN!|gG*nLtKXCMWY|Y>vGQeMkk?4J_6hIoYV}T7pGz zI>DQj8>xLc4ZL;&bKk)JW@JD5n@9v~x-=Pr4a@hVhlLHWQC7oy8ze2)>2`w?V7L|V zCUR-rJ^rNJ@8Yq2tfqO-!vLr4_cXMGdeo_X5VPpp6~F5REGmavp8wO`pCpeWNV%aT z%>fjgF`GN>=(*4^z--%54&cnCW4`IFCvIaCY{-1*W=zr`78f70;fe+HC$iB8h_cqK zkOR1nJK#o^+r|))NC>sy+6VYwoBs|>JXFzL7ye`lH(kfNE`OIdwDIHQZk9QO&3TkW zS_Wb~I%+0}3xEGkT^K+&9-v`EnBbR>RKz+ZmThc;wy=kxM8h~5>DkgB$I=!O1fOn< zF6#!P6KZM{AXTYC&`aZT#8v3lC=!MODsK{3-aeI+#zU6d4*~E)Rc~sD4 z5k5;2y>5|gq|q<_Hl?CMO>O<Q?k}1%`~}5^!I4QcqZxY^eI+r(zfPK zJAc`;P+Nd}U^JjTI^+e&W0zM)1#c!^g1u>GakI4%=HiZ$>jP1*5~=zi*=0GoU3NN= zuHj3d0<(>NrX$jXa!Lljqqg}7xeIw#J!kG+RrI2nEs}?P9mNf`?vER_;`IcZsdi0W zdv9x5k?wUMQAN$&I8`XtpGU0vc}iGy0Ts;F@U5guiwDnT$+WVPkIxYsV{8)@I1{7V z$!gA|1^h|XaEwEO^(kH)&3&GcQI`8GP=|VnE%fiHg1Fe{m-13!%n04C{O^X;4O7}{ zq}zr!1g*a6(eXmHT*5#HdUW4M^?Rg0i)w{5r-eG>s9``C^z=^9=JhP8E4gcnt{gI-7L${>^8kbpc{-`EHy--izY!k;` z#+tzy`_UWbH*xT9Cweu4zg{`5Ac~i1vGjKrBxOiKizve=DGLavh&W9x%p)GGmo*XmeQ&cU$4q&EuRhROs zUK`BGCcy9dQ~!nKfA{5&z75{*PBJwE6yTup5?qG7D!1`|l0}9T4MrEG&Eg^QPfc%! z3sn;gdVmyv!`N*s&_7L}mk|Kqsu}EroI?G&gd}rME$D771=yiN=66A1lUA_j+M}F&ELLj9%A>5c*04l|V6tNP3 zgje8IUnl?IiK=4o04D$k-(0j~d9*Htl4B$*U`JCU4*4$B)&SG^hddB|hA%K{;&ZNh zIod2yCu2xHo6b;wnYJsf3E}kpH_}xb8-vR_Qkv4f7+tCI@Xf5Rk#HWt-Yq#x6cf?f zUix)#xs5dl5nt2A7%6FCOF1Y&Ig!q@+pc9q>^nLLn;5hBszz?B{2ZHycZwJtuE~Oj z>m@CmL1=yQuMk?n90oOv3|_(*3I%{5UDS+T!x}bi6b(Ye@c+qX1Hgxc*~P8@D>TT0#W?4-(36U=M;AGNSL`4wN8VDsSNomNa}~@8KOFPaF#0 zv4<*|qFJxJ56K(O5n3yEyAo~Sc{{?nc9jztquAYj_ z;Ds0;_;L6I5;4FKWCdx8?RJg99B?_^uD849R6IZTOArWQ zcw%*kLV1IM1mSRDQG^gm&1iLpgLz_c;nDcuh>#c}3^ch&Wp5yhVBw(!llb_FB^OLN zP$&x&3e`eo44iI9FqCLYk5U)u!dAPtOiiN)p0o7n{v|7Q=$C+@Wz@JDHeR4MSTvaO~1(Sl3x@LYn%Q27zh zMww>5lb`I(?Qi>|JyVveHvx3O@OpHXSdpVKi{PafX$vsI;yr``=_Pj4vCI<_boF5D zOK*iob`73Ue|qYHrj0AuvdQZJIZ1q5U^Di*JJ7m0SFnmz00ESg;u1%xPPTtb_^l6TR_fDg)AD%rhU%+-gfM9F{lXKc z^1rb)3pYS6yFg7hQE9tTE5>8#otfsc8TS~NojdpMvAgTPaRzl`{?Ld`7oJ#Mo@tw& zdfk?b7p#z7%xzgIShQJStJz~&axhDYHo2S`YcF>D0**vyEwKgzfI#Y}n(R=ZHO<)) z{R@`KsK1q2Etg>qnQ18T?okgv_VX1CRc2=}X*?^^)@zK7^+tKXGxn)Y*{6YjfFcBq z>e;yi#0izk0e)?SIrUM^nsve^7jbc1D3hp?DVr~68Eok@)z@b;|7d})HMqqCi^;+| zoD8I3x#5;`d)$jUrNim@e&&b{&S4NB6bw8dCbV>-H>e*BNyU>({4G)}mQ11*Dy3du zqtyZQ&j&O&kw*^-FP%fT_8fu7CSeS@;GCxK$oy}DOBFY93{fmuF?aC{nm2B#Z~EKP z(A?-|ulyf~&=Avye6jLmkPAUE> z=c(Vlyq;J8qExL^Px?VwufNcZtfl^ic|$`)ML zUwDrnjggeai%E#kp+VE!A^e+z-a>rDrXTdC7hPqY@q zT&3QnWgwX{8UCy?{3&uF2hPR&PyTjbv3cmRyFjw>|DufNPyFbE|BGBshPfeuD~=oa z212zN;WuCc4Y6f@qs#wZ+gLh(VlRI=p&tV!{x@_Wif*6;D8ydd`qiIWo|txS;>D7U zK6@L@FF`C>|F1Bxtg2MPfo$@eo_eWw!agmoqY1C}(ZXQ&KRLte)PV6r9j2=8&pM85 z+9p_lZ~=olb}m100)_H##yMtAzi|VHHm)8%as-KDhIWB+1&e0Rjy^M>KR!JOR1i@- zIWt()AW}FnV~AuCQ#v(k*yJH}@c(D-8;30$xw2_nM=uXA7f=8ofQ0ht+5c|?lu z8#=Xd_wbV=N)tzS$D}`Uk zX1wdO0J;VBpSL;B0}#l)z_Q;%Rk6Xj{wH|L(s7Ped0N)GU-Ll+ZoL$0i}C-5!k0G| zle|R#@@A%#rI?&>BtimmSn`tX)6^$aiw2!VX+n={$pZe*1UPyM z{CA_7s}@63b{^C1g^f@QQb$c;rU?Vccs&C;ox^FsWSBkVB~S&L(n|C0Vt(dcy}1Jw zqIpplZdJT@qkRKKhpvU5it-jM6_viw^JPUDdQ`l-;cr}Ev8&;Gt#aJcGxN&a)-r9l z43Jir`IV)o0u8S_eM9V`f2uNDcSsbJIm;PV-rBFLuf&I4X*t3t_>_ajz)?a z#ebOu(X=oNo^fLS@YSk3Ze|rc$6E~-CQMLBYBr#vtFWrLme1ZqP3mfs8z_m6;Br>r z$VJfL3e-jH=QqQF)18nYM9L1o8_J?f@J8W@#EOK;Di?4Nh<+Q0t-Dq4j z(Z*JjT3X(Wi+*HyYN@iRwwnnQy+52Ns&#Zg679Poi&o|dw(Y4j0osnMq~{#nIBvOI zF?D;UXI#y*o8G6#`}o$~K+cal6$+?iPM~B>($_w^RZX&fDd>u(3|=&|3mprmJQQ;r zosA}%M=Fa01gO)5n^IvZY-(=Up~p|IlL-H3yDCcu@?VWHY@3|1|54R>2Q{^|T|Cl4 zmm)=aMs*y7DhpGEJ`XSOmLGX9MOW}=0}-dK<>VYSX{3x)?<{$sNXoJ1eCXt zrV$Pv3+AjoxTiR9A^oZ9yz`}-HiPTn(29FT-eK`|$pg6p$_2@cb>l*Ql~2eAKXbp# zos^B~f06X0kLynTrA}M7E0^!qZIpQ{6%Tkj)eTjm?mT1zX|(QvRs!vwBkD7A+`=bl>}fqZ_3#EnNILNusIORcLScH-Y{G!po`8N&y#3bk4SgOmwA9 z_)x}6!KHHB?eejrsjs@6oxxJ-79g4y7RU6~TPL@$D+|+C+Pgy3Bhs(U!aIU7-Ai@C ztB)0HmO(a6TWNl59;OlmbBWjRS%^m)wPE9o?wA`e1>dt_7?`z_G~KHY(((pD`|!e0 zkGf|AR%nX;=Maxd8sLJ4j~%p6WK6VldZn^D>V3_7o@}Y@?x-DubI;3XfaAi@6uc1ZQ2o$G{zd83iF)E>_t9S#TqpD|2 z$bB5Ap0Z2iP$m0acUDUrm&`$tQmK->4r8(BD-TLQ5!jWYbMEN}sWSnX@-dvYViN>M zIKZ$}rp}6c(*Sr;I`OXX*~F-Q<;or(@+XTq-Dn_nHhNhi;4G0z{b=S__FxqxUy)M6 zWzGcGd$WR&u}4)LD>dYhoU6;67S{?r!(c5mxzxfqM*!NFGWu-zSUFxL?R)(jh-lt( z(aB%!XJwXx3B%dLCmMWh)HWP8L0-OwdTtdm&JLC)*nES|6v)k##^QYU+&=biIR)uN zaM^mMWSjinN~PgjDY0V_B}=Q=V;?X~JxDkMOvz4!5Zyy)J_Y5n%* z^e_bZU|wu&fdn4+h}bjXKYqeryNb{xeGj5y7C2(qt*W=!m-S`9Ocj6Qhg?68U@UVi z^9jAeK=8O7q}xn#4cWJ;<8%LJ3nAp|>s_Rr7A)+yk7z8F3C?u)LO=oIs8R43UPpx6$L=Vj9$9xq~@p&&5cPZHS#@$+h7Be?+yenK7Z=AmS0Lp;kZgi+tXDk1ewp{2rUKyq z9LsxkkXb4^M|XSlgsLZc&8%I!yHHCh-18RdQ2e8G27Qe2Q#^&&!<@lTC&27Y?T)4*lM41LTVD^Sq2P@vMtl~=MrtBC7IiA4yd0}+zz=UkY@WD*#-D2d0W`a<8rK7zv z$Zu}CQ??nIPcfR^UTm!gk9A-=qJkJaIR6R+l?&9-E$Q;HIr_(@gnl zcwq2#X`Y+j&*6$ftdUi&WTya69}6HMOXGp_hG@q4aEwYw{|)w%NSjnxQu$nf-4b>VPgj*Do)F~B#)OZTbHh1A8JWCO{p>|5XX4Q3?E?@Bc4zDkogBM!f0;l z#hk0WJ-v95gVRK4lx;*>JF_o~4t~zETtFeDCs~pe^@@)bGj?sb&pr42pCt!8pwe+airXfXosF7ckDZlg|`J^jGG8kzggb|N>0)}7Gi5o86?UK(#*Te{wvITx%T ZgFJ2c9%r83o_G)Ur944zi5&m{{0~CD@IU|n literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-BlackItalic.woff b/static/fonts/inter/Inter-BlackItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..b6b01943d9fb8480f1f03c1222d3c4e930dac517 GIT binary patch literal 146824 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%0D=QyXVIe=YIVBw_Tstb3!{(rC)Q} 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-BlackItalic.woff2 b/static/fonts/inter/Inter-BlackItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1c9c7ca8b04ac8dd13585fdaeaa3e3a624ef1c4d GIT binary patch literal 108752 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

Yc285^P2A zY*?4%I{|G0r7^bYz!SXU5aXe}uN^H2en~W23Q7Yg2(VuN6=Cc9(@6Qm4?_a!m(j6< z75I@G0U>ve*zoYAXE@H)w`CIUI0UY?@hvUu?_na|bW ztJ4S65ds8#0AanQNj08SO<_Xl>)O0c6wh3}h8flRi;p0;qIZ%C_b^P|`fi@|wu z?Iz*7kH)1ogHr!m4&i%;-XF_%C3hxA2(GZVWq8-f?qHp;3IBgqOhjJ7>`)K@#ySv&Ka+^rdEW20rY`L=XWU)RMHLVB2TCwIdt7kUxgT(z&r-ue9e= zYZ~>x`x4(1W!@4HvIkLPA4aaRIF-wBzmU2shL8!{ZkR7gp2VLdZtK6R&}b4@SJHJ% zu{3KD*E;3aEu!RNvDU_CtSv0IfV%f|-?WvxBS%p0o`&`sOO+92x)ss(32q*X58w7E>lU;l@4RfEWIdRc;5dB~TXpU99%|4(?+CeIm)|1={4P$1e6$q2Nb6-4`e|ew%!Vumh`BoiniN6jXBgQ&3p+RvF1buUx zXnLcS3qD~6-hV{LYgoe!X#!Z*mp=c8i23Y``SUH;PO;^Tv6cl!U0A2~GuLPn3bE7+ zr+?E+m=jL6B?1Pcl{|h3m-IhqZUOtI?TDK4v3q8?zm6*EVW9`>bW-P;Nx{A*>F0g) z53z_MgE3*R(x*k|$Qkn%XdsGh6e~nWv(it|koMK2hx^1qr^=UEk*n~y1 zD1`J*;{_wk2U?@E(HBwuzU3)E>pd)GGYZy$DKUxKX+Sr|i1?}7=M zL>^3AMAw&-VoN_h%lYnu?{>~Tl295$VCJBDZT+|PMeSkj)z;Lbv(zql482!WMyMqK zX>uQ0{3gi%#$Q{|w^jnHKV|QK{@mZ^@=~DxofrOBUIym=Hre@O%rFN)06e$c^JXRF zZu-@2p8e$+RY>dRK2c%0z@SS`g{X5nR4lnI%3)163LTA?3i=dj!GG^DeUB=B z83;G~AqR~JJZ2-ixi98xh0g2;SZ$39REOA{8FE^y$Vb-``NVLfKoE4Sy~5Sfdl1H= z%xb9!k6&@7L10`ruC~1w%7XSf=j9fvr18^8A=Ne)%<|=;^4fJ;cjc!YcWw0#P}`!I zo>=<_pk7*PgOxcimEKOuw+a5FwmN7ex7v>u^@ocK>||=I!!Q~3P?%yt3nmRn9dqG@ z;+x`;0)PL3f3*phuxS`sj4&s?2#*k}JKP8M9C&BCqHVb5^BC>7oHM_bt*3z+S2wPq zV}eIEXJO%Vb@Bol{}U=_&DB2&XaoRdUnDn}d>4{yj-xZDBIw3-ih#8UM~k_CJ}r+k zyJO~*f=)@hVy<9TUBdkhisCbCJc%QksHUI|e{vn)gCR74{x+kV`r4ZZ8jq(P0c1Avn^izx{+j z26y#$x8r9p+KB=>dZftYJ9|6JsAvqWaDp>tAF?6 zrbbg4EASUTY|M|BcWz8puNdy$W0_RUuBd*?wsx=~9WVg6q8SGOxUb-P0b@QgAOKKO zl~r_BNBBeshKj4(+m%`~UxqJ0qZhu#pX~Yf8>{XxRreMyv-FLjrrh}_ZAe}3G27_t zxq>OL0Y?ke7@`*aLcI9Sf~aCc3>?^f9fKcr0Prr_7r*&79j%)*1$9YYMdu&w8Y}{9 ze|vu6uE0pfqe#?RY(4<=2aRc~@U%$KcxXgnUmDi;HuH%>=Aki=fNogTnZ9S;Qbw=L z-$TaJw9hOv=Qgq{d78UDbnXmnt3Gks-^G+)q=jWL@{YgRWd8G4uQFcMiE*XH#3v-sy=HNDA)_uj=kcOkpR#ih-efLL(|?S@P?os zt%SVJKR=YSaIjYT&@V~{xpD31EbgmU?js#P$qm#lwSR7D!wPU?Wf32^7)7%fR@RI8?PP-2ugwGGge5}5wXKEqSr?X7d~ z^dD%G#zH4cZixnnmoxJ|eIpG2|5s1VoxD6GoX;pr{9h8Y|3O#rpTjT~vO0Zaw{dnD z&O&E2%M~B7sCH}BT1EBg!m~G#59u0K@0t&Dz)I98$W!hgbG7Tvb;K-0>=rMj-jtcT zP~z)DPIu5=v%($y9H4;mI#)+VVYS16TLd zu_M)+wx+{5Fos0P%-xs(%Ljq)e87gur{-->HvH5ap$|M>Z4Wf0_EzBN`SdAXi88#> zHuu?})vUT){ljiax6QIS+4!S+vf7p;ZG#o$lGJ@FDy-rlJnMNA+k}j~-b7m-`e>Vc zV8$4s^*?)a^k98jPxB)=k&o?y>flDZ_a(v$LJJAOk7o5~Pzp#giIB?EsM>fki#|49 zd(Qdtc@)6EjvEg)(z?~9@gOyhN}K#5Mear;$t1_H2IV3X$cjI9VB~AZg10dfKW-Cb zDgXy!9z;O__Nyb15}j4tPEmOrUHp={K;&ywCH9?xuwFn8b(IpTh&s^-DuCFR~Ief7_SIL zgwt971|Qvj^ZVV?_tNNAIR_5>>nCLVJv+4UDgllYCYb+r7~m<=^!~beya|wTzE1lqSF10;gI`sL zTw3MdmCHlcR-5GDcXQ~^b(3hhEr2l9 z%A8b*~d*dTzup`zqo*(GPw; zYo#QxVHL4T41}*_oiCW6MUmR@+^>#QWMShUgaS-Lf91}Oy7S9b_SPsLtJu;Jlwv~g zvQjv74qJ#+_tXHCW<+FCj>eB!5xiK`W*QUx3osHIdAs8;lD3U_KD?g=peN z{OC2&)b(%z)QT5IaeDt8by74j83+N;HE95(y%fWgCv4&=x${6+Tpl5&Uru)6*K(@w z5qEA;DZ-gKNMja`>*YRsmgBeQIAYIg<<{BG_}27AyVOK8WU8%M*1(R}=E@yQ-3q_GY>T$*e<@JVs)k!8{}{94c6{8C$d_<2p@-!e;V zB}a%Fp)zl0=%O)2t`x!eK9ulNHK{$6Qbj8O{>;ra`(jPfk!8q?lOxyCI*OxX4QH$5 z`?Vg}#zlwb*mUn}Hi`w@Q%ujT358309ze6Nyu1SS;!+eny4APH-~nCOZpD|20#fn~ z#mk73>773?X1~pi? zbVAR3e}m(al#n5Ab26reWjII}MmpvpWWA+dbChxG(eOk72K!LOP|(60)x6zuN-OWK zX5E!KATj|TT0Ky@da(S!8}B$%`R0I9c}8Hkw`T(A3I+Ygc@Yp^)pb7a5Z~8&l2}IM zA!mM6gXu7~u$aF}Vt+@ulwk*MT$;YDeM7uhtk#aC0CB-+b&fG~pxA}PPi!?k3LO2d zC>7CkbaAbP_ht!)UWm+wjy(I)a^dYF7Vp$V;Txl-^O{E61qpUT#C(FW9smshU=*QN zrU2I3eWm5_Y#5^`B_~%>4$Fp^;zSV0#VS>((J$~?M&rZ!cGgcFy~h|$JDE`0nk(X9@HqQ{j~T8r1Vl7jFVVXlrwDW zW1X~CUY-c?&v(ly+Lo;u@k6k8Hi~j4JxrsHF?R0%>g3qxgl|p*#EiMWiWq*Mj}M+K z=@y3z>YQ#`q*ZT;&f0*n3<4$hm;CkR2aCad;^4cHn0pHjey5jPSdGVM-F$Q8SCBY_ zb<2(d>H)^lk_3R?i+0TaIiiPJvq=DuLvPN{qEutQ!4eU;1?%8WB@kED5(qqe2^qL! zPH;^3!O)Venu5o!U2yJYOreywEo}2VVq-HA=@@0XBdnrUqY@;<-`nix1jQubF~Fr* zriwfTG!DMT@<%6S3~=2_ZazW#``A4DSmi$ve2&$lV3hzkK*zt;BT-4*24^ny(n-xf zPfc?=4}F$~@UWPJ4FQ@VBoCRd#rV`m3ZH2Fc)~R_Pa$7n(!XpF&O`D5bPYr#zzwoH zh)94d{NLtMU8>PCfa-nUdZmTJClojCzi8sCT%)GO9VDsaeXXcIgvTB}gnHWL$@D9t zie1Dr$zu|v4yvs2@_HY5h|EEXFL)x@>JF_Q=x*O@0BR19)Ic@!F5JP*xhk$G>1Z7H z34PEIhLJoLD2~Rt4&mYSfRA>b&Mmnjg%Lx=REV03=0Q;W{l*X4m^Ixsk^evUK0Kh@ z3AAY2%`DT~HR6r#I%au9Q(({%a}{Jdfuf@UjdvGTM;D|o?#lj|E~E=v-pnOe3uSR( z?n6-4qXZua8&hFhA6%qqwNqm%_+24InqCmBdHL-H*7&FH4-eg6_ltMPpKFOwg2Plr zWoS6loUiHY?&FZqqIDf%vQcIpc23+LMt- z!@Sehwx~e-l9i`@vW8$nmzAe9qlN&Z6UWd>Zgw>$!r?m~L;li*M_$h*Ru;>Xufjk%hvJ5Q(r0nUATks|SG)6T#6Useuwc422Kt-q|$Oaho|F z)1(y>5F8;ZovJDVP;;QZ2GoWwuz@1w%4*F>%IutqoLqI8g;1H2QwHo6pf#*PeW(9F zyr4`p@OdYPq^Am9*1~es+)C^BYsIp(I*L0 zjwEuP(uEa_*}{ZZL;HP)uF4}@k&4%d+E#?BZcpI6g;$)Z`j5VuPpp7_6IlNB^gckuBQ&DL__ zjIo@Zj6Y)%o0{GP^u7Febl14d1-Hi_Zg-$In@yE0G5D0CPJAA5Gp_gX^M`{#q5`n( z&o~YgW00z~YB1!z5agqdU1!Vb-J4g-anM1|MuO2B5U2Yt7;Qg?(0mr2Yj9W7=#ksZ zaaJw(mq!df+b;5?FW@4eSV**%qfy$0__2{t62PeSM)<}o#G zbOCcXU-cIZB6VJojWdX+T7H&cgv%&FjBRkBFTqK|D4!*pS?b4!JbQfldc% zsK>+IGMxJKN~I3v-96vJD~>))kR3wFk;?X+1{k~ty7?%EPMi>51lE*c19bD3`P^40 zu-I#Kq10>13hP8wQANUmzUKAbH`}Tg5aqGK5{tA0yED$fNLva;;Z-b1ylq!cg#j+q zVHH|>*gm}UOd9h9CK1=tIisQnVeyZZ4+ZC{95(60I;%JFS~;E1;NNt{_ISA_W*)B~ zrVNR*m+hnEqlx)vaoNmEZomA^2tOc&G0MH^IU?gWcampOF@T!`18bO~KtE=PhxX{4KrUHk3@U^xzvQIrr#-DMApC zwfdd;DUH=#>>HKgpfpF&t=+q|=k7n4dxYmAHJ#IcMj8cB}&7gMZf03aarLfh+L%bV3Z67ZHHDJMv94> zx$OWQ;(+8Wt%+ktSu%Ub4c3|sCNi-^X}UQa47Bf@4l3OW6WfJ{>%|2{kxipMIowDo z^)3$255SBSTLpO_=1yzPH=JeUxO>^mH!aKDC{-FtYJGrux$NKO_h3 z&Uo6z9c@Z-5e_*LCd|W!uPxHMDFVaUdrG;5{xC|ZM-tV$nFS*U3IH^i#3eXk!F?P! zmShM{w*OJ_Q(_rD;dog*44MxuD#e5mjqusY>u*o16d+~A=`t8p2J5WDq!9bL9aq1L z4#t}bLn71NWT|~sBJ||=enJe2DR;|>8?12m27!q{$qCc4+>~!=9qJ`fkk?#V`(xLj zaLCCnIk90Jm3Pf5LGPdU=%bVtgNL(C4}oV2H@SOrTX=WE@`8C8APjFCaQPJMxm$J6 zCm(l6cL$#MX!etU1proy_HkC|fg`ZcXjkC)=m2g~x2W$QXaGTZ%mV9KFnpn$1FmGj z00xuLFD`oS+>0UWm>%tNb7B*U@d(c+!I+9{E)9fpB=oC`q$`%nVUt~kOym+Zy#K@* zrR~ingY2jrP9=8KJ$qNoZ@X6Hd!NLN2i0D;@K5o@Ba_8G-&uMPkQ!Xq;in&p&bM7D z^7&R^Fkp@KPd;^A&O2V{{w?HqjZw{sAHBy>8+2(t9IAHznnE9wwuP0ci`Pq#nsPSP zlSA(aP))*+Q4O+>$*)r+7#c6U-Z>Dn!#$knNIdLbGH`vT-~hs$|k5lpelNDM@2Qb(}|=4`q+BdURN3=Mc}&KI%QlcKf;-oN(`eJ zr7_)%b;rD7C{7gDs#?qIxO1m>7{#6Pg||W9@0I1Q-R|rsjoS#}8{KI)rj4U77eyg% zRSO>v`_J`BxpBdKv^3$YG;j^nrUvmfdE2HQR zN7(i*fiOBeX#UNk3dx+PDDv^wkdpvH&(2^Nln8MCd2h`DP2@&0&wD-p^&ffex3y&F zX0=YMQG%f9A2zwHk+}V{(mN!rekS^|#0arpqSj&j$uCdqAo0u3U`QoV9^?{-;$5O$ z!)(|`QU!&z)jlDL-JDuj&{Rzz`q}j7U~#@)XTw3Uo09U2tE<2mvBrqlWv45~P>8$2 zPf*ZeJ)K-))fgS{`5?5F=II>??SC@B{*=pAJjlPb_>uVvkfhz6lKjm0WyD#46@<4& z8hw@l_4LGxMo&9?HiKfw#js1ZJASBmr!i1~Agmdabc`(2~-P@K! z7`)X7T4=( zu~sC*&F-vFg(9$5bIrZh1XpZ*1!UIuP%rNN6M(Q7X5tw6w_ z9JqND@BErs%SVR}qi<2_PZ780w6YFPv2U08q3-4iMJ~R1-6qQsQBg`VU%a2#-(|A1c?@j)%p31HEs|5zO^FDj(POTV6@_cD5>4~5KIqef zxxmw1OEgusRGZt)gJA|#f#_Ei+{JwIU;&urV+GQeiL;DUgXTWn2c~N>!UT?Z>9z0iCd$|XF!)nD$_?GqJm1Df?$s+$rD;6j3CYJMZ{kC^q z6{-RBbtZ#$09@VG8J0z>-@uthIhjA+)hYpC%TD4?^yAf0J&Hp^x<=_X zik}f)jv9+ljdFiztD~(SUw&h#K+|M=)h)(R=F@RBu;TVz)fD>B=0*d@d_d|K(imBC zknaOa177$nifI;v_QP5gIb!XMiO^5u_jp(|t(Ap{Ym zY`Xhu`(Kj4G{v99-C*s-WZTHIu>|7Uv&oi`7h_`cox-0Cy7GnYg^rMBfZ$`h{E;@01f`EhYG^G~`zR{)D`l(5x?Wqm0hX_IMZ*mMtk|<}{QcvycplR^$Z; zHaj|ZXG4|oNKy5k>|8uMwoz&DNZ;==oK4+u&1%nEPm=Gs z$VAFS0PVq{Lz@JimwYMAH1FG1ZXlCRK$JP|l>PQiIXTJlVj60UEk%d+Mab0N!f4Z*BsG*QjXu;GXZp0Fb(6(WpEg z30tM?mwS>B-RbT0ZaGlq_08-%`~!il!R~#r*3CXmZ9QGm?n0^d{A*W9>5VOw+I8IG zuY4koW{Ne~Q?b8X>@QG@qaKVN6e?C()NaXlYp{}a?>Qo*8H!<9>O=>vc!k&~IMr7f zuaKXncB#`H=AfVq~KKbv|pLG$+{p++D8@9uT|eLWRu8!e^m-bhh`kKY7-|Fw{T#p@grm zJ665zA#t7KwbLY?bqW9(05GR|$F^veL_PPoERO!pLpi$UuMD zVURUP?baagUe$q_gC?H^hBlswEn~HYMUcksvx<vI2&-H+DTxX=6COfJ6xBlJ!&SzN{F?$M3BXmK?!t zYzE)+$#q|uxJ_}0Ka1S}VH#p@?EqE4@SU{@k(>r#@6G|*Rv%kFcO;$xz@9{LmUv1l zhs4FBKM!pp`qiw0MVD_lrF2sb{ngkMw0eJUWr^P0yTf*Vbx_Wiyb8DXjAFAbMXeX8 zY4AZ&G04e)= zkgLtogTS{nq}i2YYvqxB+DJZ4tLukqckPF|QvwULR_D^c=j}P0PQN6U8>_#z&41~- z^{BGDfTUWzR#p*-QZX<7fCJ(K6XkP)kQFfsFst7rvaEvjl<$ z(yeL-5isQ$hG4*f0pIcMd!6Tuv4WrNrE{Y?=Rk$mO)gJQJe3xd{rZi^o+hrYh_%EN zeF;kMe&Hg0gT=|3vqR!4vwQYoQ&^AD)a?Tm48ZZjfM0PmD4ql=y|ETA#=8^tRlV7WimvcgEG385_nP_TMH1#BL^pR)+xLx7-;>>?5P=I7^jW5&w1y_PWUse)AK6+r!N2WW1~EIn8LDFq!?fMp(#T?OoDwH!o&XH03~p;H!~J})*E zKkq0gjIWF5l3c2j1`h6MBGPAxRerDR=tO`NuLcUqnbQ6Vo1T9)`)FOSAf?rB zrD+U78%8tWv5zC+|6IrLqt3F;`we|z-%gYYQ+C{cewI|LfJ467Gn9xBA&axJHhTsJ z00%>hZ4*>&j%0T^706~LMH6+X?pY`-#u})?00qHDK{mW}k0VMNoV_xR&Kw5=s!7p= zTm25zN?3_%`ntuP-8}T&eDvMdK{e~&$O%?D*ml)gH}b?0JVTS*!hq+h!K%-!NTJb{ zg?DhJ`A8}JlMucFCshS!6yTBT3LIw)e~h<^!+r<3-#Es<%L^*Fa;;N>d4~$PZ1TL} z@&7e-ZDmN#@)bwOe`8E%tEoPN_vFX^q;(Uy3RdpTTK{#G^hAvs&_UB1h;^>1!a5hh zmn_uotLi1zBi6YFv8n3A_m&+jL#FRdu>Yv#9vE2d{F~uZ_0t>AmqCk1{D45XLLYjr z=>+P&WNu?+qkjF+|Erq1V@%z#mzr*%_nw(G!3KG=Uh##d_OQYQ3!T2y;MsM~7WY5j zzuS$yN0>Sz8KDcmxr>}%TYv7rc=rRAJTG1>=&7L8N5;Fi$jkD2OM8j+qTV$Tn^+&X zwK}ys4Q0wItdGy6q|NTc@1AmT;5B#D=EAL%3=igYoVgAv7FM(dX=zoIJ%1&4765)= zimhP&(gJ?-ms1S9a&B?$o!uVQx@zCLju|G%xnxM{G2sK6G$}#(hywxecxHm?fdEp| z?9@{Zr}z``JicJ~?m^-#2RQKbdW9>kHa0d@k_Jqxl(#`DwA-mEO4 z_8Ngfo_O?$SIQaWAt$5_VzDViPy)g5mk&l~rMmz^n6R}!obTIkO-5d0A>G`PV;j`PuVv;vJ zvr$f0Q98-Ix5i|g_bI&hd1SUK`)80mk>+vyZC#Ivff+O}1t3ao7Z-Ovjk%AzNq?Yp zIcpQ`K7AEO3z%8yuF?m^dg(*L%kM0qjCeUdx~j8j^zzfwKzxkm%z;}u7snPeoJwQR zoX;&G(p49)&8E|KeE~W2R!1!;fkKgt9Nu>IbhfG><-(AYfJPp7RgQYYhM(* zO910D->*JZ6Fw#Hu!qwEjpW9oTq3cAmF5DPs23h!?52>KPVZlR7*h^mCW zJ;$4R{dB~A_l(Onh0|z-h+(liDWAnrJbPLk= z4)t>J(qvV3w6_Ni?@H-vU(L8kgD<2{{5A(3-D6*ct=iMl5(C0?HyZYfa{|I+QJE7U z=RIQjXE4&utH;!~Ve@vFE8%YL3J5!K`#L=s$FXFo^~fQ`ewt}!GP6P$&|eEeEmYI0d++p>qNDI=0lU>N%}VW@Kpc6KE4 zh!#dbVP0M+cG|MZ(1Gun0R`RqK-jKaj@5qzutflF-sKf|Y~Qp+0+FhRd%6IZ%_iEt z&!1xjG#pZH*j=W0FuFCW(1BqZ?&Zxv(0w9rYb^{&N^_#P>1&!%rvOv2Q=nJM1mY68 zEnSUXCKC(FgsJ}C~d@EbEgHuL?|g!W{c77!qT+2udT3moIx{Wu%v8of%Xz8*s}^ zVQ$YlGmMh%-qjx|p;x8^WE`;fs&1GCesMUQ;#?r-_#ZJ3^hKLffKcN~a#RGrRX_+f zpW7Z!ubnJn1}pP*5h>y7>L{KYqWY8u8?mcfUYUHQ=t6Hj)T_ z#S&yVDbrxQ28gPaSOWQ8k0S{s-#{lwGDZj73B{Z@ClhY<5xpL)pu_>>u|9vYDxSE8 z=hujXwe`4oqD$5>)Ntm&fEz*jlwf*b4-=(YM=65u68Iyj}6uw4PB_Q~yyxhQY1L3;NBJ8E#H!t?g#FJW|t4sWYV z%I{*&Q}T|YP7i$vtazp4)~0 z{}nHIA#jrKm5Dqbqgu1Tyq$Wz_bCX(_7q&Ct*P5to%;*@C6zG_^xMjTJuxmE&H}jz53VqJ|yaVsSI~7^C71n0u0bs$C=5+6EW+uL!c7TeHG(=@-Ld1H>`fkGNvjPQK zb6rfbMz35iRolrOl*H=7(7x6YV*>hYE?|bczpGp%xxgqYH5$dWFvphTGf;iRV&xta zii0Q|Dkzi}2^thfm!3Wc zG~0K+TrlHfE9=Outf*B+g9Ls`WEOyXs*52des zu6*xFMy|({1B4ydO{TwPR@b7Vs8#zfwsCVEySh4_N%JtMxsui4T(T+2IV4 zC#nNPe+teACS)IO@5O8(SIn{21T1iFa*EouLhFB~OfA3kg*%>*AMky=k-hkQOUc@& zbq!9gL%_@mD&M8POj)7}-38B#Hv)L3+Afg}czlBQy=P|4w9+Ofsghv)TI&xsEi5sZ z*05&kv>ubVziRoREkOYh-|weHB+GP=8(0A+#KVBU0gFWC?tOD^W=Gon^0?xGJ5W~6e)t(IziH_PcH%wqdWn^ny zbeyV=tE9sqALdvJa;giE67~`v%%%uc{!?xa`xM1=GL@bj6q2Q?(Cvw{+%zO(Z`=Ng0zwEG&;C`ONF|&vw)Ed45o*= z^>&fe;NANMEd7cvCP#>eSPQmMSN0zOp|8g)eZNj~8f;Me^O;LClGCs1pR|?273u}{ ztY;vRK(#qzZCde8K1mJ>0%p)|UTjvn4W&eZ${lLeL40p*cbb;&`Qjd>0BtTR+EQOnkD>@5Ga8v^;WO?9V0bqaOw*tr~kQ3FS`5KfQI7vVh0r7LHRMY-vJPN?P zLB|^wJ?P(3x_taZ4xN89`L*eEg60T5pK*5EU6rlhouX1KdBv$6G)LNpd{hR9`#~Ia z(E8vW8?yg4E+-n4(v`laf9oXl{P$tU_!+$RFgESbJ3ZkyI%;9r(G;-)G9O4hq?rUA zr2TvnN`WlOY&Pf*r=kjgvjpDp^adOcS@Ay;D~a6c39YO)RwXlEq^(y*FoMQK4&o(T z=Jmh5Ctf-1Q}>@|jM}UStWV;1Il?n~{gWvbJQP;E0;JJ?Mgx8ai$(vG+;)P*!867d zY*>E^X}12afDOlmu1u=7J_M&UTCs^B-0z3l^ICTX<;qVRT3xVFU~`?w07GJwn}Zmv zwuz)rARul-$!vWf6EnhmVT`vjCxXG^q4Dw@A*IS^(Z)8(jA zdf(@vK{VweWprVWW6BYVfZSl`-Q>r2`4hzI_P*n_uqGh*TBp6pbhIj``JmOI&^fEf zT$Cy;MQ23MUPiq6^&kN+(-xXBZQ`y7@jOEH-7)tBm^l7&e%Uc{Csl|Ps!TW)%f)pZ zYt9O7@UbGL^wL-M?F6p>cT}P7Z*;~}zl!%i*aS_>-4M_=R0}M%;nb9)@thbFJ_m2S`RC?_ zJImDiJ-?vSmQ;jt*E~)Y9wcU%0)}VMq^L)m=l6zM1aGhwpKnpEeK|+uw^A1IjwrFK8s zye|g}@#@i8dM;6&|Fljl&2>OOSV1s(gQ^lc17}`fJlCu4bk>51z(?8@N5;MY<%xl7 z+*fJK5;5MHX~~EtOCz8SF9P9|Mp{Sqkv|;rs1hZ%5(I}WF+;?LE5Q3UGV{LPx)AcK zRUo9;oUXV<%PNl`7s04tsc7xJ5@vlOy@@(`Go{WsRzK*o?k7)R4qy;9x?;GxaIaD3 z`-Hn{=-}SA-h&_;NV*YdUcZ{b-`r;iU0m{ZZOV2Y1b^q8QX?OOWhaKGqFT=KV;(oj z6I;512*b(;kp->?ECY)p&fZjmC}DIdjzxU^LWnbYYzyEq z;OVv$C{L!nB8bquz90R8|3FdF02B+re~Ry3z87mYmf~AOS{G0_L7BH0 zX73N%U~=`IE=H&?d=IxFS+iF088)5ql5$1j9!yLQQUKW*BvAp30CnNwSslY+XnBL! zi*O7^!Sw=H2;6o=9MO5s-B7HsF5>>jxPMfd;K5}*5la# z_Edpt`_U)fbMjWq%d|0&?OqCae<39o=N6O;@8Il|G{95y zt$Ag8e5e1)Eqg|8$U!O2y|;byH~?zPqBLjG@^~t`egRdOQv~-jaPzkl0w)mwZY!@E z5D5Hz<1795(Eh&&h0IBnpmQBRrp?pBlov(Gf|fly51?w%H3fV6$$BqoYwF}B0IaR= zG5vtwC|5TfnD_1`5v^vn9q!2o$cr-uTkmac4qBdmKqe4Ys4b_cTqZ6qkr&WanIcqx zk5~eq$OVNWU;7D5DqpYj!fLLf`fA|Xt2nb=qvXP=8wEhFw6qgH_Q4n$2PT;T*r|Nr z`fR=tq4__n4l{$bc12NV0Im+sb}NyvY9jjV)4th}?9CtLFe^iA(LFp_Co;IAFcVt% z)ApX`xp;7~)`Ebu06ySZAjSZBO{Uh@Q)vM)KjQ?aTs;B(1vIV;n{h`&>ZU9Q{gt-( zeh}mC1ETu*DN^km7W{Qgq5oah{1gA&8;`Nd=?dl)(wLv0U{Irk$ky(1^>J&Mq6k7g zl!K&lVugO6zo%P0P$wkhv1h_vhix#+L=OAyTbtmn8$T=OM&~vzYBd+x2uv7t-~N}F z-L=RmOP?yI@=e+rJn_bWf|6yL0LNUyG082Q>sxqDy&C85$Ef^W11=A^s6oSqAATY~ zR;ok@XYfDE_n4Th;ss2YUUC>P9W$VM)Ye!Fh{g>fXIoKuy#SQvJwXR=WsBts32qLh zIONXmQW=bhUN z2lw7ZhWx)|cc5#Y9QXs6+_%Zd=H1C5eZg*zWoyKcgZI~@A)lCN?ovc5X@|tA@MlthS+ryPc-AfufIy|(!8y+4k9(v2H=P0 zxYtH-Co}jvbKDyPFd!;u1V|OB8Q^T80dI~yf9wC-=U=?L^~Wp7H$78I-;6x}aBE}{ zIEbJR7q7}%d{Dp0V@i-dp|3U(Pf3Lrl#ri_BsS}@pU`91>+|1DTc3{#l`teS{ zWk*^IeemOKl9xrCAKT0fOG3y0`!2QY#@BaEuVtn9K2Gz#eA|(J;%WBPO~HQ9Z55+O zX@ktivBF;XPD+N}XweXso@PT=?+xLXkLMo1=A^;0v3+4&zhaO51-bhb#95ZOf}QXvTg}h~kd=Tcq)R|?`Pqb&>`P5MC4qGX zIywk81$2Z7JYoQQz7z#HbV}vUyPcpWg}n-UUt(g9%*J2oUXvm?^{EB zV(z^|R|l#8zYtf;RNYIo--_VMm<$6lZDzX}t+95aWSO*lQGade-q1S`<4tuphW6!! z@aj9tOs96602tF&vf!pW5_8GM&uhWJ`1URfCT`SWDFKfx49l)j=w-?MAj!S7fXMUC z=NzVXEKr&hPM#QukhDk+_fCyzHbo|A2LK7hB$oCsU-vIV`=+TL?H=%^wxw^jt>l@7GfBxnz zlN#mO0YOVEm^4v$Y-ji;a`CvvN%!$%p_P8G#JZq?%Zz?XUF)Ui+x}+)R4?3j>Jtw2 zoguQI^?_n9+=fhUO1TR?jlDna~`b(lEYo9{Se^ODs-qb~M*4)*B^u z&a~ISNQ_0mPRQa(dJ!(^BUMT&PV_9V*~jj{EXH2qAI7`HS8rzx3VRIl@9 zFm`jQsHmzs3h;VEQ&Le;Z3XB^PIGemIv~9ccS#lC-Uu-%e-S)fd5Ylyy}+O8ttDN0;mh?3fr ze3q%l?7S(2Ao=i#R5_ES8We?o=D{u!X-#XKCCLx?-SX*~pJMY`k-RLo);mrJ!kkROkHc{L z+u{zHsYT)(bJ<9zEAKDhWYYJgBx+QYyH&}%ks`DJvL{fjGM|idk@Y>}X&&d>9p#|4 zXA&{n5O2{Lw+aG`endoSXZj-nBz)(I_KXJm_H{Syt(37x(xP9qW@BnTv!{(n^Z~30 zH#W=|v#uEVAd%zMk>#_BRV{J>k3S5M2LK2kbnN3TF?{|G zNM(CZ@FvRYZ*>(pzRD21sCOU+?Feq`+99u+{yPE?i4QZ$KFjQ5zjnXsy5tyyq;KgS z$Tq#&#Kddfvx7Qs%FdSLCBTtP6ccffbs=3=BVBjNO9UP#97h>`$*o^yNj9Q{q~YE5 z!)g7#HZ+n)#|KDV-RnIade+Vw7Z0lrq?8k7-w~^{=V6tnnARg6zSN!z-aabMYjT~R zS7s%!nibG~24GBO&FE;_?v8pa6B_tU4k5e8|IPiE``?p4CU%DWXJT;nd~m;gx@w8V zp2`lCsHGp;0wf+gh!YuaLlT#E*ERW|dMsp}$N*Xugg&j8a7p7#v69zSkbWx6vwy#X zf;cm!P&CDtMjILfA*!ECdV9@G(T~>?3i>|N{`Ksv;p;sz#eX`{zh6%>M6yjgeiymz zL}))swli5gKs(VU$l>II}Y>E&nb=7uM?PD8ubDBB2SA=M@f>a8iVp-9K0b~ zH_GADiaHuGDVU1H@qM(@4Xck0WaD6F3Y1{DJRKgeK1AQ+AD4k|n^&3%;NRZSeP;QZ zzbNprK=1Q(1oqtUiQWFOnelzlvSM%gS--ktFRla>hg%Y~y6x`dnF3q6AGnMfsZN@> zJMf|0Q9-V-+e0cD38>Hei(OWi*SZc8Vs`15yfe=S)E`~G79a|I92)u4RD{>saM9q7 z*dpPD ztIBI#4|shu)Ll4E-_LCJ|I7GzrLbohAKkgA=RXX$`ct?*NW&*Brj3;e6r7eRjn@s8_%CBNfZbEZ=Ep z?et*wV471K?POapPl_rB`2bk&ZsWAJNr-y^w~HEp9@VsHDqscROcv?RA+R~=xxLLi z^tY%Q;LH|*LJ$yVLn+{E=j;c?T0fKWR>Rz(9IV5ZhKj9I>?T;lct<)%^yOcOG1$6wUa^01T+>w z?E=WClc_;F{={`rC5()gn_1Q)A6sSz7T&+YXLYlUCB2muQFhWkbI}@*WSOciWNX+utRol! zRY6Krhzl+#8w3sxaDZc(m-yRXYU$cwcbDn1YX$0vGlexAl$&%{vJq#IQ7WMUBI>1Jhfx8AMQ(X z)W&Ko8H$I(9SlB$Hx^?r9xB?~JS@jXBgE&6@>}|f)aT&#l=JzGZ3FpUN6600`^`Hb z2VM#q0k-8Q?>w1UZ{Tq;3@`;7X5NZzhw z8ODIGeg{6n&ro2#r;Gg4+fYIZa33D_T?J(J-I8_aY&&+z1M*%Iywp$+!mxF5eJz%X z*4$_*CbI4KyVh^D_OJ(VC?@JZ@=`3Y@93FUtLpis@UBKljE+7p&u!c&_aT({?BP*T zz>m%5Ph4#)?;2~X?z!F-t`w8)+~Z>nRb8NnotvIscJQiwBy;%Ko+k4`<}&)-A$PJo zM0~ev7L>VLVVSWl(;mgl>c|XImx)hBV>dbltC?*p+guYtCmM}?D_h%+$B&D0Xq3X7 z@vO8wXPPMQCu^QV>~okoX)I^5kOktE_v?mPIcRmgX;u!zif+Pq+3{=8+3F}XHY57R z@u)Szp|BrZihCmd-SqfA+C>ndC)h`K{`JxnnepaLl{MvP_7X=I} z`?r-v(39(0?bI0k-7=9A2hQJ_ZA1QTrAd8S+i>uBDUrn^C~{PC2G`G{T!k4l+Ms@s zrp4Q35Q(Mjy)m?XC@J4AF8SzKQfJSxtF&H}<~@#9%A>Mrp(fORpY^$K@eEmPil;m9 z3nnzZU7x*$x|mT&N=kKeuHG6CdP!?StJg0t9ToXz z)>zZgwsb9nZ&tR!mX5Y&=v0DGZgN{uPe#KarQYN2I&-0Tj$`)KEguSU{#XG~So&%6 zV_GNNTk!nZ`HP49sNB^W6L)@m4zZvdUJl{A$48J&(pPb%PmTa_T^^lhRFsrzB* z^xZ8^{nioT9t#m(%Nz7T5D~aIGzM`6nFA=q+}vYCQ48?BvRD@zrZ$j9A_EjYVUsPiP)W~K|1x6RsD_!uI3~YSJOtF07&fAnWS=KH35K8Jw zo^S=70wDQCyM}Gz&!XFe0VsaDr8I0CuMnxPoT{J!T>>D76w+(kZTW5Ve^QvB^U({f zphgRThLFzy6k22AD>RX{Auqt$qkE zEJdo1gnIDA{4+PrhQs#wQEDpzQtML4w#+-IHxjMCMc~2;;bhGpIt0j2p)6*wFUpNzq#X++8myxP9kV}db zXFIklv~V8h3j`aLU!DNc&H`(4;S)q)db^dVUuPw7>H9kYYKGSJ`JvAflBy8^f`(?b zSugd%vlGHoQGKs$VpbdFllfgiDZ@&a3z&WHO9}(Oex*5##HeKADy$DueDo^KuM=2) zgy93t|Hhv%I;5~$K)c^Av$H68BGp$zBIZPGLWp2Y)lcCD(C+wPr23^b(CP~-ic6T- z>6E1uRCUxy&HkYK*YlrY(2mc2PZN3QJLX&UiPZ=G|Kabfw_v@|8dF()Le~8S{04dH zcDdC|9kcvNn*GJ6H($zxLw|;F@5T*}7zS{Q&zEy9e*u%x=hN~7pH5pG+&a8l-88^$yWIxs|qZ)29UO*H`Gvqmb~GIyiv;W)~n}4 z6Wwcu_fm!E`+UP!D`91qKJNw6V|F^Csfy~Oayafbf?K_c*s61J{R*A|tS*ww2%Zf? z+0wr$!R9K(dZ|>S^N_7yK0%*7IUQF89p|XS3hcIc~L6JN^CWBWh ziJQZujUGB!R+W($$Meo%@=$@-y76fjdB*ZOd`fq*v13$WvUrhImtih)2TOzP#b%)A z#aHhL7po_&#-y|tngvbF&3^Nfuvd9CUQ0T*gWbog%QB12 z4h$Ha;P19HmyjyQV<8w(4}!fM>2tPJi28$=KR;lTk%p3hw{rnv>2tPld1g-GIP42ABQzJPs1v!DW}EZFthinM@SiZD}e3;ojISUk}l-f$tfEzKTaWdYrn$U&`r$ zjOarH-O6Zm*MYP2v+s?)!Zj}m7q{##EGRz)!bRcTkrtojFJeXU*`mDG!J@!7I&a=r z3c$LUd=NPeGw6WGI2(hv`n7@OtB;{3T8RWk8z0 zPJLM7IjG^y5EC;o&PuAX5r-(p0K9KB`QzhE!L8}v*K$E7E;ZQl6^ygDMgU4M$d=L6 zacPnSun3C5`+ee(#@aE!r_`9`*r#GLE14Ye-pODhZ?%c-Xd{7!)jkmr!#>qz>yWuV zaeMqS#4zKh9YqgvwqIrW1-l_TOs)PzlCb)-ki8#ZLzmXG3L(n&_1~NP9f=LeN2#e) zD{V;ofES!@c^Ms7n2vp)8zo8^8@1&xfD*Xzg}#LMIacRP>?I?8Xq0V))eqF!I__Y|J=s<6(_>y> z?rmAGNi|&Z06}=k#h&9stoB(I){;maC^4!3RDE=%vSx!psqiI6-vI{SFSA51>@kd! zSUBcL)%I2RPY`wlzz2G_?b;MrflVh(z*o;d{d<-3f>c*`|90U^Pq7PqB-ZCa_`WWD zDXD6QJ}6yYDh)N= z8}PdoPY`6DB#z$v!EpESPkgQ{j^Mr-ps}=SbAUh1r)!6fFZ#}o@|5d5DJ98W6U{4> zdbDQKUyDs5kE}`<18r3uz4vA}!07YPwQDf*j%SE*@UZeW1(Gv`EjA;GN2#&Qc#bVU zjtNIvY<*=9Bo^Zy@iFA`Z|-jl-D#3iM8|)Bx`c(=-?hTn%j%qVSs#vTTg?xx(Ty#l zQg4x}1f4%Vl&-M`L*+7&JM~xJzrVZjmt6DU(oj}r60*EHZ%Zv} zFFo!Gz4@p+H!HVtGQlHQPKt2Y?2P3n<9nKQ|0LXcbw)hKJ})dME5YYpXZrV*amm1p zX+Eu}Aw44^ZGU*d8FpY8CgFU+b4rUqv-8&DCXf8EUJ7|3^A?5o1yB8e@( zab{lUY4<%WKD@5)UTc7^_u@0F279ku@;<%6s`ztd!hPjE5{M$2w}e>Ty=Nu2 zpDn{?Xl(9v)VPFXG^L?j;k!zq=D{u)qI6A-XZ5OgC5&YYjo%C6kv4QHm=~-h=H%=s z$J1dMQohKij)MAG!i+>z*>QrW*w`lk6L9u!-DcN8EQ+>QB7|3(8@t;}(J8=gNL1iD zJvK~h*Nx9fK`BwfTa_)TCLe;K zKB9g&9@6>#e+=k(rKrsZ-l63E}EA(z0ZKYse z3dvl_E(taLKFO+W?}?$yDgT`wQkin}Vp0U*A9LlHoJ5i<@X+h23$bDj5D%&JSV)1< z3GIKBRq41wzoL%5F-k_#VRYc#lG_%%Gg?8hy@3=dTO~0K9!4ujh#UOS4PlkJB7w<~ zAw^4Rh#%3h@S!5kl^qHi{HCS%hJ8N!Uyz%ec!~Fk@ti?xG%dfpJlecMu16!A-Yj0k z1;5e=ob$@Agfq}K6zxXetSo~K9Sx^z)qtdy6scqoAzV5H&cwH$udLR}K1LlW{*z$; zo0-zc{hhLZlm(};h!$T5`@7+AmV##|;5M!Nt*P#bE$`7ciH(npcx4+5`S6yI0xL?; zt3L9E1f=M-il5K?(P-IUe{Riu>#?=qYR@yl76_YuZkr~8o><#zuSV-{mQ6TuZ1}P~ zYw|Bu6!l5%#fp=q8Y~_GLXv#3{+aY@&+#Hk3c=m6c54WgkmBz0iKXh7nly^&PR-0r z($k{ez6Q}ya{0(2wT;qfdh_z~ji#6042`T`UTP6}W!AuS4cS z>sC@c$&oVi(-w#)yMQ-Uk!@t*#<2JHa}O}Y)(E*kD~y+RO{vb+$%4^ovah=1)&QP{ zyFhLE$&-4E-J>+7crtR5cbte;Fh;2k+;A8t1yCC}#b?wlmE1&eqZq}Q8G&ea2}iLo z`MC1Tc&aRm2a(c;+SqlN{9R1&3k%oxB@&B1U<`C2ghj>z5B2TsMshxXY1o8ccaug=Te*QBrnVa zeIQoqEUibMM&4g=KhzKxUQrk`oBtoBb51>c!-^>1uZO9I{WxK*`;f{fa=qpc@0{Fg zSA|hJ&I6JNkj71VqD>CIe_e>52)-~O=TzN2x_ZA0ny&q4)vWECE#xdK1G{369}Uqe zF27Y3I3IwKYLGe|SUk42)C864#$bTful|Kts=H1p?#uP?>>#(@CljumQh{-HnLq3I zH%gH*v@*PuQ?PL-n5Bu6$e~P-^C_cyT>6a=T0gg!Lj|UqLb#XEjb<}*`GWb_%GgMQ ztX`A%_)5{8buvb2u$Yr# z=c+uq1;J@d)`~hX+i6R3skTlB@FMghtSoCR0+wZsfnlSIFLkU0%aRav&;+rZpnF9#!w+JJt}4Rt}pr*7Hl0mIc-q`&UjO7KYg__gOpEj>tSR znc6cNWjyBNZ=)&&qg@1XQqcVJvE|c!yvI>};AJ95V@{S!;{mnkX;#9Qla@AABJy{7 zI0>TNy|3#(KR9^USH0{>e+(Q5OchaA1l(fg{&fh&hM;Adbx4=V>N0U#Hm*n!D2dxn(Dqo;B{`hsX(tXp7C zAnm0;zo~vWAJiw@MnyWYTW?LpQ~%S6r~E6VpSki9ngZ%%(fa1JFZ@p=9`P5*j=KVK zq#ZdOkv#1xU+yXvNEyNl+;y$u(VmgUq%T2h4CE!>#RQ*!V?pY-@WQ|N9jx^wn7$D5 z#RnO7b=BN;(83MN#h@={n=7#H6c0+o5~(>Uc%LTRSkScf8Va^lM~n(<#E zXA#COj*_SC;(p7&=t%mo$6~%TAI8|0kyEHw0!1F=Vdmw)*fW_U4ZwfjmY7Gj>$ZSK;GS|n?2nh5Eu-;z7-Sm^bIDBxh(fAkSUsm)jl)rAXnE)i`o!rt|0fcigjMHyLF zc?c=!s@rX3k146#o3Cukvg4RBs)CAoi_7r5Ah^`&qA5&iIp2(^&XI7dyoM}yS&RT= zTa58~xzR?W><>>U-E^Vt0_*WV>BUzeUDq!pB7@dR=Z7Ayb^a1WlLK^b$nwARaC z{hGAqi#mmn+&~H>I}4r6X3iIPI(kSeRR1C@KM#0uaaSLrsRjjnyh*)@6M@&DxEdNv zoC)U-r+k8mA;n9t%#iwNFnVT~JIWSJSE?%dXaM%>5KVb$`;CHBiKg}C{ZgTvf0l-T z=uK9t1m!NE?K-%A_PQ||%+&t&=FVuV*2;%r9s@rIZx}@%Kw@zg^#_?4f93v_$ekaU z3ow?(R>q$`-WV)wq8mc##*{wUvE{SY9E?RiXz<_QsZ-#)6vyX4oi_CA?1&Kx%+&h! z*3L+)hDsX!9CIda)59GDYYZ`rMVuu6?5!M+@Vj+-;NqW@CcYB2uy0a!`&Zy<9VUtl z&*m>W1yew8Gbl(M{&i-=5TzaP>G)3xux^tn&jQuB;?cwYg)#5Ym>~a}`m(m}%&y~? zP>~+73T-&HYODdHy^mBhzBh@I`)Z#V94KX`UTH-JuqCK-OHWx#(`c6ZKjs91X^cEh zeSUJZRjVEvcUO^Fdkr~T03+VRF!W=zuaCW>N+^boi%y7tVwLTM*qZ;T8R0V)g!cI8hO)jgsC_E_(NIGMHuELV~ zL8!FBb$x5b=pvS+U&re7Qrx=}2nb8Ca#!R17LJ{9^9GD5tp42kNE`No8VkF*c6cG6 z-5$cSGUraB2mHIoHF^*l@`atJmicw@Xxf0L!BG_74<;>Mv<}JL<}hBqV&H6Enw(>A zunn=)D0;*MOVDpMWHaWzb5P72H|zFWnLyK$@Xmttu$1Kc#w{CZC?TB2ae#HkB}Z6b zb|6Za@+KtSo2n6O9_sC^gQf}Jf!%-@Ouz+SC2^U=nL8YC=t14T#f5s~5(F1r{!x@+FfcYgM z_9F)(f{EJwuX(02o}G!CA|3@W`dPYr*J8}4j|{TCJrN!Lufy3Quz~)Vvn@3cDLcB* zOOS*X>I&MA@>vUTE{qKses|q6=flUmF`;V`NI25vp$Y>X@E>O>_CfmTjDeM^xeleYKDZ7zajyGIT)VF?nxY5nQZBMs~rd2sZW@s*HNVB-0?Cq2H{j zQ&*S6dDvU{618;c-kZ(7ioe(WVw;)`+tt#E6JgK&kEv#Bp3=8vSlQN6Phgp{yOHOR zQiM3w2;^ZN`i+2QN1!e7&_F4AqEmDzU=PX6BalM71h{?q?r+?_>$o@JcJbZxnW?q7 zG}?E7yCV}s%0oevsy#_x0%u#+AjIC9LX0HYcQ?gzaq?@xrg)tpexXv3b@!2FR+Wmc z82WeyiWeFL+p7e`E=y%FPHw3S{JR@FN!3I|s#7KoxOSPuc~jbJmqmwmNC)g7-05Y2(gGjhY(DENKB~0SW+>(=rM$ zlx>n`1*lxMNt;yO!JXHL3Oe$pbmiF$R4JuJyTlKTYC`!ocHudM_UM>eQ`%O>i&AcfAsT+k$-2YLWg^anwI7NcCn8T>&jy37`eB9 zxc;YzPKc((?^*VH%+_n%Bj6SAY%h49^oiK(RP?0vpiYIB(3U(ARgL6n4TQgA$L$1# zUT#3VgR9&rf7F9`D){>WnhA@}vbX@RnRUWGCY=&M4sMh%VZzc1s9M7*WQUkRQ$ZMv z+J?9@iyFvGjB<>;ei+M6}K*YJIgimt&n@Sd^=KwaD28`!~c(gs(6<$ z>FDTWZMbaAlDeB_x;LUcHF66nwy75_K;=Oq>(Fk=-bFE(S|6u%$?3qqd@jF9%wLVO|WWp}DnP23>}ehhmI z8jWLCjO5{kGOupXh=z%7Sz+1y{Z%lQ+co4;-N7prMUVA9r4uEBdc}U}JUbLQ$aO}A zs?Bx>q@n>pxlbUTS$!=F^6U`>j9#c*hOI`mfQ7h90oo)WRcqe_@inBK@fcFypiIXX z4h(S93vHL)LdkjF8KFv$lM(277u=G(4O8ZYXV-M~vjECg4T^D(dzMwDFbbn6W2Kbp z$wsk_YEfc@QXZPGCsamZ^kl1QXTHM9*VF3^J@xAG&^hn5*Q!S8R+r$T1_na0OX$- z4yl&tvgnny08saU1)~`S>~4YZ!2iRL-SDgP%gaGL6w0lNj@VfN&_qd3VRt3$#<38m z<4UO6^uR$0GK9!AJ#g4lXbXo=K7a^P1WG*DBR&R3rcfgDpkiS>?*M9ipluwtox%Z4 z$SyR>V!;Y?J{jfci%*aH63Xknl8PI@A{lo3bS_Ybp zW7u3gP1(iI@cFz|aL7zR*kcE4J{o$#D+_&b@azGy=YxidMg^k^#DhHMSd~sTkApT= z(I{=6qWPNFr^WPj^p4sz>=kV?0+rjSZ8ag0TAfN|-h;Xx;*ISCGZLiB06XsEK&%^# zP*@8Hhj^=ASn@*KWH(g`K-D@&n}jn#NIEJuz?xkP5dhnQ;1IVq$aqo;Qb8=@`Q)57)cnq1Y6SP&9+h5dJbZV>29Fm1A% zju?k5^FsEB>^9MVT3z;^7_s_7^6ImF6RjJ+;E075EB06|y@%)ig4TvP_>=8<0hRVN}mu|py+|3Q@EFHe;ABmP<(mhN2AvX)1Q(#3PtG(dwJ{rGJ%63X6 zVIvmzZxW+qk3WEToCS<^tu z7Zd7zv!bJvIo~Fbn4VLz@?F(KX%F2+AocZp0QdhwGLGPabo=P#p&72frjv#g+_u) zSUapxc^sS|UWN1u<|LmuKko})c6j!yIv43uVY2a_Pc1G-X};>F9B7V?DQ8|^Ck1Vc z5TcUqL^)B)uV-}hwmu(=VK*=MBdYE&*N0$$Ri?vPxbx2GunF%6!MK76qu7KK$93;Q zsyOdNp1?D0BR7;BUyL!2D=88$t#taPzJ&|zeB;MBgGzSIK1 z*Hs9a5JFV@eIfDn zQITRR4)c83kznv{ZNthEU0pf4RKzyt0Rw07AyKY$-2|BwR za3g!`6&8etP-mg-ssz8M&^v<<6BV2ibc*X#3I$D>hH6qdSJv7N{0x<~oK~>v7uq2# z+bCMdpLJQ0A#`9lp`g)=&B?-Nwk;t`206~llE^m6Jkvo@>|lul^n#NMebMurONCS? zj#`3VTL>~)us{97d6q>_Z~Rdt=;=z3Y&ah$Y_!b;R^Z3&79|O76A^6^n96lGRU4Wj zWpcYiRX9!6(miUy1mSP|Y$?Y^`k$Qr87lu-<^Y`!;|^{}OA<8;qzbq}SYtkelRjM8 z&T%cno{X#9RGov1lygZ7MX!n$f%sasL+;zsCp1H1$BxbdW%jyMWHP8(AYQ@;fogJ8 z&)k3Yt-`Yqr!zdf;gA)0^PSw$XpYoEm;^F%q1qdbn9+M=94Qk{#pEsTMv^E}=NHw9 z4TQ1$Fz~|i9O8FOf&+fAVaVm&uA+*MVCst_j?FTE&iYosr{mkneuZOG(6@_C@cwgj zap_>7(dCvhTX~g}HEi7KYscENJ2Bq0z9KmkYD@JK>JM~Y z+a8*|+Hj3k=6Ofmt6Cif_s;&3yJCzkPK+Y~2t+OcW+6Z$1h_%~LkIwc0D{*Z62lo7 z5l$^UE`XSkh8-^+2P?zC3D}MRXJ9)7oPs(A+c`21F}RFy?D-J8S{v#S>((Mx;4u(f zHR6$e0ey~(<7#xNFPbMMj7*otEEp0=``x2U z9AMxCY)61IupI(U!FCKd2fKnPwdI86X(sDOKy(G;ZZMzk(S6nob2E>mR~epyz_{;x zbWti8EIZ7}{JIOK%~v*I(XaZkg3!=KHwzEGUN)dUjO9mMnU8RAKt(yI9)tG;Im^$k zJ^Urs%ulG7Dh}8IBJT*;;d1`2aPS4H;c!rim*Fm^3hQM=UtA5C z0~Lp@k7g}OuL#)!99Ja`%ObZ`kK}Z5TJeraYtSmmimErJz;at} zO;^a92i{Z|1rg~-XTX3M$t|$%l0CW`J7?B{GiqHplevK?Zw)>djswyr zXV$=b=l|S4;+h53ziThyjW|hmp5}Q?=7P{f43q@v0yMBaJZuOiGr|JbH4>Bgu#3zO z|7c}XQAzo1F(@ARbFZd(ARc+_i5$7|67%2j&ixfiOu^vY{*yj88nJAe7x zKmPTf|GoDiAHNWbZ@&+C@KlGFy1e=DRqss@{4QNC)d`kM$i<&fK3lRyiYG7LeAWAG zX|!v3@KlGFy1e=D)kf+aebBXWB}TeH%?@p5YUa4gfQ`63?@zlJh?}G5Vk1fKjPA3l zki)me(F!FMND1&32xj4SZ34YB-V)+%{-!dFba zEP^+7CZrIyvnbWGJd@>f!!lCN?Tn7?&zto&>J82GdPPmYB1nvcW3z zFeb^#Ymw@F)@*XE+Rh|NXV&aVg`Q8KBew2@IlXQ*hgU4~q&Eyox8R{I@7P_KafxZz zClbLuwj;?TK4}S`GH)fP+Sutow*aXicY4~Jlr-ft7OsV6V#2-Vmzv0y=h0q~Amk^Y zpU8MLTelyi(qw71W44k$(vI8hFtPT>t%+kj$BTJ6(I2m6SMSCg$9Zqc5A7P&`#ZYM z8USTEwf#Z7E~SWH(WHJUMTC`Q&mW2y5=BKXg8PH;DB@oPUVIjo5Zsn!;KeqdrjRh-9fay|y27t)O=`pv^i zECh&2G+DojVq}FM&%c1fgkoCdZ6468%WzQn(_F=5V_0N~E>+qJq5&jiyTI{Kcrr-T zO8Dv3$+PIJA0;wOIFZmy%k%GKq(qyRm8(Q01mmE%1L&!42X%|Tc+UxP*$J5JM)NbvzpxhPOO2{0#4LtQ4UV`8{Bl3GW6-IB62aWIQ(xS@jUOfUJjRP z7P=AuAG{F0gyAic{ya4+Z80@(iAafQ*YyK*+Tm^o^E`hEkGf*oXV&7#v)C4^UUQ%? zj2!qZDLw}@MCrw!xjGzL&P-9TL}z4Wm`$JLzKqJ{4E!L@>02!KNgAmjF+aZ<491=c zGA);s-oa@*pF{n=+mzkd>LgOzmLY#shzeSUCcmuf42V(#kFWFZppVIv{61KO@dCjULfnjz*iwJ;eB6H|uW?6wK)e5}9h*n0dJaZ`RD` zO3%(`xG^n+9nYrQB)ix4ndYO2ROLKq*g=36;+M`w;Gq6H!G&T8P`*E>Eg9i0mt0?!qRA(_AT_WC;-WN@ ziaS&|(h8Dx=k^+{Vq?x}GcO2iweWV^({FBGV5W&w@yk4~kb+zZ%qPQr4Xa=G+QzNtkszH0bY@g5toJyWxF#R@b=Plw}Tk^uFNX z`b}h9x|i9ape$ZqgOn~0%q-`_=~|5VK2s?CRFnO~Rx49Dk31nxQ;&mAtn z5qSE{IX%Aoi!8H|*`ZvT|IIRgc3;PJ8UTRfsLYS|W@vm5u(HFHhjZAKyZok0cH=vH zrvG2SeVL7CH$+MUdgz_c!EoR8i!^|DTmb9@_^ZKx_x=6bKe&hfJGt%KmM_wX3_IQZ zpDZ~3>KmoM_^sJrW?^sNMt=n(9R7^XaNlFz`vbt@4*)=Neuo=5?<)TmLO-Q{TDRSR z3WKWKLeyjvnRPQC8aWEyz_}I1BGyL$RTTB?!9l%=3a~Aaju_gl)D{e&b-BkSO^a8URZ63gERH0+c=qO2LTFDdsIlBFf15vD=`i zY#^1(H`-yhKF-r@O>qLK50`F5^;o)=u9Bo<@Gc(@$^$3-<;JSc+YbX8w zMqoADtlLv(vI4;b9RN69qjtJD;tfl@>)x%jvB2D$*fVkK`=S-|bL0$dY~haj`0W=) z(TS9@%!NKe1jM;jzD)e3gS)LPmgj{|jR?9#wCO2p{d4nKm4uFZRHJj2_L z+O4P8(MRBYbnll|H=b=%8eEuM8*k4{sevZI>+xb&8eIMcg%@{`2I{WlhSgGjLd~N) z`&Xsu?$*V{Dm-lOG|qfD0o_sg5jVCu7|kI!m?+zzh%wI&WRo5@nmc!*y2a5ohoCul zMa`4jw>F}NkBhNOJKLa$G0zU%BGUOKaBzG8tk*O0mU~m2Kd-6Ky{-&B7oK=F&E#WH z-rOerq_aBhRBb?QPzU38(^LFcJ60sItmWysh%m&P{pN-3Q9_R0dHr@66lwkQiilk~ zd}GkXCP|OZ%VDpCJ#Tr1_DaE;VZ;C49b%g=; zZWKJ-W-Husj=&7l+?%0I;%M925s`SDxUg9ElLVK)(mL)?T<7mrax2m0EVrz32*<>~ ztgW3>1Zen-SX)Mmk+F(1zImVws@;?7HRV*A(p-Y!59Hpw#|z{?eZ}(985gimK$rbWzj-N zVInFM&iSt6*6n%s`3F`vPPZ!CLSO=wWny4!gM$wo61YUd%fK`EbWkq`U(ACp{Z7j%SEo5d$@_={=I}h4ObjfbW zapB-Nwb?>YhQk08Z9a!0>`*(qC$R9$_Jrf@ZLD7KjlcvQWB}kuqi3Nr>4cQvH#GELg%|FA#e%Xr#!R()SZDLyp zbmXvGAD=bEsA{W`L^``Eo_ki8qG5<5_cvk|5ljGZ8VI2gtG^zjav2A{y>Tqs9jxnq zVDOTuYXinN*b44&dcH+59D6~csLNt$aqw+(Z=H@N`%Ax(f-}Tqw?6(X1Cuq~3wTX@ zyLwC;0f!plo6c0w-zB04HJkKMJ9t|Z6tJv~+UN1ZWUVy|4b;htvXq7~3T)N9Wq}`l(tQ1{R6w%ce^^^b(H9p)n1pHm1`d&8ohh@tH zCb8D6cnl;U8R0i1jyEsLS{lXx47@rR()2v?HapSsZD_AY2HVfy8C2|fahk0utJhng zQxscW*Qj;MCWwQ3(MFY&Ro0m88nm5@R??=ld#X!??#d-9f`X&liz?p{&+gmI&HjJH zlkKy*)Qtcp0C31*H=Pxgj;&e%A#bXMQlK|+rrUh3x0j2MN>tGnb3^Rr#?-OAKT@_* zf&E(W*piSQSzCEk3uAiART?1Yy8hg;QoqrdKg-V<~I&zt}$X!LtU%TJ{%uuK%czvv(U+7>AWUb@~%ITE# zaAJJBD$DIs&awHET*)MzgSE;1<0fP^6l%ORWnANcWT&PlS- zFw*6G)=JA9TrV@fp||e|p}w8%4GPQpt>G9%KVjToMAhz00G6UBhsS1*L;Wbn)`QFU zSZECm2C0~FC@TuR?^;HIN-?UT#5hoJ+{{S|Z(M5L6ZG4g3F-&Ve`t02mSt=UfeB!7 zZCTC$cZWUDP355;blwE0^__c_&#%5{ z>i~IM2uuLVxtr~&I5XZ&xH_!RZlk$W(-;vIjXc)&L;z8T|?>Sq+hOb5M4fC)gI4{p{X zT97%wj4Z$b5dFvjXM}CxyaAxUIs*&vbb)U~9KLFEY}=*mp5RNL0BBomlPAlL+C|8= zn&AW9w}XCs#7sY2<^=Cke%SKPr7K&++j8xc(1N$~JOJJorw>Q)A}|6Rf#U!mPS--L zz=%JZrWH*Awb*)`E^$=hp5@Gui-oTw&1<*s?#?S_E?ut^+xP9>K8f4-oYm31{T(U4 z126rE-2$_1x3DASci_R>Efrxn8UVE?ixOE=KV&6h2Nt5^o^7yNn`4)-_3=ls=&Lo$`F@hdKi^VEK)D7LRIzrS1h zCVh+b>0bNyQ?6dHDY1x0toJf)TY_VS{^?!l$xY4dk-zOEorQ|n=hl>C@X`#sg<9K# zEr>RvdV)z35G)W+jl5AsA)IgHk-FqcL5$y2)eBf_OO`oEP9-1y%ET#C|YSFq6~ zieAs&@IARz>2~+veS!k)8P}*lsqG9;t-3m=9z>z@Oup6n>gq~%aG@r^$t9&YMc*y@ z6nUhMMMqUu6sr$m2ac$xQRQU!1eBaU_+%^BM$cWf)ltpBy8boR9v{yjK;79{^z__| z&YhVW2`(lzQjH?LFa6S8oFD8sr?=dB=7d=1uB|ttu8Ypqv(Yr+ukFC1Y&kuPO%BHpzR&0t2 zE12!l-MKN4nix=f6jF;SEg3T~%2p&6*Ha5J6DN>niX^dOP0!s*b7o8;X?kN>c*6fC z1O*nwV&k{VNvr-vCN5d3;T*!?5TvUkTIrB=nK8zjBvA|SrsR|h(G$1QYA#u74BGk2 z6sBdL%oO2F$uSkK)FN@oLGYwyL!qR8(?vUQnU-{;05crGrk@}aBrvmHUiHs> zc{7Z4i4x_`nx6^djz3XV=K#BF!i~A~``|+c0!V*uhcp?JMtJS{ESVpqMO-mZJChb{ zEXow&F!;==VUDqf-7(N|cK~)7uGzJj10uIX64%2J^eP#{4$FoN3O*x$6;4?+KV1bJ zO8~z|7yn(koUwRXuR@Lh!L(&>YDsB3rHiZXb>! ztyU8ICx#gJu*;Rmy-Ytc`GEGDyI;Hp^}KnqH|+up@}?}Lo^11h87Q89+TN-DXqNosjw=x>KSW`xD+%#G^5ZA5p--k$ z|Ko?a_tIWRFFpAy_zE=g>0gXMGX)C%athCE|6&A_oc8*?{3R6+70r(2e|nR6pt`N+ zHZ$35V8__v4wUO2s1sY!^(s+$H_I{kP~<|p8Vu&2ejmM*zuis2@*@AW32)egWLYc9 zwTIZJ&+#)z%tM?4o7HK$twIYm{~J4awai#jdEZ#pV+OmUJl29H#IUOime@Rim0WXa zQ}prP!}-PZu$RH{gwfCIH@n_h9bgm%D;$;GmaE5G<)YxR)Lc)+t2epqk9<=&wt9HBg)oZZ6@VA5Yh0GaGq`xr=YMq~_no7a zH?xifSo;%6D8t8Mp>M~pTwhxmD+4s=>PFiTYu#0%&coOo{=%jjBg$UbI`s)K2zCZv z!D*p%e^H1Vw7Sp&s*5>gaMuix3Ols*9@4{EHNC5Tvx`pWv1R1u+zH==m(1~1>&eQ= zfMiZPYm`&%de2#+fMVxhi;%{TqM47x{Xb+<&$yaDB_Ys^jy|VX+Sn(?SfZ(PM+NE( zy^?~2j<5kGdNidQo&UZeG)UE*|5^|2Q42%JY0iqQgtJTukmOb4Dj<82{{B{SV*$%a z0;?E!`s2DP=LV=?6qE07wRn-sIG2L`d;}c!?rFhJ8+)D+H@EZWQ=Z4}*b{?8@FxN{ z6?kgVj{LX9CrNI3ydXube{1{>hV$y&>#NW27xShE>*IU{^R!XT!z=%2C$YnW8~ia(tJ!bFuKiiPCMLHV``n=Q z{Olh;THPPL=1q?B8FVI2J|l3znz(a&2mD^`=+_K=!NoBdC3^eBJkv?7*1^NvVBO;; z^s=~Sz-@O;JtYrpR-*o^ne-2eLPn+P^>oEi#yFs{sHrs@wdC8VArEO2+%vsr#-^VX z`foVVqv@ZzE#GsH8uq$41lMTrsxs#P+mqFzVN{%Qmnva+-1%+K~6UF{Y5 zCfT@4HjS<1iehy@v*dkuihO&^Jlgh~KvOKJzBV2gqXL$Kf9Moo`4}Qq2GI?`9X3rT z1Yp>^e{=ZXxMAW2zxM)w^Z)wk-=UBH&_^3r?&t6znF(;u6u@;Zz9@(MeqjH8=FZ*Y z3~nZEAC5x=ysM}|0`sZ?*?*^ww01CE{UixsN5E-d06rd^xW?wlzk0hC>Bq7KfcN*!6LikcHH=szk@dHmS#N zHjce&+IC~1*v)9im5_8vl3J12S+3VEGs&n9;)|_|85?J@$4hU05`*hY@xJeU?dyZ# zvaJ+rQwX^S!k%?KUiC9onzog%ST(g{4n-1!rkKp_q>0ik5mRr7BrufpAEUrX9@k z>R`PR9}m+*Zht)S)JmBZa_nsL*71M?gpOpwnvC_8Z`T9gbtZ)VLVjaO@=3tXRPyLYuNEI?W*hhFKtWSBe9(BwhkK+3E=R!=+vsvW= zlXzImYSQE`_o|C!WdnpP0Q*kMcaw!%3Y2jKqJBm<9>RWlTud`k5;l_-1I@&b4inec zD6MUFRrlXWQ+IIuXjj=rC`DqSXt#42?ikZWh~=L#K85m|X)$7SkR$%FiY7YkhIL{g z;sjG35mtCmnF#qLXsUU(qbwnvN9}HRh=>OpDe6H!RmHmnA@KER;#X^&@KJe}O(08qv(0`F{!Eko`eid`$zTNzXHaGG z3wpkw-WKyGo@al$gyJSyD9y7+=gvy5AYg0VkQa&~2sU;%7w?y`?&#}tY^6e*T}gzv zDy2tHgg-Spd_f+sv%z_4Y@hy3TQv2|@x|oXKVx*J7}fZdX#Ua~eI5mAJw+c$ex$;0 z7r(;9ft837G%OpeVp7yBqa+9ijkPp_0$JG(WcDb-7b5xKlFqckVKZoHv5nEAr;0>~ zsj_Fgyb>Y_|<#j*2acmo|wvHyq2mg{4j~CLYfu@S>#^~*eu0xri8jDsLCa6L478xsN;}< zcsW$Q|GTzvn!; z_q?j9shX

)V`qXZDL!rw2D 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

B1ttL7O_Gw{HhNLeIl%?EWPJgN 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-BoldItalic.woff b/static/fonts/inter/Inter-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..327507616409e4c5ebf77c82447b39dc7567b991 GIT binary patch literal 151052 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 C5eyyx literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-ExtraBoldItalic.woff2 b/static/fonts/inter/Inter-ExtraBoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4a81dc798265b791268992e33c32f1b6d449ac7a GIT binary patch literal 111708 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-ExtraLight.woff b/static/fonts/inter/Inter-ExtraLight.woff new file mode 100644 index 0000000000000000000000000000000000000000..d0de5f3973e8fe8cd255a14b429d9eee712ba7b0 GIT binary patch literal 140724 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 z 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 zft𝔬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 z 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%0A(9HHT2SKW94SseL#G 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-ExtraLightItalic.woff2 b/static/fonts/inter/Inter-ExtraLightItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9af717ba91b10ea4f59f347c91795212baa69cb1 GIT binary patch literal 111392 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⋙{s!bR8Z<;&>dMvdvenu98T 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

3^*YX=4b14zXFgU$RQsu=-Q- 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�KP2sD40qaQHx#xOtmie@%DlmI*L~I`xW+qkZSQ zFMfi}SOpAPI*Zd(3%j~R6}xE9WEC;lPT|?flz3ZZ-Z}trwup-mTpOXLQshCblvo)` zak~gG1hoQ+YY-G=Dt4hsx9%d@1@QwE11qr*Ksq8XBgE4^MsNYyjJ@6fcXC?e_QD5y zcp=FhG=^8!?JO<2$=2pq(gWqK?t7+iPt8jWCdg=ej-nLG!R#X8CD#~Iq-@#Qulnoc zr&0G4^a{}@nP}?pOAq{ExtJgNx6ob;?ahF;KG{yf>P)5I^Ukv1V1ugB3bK{?!P))u zl1r;R)p2;U`>Pgi$$}zEae-zyf`~`l0;O;-53jV)A)!!iam#^N7{)7vPS)rm*? zEvEwhZw~_i@Q+-xV9B6W%i7v=wuJdVaPesHzkt!mqI(mn!p9({X<5@QD25H!TZaqe zUz6GNinWpPvYv3%~o_X#j&~6T|&w18XRD8KSKG`lP>Y<6ta$!H=YSf^OQ+bOB(6a!>scFV`7~s|stdFtyM6loL&(DdCANf#!;9rt>r}9M}_1~K*W|B(xciih~77ywF zRn@2crsA3i)AI%J-%tirG4Wr<4Gc#RXv86?#4_O6Ng(x406~79qXLeKN0N(Xh+F~f zG@Q)RAdm5qW|-MPq-#xAzl5FW?t5R3?4f+`unvByK8!<0ul%f0q^Guy10~($*(m>J zT8^E(vUrwJ^V*mmJKHEBaht!HRKdsC=K=if9oyp_ z#KXnOxJnc!TeBOfMfOhu3T;%p4fkB;GmNh9bH4@8zd`@;G@}3gaWb3(F0VJy<>77O zbMSP)GHOdGeR7-yP$wDxhhFCNnbdLW;OP^fM35?F;IucQRIAYjOlnW6pQUTh2i4|i zzkcPEVmm50Wsh`hrun~0u}M`f{#nj7&-FicZv{a_hJul1f|ZH-4{s|y41$7utq#AZ zb53j>T~wB&I0i+&3s$`7%|sGm=IKhgI^?$-EXeNEICWLv!8h1K^qZ{g261~b5( zFA{C@gKeqGW+#M!;#5+xv#7F%iflp|I;@!80S*u#5K_#HRk759Qut>JHnMVjdwxyS z8*l?z*}Cb9%u+M10x^+5O|S~bqJ{g5gZ~we%rs)rMI_an2UOtyNyF3qggL42bP-Q< zSD6m?JqBz7%ZW^L*c$4cw=&CNDI4}u;O~#qWF@B6GT4c&)s-HsCMHjjhxJ-N>kJxp zO}n)?11n^O{H7OU>u;)hDTB?dQd=XPxtP_$cX{YWhh&kYQM1bHU54}VRJ_d3V`w8m z8u50}>a=7wjb%}j%0DVpV(8?(2Qa&KFE1-o_8t2s`qZejm>k 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

&+?0~@m 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

b&AgH?c@kf=PLd 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 tL9iC#vJ-g_rHGa^WkAOulx#b9|KCd& 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

0?^E^!3#?ZBp)#WRzK`O=H_ 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⁡ygV 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 F{67p=_$dGY literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-LightItalic.woff2 b/static/fonts/inter/Inter-LightItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..842b2dfcb77c7cb11427a1e028889c691b669a03 GIT binary patch literal 111332 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%0DUXt6(o} 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-Medium.woff2 b/static/fonts/inter/Inter-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f92498a2ecf4d95ddd85c8b18f7b9ebc15e11658 GIT binary patch literal 105924 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 RS-;sm8d61l{^uOb{{jFVK@0!@ literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-MediumItalic.woff b/static/fonts/inter/Inter-MediumItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..459a65688982887d9452162db6675c3ca29c6858 GIT binary patch literal 150988 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­m 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ℑK_Ksh$3uvMiFj1rK^JD~_M~Pv^<&`vNC4Ah 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-MediumItalic.woff2 b/static/fonts/inter/Inter-MediumItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0e3019f4ae7a85ab323680e9ee5fccebc944e4e4 GIT binary patch literal 112184 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

u42 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-Regular.woff b/static/fonts/inter/Inter-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..62d3a61871039b20b0bfc6c7474d00a5639f3830 GIT binary patch literal 133844 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


Zh`0ua!LT;JuL(Kdt$sjf@wC%{`lAGN*>ceRAaK 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-ThinItalic.woff b/static/fonts/inter/Inter-ThinItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..700a7f069b9ca2bcce98b74b785fff64dd183625 GIT binary patch literal 145480 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 ($WboNrst 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ऎU}SS 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-ThinItalic.woff2 b/static/fonts/inter/Inter-ThinItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ab0b2002a3a72fda8b789145014099d0ba954185 GIT binary patch literal 106496 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∓+tl&co?1ji3=L9puRrbu=CG=VQXX(H0Q>wa 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�LzqE;f#83j;-svHFcR`yUq8K)}}#m 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 C+W+PN literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-roman.var.woff2 b/static/fonts/inter/Inter-roman.var.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6a256a068f0dce7b44f8314bdc735ef91b35e2e3 GIT binary patch literal 227180 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�J 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≫bY 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≥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

6&qaNDxLwZnq2 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

ycBey{rl;kDc{Ai+(=LzE1TWNYW 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

w%k_tC9o+J?jlEWgdzIe0b`MG#H=N&ZEd~ha9 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%0DiFJsm-;1AfyF?s*v3;=2H4im8{W-_-VVsf-; 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 YVRMAb83ue;i z|4H3F>ovhzUNgS`+WmzPhJGF+ohli0&JN!4rSm)poz)7F4@>6{|ACxb{XJ!B3boGU z-tzJGWgPc_cJ8xmJ$O8)!$aU{$zMHIjC8(QwP=XR02Un?DSnBB#C6;#&{QqQXF zF%PfjTEZT5`*~2y(dT~>t51Zzu{Lq}{M^r@-(qk^uE}i`spx{{#Cul%+yqhUHQV&FzQ{#+3lv15=v2F*frPnjeM$+@$% za+4`aeCQu+S~-rpk*KmSvS+O@=c=UYeG(l+eS>IqBP*pf4qjmZs8(x^{ZsW<0=##o~!)_)!D{TFJdoM1klV z1ZvGdP8P2MCZ;7sUdyj64$#xugX@>TdB$KN*JRt<)H6zHE+VYCDvDxjnrwv0Cs&4K z%&kIIy#>)`X+$BHP{uk-D~~dlMegkBm5}O1r+xuu`9T6(s8s`rk*fkHmtfnOS|hXA zp;z24UG)*nLBnEGASbC;Hmb{9?sc6;wqDYREH5(S391eDJcNlOy$~FJYi$KhJzn~} zqsvpit;v{g)DDYNvaj?}s z@Rw3FmyP0@@T@dM)MSw_rPwEQh-qTTPW{$AfJhY8shr9b{vnab$Y~7M5#yL!@ew{n z21BMi)Ew{V;Q2=35d*wDL~<`J!t}$?=-`K*d8pW-Uu5A#M$qs*#QdhAh70(e5;AYB z`QtbdyjDE(>G2fDs2+V2ngRckNSoB89s0$Cw_ZfwG|Yv$F~h$}-sjR>I!@cn>**|E z4;rNc5UOU{90;jd%W4%4tD=$cC%$~S^%8*(o*U?&ilffEOHfDM4a~mfr-1rt_A^UQ z3X8xuLN$U^C-4|+T(gad6+$I1{~2E&^|0HAy}mep*}p7CC~zRus~Zs?L8yBl1TgP= zAoV|yYa%i-^=LjH(*KqQkh3uFmFZIOT=$M9K_p9h<~dqQ@2(^CS8QdSN?|24PY}S| WOYE&R^8P1|W&fi1R)ClX000114L)K3 literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f3e87a35abb9307678a71def2ce786e6bd58d494 GIT binary patch literal 73976 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

HMm8wpwAKlg(pO>O#jDryRmVXieQbt~S9t>*3WG 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 K1c@z>`;q{ssGm&$ literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-ExtraBold.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-ExtraBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a8b78a9c176c40a5aa1862a3b40ba4bef7300919 GIT binary patch literal 70124 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%0Da#T4J)n%04wm%O(Jk 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 DJPuR& literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-ExtraBoldItalic.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-ExtraBoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b54a2d5bebafb5842b3bcfa09242e0c3b904a207 GIT binary patch literal 73264 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 V0q)LY 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 literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-ExtraLight.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-ExtraLight.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..edd6a68c06d7dd8cf715e7ce96a783303739488d GIT binary patch literal 69780 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 literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-ExtraLightItalic.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-ExtraLightItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2a02a18e64c2b82c0b458cca004ade33844b3dcc GIT binary patch literal 72520 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%0D@P* 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 Km*8*=0001l=fyw( literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-Italic.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e8eeb4b8e8553b668c9c187acafda79f0afefd44 GIT binary patch literal 72268 zcmV)AK*YayPew8T0RR910UAsI5dZ)H131(G0U7830zLEq00000000000000000000 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%0A%!-b^cRJZT+9o!$;n=gx2L}gHk;EQVcmzzKL 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

B2zp;6v49w>roO03%Afl!w{TIzGd*>->rJ`GKTS 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 literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-LightItalic.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-LightItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..352f5d95a6a35f11ad38418138d589f16ef1ddd0 GIT binary patch literal 73552 zcmV(~K+nH-Pew8T0RR910UuBR5dZ)H13An90UqlB0zLEq00000000000000000000 z0000QgJ2uGG#r7q90p(j^k@iyC<&Yl5eN#1l6;4VDgibEBm=5E3#vc>1Rw>9RtNG| z41rc#7T%Hz-#frtsV%TOqK@^;1FE3t9Gmnj0z$EhzreO> z!^gUl5=~Ope&VzL|NsC0|NouImzeXD9K0mlfuNuaE7dMKtk#bI2~5eDIu*)d%v}@{ zs7w^CN)fgyYH~NAaq?KKHz~F$b-LZf+H2;G7Os8WfxIaaSTnTF5`sF6U=wZJ*OKa9 zs`XAhRD!Prt&EIMJEq)}&1AE2gQ;?8F*zB)Y_NNCq1+t-ege%CjjXqaRPc#r8o5$@ ze0pXt8q|etPc!w(>H_d(q*rqYM?_O@Z$62D2n4<}7vc#E_*lwo`9oG2;pb1fT-oK) zbu=$q`Vvu#kTpQVr^BtEXEOh2ZUtLq5XBmzX0jH(>x%larE-*4GBO`XY2fGS3x%+; zb>|0G7R-31Oj#UE$v(NUF1Qjl=gE5Rx%>GByQf{>(Q4*<6MKk|k>Q)DLrcH)c%V7F z42QfGU+%@Igb{UVPvMn}aERBxGbsnyFINr@4zPC^nY?84uV(whW|=4ng@#8+2Un>g zg!so@OaJ9sKIgCESNSOILK^8YHyt$+=qBL@IhpznDuI9?Kz!w6_E$co6gDtq)G!1e ze_dLrkp5)NexFg5?MrqKM$ddTkF%3kl=63`j{Y%c?Xn3=`Ki)Vv1O;%*0!LATm-}( z;w=MYaFPEy5y;77Ad+L}jZrnkRMy&BryX&{Bg*Sjeo=8-;R(V?254^GfsUwAVN)_j zujnzdUq_9shf$I_6fo)u3wb4sBC5uS8pf!Qo<(F^)jhL&k#qz}B1y7>h#8eEl0^h0 zrN_jhVv6r$3h(pD_wnBp-xNP-#*i_5NEn_+44H#};9UQK_=0EyO{eT!nvh>aYTl9EbV2?`eP>-!eg8}Aic# z_g$7>a@jj+oPlW#(7?a|=soYOH>Gx&dH}idcna(ms#aA4AP5=@5EP9hj!3x~zdJvx z@f>Mq&-(1&2iXSENBddwL3r>_ZhGY9XDkqIv=yqt3fMxZ4incZ5w^{A-2oa6ERI&(c4aI!zvA{*JRm#%KxsFyLQfA0ay{bK2Q97g>P+Zk70loI2pX- zflc!B697kS`~Q#BTY9T_ODJJ_}2b6cSQH?Lqsc`(`i4VlC=an zIgo*f=CIikA7le~!2+;)1pU^(5VBit&NC9s18p}X_q>3o1{tj716hP*_MWN4N>-~1 zp=+uvo#*02WXW|Ne9LwPg5*JaJCFU}&3`X+>*W^j56De!ZWa*o2=M-=s%{OVswyi? z)!fI|R+t)Dp(+diU;F8woEHQkb9aMaM6^g-sTe(zFhEzI)1DF5sjhoQD4G?7+4SdfdWEwtGRU~&nFd1Bb*=y1PI`t=YGCN za?eaB{;NrA1)4~eBK!IGUMD3(N~BJc_U;x^N}bkIhR^v+NaxpqZ&U`}JEz0zkQu+3 z_cz~HLfvN1q=;`{K+8m=CqN3h1;Rpd4Mg2Yy9DFN-wUKb7z1()3)g4=f0^pHeXj}) z7D(DclMbMMB7X#>A1HawtU(H*HCYqmZf3E1b>FLgRqs`GsBQq=T>uF*Kna1A8-WxE zNHVIc8*DT{8VvHMMA=8OWq&zj{y(yRY5*h+0tyfzd#E%H`XL4Tr>LJN#I%$>ai5p* z>}Rn}X*GWq>&5uPa_0X#t(T6*Bfo8DCZ!S>z^44t zAjpxWxo5^}Yquwzw~F=j?ESL6`+pB$VKfv4((v%`e7TXf$yY^XT@lLNKoyTOx2l6I z&wuP~+C4Ko=uRM9X$omtwqD#OPXCbdDBW1||4-Gj{T~<{KLpORbxGO_v9sk^RB}k6 z=v*`(gBcCL;YdRcNJ6`-y{HQzi*(=y$Ga@2AV0ZtQHE5zXj=c@)Y%*V=+6z-OeL;H zBo~t_bvV;KVM`tk;WJoyC?wF+ev#Q}*gy?=tK0}7!o~fx$q@?Y)CYN}iEw@tCJWlx zJLJe%iO(jl^oG5Q7qJuoa1FD)Qnkt_^{u@owNIzn^aeZ6aKE60m5N~ITRU&gd-_J{ zh=nOtN;(ZZZ#TZ%-ga^~HlJ+? zP4HE+?h60^KmBG)?w*=BN)r+z{{M^RXK*Uym1#LsbLpXUg~Rpk{zx1M$3j-8Ae2s! zo~?lRvD60TB>&B&NFD z`ziH1Llawsi9sU>2Xz&KnaL`Y27bm`{XXrO ztLryzxr&N_h=NFpO2?i}{mG`*$^oZ(voqeSPNN7c(dWj*B+m>1*w5|MB*K})+5Cfe51qf*=V*S4$vK+5?Hv z9Y}({h!oa{OwNd0{)hs>i03j9C7_5miV@Xn5g)Z8zUoEPnnbi{iD=Uv(Wxt}U#NH}ep?djzqUb%+CPLfq9p#J_qT;wJxwWR#SGWTMo8WP$X6WQlA9$#JqB zBxlH8ket2_|c_3@9J;%rg} z^hHxUq_4g@={Awzyeq`obzO`t-I@N(Ev7^&*zt4wD?~~%hH35yJANWKpNq3`;Bzd! zVsWnWoyg6$?3Rg6J{S#9w@kwE63sEV)I1sx;?mgISJmVpKLvsjyp4KLVHX^R!SY>X$Eiyd zg2osVrXw(T#+Yat6+%+#KWbDDu#ZPqNv_#fB|4;RUQmd_v~+b;p;~grph<(dGgEzP zU%Pu6^`091X(;)0sn#jf))+s~*f1evC9AeN4e}hlL}kG4a4vA}NoGewCz{mdg&m>D zffuPUHdHoK;bALz3fJTFMhTi9>#8=ps>A2U+X9|*oP0krdY<5gluKr6^Hnu@a{p!2 z<^`DpDZHA=MAlBA(K#5aRyzT%QIZ^M?_Fz6tGf2ok$esoQX2v$E8t=@s zqK^E&oiAvdn)H5^yb0clPN30;fQW1wy&`A5P0*gJX1k``z+noa({IT@x(c#w;(9Zs zX}^0?t`p54q|bvost%=iRho*cj`LH~n^RMhI{8&N0$uxCK1ccGZH(a;po-bCzdy4_ zE=JFuP+ObrNOpuvJvRkECy9Jd4(`Y7I5U&{=ctA^{MXTFOu6qR3ekQ3 zXg@OgvfxiBug}z9qv~lCoJAquLUNJAo-V1E-&{rx>R^qY0RtMcu+s_z-i_|2^58TZ zN|Z#QemeI60wrCoNEy{LNwXPsX7harHgnpFm%S|x=eNRC1Ay{5NIChvifEB^`LeNJ zZva4t?0z_0_tTy(&n%OmQG+Pr9abHz(J6p;gCfDCYt-$-Jph6HI(U_J7(s6qFaQYa zjhLDhTAwq8azEaU*jDiB4O;EPSbs zoJH9qu&jma-{-+iQ4v{8BW^*Du)3SZozmPFAJ|vjC;;m8xG&dmi3#u{8&2^^0z#l)MwdhHrMT>niaFh zVc}(Cdd(04jX(V`1hpvan#{k{ya?CKAe*+cnW*U^pfZ?XV`egqNr&lZ$b@y{->~s- zk1Dh|ltpu4P(SxAj8s34*8vMBeO(%D81BGfR%E1Pz#@Lb|+<}^FfjQyajqsHGbov(A* zMnjw0C<|)4zRM?x7ARB>-RD<#y`jcwjJl7CeR6th^bds*Mi6|A{O7HWfhsKMh^q6U z!@|URm&4Td4S7>HscZ1YgAMTJC_spLZoJP-cj1f7tZrDiwzfJqJgLy|;zr@w?eAXD zs%Mq3=N;*n_m6L+!4hpGWJ|9qVN0cZroCVrKrRKx@^f^y{@D8C0ch6bM!TC1aYFMn zf9)TbY9EFo9+{2*R3e}J7=CDqFh|WCprhJIWNLftn&~9(xO|C9Rchv*Y^GX^tnj(j z$K}`BY^Q4n?{mbDPHVVl8vVv{|7i1At5@2RC*YbeJESn2Q8ikM5Vqtr%uGy}m(uXU zq^eHo&Pa!grCKGIvRbCrV-3~e*Zwl7EMZwaA%OQ<0}W943tap5Z9*)M*653wEr=f+#Ow~hkHO3TJtQh$P&w~RObs{S#6EA*4t#8oxZonJ_j9f!p}}R?VO9Q zxaOutcis29zx?ZwX04ui;gz@EM1vvqf>Q?$B>qX}K+RTj=PHnK6((tjM6eLBWAWF{`V4;Nc!oNq5T0GVM7=Cmx5K3 z>fF@5)mn$vmgpM2v2|{YTbD+Ab*kG;$(&j7iv_E&S-OXho$%t9Js_dbS@iJhpcaqZ zQBWBY%9L~p)kI8~W=x~M;?3w^vKm^-B&S<_ITbC^R;IPIlW8(r_H?S5uADNnsf)q# zQ9*+}1zL=rk|pUK|2gHIaK&TESdGul>Z;Zw>kFec*UkF6k+C(+D9~QTLZ*e4ZwNWH zdsEx)7Q6MXbwhq{*l+gOKzR+n=D%(`hxTZ$QDa@nSI^L3+s9%W~Du8+3)$qj;4M zxoV`k%z`;O=c-$gqOr}`nw#GkjkudYaU;L3!TSQBAERNFpzs*{VSu=Zme|_cV5jO# zUA8;zVYDPl21V)*BIBj=&{fd|F&)PPd0=8nM$>SV_&Wb~%T-%!+s4*EnzqqVGskEj zhjTJR*?rar^TVczs+pLN&BU3hmAxL(oLi<8jp8%*SenD{r}uyHiV#Dke0$RIg(1e);g?zXpE}zI1AfTHm0)h9~YvrjH7A{v%v?w-DDy7XKITfG~Pu z6vlOVU}C#)yA&TJi>gyz4jCqc#C)5iOpHmxZEp7qYnm`h2B^B4pwKFKe>kk<^Z1{+gqehPzJ8t}j z8y)9<_CT6CZTgIvvu1Cy>72RqSF9XVB#Km#DRM;tLKs4kITqRLWzH(KO)xibOB>Gl zw5!*y-?(Mlj$M299r)|ekz=RMXksj6B{_KoMI~hwz3=Xi52v?}XUiY}5VRoH!c&5D z*$R{yuG)B0%{I>p>utBs&(6Bx56zx=6G%(maujNt7SKt3EvjhRf!JY*<2jIKAgcy> zE);oC<^!${RRPq6(9}>{L7MZ#s;)=jS|&wW?|7aV_Nv~)`%ULv?2y;iF`HY@Ti@}f zW44H9-{2+3r6+qxH<3qT-5{kx{XJF*q8X!Q_eM4p@qC-OfxzMrG$#b?}eI;t50wi_H;8 zqza7*3P<7aLXKr*RKl$t~!*@a7nr#o`;t^^y7=l^O znmGubL+Hq{6Q|Ccd+x%e?{GdBu$zmxgv+>stGSVzxs?}izlZ!|_(O*c7ojK8ARSNv zF!XREz{x$6(IA8Y2!Lof~m=20) z4vA5%x2MEaGBH$WDdK#Q=)OstLyt@U8Uk}|^)|D_DjDR71(y{h7GOx0BJ_D;cpBa_ zP#|BsJu$R+m-iGVUY;}t#JW2uM*0mzL8Mul6VB2br^y0aWGG>u+1IoOfaR+635{DOUA9o2D;Y!6ecB3YJ-fRsqvd`<(k^hCY{$+M>(<_w}p8DY9l&8BM z#aZ>ay|wyAF>0^b{{!rHSVGk^sdtX(zg(4~e;jqo=k_ z@$}lrNZ^6Byr?|fxR%tv20vd5kFLaddqD$KcL3fp+EutxOhp^5pXQfFOuvkXt8*KD zNYmc8K+zI7yy}iDBhzO^dHdvTvkhAPO`L0!etGC;(8>Ut?He+neU))+iut`f>Wo1q z_etT1dn_pQoX67M3lw*J+*=4-x*_d#TqKW}sb^wKb(muh%5j|P2Ml&?DPpKTJ=&qrJ6;`C;YbU)Hu;0Pq!bsnI0}*Xx*EFI>7?ECQ!pk8@4hQTRmNLo8=F zN)0>x*|A!>eQ{0Va;nbjTDC|_al9H}ywq|fnKC5-FJFbJP>^Za2rH9WVp+(l>oLE6 zK3u|mUzNe?!4Fl6)5XNk8!DhhV*T931;8mcHbr`!xE2WQVW=o@v;BJ*z(W@FtVy3$$dAQYOfd4y@Y~tk0hInY)D!e?yEt|PF5QsEQ!W)X!%D05JUN6?V%XMnO{X}h zhQhSd8nn~OX;VlB@T~eKb!-a6VO-zyCWq~8m66B#ZXd?6DTYsn@4ALGw&ZFf3psmG z=!K7^m7W2`jVn0;EZvY+d@dC=!{|~roA6eGU~$*Vl1NE+UE)gBb89;)eep&-Ud+=?a)$o{0J9L! zJpKB{Zre$>dhvNbsKb108ly7=!zjHS#Kqfj=psPb9bnKYn|U7O@r*!}`hA$Z>H%svDpSpiRd z05t5g;GNM7(=H~xDKXKsNrSiWi^4>Ml~43iY|0_ZOiqrD(tAO;f&V1lYoiUhs^PcAXQLR^x(lD}j*%@=6yKUx9R!VW zo&}TkF0qA7RaV!Q3W=S@N6L&~tE+;rQQx^agEm7ynBNjv7y2wZFt>eF(?|pL+f97a zpfMo(p?A(U>*2fEoHK?PR#ylM$64D8G)pxjfI})iY>MRiV2m+9GDU=I)ZJ7cjF$QN zZLD9^^sy^wmy_NNsY`~Wz*{qHqf<5>W0F7E4wQx|zY+DSyKMj_!l}4iU=Bpi3~D$6 z{q0#&>g6>L>S0Hy0g&c=hb+O$6YMB34sUM9U>uv`?b_||gqM4lhO@S5zWX!x-aYF| zQensAlO38U3Pp--NWi5VQtRVVQ8Of`vhnM5#inR<1}TaXY88xAak&?*>I%7~H%Eq5EtpqhiO%V!NCGhv-oJ!fv;zU)3oOiH&?K9#5 zQ#IH?zPo{PVKuC-$7XEGpiZhOR)|7H5Q}Q^seSSWRz7!JWVJ4-hZm2x=q);l$4uNJ zd2NePXpEy0Okyyp4N;)1&M6g=I*L<-2;)=~_2folRKcvaJW)UZ@3i?FBu|d2l8VtC zt79Z(0&D~6AVylxEm!Chm=yh_k@|2H7g7*S#qX0vBA0Z^ zk%;0Ine|yz_7C&X%n)R3i60oprr2NWdp|ZWX$sMRligcJbPA8w# zThZ#Crp|YJh;D$Lt!;|c8o3sj-&@r3;xv-qLmAHV!?O)mJuliy(G~v7p8W6{qt#~3 z?AG?63)bBl}S!rj&tD=3KW>@7x5y*0*vSm7mh;k#K0y9Wu(FKjLh&!@&?4Cj}3H9@QK{x(hBSRS{cS{S^Vs^+$mRZNV}Li z=EEqeqs7PwD{j}3Wd}ES#=Hfap|y7L^60Z_5F^=~tU?2 z`H1&=z#E0MgYas@MhL@8Byg*llncpP;wo*3g_MZ3ga`Z8y=3PH4?f{!do&bY9=bPx z5CZ6$D#sA%VW{Glw{i0JMP8J;o2~~bRlY*k#rj+qn>8t%V?%4pa`5xhuc#;7X~cF2 zn-D1156`dywHC73RaXkZOO{IYn)(Hq1$2i3&&kETlM-B?T%||7N@HBaI zuk73Yoplz^wmS`-RVJDzuts7i1{G7`;c0xBCsu>W8ZF!U5FRTRG*$_ri&Qd=gi5Gv z3m7g{bF!PJBfKr)1$;P@Lj~NcAMn-;sxoEcYfQG0%8c+F zpO2al4_LYt&b|GJnY{kZ(giPksiRuZJEp<+q$WjjwWuqq7nS%^)H* zI_m@GW{67R;W@N5NlD4hOO@a4W(Oa~z)I@{^o(OuRPHGc)80TJQJn2`?4Zzl|EQ2q zkY1|XE2lLN?!lLc;znSO@v#e`qavrOR^6%!yR<9}tk%`C2g)voIEpsIcpWzxNv&0* z%EpHsVu}OqcI(qVK1@V z-+E5%_R5VN42#ofeO)~gUt*XTUk?1{HNvo<*?<93VFr&BDO-I*FKi8V$dNVVk(ih zr-Cq?si+y&3QQu~bxl#=Vx%Z~gpd*^La%?6U)0_rU@!|S?e9|hq|n^}_Wb8%5a(;N?BFgYJ5Ghy&5H=9!DucInESjeXM z4C^uLXE*G25XBkR*UrmxM@4{wi0<#=OFg1p7O<~}-)J@}s5+ynoq?>FS9sSH&Cqu+ zIoBi$)Yr(8i}{>bpkl-))?92_Bvieuh@G|DqRQ#)4pijBtlJvYo8|1>FV8ku^~Z6} zX;u7*^OAGLfh((6EDJ=4JF#Y+5>Z@jT-$3{3@}+1aJ6b;D&V$EH(Mlg%*8bco2=I{dE`hpz(6Ka93f(Z%od**)Y!C{qYd9I8X~RHa%vkO zGaqcVZHmIv`4S-=wWUppZ8GH6V$-||h%bnJzRvQ3Z0#CDFv`v% zc1efZPM6Jt_%i1&7hf?=wNBOw6pW)uQ^i<|Xy=f9DVu$tcXdzoBKBiGrb6%FDCIpO zk~cPac~*LVIiMkrkxY+my#;||evPNg8Je5QNCS3GBnLF_HWNC{o4ElAwrcRmIL0Ti zrMdA(!L@=y?^re8d2NSntec@@bC4}kT^*Y}XoUF@)r5x0Da}*SIHe%YsNN37*k*|( z#f_g5e}CP3;4n)~=4QhM@P{*G9&JvMp%OqYTcd7FO3`?#IhfRg^a3bRx1=C0Nmm)C zV(;oG=>zPNL!vYN<7?L3%7B_n#?ho%Og3lYCN?E1^lp!(CP7B|V-q59>4wz!xKz{( zGbtvUb$4%y9A}WCc%VkXI2D&4jo-)xmXbrK!2fh^+W?xj7EpZ`T7BCTyQh^!o*Sq8 zP%8%f^K5fmJv$x@eU?{G|AUvN>I)oP&CP9X$e~ZOR(re42DkIA4XLd@rA82~aHh0O zj#*T9%o!;IjG?$AOpn?CQDEKN43p($fbIdQqWxqcZ%?wic+IQ6Kf295NTh$mPv$pI zTctH+Y)}=uicvu-wTNVZc&EzO(rq@ceA#yya?oZ*Mi~%kSn1nn#6HpRw0OrOlaFYAE#AslFH=QMA$_pl#}_Qde@4QYmy{C#5m z@FD&`k?{c^tPpS>ak#PDO{*jbVWHX`4XQW#)mER`2&U>?v7yg%BaM`P^`VjNiYy?< zIK~XgS;C9pc7o!L!=qGrNJxH;^_kjbL!6Y=alzf1x7c>7s+ehLGNef~m@(d(p$ZJ^ zPtX;1+sg4|YA5d8tQweKi1Mw%xz*KK`Yrx;Q8PqC*De_K-H;5pA!-~!Iv6ISVSRnK z!ahxU6lGf7$u&sVLKM9fmI4=rqFq3#I8pDY<8ps%t{26GLwaLWhA<#)3#Aut<7w5L zn6uS10!?1(Q&kp$D3tS6VRM`^&vpKVck0A4Sb>;7s7ncD^1|V37oH9_a24!bO&#Lw zA$c8X+sLW(6w0!aOyttMPS-7v&2>9)+@*5Qx)^+-BhY8t-Q`8t;I#H`+59h+5NCb< z(q7alxU#Eex4O8nO;*k)(o#4@mJa}jv_5;d$VqgSW*TH%!k`82W+R-63kt;kSq=uZ2$NYnwE)K~B!#R5O31vc!e*ON&ihRl#Z0MPHZ3=#Occxs-kR%0 zCd$Z+l~hzj$;69{Bq~ZDf(ccHO?81q=l#w+rey(7{W2)cu;5iOtOb}f;J%Y&Wg@}nj zyPyiXAtlV9+<0rQ>xhfUgqRGZw@7J=_+AVYcY~5ug>x^5eEOIAbN1n}6dy+ABS;&= z+E-=(+akHv^;V$h=_;k5xGBHyD^Z`<6tyRcm03jR#K#5vvm#UXT6#;0cB9*Z3FOuo z$EH}^D{j_2fL*!=VjJDPpwK%$mRvvXxEe9y@Bz?Wn~Z`Y>IT;^iEc92a{`SZBTsTl z*^pde5n043h0T4JIjPO(yv+T8)+@ljDn=`cu%pS{o{+xntu~g3;()YQ*8w7RjlPgU3HLLVAbE;5xaav=f7d6vP!dSP05XFPYn- z5`1$3Vxv7KVRamAM)Q{FU`wm$uN`H32-e2|0^_aLDajVnwB}Ny1UkwYVW4-4_V1kspML zW9SH~Xs-ZT`51kb?&DaG+rcfNozko*zDa@G@CU4ou>fbo*??90Tl8!--2srtgj6MV z-4N|pW)g8d4le0^?_q`SD0WfgZM`cRz_a+jk4BsJzZ)l51Vz`fehER!2G%IP315gtQoCbe=@ZJGR|?`eSM1ul^pg3l zpZ-e?t3^+ZmhzgiSr8@Fk6y7U?w%$PWu)*((t~&*a!sf=S*(!rWx-gDB4q_Ubt;JV zS@4l)hERt|x11a(loNRiH!TiC)+@>SEVBH5?=V%p5y5815lKN8IQxoV=&6||6JV-` z@HKH7B^pj@O?ORkh?cd+JER??#QlFwQ%Ck^=U%vZs5c+frBx)gehxAf-~ChS4%BPU(7ak^G+d z%`j^@FWg`!P)_twuO4;P8p|}Lq0C%kdX@$_Y54c-GCOkRT+W$}4UtCHd`YL0B`p1S z{=KqnOLK3TT#AiqV!Iil-3<*9bju_Z>lV;NdIQHdtVkRnfw*X$W^r3PWY6s}0X z5yrSyLgo%Xv}MAXnuWb1{CwdUsyTu-LW@AQ;ukEty0D*YH_OJ7!_~yL|CJoz`wwqB z)wmxW8D7S6w8p4-D&$CNQA4FY2hLr^<-M_;fJ60h^>fJEq3O0fI8if~J9NaSt=fZX zkfBw90!0g0K~*l_@JD9ZSmBcDj-yD0I95R+3KgCzdv?f>H!Jd#dZJfk4MiU29K7(( zUL?L1BXW)H@V>+K)_Y2js0)_xIlQFEwb-JOj`-LoMO+@Tmo<4nJfhg8pa& zRN|TF$m+O^f{GoP!Yhi$n(>p@RdO@63|Ts&EiNuW<&L<^EA8XNsfgB%SjCw$$fB~) z3q2_?{6-8X!`IxDrQ3)TQH`UJkl0zsJmFa z^h}5X8;@9l@Kfjv;}NS~V8=Oc?tWDJsc`gA)O?}Y*lD$9aT_FPmKJF5!w3-wlR-%8 ziiz7FTS*yI>O|(DQe_oF_0O&31^e9PsoDVhsQt<&pAE?2WG*eLD8S(ZQuWH%I5D?>N^Pg z7+SnM>Oo2p2Hzb@byq4>MYUFKRk!jEKiXB+wZtE( zA=1^5(8HPo*I5e7|E31Z$5V&p3#BhCpUtYFic--#>V>wu6x;2bVbiLx%j$9`sD)ap zP+h#g1Swl&t71R$J$j19|MJ|kgnWagl$ngXTePWO%ry zyE6Z141Q_6oyA%hXLD(O@>T{ff8@F{a3bqi&jvQKiF4S@7Pblw4Cd}Gfv^vbzW6f8 zS9JKL8T80GI{l|KmSx*MN9OLHE!%-xS!# zp8(vc03-kbz#AX|i)si^x=}#?vsuz22?#1K1n?9ev*ckUpz5_kPztE#njs^`Odz9} z@yn`xbm{Q0@5s0LxKH|`yFKe&ekr6d3M*j>8!=kqd?tFtSe9f(wq{rM=W+%!S$64M zv1xatQRYjxT;0iT?|~leiO%)U3EG`Bw|%!CPot8eYU*eplxVE2j=Iycz7(Qp#VAW9 zRW#Prr`&MIIPuyq&T+z71BQ*e?7ffvqs|FNXsOd-Krmv#jR)S*!w3^>`3E;V2_uGB zGVu~1MuHR&C_Of;+43I?7ekEVH^Sq66ufhB4{>pcA{DDt|Ep6y>eHac^;4_bbb&6| zm3m$&eknmIq*SPX=2!jSn+`WKYkJx z^uwAsc7&1ZzwCz|UhCq>AlJK9_`+AK9~YAYQ69Pcv}9L7WMMjtKc z6=Dg;E2!XrJ!+N5^!TGZB^RnZ>>t9#g?bZpnq`C*4+!GT)M1k#(&xUz0j@>yv=t!xs=Xy4#@sz z?S9INt=q(Z^`C>a+f;zFl_j|S+KtSK1@pPB*s2ZqgXqdTx2f5XRO)Ze#z(Qui_Nv~ zw(bA8dHX&e*-;CW)b##@i-LYiXp&+EX^;OuRLO~QQ5UyTR>>Nvm4#9#$6L?eHM#vQ zmSxf_%VnutActEm-LgUswN}>22H7k7*qBFtScUG#@vwihnn07X5#jIpT~aL{`@2BI zg%0b-QV)VN7alt5sh0@RQVlZLP&tZBHq|t<%(uiE-`ZfKT|+C^@B)$SALfU>8eDYU zZIAuunU^V~B?Fm+icz3Qv2s8!xki?d;@Ym@xEc$C?92ZbJF+7c4=HI0JYp zG(xdb6Ac?NjJMKK%dN1B&Hq#L`>XIZa?cduO=1q=T#6UDMuWUT*SsOPD6U?g;UhZXWP+S6@%`@xT6_>Zetd z7a~2Ek{^=tL992D^F_Q@(wdL-0Ma8PBr*%akkH5~nCwExEu8!?sD-di-YYr z9B1l-QJazh06|jHU{-!HaveH#>Cvm7k%^f_Ku}mnL{vgjTn++NQ`gYc(bYFFG%~i= zqff7X1BQ(lGHJ%FZ=U(&o^fPTC`OH$)?jB)oWpR>m3!f>mnyvSzt`S*rs1w)GHK`z{W3ZonpXo7WjcBeq@E87;%Ec0V)pB;4m$YP;gKe7vR$a?;iLea8kg9 zfU5>>5;))Bh5a+O&;{yUZf!c-+N$@^NH6e;x8`rSCA)KCtF?FX=yabk z&dtWb$=-|2Q(9Z?R${7UQ_hRle{{6=+gVV^qgXkwGHyjm*!!#Q{|<17L6H0ktcR6I zn*KDnYyuXkij01ixd+B1||DF;FDYE8vpH%Gpa7L{`uL_aY1K zsjG!`*Mp9VhJ}I2M<6kPg0gp}vo^0}q<7qT_X~${wz1jj>w)}>+-v_Ah!pNso(kE) zZ8eXzoV@1ZEh}e6QL}Jj*mA*2Wo;9vP{wA_nqkJOp;WX_q{f>@sv?)ShnWwTOc;9A z@m$L9(B*QaUvn}y3OjP8dMV>E&fIW7%yjtc!>M0SE8K)|t6jG_gWAj*&>GR%uTu76 zqaD|da%4uomdeX^YaKa6KLIo|EMzGw&W-YH9nE46D|xZyqbjlD#7mIa(Ad@4(caeD z(mg&g*}SrGaI(62c)GK-J{9=I*+`+0i}#e-|F{H{l6a;TiK`BsOYs@q+9f)V+7qtECSj zppp!hEXB}L6_xfTFPGlb3$w~Fzaf^$lx5A!-qwbf1G^@dh{uIIJTm0t@u7h53Wc~f z6j5XWi(-3~DAiDz>y^8$!UrB#=~=_PoZ-BX5=J0x7>NuwMqO3N6h1`Gp&E6&G5Q*V zdW5kkJk+3=Fz!&jX8bkbrsA1+O}goWoeVTOOu=KrR5B|}I~;a82#+v>EDiPePFRDB z!ngR>@E!gqti`{Db+{?4C$qx_GA(SRaM(l+3Y*dRumvv;TM5sw4bKkS$@H*;VhlUU zjIfL7aO3-HH%<=!4P`T_SNeLrc}&#e1JVRz^x$4+tUw9wA*=`8=w3GTdvE{M_KqPQ;c?6ShH7|~V5 zT~pe16T4y9+&rS);+FB_;n)kqKSkpZqnMra>dJa8Gv61*ZSxEWc4cVq*%A`^r~whuG`*@16l|G*s} z2MCGU!C#Rhbc>uGcmU)Kevu2@ja;E`)c(5#)(y}n>hQq-K<>~#^7w9z^#t^byr4Dm zhN!3`yoh`tGV=XyrS$`(yvcv$D*%$-6gd0}g4n1NyoowP@|%K3yh0#8>H@E#Fi3mz zjJlz*dq{uOgP!Q@6*5M>G1@0&j>56BZx}M_ho${P)+hpNBSZEm3LB$C?kEO3V?+KZ zj&=?Rd82q7ZXot1go05bjwXegQ8K}%gpyGzuBL^tqd{~wJxm%6Cd`a5eKdq#W`>!g zEc%!oW{if?+ng|aluKXp!pEb0A}k1VMuqgZD10<3rk^EY(WsOGmW73*a^kEA3q~Ih zYh|b(4Wr26;p@=|@*NqLjYg4ZRrqG~A%#|lRin}5IVP+gjitbvuy!<#GRKF_qX`Um zV%YL&Quux}nK4cYdqz{Kaa!0tn$FmpL9|Q5yidzQ_fIS0zeZnSVSN}iT7#cELfvR5 znO+FGPYvM!H9*S0=%-8J?dS^a?;1&WgY>&a>NS#fcNyeAW+6QK7h0l+Fz!u{Cgk-D zdPmQpIeG_9(R;WMwZVipnXk~;5o%*66d60i;@Abn$Dyzz?)ndZ+yh9Bhr*-yAo<{v z53QR$Z~r>th<}`1r?#T$Gjl(H8XAviX+5N)^Manu*(4m)V zwHF$~D@b}rQQjit3yu9`EK0il7?_S=;ra-V%o%bDmnkV-1A|?qqIR8z)-5_ZpV8C% zhJn#{a^yJ1%Mi2Y zVj3;s*-A89nOE!4YJJ{qK)Vh3v>BZ?=i63v+nQfH(rYLFO`}bR+U)}m`WNUQ;-R_S zg7vxGMisf;f$ws=i%N652kUaXkIHjdLao7I(r~y9 z1VTn$-ll?rtfHbVB_%0kW$P*`OjXsqnwp5Zx6gmrZ-=;`Uc zeTOFl1ARk7FGfbj#>U=FOw>$GU7ML{n47z`u+X%$bZ2FyWo_-=#zx)N){UK=iG920 z@?snm&4Z?YFq8$$so5+VVEq#qAF~z3Wu6- zxh6bn!$01efSvJ)SZEt7ACHapvGd6|=olxTZuVhimbuRrtg&Y;7AD-FDAC5n zh%qcqyio}fjC7)zT#_WoYn-8!6e%hZ5EM4W$cDD)du+`xtb~JWIU%7cA|kcqp`L)kXxK}$Y$z>PL6MC%DluhB zr7gCovfXyoX6#hsLm#Se*=6-^`BH=5JXkHC5Td=BH~fVUADMjl`kz04c!2`F005vG z5_2jfEA;R$L4ptk3-(Zm5Tp(jBddtv2~nbGM2q%^7%|A5Af{Bw!$08RQKT;7mVkvt zC|fpuvxTP>C;V6OM=dfkzqdm8yMiN7sm4Uq)F4_~wzeAn#KA%Rx}7E9;StkC!mFw{ z249sP5|k+uuTGs1_3EKDXb`GVqaaP1_;$1Ky6POcbnC`5V1UV>K^BWF7G}sWkr5+6 z%PbRMrIid;TSI59wF<1Wp36oX<(o7q*EZXz?68B?j2TYH9OLhT3ygik@R-kh=9z~c zdfAUezv^*xRR4tMb$n);@a3zh{lo=z{4+gu0*5XDfQ3MyZV*UMN115>53gB;3i6-y zZb90UjdV8IjB3ghmT6lsY_*k-ZMH+$VF%a@=`HknHKDWFoZIcr91fd(N_D?}{RQWC z)A3o~y=XuGf3aT>4pBNrDpBrJXT<0v#swNpucSQd z7P3?p8qc;d+0j`l-$<>4>{={)n$EuAIq>xy>NH2%&9N`$MDsZ{BxhRqbPhggci}>} zOPA(cxiaXQYua3Q-K-mK7;w`~t>C@Ih}^bh?x-twt&)3|$bEI@fw6gLbRMZMkFA|2 zM&&7K>gAbdW<2*?zZYI;A?{07&MS-OwL0>~T6t?^-f^9=I6ZK1&~b5{<1PL+fPlaS zLPCs0L>P#Pv6GPCB_#zVBg52k!%q|x)+s5`sHiNqT8yKliSd=R!!LAnw&>}lFtEGB z!6B!eP;xy;uiHr`504C9Ug>;%(%SE#<_=h)@aR(bBvnLC9suZ-f}%GX8Y;W#A%9y= zerRiJ(9uza-L6B;_MkTP(U=AY?9f5CBdAW}L%W?gNIQk551}T_4?XR|p?;SR(yko( z+qFYa9DnBX-mWqS2QOW5MX_tHDRJF(Pu+3XbML%U>b=k2_V>cGa-6XxczBipz@_)= zPdOMk;|xRRoMYtJG2`Z%P!v2oG5Gi*2?#`Y+C#}Z?~K0holN-PgJB!nGYeqd+FTKhRZ)Alz z6a5M}7WzFZ8lR;Ra!SB2wiKeZTg2Tp$cF=q>uqe_+pU;%mz#qVY zix!ml&dh;;t_)lw2G*<><)G$*ue?Z14o!09Z6jOBO*oeFJejY*~XH z`hFbE-f7I>HeMaszoT&wn^q^CCynFry*-!KCRP~|gLt5z<)j^1BX`A$8p5AGL_TOY zDLRz>67tCE#y*$cq2*~6elI4zzdc(cbFmBe?%sqVbomAwW+0@bT#8F3^k*IoD1544 z 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�xpNM#Ln9NUmv|WWrsrCAA29kBxkEN`pO0 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 C*4pR* literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-Medium.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..484c9e64152c80a4656076ac3292a178636750f6 GIT binary patch literal 70480 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 literal 0 HcmV?d00001 diff --git a/static/fonts/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 b/static/fonts/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e1279949e07abbbe2bb58d11eb9d9a92025f69d3 GIT binary patch literal 73704 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�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�I2`;RltI!`q!2)h)sND4Z8MZO78y*3 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

GI;tXZIcky~2Ft2! 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 eg$$2kF{!8=UErkKfG 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Ð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

8%9Q6LZQ9{Gp_`Pb3`CGgj7v8 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 z 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 z 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 Gjr=dd&}xVP literal 0 HcmV?d00001 diff --git a/static/img/android-chrome-256x256.png b/static/img/android-chrome-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..1c30cc026781e0ba3288a23e0e2f37ee1e553e62 GIT binary patch literal 5421 zcmc(jS5(u@*2ez{ozRPfqJ$obkkETVQ#zqzp-Jx{pn$Z{MS4-e7pa2iixiP6B}gw) zEFc{N5)l!Cr~zX*oXhXxyFM4Qo@ehpzcqW!&8*p(80*XItU{~+0I-{x8ruN?=*)ru zX8JSv73;BgCiH#=Rt5mjk_VxBGMvRQFH<`!0Jtp;0Qgh@I5|t|PXbHoViYoh{f=k2EOM`f5qs zni8?$IS;xQaPHnCC|jWJob}2;^z|DYU&9RwGA-y0jJfz8+x}X6wZ7~8V|3RypnIpg zIl^CXS7{Y6#};KNOFg?3mJ`#!??71#+s`*b^eyCv)0laMCQ-dhX}fSCO| zZz>Qzuj0Jhi|2MH)k0uM8DkK=n4@rlRnOiD&Ywsc{=;bn$#+NU9_Z+Awh-AXbIXF65j^l?`*g;ggZQ3>G z&sjt+3C749;3CaDn)kaUuaJCca)&NRPIlAYZHwU+uZ--^t$1yuh<1cnQHiC^lIpVL zwZTn3^O5xoEvjy3M(ceEbTW>kHJ548((r3`ST0miuXLJI(B|4zwJQRTwQuhie>B=4 zckqD%Wqlws2MX?+{JB1?z@!R&3F95=4Faa7@9tR`zZX@_eDTQ-&j^{l4Fwt%j<Ss=0RomFBfM1FPA5`9psmh3T zPL6oBsNeqOFL_|oe!2t+hcs6%smH{Hg~dtX07|SfY2{2cTXrckB<1oLg?#n zod2;1y@llal>g*uML#@19L=DFtjHTwOc(#UIm7V^_Ba#Z*PXep4|xT>iyiY)N2!a` zUUH%1siiN)NyT3^tl8BZ7!PAlkXfP{(HUG9Mj)7Ri@U@yBTntNX}=8_U2lz#rozbu_r27yV;rR(V%BB_m2BEXQcAn*gO<^1z%sW>cNF;jU?P^eZ;vq zS(I3`_dWlh2{ zEwC0#08^o?YZFRwmf7!f!HS;@`z&Oh?z#RtU~4)Qj5UQ*)JV!%K~s0vy+POed}Svk zJEnc-kH` zZih8|s`&PRmK&Ea`C)rF?E7S;(Au`xQ_8Y(lHhf@D|;H3vfWn3j#s89->xGIpGuG9 zwb+1OU6K3HRW0g#7{=zLKi`y{x47x`hdqwqKqr)7GinOTJ%ENWhw*Rf(o#fm_YV(? zThe1cZf^?TYRRrTa&%KZg=*^RPRHs>uB;Av%4JcW7Le(B2IL*!O8+Eg^AdbG6S)#j zrinOK!KNzrM-M4t<9~zeoMMitH_8AX-AV0%kQbfFh9iNpIS(nIcFg0ra+_1A4B^5B zzBt)U#3LQ}EatxQd^5(D3e3EC)2U5BfXrjuuoxdX8n@6y;a&I7*T%vqDpEq`Uzuv? zv5S*~$*z4P5ljO9a0{&h1(raI@{m4#=9w(xN=}))I`|bxp@)+MtDF^)b;y+KpFh`c2yO>uif+L2gdCZm zQUv$3>C>tykNiVBhXYl}I`xhXpGvrPWrn7&Ccf*WCsXPsv)I}PbdMVkM19~YI9 zxs@_NeVBF~-fU9X2Ffw;zaVjTGc$}J5F^qcU_k!({O|H`7E+zy)ZTRy(Yhj;gV?C% z5BXVmZt&1?zH*Yd`%rXRY|{;?$wm3|iO-tWBda&8tK{{x zqho^y!=GBB=upUL?8&xr@~!d?%c~%3>FEqGn9Zm9g`RWk%4KRt#oL)vyGys%=0AIx zXP4{{08rrKP5}2$K0!VNX0ANQWyE}(!i0-WvDIf_JLqYf>6wJU?Q8~xCCt!v{|QL`3PT)Qyk!O%Hh~Ha z`K$Vc2sYHex^H$hFqLtQ{IHwQT-La5z4MQMZz<6h%j<4_gUy-^f363GBvrYCjRWzP z-KP7aVbrzlqc@c`q_CSg{%q=%j0ZH;vWo}ZpB<<}6*8)|5jsiZ6^<8!NKAC}@LzGz zt7g_M#T)uNPW`&RDn_vP?d9tZcd58|C=5TAlRpK^H+HRQVvBhV=_E1tJZo1&1ClON ztmBkFtfNYG^^GRGCd_}OF-kwfsNS>v_}FW7e5S2J=!S{x*5Z477JFuiRE#G<3U(w! z;Knvz^8aGWKItOHpZM3#TA7?>92f);sxnA}7^5!I{&UZ+CW_AjS^l@~t16>95cshp zJJ;`(sLqG{3Y=mInj2mBabLJ;#{vl~BHAovOqcc4gdJP$v}x~!`VJQo_E(qBPb*h4 zGP~lTdJG&!nHelw&s@fpcPM|KZ~SGyO#f?MhdL;lz%n$QQu8fjo7Ztg^ePo2KHK}D z>KY{jMUBO?F|vxJPx!8#cRGx{pMDPYjaW&zVCAAE8Od-S$I#gM=OZrt^y+}zIK`{1 z2A1$qx_J#Fd?`JVmZpTx{tgyMO7Sb{e4fnoc+=+M#`jYXzS!~;u@M*@Q3DN(RaOvO z(MTqtzp+}J&BgI{8I^fWO#Qqfp8t?M*EvZ3p?*gvyGAluKj`naWN``|2MPWgKipI| z7xjc7xqxJC0A!WN1>hs0YpA_2A6>X$zr8^J!wCxAtyo%cc3dorX@Nl!p$hI}pK^T5 zA|}5!?qZ8yM&A^7!lz}`YYd^FR>9yPJfGkZZy?*!h>pzPYqFew?zlg0b&d%3Eh2Gq zaFB%NxPnuG*}IU`?_l){`z8*r2NlTt{oPNc-TeL~&G;U;8aZ((8v_Mei4!g}Pk`cs z%R8-!K!oniqhAvS^N>}r^$T!WCI4oC(!uc_RTP_j*<~sC9o9>8%YMwJSaE~aNBH)d z!%xLC>PcAGC8mUph0Ob-k`vTWBDz4&M8dj#Bu9 zVLH)&upj#JP7f07tx^#8oHWeLsy4*An_AZuSwi5FSOV;!62KNN=Mw0W-IxPAIgwCg zNN0oVoEzne`U#ap3)h9W*X>^zJ`K!F6#X~aYU2lo7u3&`7sHxDe`hXFzU@7zrsUt+ zL)1`BkHSk6;YQvP6F4&)53r;%ILgOmg?!j$Id`yfo}}f(lB**!>Md~_Tuy+4l%cO3 z@AgNiMx8w|Yu;@h_71tWoOs!69zYwLQdo-K6|A{P%UM}4T_{#jDVI%ubUMP4ZvfJe zjWrb-d~}s)(_G%wBiHE|6k3<(N$L*=qhl3Gx>D<^_jO92iO~Y*ky-r^&b_{+5`93% zs|>($^xJVQyKMVso-*gDWObzaQRFvJ?5|F3JS&0cU8zCw38R`;Be`=%M<7L-&D&x|zuK?GfCQbP_FaZ4>17sbr{KrK=}2MC={H4iD`W{9*)T$nlsn zU>67Mb(LPW&#{agLg>Oy?Vz$~7Mm9XqrXnQ755|f2l>sgcLZDpZ;w0nzd96V6c$2h zhEjg;sa2+CNM^*8S?Z*d;~PCXXLR-ld&Vq+w=Bl@TDx*i#hoV$?C?QlKy8C>=|08& zr5C)WGdq0Cd}VLGIn6mb&kDR5Z%uLv<##cIV=Z~nK2%v{sG;a3l>+W^wfgM{^#hLO zV@rRt-FIDg)4*BdY4|JPVlvY(dEs5T?(M?MsKc=uVON{oA`&h;Y;i{MR&!~}xBEh2 zSUFNlNmh0oMTgwV&Qn?DsIb73s8 zQ^@+?VZ0?0Xsv%GNxurDcrz4WimE=n&eMJzMQTR|m~2_F1Gax_DAc!5nw%13tb>;N z-Fh8o?#Ej?64t4Co;Z3Zy;9D}ylEpud?7-9Fh`IwCsGB$4BtJ+m#E%>g~VIMjn31H zK`?J{JHywfykPxX+UpkA7%l3-@0%MKhEe6qokNvK)EcubUeki&3d!tOLlK>`5zV7E z5vkJXl~M3_uafc0x?%{WCbx7P6*^c@ko`> zk_?0aWJ80tle6~nz1@U$`I9@Vnhz`Fw8N1L%1MnoqWbg~@fDPe7tNUzd&#F8^7_?x zemW54<_QC!?g*)ce4A_U+z)Tdn1ZN7?gTx*?Edcy7$dEU18`I8BlCfqnZl!Dm(Hz1 z2YoChACxr<+kD_D15P%ZWDKM}d?SkXj4X>twVAe-uySx9MXsupuw;J{*Um3m>xj+a zEd~;ZGbA@f{!s6yQr7(8`kuU}9x@dlT%li2nPi-fBkP;C><9d?>c?9u*)2zv{Ljaf z+pl%lBy+nudcdLO2?J{X3Dm(*ftq5^u-{XBeGJWcgzQ&w}X~0 z^)9^EXG2+IHUvvI?&J!~i;8WMW`#p(n-9|7FV#McK&2Z=x7@$oSCN|lvdmn6 z3-5lFI($Xk^_a7r%!GFW5fyxDx0G{JT!uKWp74JJR9P{D$~z1zOiL6x!)0WnXICCY zVEN43vt!<{o)to<2Gu5bx(45STjGs$!PKN`13cZ-cKC#3`%5xY9uCBT$mqu?w$$dJ z*!Un=ypC+O;SCGnL`}H<+6=im2lX5iH`GLAt>OoEA)cF@km1oDl_;``0mF@714_ol zqCclshAop!Y;Ul6b3a(37#R+R?@z6+Y}h89Q1;|2nrCsu7)RI$>>P4+L{$7?pqmow z5OgRW9RF8Ad-m2&h&3o1pB}uW3WE30Boce07RE< z9gja&sqKJ=<7iNrC9rUJ?Xmx;1etbVRG&LkL#59RF ctu$8zz6x+h9vZ6MJ39g}GqE;qH1tUR4+n%Bj$}-6^CR-R=m?XQEA!0l`AA^`tM_f=+WvYs zE&zaL9sqDDsHoLkn^`#RW{5%n{yxhX?qo(BL3;Kf001Zdf9w>Xph%FJWW(wkBiWYO z`B(uLKwn%*CF{@Y5SjKw{I{RH=0o9?`lhA%dv6Eb@s;UcPZ*?0bBs-hmU-Op=Ht0r0dZJc zKUw$L$j+1jlnHZx<6P5HGiy08&=hHEqy6;aydQQ}oOO4vOB z&uVA~OAK1&K&SVEqard$mXlmhw7Wx3rB4!~vE(f&A#>>lh36~aS%SY48`e9oiwsat z3yZ4psn{xm@=DiB)va)DeWvR22bae&5ZqU4Y{s?IF2+C;c0O+P*QE)VkW*qo3(DL@ z3)hU7dBjsd>ru2jqF2-TORcC8-d}Zud1$5$gb2NP1ARbU~6# zVt?r+jolTC4=Oq4T;6p*XX^@7Kg$>0P9Q39qo6`l1jkBuSRrwN(*YJsju**)cW-7G zAOYDUx`X|*914e%c{WBw^>mZ&FNx9L8fmckY)|Q?rU-UplLd86x;_i9G+d`$mCTgI z*$WT0Q&?`RK82BW?&Hwn2`?+rGMpZSq76)fLw?P{A;dytqqi4|*tOj*GJ5We*Msly z<1$rEf0UIk34T&FmN59MkMs2ZdMS^i)U;nNUwjI00GC-8J}i!bNT^vuctI_Uy zXpihOZX8GCWp^p~8>MCbu)7q=;&K8~@ju(19PD&T4%*u_=M z@5}3CEOgo9`O4lFqGF{n@%~G;y^yLultgVng0!#(!cf*5i2aRNU*m2lMjgKE{#OI2 zoW+sq${PDU_Ik~Id=hNUP5vTiv9ixTGX#+jjQEW>(@jW+Wkt29UvLA3E9X}aNakP* z^n7SH9PLMstqxznjCa}(*OCg-POTbPsk{=Az0ebhmhCoWn@ z4<9pZwYL19EY{^A1$!A8Skt`pF+D@oInqH+Vt#@*pyKW>3iD>1p7DH@{(O^A^I`~y z^d52xxfE!!8<&sA{z8)N7dtX66epx!#r$k>mNRmSn;BaS5V;DGs#@NL+F&dPKk=&n z$Q$*$0F`l!%$)FIb*V%>s0#YlkCR!}i+8sgvZABb^Ix8h>`Mheo6{|~<9}XR9gOki z3gY_x2}in##7rjoNH(XNqWNnv2apWh<}rKKfKyVy*2VIuzIX=zN%0@0V z#qye88sQeBLno%4to)_&c64&zo0D;GFsxE0yxa{YvTHbYwKdK5###&NfkFO4TkNN0 z(j;i9wqxhu6IJOb1Rgx)etMs0XDTXsU4QI*fx*87$H#Hh&H9PpV?Z)wYpTg_JxL@w z(y{sMY-z@}X>JjLIJ45QzBkRkUqfJ5ZzK5!p8Guu8W>ZEViOTAcxWPq2O87p@E+ZpxtV1$brd4V zXbDVP;o^T?+Pw2-X|EnGS1q5{=Y8%NDZ6G7ty<&{+P~QqRxG!hJf}-o+SB^}v%VLT zoE;V7wyu9Ox8gQor4MgI)dE2?kD{G{ugi?;)lCih@k4HJm--1wSFu%Nkk(%MAAvjC zb2kPdVQH#(7)9Rx{H!(l`vE1^;nJyV$#8@ArM>qhx*+Q;vN`0dl85~`sP*(&tvFH% z;mCsloYi~Gtb=tnG07L%utdWpHp(y$n3e|@(u8K41kD5=i{<*PgR-+^eZx#P2A3pq zcVOkFPd|cVr+@WGD&@wW-=yiwoxKs)aiz?tW7%hoS|Qp8s!zuv)#dW4uZ^2Q(l!kz z#mC^0csSRUgdTJ!O&^09w>v7KBKQC8=D*p~I5_q-tS4AlW}`I*D5X81eJy!|9&stX zEmi-~Q<(uD?6BM5udO)NO`jM+FBxL*#<2Obd)CR4+<|Xoo{7E`j%8WSZXwj8_Ji|P zHM7X3&v;9uFyo$Taq**Xz-r89tEv|8B8lMg7kqGQuBLV?%Jmkh!CiAu(9xZ0pH-gY zp)$*L+7p?izHdt{v2}*G__@+bLnzFfJBP`fe4PK0Bzz3AZFNs=F?$vs#N961)MOs& zJSK8KVm$lCr}RueugGwv_r9}IM-f^YSlg;zO~u#_p@k8 z42^82eW0^JWoe-X9|zB^S8`ACmSA-whUmp&OWz5WPn@ZgnGM0GoR`U>%n!#t?@6h3 zIR&+XGAnk>M{{~TlQ?ZBNIMcnT-9oE* zPv?3#5mQx@pN(=rd()ugZZjz2WQ9^z`u$3gDbQ(}kgeyT1qx`CrY z(#}-)Whch5=lW`*a-k>J{^570w+q{^3VDsFuWxrU%#F^)BqJ5JXA8eY6dNn8k7AQt zyKl8I0#;ZHE~cnHqjy9@YiJjgQb^tT>uok)hC+S31LEPLG^LXBJO%+YNC$>j`Elma zl{_A&cd>APcEZdE8BlOxOX_9o8uU@LsJBN~SO4Og)T^Tds{{!FwiaIy4f5q&pKJr# z@03nALcFp6ETzjmEzD@8p9Db7$aI=TAP0S>ymaGUw`g)>Snt)t4Q zuLJXTM5_!83#Zc$hpwJH#<@8QQVV=I@axAvsk_*y;2-wAg9)L9%Up{py7{dUsqOnD zw1)LBE)~)uxMNhX+&)ntY+I$)41eG-6%&W7&vbQS^K$k_>k~(9)wn#h`6-X(2gJ4X zPd@8H*@!NRB1H4JLW``I4G8~MqtnueT+1%+Q>up1mhZAty?}QF^#aN9HV(cnm)nT= z0s?4fEG|_dr){z!Aw7<24Q$i(u0kYcnw}r)@-2AR_uy_qDFFJggR0nyru6i2P0i4w zv!!{W<`YTI(QZ%CU^o0j2-U*}=wxEA>kIBjC%<_WtARIej9O0;BCUQIHY2fcUN$bZ z#)tMJIBaA$&DzhSZ za=+0b8X-(q%P*tL7fFnpg0tj&)zm_lm5IPs#t0^5(e}ZgeCbJTmWG-4+`3xxWxaT6kgf zr*x+dVQW^CryJK?0n)@ju{j^|ytcBU#LHxiYZ-?E{}JlHh}H$$dz42XtYF0Pi6obj z#g;=7cDTs%G+)<<5lovSXC~B@-;Vjh`gO}B&f@q|Yk$*6(&0`AtPy&B5buuhcoK}_ zZ`WF@_L`MJt&Y_5&6N8PFpuP&WqS$J{3vWNg>S6=JB`~&7^TfVh>XWP`D4|MyPq*n zo8|F>0B@bGhJANF02Z5aaH6f)n8E#nIKdV34?53;$R(mBQhY9xnSE%1GQFA~-)Z_1 z4^QW4ulz#1aK6`#L!8!q8kx2AHL_jPXI+0^YHRl%yqrB{w1clD_O}OfCHW?(;PO@K2;S{;^(|X3D86Sfm}+!xihP>5lPa0zg$+RasH_ zhN8+1E9GmN%F3E5YVyjeOy^8h>D~W9xEJW*>lOLG6R`WjOH6`ol$9OU!Zlnh2ovb# z8{jF1jSTV>^9{nf0{{_4OWR!R!8Wq8gQi2n`g98bizKI#J14&+zab9D!Y_u1zt-)+ tBH3UiHuQC}zh}4y)WbFuulJ9E65z)rUhKAxS~hb8Kp$y>AnCX~`Y(6_1egE- literal 0 HcmV?d00001 diff --git a/static/img/banner.jpg b/static/img/banner.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9d8219317f7d277e710625657738fe77591a999c GIT binary patch literal 140262 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 literal 0 HcmV?d00001 diff --git a/static/img/cube.svg b/static/img/cube.svg new file mode 100644 index 000000000..34a20b7ba --- /dev/null +++ b/static/img/cube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/ecosystem.svg b/static/img/ecosystem.svg new file mode 100644 index 000000000..b80bb6687 --- /dev/null +++ b/static/img/ecosystem.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/favicon-16x16.png b/static/img/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..5f15c3b0af35e87882b492291e93fced03e0842f GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6TA;iMKFLQm;8U_YN4o?@y5RLPt7xwEl7m6JF z=pQX~NVa4DN~1)h4hfIT2NQ}pU0PaN3YhgAl3u)E<9Q)HvE#0a&OaUBsjUZ9RQK3B zU)7#u_xPvX^EuDw^gKIt>-t5R?^>LFLHk>`C>j?9y_>u8X0SkH?t`*yITlmXja}Ir zC(UE?yZK>V((NUj)po4mY?Epi&$H2PkejGbVKPm^jMX*si>089wLs3*#Rm=aj{Fi8 zbrG8~p?R8pd#U!RZk@_WP98klXBhu)*1mMC@UwYJsDR8Xrp<97y(+@@_PqM^H1OI2 z&2Fo=JMzAKw-((UBKG@(qDJ(^uy);|vZt=ow$7X;ddIRnzMtcG)8Z#9|4+TxRr)lo zE&sb=&^0O7siMGOQY~?fC`m~yNwrEYN(E93Mg~R(x&{`yh87_PCRPRpR)(h921Y;z z>#9ZZC>nC}Q!>*kacd~~F7+6wA-pOiq9iD>T%n*SKP@vSRiUJ^AXOo=pd^`rp<>SC zPdprjVHz5z{7;|pd>X{Stjw*K%q^@e>^)h8Sy;iP!Q^lXv-0K;h0`~#oH%mkh|Cf8 f(+wUAy!04ei3^r|ax$F?w1UCY)z4*}Q$iB}TN~l# literal 0 HcmV?d00001 diff --git a/static/img/favicon-32x32.png b/static/img/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..9433c807fd08ae205cc8ec2c19345c0e6d57e482 GIT binary patch literal 942 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKptm- zM`SSr1Gg{;GcwGYBLNg-FY)wsWq-mU#KOQYbA8eppe8#{7sn8f<8!B+_YMgZIc`5S zs#n)Z#PB$e*0D9Ac`h%OntG3J`DCdzibxGCDl@Hi9qnThJBJ!dtT z@pwDe=XtKjPQExSe)xk#bB*zaqYhdN9WJd-|5iKEd)0mY9)n}m3tDa8 zEc0_0eerzb-hYO53LL3&7hJb~yFOvzn%D7s(y?=%YdulxJvM#IyI29WjIHVt0iki5 zb~43_<^2?So?D^oA97))Kuy={tR;)raI0l3Zc#WR5q{+IUI%l|dx{+Lnfz)VkCZqp zuVvj&jIH(DA+eaF>2>ZwFWH#o%j{0;KP}wh#m(UQtCD3$O;FML?e7^6aP`J7ym{cS z+Cj0PRjtdfF!jB2C2ciYS(bAo4o zm@p$(_}s5+SKHKQxCs0!;98ygq?P}C_?MeLVYQOWI|ZaKRm|kc-coP+TQczZ@4SD< z{uo)weDAEB#W(LGo1&li?kS)2oKxOjwSD+!vW9ei{LTl~;T-eQFZ}W@J~=Vz>i!Q) zPnusi&a3wGjLqjWMh8v%s$NHDy06I&c2%~1v1IaFla^4n7pr#^{?Gk>Wky`F0vF%f zJFXS3O1?`y25Jbe3W+EQN-S3>D9TUE%t=)! zsVqoU$Sf#HW?-n8^Y{}FM`4(T#wq{PXFQ(m_pwD+_y17GV}vaA`0(oWiWU tIYi;~jVmXPoH-(Mg#C1b#{w@shF9W(C7+y3rvj~D@O1TaS?83{1OSCRd>Q}% literal 0 HcmV?d00001 diff --git a/static/img/favicon-dark.svg b/static/img/favicon-dark.svg new file mode 100644 index 000000000..a4f0fac95 --- /dev/null +++ b/static/img/favicon-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/favicon.svg b/static/img/favicon.svg new file mode 100644 index 000000000..dbefbad9f --- /dev/null +++ b/static/img/favicon.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + diff --git a/static/img/group.svg b/static/img/group.svg new file mode 100644 index 000000000..df77603d9 --- /dev/null +++ b/static/img/group.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/ico-chevron.svg b/static/img/ico-chevron.svg new file mode 100644 index 000000000..3f8e8fac1 --- /dev/null +++ b/static/img/ico-chevron.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/ico-github.svg b/static/img/ico-github.svg new file mode 100644 index 000000000..a74bee5ae --- /dev/null +++ b/static/img/ico-github.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/innovation.svg b/static/img/innovation.svg new file mode 100644 index 000000000..788a21cec --- /dev/null +++ b/static/img/innovation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/investigation.svg b/static/img/investigation.svg new file mode 100644 index 000000000..2f8568acb --- /dev/null +++ b/static/img/investigation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/link.svg b/static/img/link.svg new file mode 100644 index 000000000..c5bb2d64d --- /dev/null +++ b/static/img/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/logo-bw.svg b/static/img/logo-bw.svg new file mode 100644 index 000000000..f2575260a --- /dev/null +++ b/static/img/logo-bw.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/logo-sdk.svg b/static/img/logo-sdk.svg new file mode 100644 index 000000000..444eff2ab --- /dev/null +++ b/static/img/logo-sdk.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/logo.svg b/static/img/logo.svg new file mode 100644 index 000000000..95ca6d30d --- /dev/null +++ b/static/img/logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/img/node.svg b/static/img/node.svg new file mode 100644 index 000000000..5c55577d2 --- /dev/null +++ b/static/img/node.svg @@ -0,0 +1,2 @@ + + diff --git a/static/img/public-service.svg b/static/img/public-service.svg new file mode 100644 index 000000000..092cf03e1 --- /dev/null +++ b/static/img/public-service.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/setting.svg b/static/img/setting.svg new file mode 100644 index 000000000..d4ba412de --- /dev/null +++ b/static/img/setting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/uml/puml/begin_redelegation_sequence.puml b/static/uml/puml/begin_redelegation_sequence.puml new file mode 100644 index 000000000..315f063f4 --- /dev/null +++ b/static/uml/puml/begin_redelegation_sequence.puml @@ -0,0 +1,50 @@ +@startuml +'https://plantuml.com/sequence-diagram + +title: Redelegation + +msgServer -> keeper : BeginRedelegation(delAddr, valSrcAddr, valDstAddr, sharesAmount) +participant "keeper (staking)" as keeper +keeper -> keeper : get number of sharew +note left: If the delegator has more shares than the total shares in the validator\n(due to rounding errors), then just withdraw the max number of shares. +keeper -> keeper : check the redelegation uses correct denom + +alt valSrcAddr == valDstAddr + keeper --> msgServer : error +end +alt transitive redelegation + keeper --> msgServer : error +end +alt already has max redelegations + keeper --> msgServer : error + note left : this is the number of redelegations for a specific (del, valSrc, valDst) triple\ndefault : 7 +end + + +keeper -> keeper : Unbond(del, valSrc) returns returnAmount +... +note left : See unbonding diagram + +alt returnAmount is zero +keeper -> msgServer : error +end + +keeper -> keeper : Delegate(del, returnAmount, status := valSrc.status, valDst, subtractAccount := false) +note left : See delegation diagram +... + +alt validator is unbonded + keeper -> msgServer : current time +end + +alt unbonding not complete, or just started + database store + keeper -> store : create redelegation object + keeper -> store : insert redelegation in queue, to be processed at the appropriate time +end + +msgServer <-- keeper : completion time of the redelegation +msgServer -> msgServer : emit event: delegator, valSrc, valSrc,\nsharesAmount, completionTime + +@enduml + diff --git a/static/uml/puml/delegation_sequence.puml b/static/uml/puml/delegation_sequence.puml new file mode 100644 index 000000000..ad0286476 --- /dev/null +++ b/static/uml/puml/delegation_sequence.puml @@ -0,0 +1,93 @@ +@startuml +'https://plantuml.com/sequence-diagram + +title: Delegating (currently undelegated funds delegator) + +participant "msgServer (staking)" +participant "keeper (staking)" as keeper +participant validator +participant keeper.bankKeeper +participant vestingAccount +participant ctx.EventManager + +database store + +"msgServer (staking)" -> keeper : Delegate(Context, DelegatorAddress, Amount, Validator, tokenSrc := Unbonded) + +alt exchange rate is invalid (tokens in validator is 0) + keeper --> "msgServer (staking)" : error +end + +alt perform a new delegation + keeper -> keeper : delegation := create delegation object + keeper -> keeper : BeforeDelegationCreated hook + note left: Calls IncrementValidatorPeriod (Used to calculate distribution) in keeper/validator.go +else delegation exists, more tokens being added + keeper -> keeper : BeforeDelegationModified hook + note left: withdraw current delegation rewards (and increment period) +end + +alt delegating from an account (subtractTokens == true) + keeper -> keeper.bankKeeper : DelegateCoinsFromAccountToModule + group DelegateCoinsFromAccountToModule function + keeper.bankKeeper -> keeper.bankKeeper : DelegateCoinsFromAccountToModule + keeper.bankKeeper -> keeper.bankKeeper : DelegateCoins + group DelegateCoins function + keeper.bankKeeper --> keeper.bankKeeper : Check the delegator has enough balances of all tokens delegated + keeper.bankKeeper --> keeper.bankKeeper : Track delegation (register that it exists to keep track of it) + alt validator is currently bonded + keeper.bankKeeper --> store : Transfer tokens from delegator to BondedTokensPool. + else validator is currently unbonded or unbonding + keeper.bankKeeper --> store : Transfer tokens from delegator to NotBondedTokensPool. + end + group trackDelegation function + keeper.bankKeeper -> keeper.bankKeeper : trackDelegation + alt delegator is a vesting account + keeper.bankKeeper -> vestingAccount : keep track of this delegation + end + end + end + end + keeper <-- keeper.bankKeeper : nil (success) +else moving tokens between pools (subtractTokens == false) + alt delegator tokens are not bonded but validator is bonded + keeper -> keeper.bankKeeper : SendCoinsFromModuleToModule(notBondedPool, bondedPool, coins) + else delegator tokens are bonded but validator is not bonded + keeper -> keeper.bankKeeper : SendCoinsFromModuleToModule(bondedPool, notBondedPool, coins) + end + group SendCoins function + keeper.bankKeeper -> keeper.bankKeeper : SendCoins + keeper.bankKeeper -> ctx.EventManager : Emit TransferEvent(to, from, amount) + alt amount of spendable (balance - locked) coins too low + keeper <-- keeper.bankKeeper : error + end + keeper.bankKeeper -> store : subtract balance from sender + keeper.bankKeeper -> store : add balance to recipient + end +end + +keeper -> validator : AddTokensFromDel +validator -> validator : calculate number of shares to issue +note left: If there are no shares (validator being created) then 1 token = 1 share.\nIf there are already shares, then\nadded shares = (added tokens amount) * (current validator shares) / (current validator tokens) + +validator -> validator : add delegated tokens to validator +keeper <-- validator : validator, addedShares +keeper -> store : update validator state +keeper -> keeper: calculate new validator's power +note left : Number of tokens divided by PowerReduction (default: 1,000,000,000,000,000,000 = 10^18) +alt validator is not jailed + keeper -> store : update validator's power in power index + note left : the power index has entries shaped as 35 || power || address.\nThis makes the validators sorted by power, high to low. +end + +keeper -> keeper : AfterDelegationModified hook +note left: Calls initializeDelegation\nStore the previous period\nCalculate the number of tokens from shares\n(shares the delegator has) * (tokens in delegation object)/(total tokens delegated to the validator)\nStore delegation starting info. +"msgServer (staking)" <-- keeper : newShares (ignored by Delegate function) + + +"msgServer (staking)" -> "msgServer (staking)" : Emit event: Delegation(ValidatorAddress) +"msgServer (staking)" -> "msgServer (staking)" : Emit event: Message(DelegatorAddress) +"msgServer (staking)" -> "msgServer (staking)" : telemetry(Amount, Denom) + +@enduml + diff --git a/static/uml/puml/keeper_dependencies.puml b/static/uml/puml/keeper_dependencies.puml new file mode 100644 index 000000000..5a80ad9f3 --- /dev/null +++ b/static/uml/puml/keeper_dependencies.puml @@ -0,0 +1,36 @@ +@startuml +'https://plantuml.com/class-diagram + +title: The dependencies between Keepers (Feb 2021) + +abstract class Staking +abstract class Distribution +abstract class Slashing +abstract class Evidence +abstract class Bank +abstract class "Auth/Account" as Auth +abstract class Gov +abstract class Mint + +Staking <|-- Mint +Bank <|-- Mint + +Staking <|-- Gov +Bank <|-- Gov +Auth <|-- Gov + +Auth <|-- Bank + +Bank <|-- Distribution +Auth <|-- Distribution +Staking <|-- Distribution + +Staking <|-- Evidence +Slashing <|-- Evidence + +Staking <|-- Slashing + +Auth <|-- Staking +Bank <|-- Staking + +@enduml diff --git a/static/uml/puml/transaction_flow.puml b/static/uml/puml/transaction_flow.puml new file mode 100644 index 000000000..d9b6cbcf6 --- /dev/null +++ b/static/uml/puml/transaction_flow.puml @@ -0,0 +1,20 @@ +@startuml +'https://plantuml.com/sequence-diagram + +actor User +User -> baseApp : Transaction Type +baseApp -> router : Route(ctx, msgRoute) +router --> baseApp : handler +baseApp -> handler: Msg(Context, Msg(...)) +handler -> msgServer : (Context, Msg) +alt addresses invalid, denominations wrong, etc. +msgServer --> handler : error +end +msgServer -> keeper : perform action, update context +keeper --> msgServer : results, error code +msgServer -> Context.EventManager : Emit relevant events +msgServer -> msgServer : maybe wrap results in more structure +msgServer --> handler : result, error code +baseApp <-- handler : results, error code + +@enduml diff --git a/static/uml/puml/unbond_sequence.puml b/static/uml/puml/unbond_sequence.puml new file mode 100644 index 000000000..bfe385b42 --- /dev/null +++ b/static/uml/puml/unbond_sequence.puml @@ -0,0 +1,51 @@ +@startuml +'https://plantuml.com/sequence-diagram + +title: Undelegate + +msgServer -> keeper : Undelegate(delAddr, valAddr, tokenAmount) + +keeper -> keeper : calculate number of shares the tokenAmount represents + +alt wrong denom + msgServer <-- keeper : error +end + +group Unbond(delAddr, valAddr, shares) + keeper -> keeper: BeforeDelegationSharesModified hook + alt no such delegation + keeper --> msgServer : error + end + alt not enough shares + keeper --> msgServer : error + end + alt delegator is the operator of the validator\nand validator is not already jailed\nand unbonding would put self-delegation under min threshold + keeper -> keeper : jail the validator, but proceed with unbonding + note left : Default min delegation threshold : 1 share + end + + database store + + alt complete unbonding, all shares removed + keeper -> store : remove delegation object + else there are still shares delegated (not a complete undbonding) + keeper -> store : update delegation object + keeper -> keeper : AfterDelegationModified hook + end + + keeper -> store : update validator power index + keeper -> store : update validator information (including token amount) + + alt validator status is "unbonded" and it has no more tokens + keeper -> store : delete the validator + note right : otherwise, do this in EndBlock once validator is unbonded + end +end + +alt validator is bonded + keeper -> bankKeeper : send tokens from bonded pool to not bonded pool +end + +msgServer -> msgServer : emit event : EventTypeUnbond(delAddr, valAddr, tokenAmount, completion time) + +@enduml diff --git a/static/uml/svg/begin_redelegation_sequence.svg b/static/uml/svg/begin_redelegation_sequence.svg new file mode 100644 index 000000000..5d17f311b --- /dev/null +++ b/static/uml/svg/begin_redelegation_sequence.svg @@ -0,0 +1,106 @@ +RedelegationmsgServermsgServerkeeperkeeperstorestoreBeginRedelegation(delAddr, valSrcAddr, valDstAddr, sharesAmount)get number of sharewIf the delegator has more shares than the total shares in the validator(due to rounding errors), then just withdraw the max number of shares.check the redelegation uses correct denomalt[valSrcAddr == valDstAddr]erroralt[transitive redelegation]erroralt[already has max redelegations]errorthis is the number of redelegations for a specific (del, valSrc, valDst) tripledefault : 7Unbond(del, valSrc) returns returnAmountSee unbonding diagramalt[returnAmount is zero]errorDelegate(del, returnAmount, status := valSrc.status, valDst, subtractAccount := false)See delegation diagramalt[validator is unbonded]current timealt[unbonding not complete, or just started]create redelegation objectinsert redelegation in queue, to be processed at the appropriate timecompletion time of the redelegationemit event: delegator, valSrc, valSrc,sharesAmount, completionTime \ No newline at end of file diff --git a/static/uml/svg/delegation_sequence.svg b/static/uml/svg/delegation_sequence.svg new file mode 100644 index 000000000..47ad53789 --- /dev/null +++ b/static/uml/svg/delegation_sequence.svg @@ -0,0 +1,192 @@ +Delegating (currently undelegated funds delegator)msgServer (staking)msgServer (staking)keeper (staking)keeper (staking)validatorvalidatorkeeper.bankKeeperkeeper.bankKeepervestingAccountvestingAccountctx.EventManagerctx.EventManagerstorestoreDelegate(Context, DelegatorAddress, Amount, Validator, tokenSrc := Unbonded)alt[exchange rate is invalid (tokens in validator is 0)]erroralt[perform a new delegation]delegation := create delegation objectBeforeDelegationCreated hookCalls IncrementValidatorPeriod (Used to calculate distribution) in keeper/validator.go[delegation exists, more tokens being added]BeforeDelegationModified hookwithdraw current delegation rewards (and increment period)alt[delegating from an account (subtractTokens == true)]DelegateCoinsFromAccountToModuleDelegateCoinsFromAccountToModule functionDelegateCoinsFromAccountToModuleDelegateCoinsDelegateCoins functionCheck the delegator has enough balances of all tokens delegatedTrack delegation (register that it exists to keep track of it)alt[validator is currently bonded]Transfer tokens from delegator to BondedTokensPool.[validator is currently unbonded or unbonding]Transfer tokens from delegator to NotBondedTokensPool.trackDelegation functiontrackDelegationalt[delegator is a vesting account]keep track of this delegationnil (success)[moving tokens between pools (subtractTokens == false)]alt[delegator tokens are not bonded but validator is bonded]SendCoinsFromModuleToModule(notBondedPool, bondedPool, coins)[delegator tokens are bonded but validator is not bonded]SendCoinsFromModuleToModule(bondedPool, notBondedPool, coins)SendCoins functionSendCoinsEmit TransferEvent(to, from, amount)alt[amount of spendable (balance - locked) coins too low]errorsubtract balance from senderadd balance to recipientAddTokensFromDelcalculate number of shares to issueIf there are no shares (validator being created) then 1 token = 1 share.If there are already shares, thenadded shares = (added tokens amount) * (current validator shares) / (current validator tokens)add delegated tokens to validatorvalidator, addedSharesupdate validator statecalculate new validator's powerNumber of tokens divided by PowerReduction (default: 1,000,000,000,000,000,000 = 10^18)alt[validator is not jailed]update validator's power in power indexthe power index has entries shaped as 35 || power || address.This makes the validators sorted by power, high to low.AfterDelegationModified hookCalls initializeDelegationStore the previous periodCalculate the number of tokens from shares(shares the delegator has) * (tokens in delegation object)/(total tokens delegated to the validator)Store delegation starting info.newShares (ignored by Delegate function)Emit event: Delegation(ValidatorAddress)Emit event: Message(DelegatorAddress)telemetry(Amount, Denom) \ No newline at end of file diff --git a/static/uml/svg/keeper_dependencies.svg b/static/uml/svg/keeper_dependencies.svg new file mode 100644 index 000000000..bac9328e3 --- /dev/null +++ b/static/uml/svg/keeper_dependencies.svg @@ -0,0 +1,102 @@ +The dependencies between Keepers (Feb 2021)StakingDistributionSlashingEvidenceBankAuth/AccountGovMint \ No newline at end of file diff --git a/static/uml/svg/transaction_flow.svg b/static/uml/svg/transaction_flow.svg new file mode 100644 index 000000000..1ae962de3 --- /dev/null +++ b/static/uml/svg/transaction_flow.svg @@ -0,0 +1,48 @@ +UserUserbaseAppbaseApprouterrouterhandlerhandlermsgServermsgServerkeeperkeeperContext.EventManagerContext.EventManagerTransaction Type<Tx>Route(ctx, msgRoute)handlerMsg<Tx>(Context, Msg(...))<Tx>(Context, Msg)alt[addresses invalid, denominations wrong, etc.]errorperform action, update contextresults, error codeEmit relevant eventsmaybe wrap results in more structureresult, error coderesults, error code \ No newline at end of file diff --git a/static/uml/svg/unbond_sequence.svg b/static/uml/svg/unbond_sequence.svg new file mode 100644 index 000000000..7219f200a --- /dev/null +++ b/static/uml/svg/unbond_sequence.svg @@ -0,0 +1,110 @@ +UndelegatemsgServermsgServerkeeperkeeperstorestorebankKeeperbankKeeperUndelegate(delAddr, valAddr, tokenAmount)calculate number of shares the tokenAmount representsalt[wrong denom]errorUnbond(delAddr, valAddr, shares)BeforeDelegationSharesModified hookalt[no such delegation]erroralt[not enough shares]erroralt[delegator is the operator of the validatorand validator is not already jailedand unbonding would put self-delegation under min threshold]jail the validator, but proceed with unbondingDefault min delegation threshold : 1 sharealt[complete unbonding, all shares removed]remove delegation object[there are still shares delegated (not a complete undbonding)]update delegation objectAfterDelegationModified hookupdate validator power indexupdate validator information (including token amount)alt[validator status is "unbonded" and it has no more tokens]delete the validatorotherwise, do this in EndBlock once validator is unbondedalt[validator is bonded]send tokens from bonded pool to not bonded poolemit event : EventTypeUnbond(delAddr, valAddr, tokenAmount, completion time) \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 000000000..d48e14f85 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,104 @@ +const defaultTheme = require("tailwindcss/defaultTheme"); + +// Px to REM function (static base of 16) +const pxToRem = (dest) => 1 / (16 / dest); + +// Config +module.exports = { + content: ["./src/**/*.{js,jsx,ts,tsx}"], + corePlugins: { + // preflight: false, // avoid reset all docusaurus css + }, + theme: { + borderRadius: { + none: "0", + xs: `${pxToRem(4)}rem`, + s: `${pxToRem(8)}rem`, + sm: `${pxToRem(10)}rem`, + DEFAULT: `${pxToRem(16)}rem`, + md: `${pxToRem(20)}rem`, + lg: `${pxToRem(100)}rem`, + circle: "100%", + }, + fontFamily: { + intervar: ['"Inter var"', defaultTheme.fontFamily.sans], + inter: ["Inter", defaultTheme.fontFamily.sans], + jetbrain: ["JetBrains Mono", defaultTheme.fontFamily.mono], + }, + fontSize: { + 0: "0", + 1: [`${pxToRem(10)}rem`], + 2: [`${pxToRem(13)}rem`], + 3: [`${pxToRem(16)}rem`], + 4: [`${pxToRem(21)}rem`], + 5: [`${pxToRem(28)}rem`], + 6: [`${pxToRem(32)}rem`], + 7: [`${pxToRem(38)}rem`], + 8: [`${pxToRem(51)}rem`], + 9: [`${pxToRem(56)}rem`], + 10: [`${pxToRem(76)}rem`], + }, + spacing: { + inherit: "inherit", + auto: "auto", + full: "100%", + px: "1px", + "1/2": "50%", + "1/3": "33.333%", + "2/3": "66.666%", + "1/4": "25%", + "3/4": "75%", + "1/5": "20%", + "2/5": "40%", + "3/5": "60%", + "4/5": "80%", + 0: "0", + 1: ".25rem", + 2: `${pxToRem(6)}rem`, + 3: `${pxToRem(8)}rem`, + 3.5: `${pxToRem(10)}rem`, + 4: `${pxToRem(12)}rem`, + 5: `${pxToRem(16)}rem`, + 5.5: `${pxToRem(20)}rem`, + 6: `${pxToRem(24)}rem`, + 7: `${pxToRem(32)}rem`, + 7.5: `${pxToRem(40)}rem`, + 8: `${pxToRem(48)}rem`, + 8.5: `${pxToRem(52)}rem`, + 9: `${pxToRem(64)}rem`, + 9.5: "5rem", + 9.75: `${pxToRem(84)}rem`, + 10: `${pxToRem(96)}rem`, + 11: `${pxToRem(128)}rem`, + 12: `${pxToRem(144)}rem`, + 13: `${pxToRem(160)}rem`, + 14: `${pxToRem(192)}rem`, + 15: `${pxToRem(208)}rem`, + }, + colors: { + transparent: "transparent", + current: "currentColor", + inherit: "inherit", + gray: { + 0: "#FFFFFF", + 30: "rgba(0, 0, 0, 0.03)", + 1000: "#000000", + }, + card: "#F7F7F7", + border: "rgba(0, 0, 0, 0.07)", + inactive: "rgba(0, 0, 0, 0.33)", + inactiveLight: "rgba(255, 255, 255, 0.44)", + muted: "#555555", + mutedLight: "rgba(255, 255, 255, 0.67)", + fg: "rgba(24, 24, 24, 0.67)", + lightfg: "rgba(24, 24, 24, 0.67)", + link: "#000000", + linkHover: "#555555", + docusaurusColorBase: "var(--ifm-font-color-base)", + docusaurusBgColor: "var(--ifm-background-color)", + docusaurusColorBorder: "var(--ifm-color-emphasis-200)", + }, + extend: {}, + }, + plugins: [], +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..6f4756980 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + // This file is not used in compilation. It is here just for a nice editor experience. + "extends": "@tsconfig/docusaurus/tsconfig.json", + "compilerOptions": { + "baseUrl": "." + } +} From 06cd27c04052ba8372cb26c76ef28294bb4c47cb Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 9 May 2023 17:11:26 +0200 Subject: [PATCH 02/23] Update glossary --- .github/workflows/md-link-checker.yml | 12 - docs/develop/glossary.md | 52 + package-lock.json | 13268 ------------------------ yarn.lock | 7984 ++++++++++++++ 4 files changed, 8036 insertions(+), 13280 deletions(-) delete mode 100644 .github/workflows/md-link-checker.yml delete mode 100644 package-lock.json create mode 100644 yarn.lock diff --git a/.github/workflows/md-link-checker.yml b/.github/workflows/md-link-checker.yml deleted file mode 100644 index 23749b51c..000000000 --- a/.github/workflows/md-link-checker.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Check Markdown links -on: - schedule: - - cron: '* */24 * * *' -jobs: - markdown-link-check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: gaurav-nelson/github-action-markdown-link-check@1.0.15 - with: - folder-path: "docs" diff --git a/docs/develop/glossary.md b/docs/develop/glossary.md index 5af032384..c5dbfcdf2 100644 --- a/docs/develop/glossary.md +++ b/docs/develop/glossary.md @@ -1,5 +1,57 @@ --- +sidebar_position: 3 dislayed_sidebar: developSidebar --- # Glossary + +## ABCI (Application Blockchain Interface) +The interface between the Tendermint consensus engine and the application state machine, allowing them to communicate and perform state transitions. ABCI is a critical component of the Cosmos SDK, enabling developers to build applications using any programming language that can communicate via ABCI. + +## ATOM +The native staking token of the Cosmos Hub, used for securing the network, participating in governance, and paying fees for transactions. + +## CometBFT +A Byzantine Fault Tolerant (BFT) consensus engine that powers the Cosmos SDK. CometBFT is responsible for handling the consensus and networking layers of a blockchain. + +## Cosmos Hub +The first blockchain built with the Cosmos SDK, functioning as a hub for connecting other blockchains in the Cosmos ecosystem through IBC. + +## Cosmos SDK +A framework for building blockchain applications, focusing on modularity, scalability, and interoperability. + +## CosmWasm +A smart contract engine for the Cosmos SDK that enables developers to write and deploy smart contracts in WebAssembly (Wasm). CosmWasm is designed to be secure, efficient, and easy to use, allowing developers to build complex applications on top of the Cosmos SDK. + +## Delegator +A participant in a Proof of Stake network who delegates their tokens to a validator. Delegators share in the rewards and risks associated with the validator's performance in the consensus process. + +## Gas +A measure of computational effort required to execute a transaction or smart contract on a blockchain. In the Cosmos ecosystem, gas is used to meter transactions and allocate resources fairly among users. Users must pay a gas fee, usually in the native token, to have their transactions processed by the network. + +## Governance +The decision-making process in the Cosmos ecosystem, which allows token holders to propose and vote on network upgrades, parameter changes, and other critical decisions. + +## IBC (Inter-Blockchain Communication) +A protocol for secure and reliable communication between heterogeneous blockchains built on the Cosmos SDK. IBC enables the transfer of tokens and data across multiple blockchains. + +## Interoperability +The ability of different blockchains and distributed systems to communicate and interact with each other, enabling the seamless transfer of information, tokens, and other digital assets. In the context of Cosmos, the Inter-Blockchain Communication (IBC) protocol is a core technology that enables interoperability between blockchains built with the Cosmos SDK and other compatible blockchains. Interoperability allows for increased collaboration, innovation, and value creation across different blockchain ecosystems. + +## Light Clients +Lightweight blockchain clients that verify and process only a small subset of the blockchain data, allowing users to interact with the network without downloading the entire blockchain. ABCI++ aims to enhance the security and performance of light clients by enabling them to efficiently verify state transitions and proofs. + +## Module +A self-contained, reusable piece of code that can be used to build blockchain functionality within a Cosmos SDK application. Modules can be developed by the community and shared for others to use. + +## Slashing +The process of penalizing validators or delegators by reducing their staked tokens if they behave maliciously or fail to meet the network's performance requirements. + +## Staking +The process of locking up tokens as collateral to secure the network, participate in consensus, and earn rewards in a Proof of Stake (PoS) blockchain like Cosmos. + +## State Sync +A feature that allows new nodes to quickly synchronize with the current state of the blockchain without downloading and processing all previous blocks. State Sync is particularly useful for nodes that have been offline for an extended period or are joining the network for the first time. ABCI++ aims to improve the efficiency and security of State Sync. + +## Validator +A network participant responsible for proposing new blocks, validating transactions, and securing the Cosmos SDK-based blockchain through staking tokens. Validators play a crucial role in maintaining the security and integrity of the network. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 4b4c1b8d1..000000000 --- a/package-lock.json +++ /dev/null @@ -1,13268 +0,0 @@ -{ - "name": "cosmos-sdk-docs", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "cosmos-sdk-docs", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/plugin-client-redirects": "^2.4.0", - "@docusaurus/plugin-content-docs": "^2.4.0", - "@docusaurus/preset-classic": "2.4.0", - "@mdx-js/react": "^1.6.22", - "@you54f/theme-github-codeblock": "^0.1.1", - "clsx": "^1.2.1", - "prism-react-renderer": "^1.3.5", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "2.4.0", - "@tsconfig/docusaurus": "^1.0.5", - "markdownlint-cli": "^0.34.0", - "tailwindcss": "^3.3.2", - "typescript": "^4.7.4" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", - "integrity": "sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==", - "dependencies": { - "@algolia/autocomplete-shared": "1.8.2" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", - "integrity": "sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==", - "dependencies": { - "@algolia/autocomplete-shared": "1.8.2" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", - "integrity": "sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==" - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", - "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", - "dependencies": { - "@algolia/cache-common": "4.17.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", - "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", - "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", - "dependencies": { - "@algolia/cache-common": "4.17.0" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", - "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", - "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", - "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", - "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", - "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", - "dependencies": { - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", - "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", - "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", - "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", - "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/logger-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", - "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" - }, - "node_modules/@algolia/logger-console": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", - "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", - "dependencies": { - "@algolia/logger-common": "4.17.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", - "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", - "dependencies": { - "@algolia/requester-common": "4.17.0" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", - "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", - "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", - "dependencies": { - "@algolia/requester-common": "4.17.0" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", - "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", - "dependencies": { - "@algolia/cache-common": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/requester-common": "4.17.0" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", - "dependencies": { - "@babel/types": "^7.21.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz", - "integrity": "sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==", - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", - "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", - "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz", - "integrity": "sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.21.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz", - "integrity": "sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz", - "integrity": "sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==", - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dependencies": { - "@babel/types": "^7.21.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz", - "integrity": "sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-member-expression-to-functions": "^7.21.5", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", - "dependencies": { - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", - "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", - "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", - "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz", - "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-simple-access": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz", - "integrity": "sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz", - "integrity": "sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/types": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", - "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz", - "integrity": "sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==", - "dependencies": { - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", - "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", - "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", - "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", - "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.21.5", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.21.5", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.5", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.21.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.21.5", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.5", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz", - "integrity": "sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-typescript": "^7.21.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.5.tgz", - "integrity": "sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w==", - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", - "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.4.tgz", - "integrity": "sha512-vDwCDoVXDgopw/hvr0zEADew2wWaGP8Qq0Bxhgii1Ewz2t4fQeyJwIRN/mWADeLFYPVkpz8TpEbxya/i6Tm0WA==" - }, - "node_modules/@docsearch/react": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.4.tgz", - "integrity": "sha512-aeOf1WC5zMzBEi2SI6WWznOmIo9rnpN4p7a3zHXxowVciqlI4HsZGtOR9nFOufLeolv7HibwLlaM0oyUqJxasw==", - "dependencies": { - "@algolia/autocomplete-core": "1.8.2", - "@algolia/autocomplete-preset-algolia": "1.8.2", - "@docsearch/css": "3.3.4", - "algoliasearch": "^4.0.0" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.0.tgz", - "integrity": "sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==", - "dependencies": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^2.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz", - "integrity": "sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==", - "dependencies": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/logger": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.0.tgz", - "integrity": "sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz", - "integrity": "sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==", - "dependencies": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz", - "integrity": "sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg==", - "dependencies": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.4.0.tgz", - "integrity": "sha512-HsS+Dc2ZLWhfpjYJ5LIrOB/XfXZcElcC7o1iA4yIVtiFz+LHhwP863fhqbwSJ1c6tNDOYBH3HwbskHrc/PIn7Q==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz", - "integrity": "sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz", - "integrity": "sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz", - "integrity": "sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz", - "integrity": "sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz", - "integrity": "sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz", - "integrity": "sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz", - "integrity": "sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz", - "integrity": "sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz", - "integrity": "sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/plugin-debug": "2.4.0", - "@docusaurus/plugin-google-analytics": "2.4.0", - "@docusaurus/plugin-google-gtag": "2.4.0", - "@docusaurus/plugin-google-tag-manager": "2.4.0", - "@docusaurus/plugin-sitemap": "2.4.0", - "@docusaurus/theme-classic": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-search-algolia": "2.4.0", - "@docusaurus/types": "2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz", - "integrity": "sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w==", - "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-translations": "2.4.0", - "@docusaurus/types": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.43", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.0.tgz", - "integrity": "sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg==", - "dependencies": { - "@docusaurus/mdx-loader": "2.4.0", - "@docusaurus/module-type-aliases": "2.4.0", - "@docusaurus/plugin-content-blog": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/plugin-content-pages": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-common": "2.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz", - "integrity": "sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA==", - "dependencies": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.4.0", - "@docusaurus/logger": "2.4.0", - "@docusaurus/plugin-content-docs": "2.4.0", - "@docusaurus/theme-common": "2.4.0", - "@docusaurus/theme-translations": "2.4.0", - "@docusaurus/utils": "2.4.0", - "@docusaurus/utils-validation": "2.4.0", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz", - "integrity": "sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q==", - "dependencies": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.0.tgz", - "integrity": "sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.0.tgz", - "integrity": "sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==", - "dependencies": { - "@docusaurus/logger": "2.4.0", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.0.tgz", - "integrity": "sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==", - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz", - "integrity": "sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==", - "dependencies": { - "@docusaurus/logger": "2.4.0", - "@docusaurus/utils": "2.4.0", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "dependencies": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz", - "integrity": "sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz", - "integrity": "sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tsconfig/docusaurus": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", - "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", - "dev": true - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.34", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz", - "integrity": "sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/mdast": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", - "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "node_modules/@types/node": { - "version": "18.16.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", - "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/react": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.4.tgz", - "integrity": "sha512-IvAIhJTmKAAJmCIcaa6+5uagjyh+9GvcJ/thPZcw+i+vx+22eHlTy2Q1bJg/prES57jehjebq9DnIhOTtIhmLw==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", - "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", - "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", - "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", - "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", - "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", - "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", - "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", - "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", - "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", - "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", - "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", - "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/helper-wasm-section": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-opt": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5", - "@webassemblyjs/wast-printer": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", - "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", - "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-buffer": "1.11.5", - "@webassemblyjs/wasm-gen": "1.11.5", - "@webassemblyjs/wasm-parser": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", - "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@webassemblyjs/helper-api-error": "1.11.5", - "@webassemblyjs/helper-wasm-bytecode": "1.11.5", - "@webassemblyjs/ieee754": "1.11.5", - "@webassemblyjs/leb128": "1.11.5", - "@webassemblyjs/utf8": "1.11.5" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", - "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/@you54f/theme-github-codeblock": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@you54f/theme-github-codeblock/-/theme-github-codeblock-0.1.1.tgz", - "integrity": "sha512-SFbkHzwfsfShYd9yL818P9P7AlSBQgDC92pyQWZqJV/PMdgfCh5ZsK/pt/1s/jy0wvYi4pFTwOEQ0+vhdy324w==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", - "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.17.0", - "@algolia/cache-common": "4.17.0", - "@algolia/cache-in-memory": "4.17.0", - "@algolia/client-account": "4.17.0", - "@algolia/client-analytics": "4.17.0", - "@algolia/client-common": "4.17.0", - "@algolia/client-personalization": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/logger-console": "4.17.0", - "@algolia/requester-browser-xhr": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/requester-node-http": "4.17.0", - "@algolia/transporter": "4.17.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.13.0.tgz", - "integrity": "sha512-kV3c1jMQCvkARtGsSDvAwuht4PAMSsQILqPiH4WFiARoa3jXJ/r1TQoBWAjWyWF48rsNYCv7kzxgB4LTxrvvuw==", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001482", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz", - "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", - "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", - "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.1.tgz", - "integrity": "sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", - "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz", - "integrity": "sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "dependencies": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", - "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", - "dependencies": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.14", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.382", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.382.tgz", - "integrity": "sha512-czMavlW52VIPgutbVL9JnZIZuFijzsG1ww/1z2Otu1r1q+9Qe2bTsH3My3sZarlvwyqHM6+mnZfEnt2Vr4dsIg==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", - "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.1.tgz", - "integrity": "sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", - "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz", - "integrity": "sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.43", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", - "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jackspeak": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", - "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/markdownlint": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.28.2.tgz", - "integrity": "sha512-yYaQXoKKPV1zgrFsyAuZPEQoe+JrY9GDag9ObKpk09twx4OCU5lut+0/kZPrQ3W7w82SmgKhd7D8m34aG1unVw==", - "dev": true, - "dependencies": { - "markdown-it": "13.0.1", - "markdownlint-micromark": "0.1.2" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/markdownlint-cli": { - "version": "0.34.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.34.0.tgz", - "integrity": "sha512-4G9I++VBTZkaye6Yfc/7dU6HQHcyldZEVB+bYyQJLcpJOHKk/q5ZpGqK80oKMIdlxzsA3aWOJLZ4DkoaoUWXbQ==", - "dev": true, - "dependencies": { - "commander": "~10.0.1", - "get-stdin": "~9.0.0", - "glob": "~10.2.2", - "ignore": "~5.2.4", - "js-yaml": "^4.1.0", - "jsonc-parser": "~3.2.0", - "markdownlint": "~0.28.2", - "minimatch": "~9.0.0", - "run-con": "~1.2.11" - }, - "bin": { - "markdownlint": "markdownlint.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/markdownlint-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/markdownlint-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/markdownlint-cli/node_modules/glob": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz", - "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.0", - "minipass": "^5.0.0", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-cli/node_modules/minimatch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", - "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-micromark": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.2.tgz", - "integrity": "sha512-jRxlQg8KpOfM2IbCL9RXM8ZiYWz2rv6DlZAnGv8ASJQpUh6byTBnEsbuMZ6T2/uIgntyf7SKg/mEaEBo1164fQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.1.tgz", - "integrity": "sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA==", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz", - "integrity": "sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz", - "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==", - "dev": true, - "dependencies": { - "lru-cache": "^9.0.0", - "minipass": "^5.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz", - "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.0.tgz", - "integrity": "sha512-qLAFjvR2BFNz1H930P7mj1iuWJFjGey/nVhimfOAAQ1ZyPpcClAxP8+A55Sl8mBvM+K2a9Pjgdj10KpANWrNfw==", - "dependencies": { - "cosmiconfig": "^8.1.3", - "jiti": "^1.18.2", - "klona": "^2.0.6", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", - "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", - "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", - "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.16" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", - "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", - "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-con": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.11.tgz", - "integrity": "sha512-NEMGsUT+cglWkzEr4IFK21P4Jca45HqiAbIIZIBdX5+UZTB24Mb/21iNGgz9xZa8tL6vbW7CXmq7MFN42+VjNQ==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~3.0.0", - "minimist": "^1.2.6", - "strip-json-comments": "~3.1.1" - }, - "bin": { - "run-con": "cli.js" - } - }, - "node_modules/run-con/node_modules/ini": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", - "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", - "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/sucrase": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/tailwindcss": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", - "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", - "deprecated": "Use String.prototype.trim() instead" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/update-notifier/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.82.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.82.0.tgz", - "integrity": "sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.13.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.13.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz", - "integrity": "sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..032d7bfd6 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7984 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz#8d758c8652742e2761450d2b615a841fca24e10e" + integrity sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ== + dependencies: + "@algolia/autocomplete-shared" "1.8.2" + +"@algolia/autocomplete-preset-algolia@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz#706e87f94c5f198c0e90502b97af09adeeddcc79" + integrity sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA== + dependencies: + "@algolia/autocomplete-shared" "1.8.2" + +"@algolia/autocomplete-shared@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz#e6972df5c6935a241f16e4909aa82902338e029d" + integrity sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g== + +"@algolia/cache-browser-local-storage@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz#4c54a9b1795dcc1cd9f9533144f7df3057984d39" + integrity sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/cache-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.0.tgz#bc3da15548df585b44d76c55e66b0056a2b3f917" + integrity sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ== + +"@algolia/cache-in-memory@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz#eb55a92cb8eb8641903a2b23fd6d05ebdaca2010" + integrity sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/client-account@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.0.tgz#4b13e5a8e50a06be1f3289d9db337096ebc66b73" + integrity sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-analytics@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz#1b36ffbe913b7b4d8900bc15982ca431f47a473c" + integrity sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.0.tgz#67fd898006e3ac359ea3e3ed61abfc26147ffa53" + integrity sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ== + dependencies: + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-personalization@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz#428d9f4762c22856b6062bb54351eb31834db6c1" + integrity sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-search@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.0.tgz#0053c682f5f588e006c20791c27e8bcb0aa5b53c" + integrity sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.0.tgz#0fcea39c9485554edb4cdbfd965c5748b0b837ac" + integrity sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw== + +"@algolia/logger-console@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.0.tgz#8ac56ef4259c4fa3eb9eb6586c7b4b4ed942e8da" + integrity sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg== + dependencies: + "@algolia/logger-common" "4.17.0" + +"@algolia/requester-browser-xhr@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz#f52fdeeac2f3c531f00838920af33a73066a159b" + integrity sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/requester-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.0.tgz#746020d2cbc829213e7cede8eef2182c7a71e32b" + integrity sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg== + +"@algolia/requester-node-http@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz#262276d94c25a4ec2128b1bdfb9471529528d8b9" + integrity sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/transporter@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.0.tgz#6aabdbc20c475d72d83c8e6519f1191f1a51fb37" + integrity sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA== + dependencies: + "@algolia/cache-common" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5": + version "7.21.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" + integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.18.6", "@babel/core@^7.19.6": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4" + integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helpers" "^7.21.5" + "@babel/parser" "^7.21.8" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" + integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== + dependencies: + "@babel/types" "^7.21.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb" + integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" + integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== + dependencies: + "@babel/compat-data" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" + integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.5" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.21.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + semver "^6.3.0" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc" + integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.3.1" + semver "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" + integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0" + integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" + integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== + dependencies: + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== + +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c" + integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== + dependencies: + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-member-expression-to-functions" "^7.21.5" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" + integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" + integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + +"@babel/plugin-proposal-async-generator-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.20.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-arrow-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929" + integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44" + integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc" + integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc" + integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ== + dependencies: + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-simple-access" "^7.21.5" + +"@babel/plugin-transform-modules-systemjs@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-constant-elements@^7.18.12": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" + integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz#bd98f3b429688243e4fa131fe1cbb2ef31ce6f38" + integrity sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/types" "^7.21.5" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e" + integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" + integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== + dependencies: + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2" + integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb" + integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg== + dependencies: + "@babel/compat-data" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.21.5" + "@babel/plugin-transform-async-to-generator" "^7.20.7" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.21.5" + "@babel/plugin-transform-destructuring" "^7.21.3" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.21.5" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.21.3" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.21.5" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.20.7" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.21.5" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.21.5" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.18.6": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz#68292c884b0e26070b4d66b202072d391358395f" + integrity sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-typescript" "^7.21.3" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime-corejs3@^7.18.6": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.5.tgz#a6d4e132ab1cb2fae2354f02284ebb6e07b4f7d8" + integrity sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" + integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.5" + "@babel/types" "^7.21.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.4.4": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" + integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== + dependencies: + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@docsearch/css@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.4.tgz#533719eac0aa3934318074e7e981e633727ad2fd" + integrity sha512-vDwCDoVXDgopw/hvr0zEADew2wWaGP8Qq0Bxhgii1Ewz2t4fQeyJwIRN/mWADeLFYPVkpz8TpEbxya/i6Tm0WA== + +"@docsearch/react@^3.1.1": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.4.tgz#d49cf9e5d939145c9fe688113c5bdf41975d8ae7" + integrity sha512-aeOf1WC5zMzBEi2SI6WWznOmIo9rnpN4p7a3zHXxowVciqlI4HsZGtOR9nFOufLeolv7HibwLlaM0oyUqJxasw== + dependencies: + "@algolia/autocomplete-core" "1.8.2" + "@algolia/autocomplete-preset-algolia" "1.8.2" + "@docsearch/css" "3.3.4" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.0.tgz#a12c175cb2e5a7e4582e65876a50813f6168913d" + integrity sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^2.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz#9213586358e0cce517f614af041eb7d184f8add6" + integrity sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/logger@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.0.tgz#393d91ad9ecdb9a8f80167dd6a34d4b45219b835" + integrity sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz#c6310342904af2f203e7df86a9df623f86840f2d" + integrity sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g== + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/module-type-aliases@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz#6961605d20cd46f86163ed8c2d83d438b02b4028" + integrity sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg== + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-client-redirects@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.4.0.tgz#53117d112ac9cc191deda053af4335e0381b4125" + integrity sha512-HsS+Dc2ZLWhfpjYJ5LIrOB/XfXZcElcC7o1iA4yIVtiFz+LHhwP863fhqbwSJ1c6tNDOYBH3HwbskHrc/PIn7Q== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + eta "^2.0.0" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + +"@docusaurus/plugin-content-blog@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz#50dbfbc7b51f152ae660385fd8b34076713374c3" + integrity sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + cheerio "^1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.4.0", "@docusaurus/plugin-content-docs@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz#36e235adf902325735b873b4f535205884363728" + integrity sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz#6169909a486e1eae0ddffff0b1717ce4332db4d4" + integrity sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz#1ad513fe9bcaf017deccf62df8b8843faeeb7d37" + integrity sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + fs-extra "^10.1.0" + react-json-view "^1.21.3" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz#8062d7a09d366329dfd3ce4e8a619da8624b6cc3" + integrity sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz#a8efda476f971410dfb3aab1cfe1f0f7d269adc5" + integrity sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-tag-manager@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz#9a94324ac496835fc34e233cc60441df4e04dfdd" + integrity sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz#ba0eb43565039fe011bdd874b5c5d7252b19d709" + integrity sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz#92fdcfab35d8d0ffb8c38bcbf439e4e1cb0566a3" + integrity sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/plugin-debug" "2.4.0" + "@docusaurus/plugin-google-analytics" "2.4.0" + "@docusaurus/plugin-google-gtag" "2.4.0" + "@docusaurus/plugin-google-tag-manager" "2.4.0" + "@docusaurus/plugin-sitemap" "2.4.0" + "@docusaurus/theme-classic" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-search-algolia" "2.4.0" + "@docusaurus/types" "2.4.0" + +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + +"@docusaurus/theme-classic@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz#a5404967b00adec3472efca4c3b3f6a5e2021c78" + integrity sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@mdx-js/react" "^1.6.22" + clsx "^1.2.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.43" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.5" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.0.tgz#626096fe9552d240a2115b492c7e12099070cf2d" + integrity sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg== + dependencies: + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.5" + tslib "^2.4.0" + use-sync-external-store "^1.2.0" + utility-types "^3.10.0" + +"@docusaurus/theme-search-algolia@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz#07d297d50c44446d6bc5a37be39afb8f014084e1" + integrity sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.1" + eta "^2.0.0" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz#62dacb7997322f4c5a828b3ab66177ec6769eb33" + integrity sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.0.tgz#f94f89a0253778b617c5d40ac6f16b17ec55ce41" + integrity sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.0.tgz#eb2913871860ed32e73858b4c7787dd820c5558d" + integrity sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz#1ed92bfab5da321c4a4d99cad28a15627091aa90" + integrity sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w== + dependencies: + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.0.tgz#fdf0c3545819e48bb57eafc5057495fd4d50e900" + integrity sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg== + dependencies: + "@docusaurus/logger" "2.4.0" + "@svgr/webpack" "^6.2.1" + escape-string-regexp "^4.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + dependencies: + eval "^0.1.8" + p-map "^4.0.0" + webpack-sources "^3.2.2" + +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" + integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== + +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" + integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== + +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" + integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== + +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" + integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== + +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" + integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== + +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" + integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== + +"@svgr/babel-preset@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" + integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" + integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" + integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== + dependencies: + "@babel/types" "^7.20.0" + entities "^4.4.0" + +"@svgr/plugin-jsx@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" + integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" + integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.8.0" + +"@svgr/webpack@^6.2.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" + integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@tsconfig/docusaurus@^1.0.5": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz#a3ee3c8109b3fec091e3d61a61834e563aeee3c3" + integrity sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" + integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" + integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.34" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz#c119e85b75215178bc127de588e93100698ab4cc" + integrity sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.11" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" + integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/mdast@^3.0.0": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" + integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== + dependencies: + "@types/unist" "*" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/node@*": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.1.tgz#afc492e8dbe7f672dd3a13674823522b467a45ad" + integrity sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.7.tgz#36207a3fe08b271abee62b26993ee932d13cbb02" + integrity sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "^5.1.0" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*", "@types/react-router@^5.1.0": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "18.2.6" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.6.tgz#5cd53ee0d30ffc193b159d3516c8c8ad2f19d571" + integrity sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@you54f/theme-github-codeblock@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@you54f/theme-github-codeblock/-/theme-github-codeblock-0.1.1.tgz#11b49a3500093c5f11b5ecd580f959cbdbab58c8" + integrity sha512-SFbkHzwfsfShYd9yL818P9P7AlSBQgDC92pyQWZqJV/PMdgfCh5ZsK/pt/1s/jy0wvYi4pFTwOEQ0+vhdy324w== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +address@^1.0.1, address@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +algoliasearch-helper@^3.10.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.13.0.tgz#1ccca7056fd27c2b0b5c92dd5c0abf4314bec3b8" + integrity sha512-kV3c1jMQCvkARtGsSDvAwuht4PAMSsQILqPiH4WFiARoa3jXJ/r1TQoBWAjWyWF48rsNYCv7kzxgB4LTxrvvuw== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.0.0, algoliasearch@^4.13.1: + version "4.17.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.0.tgz#46ed58b2b99509d041f11cd1ea83623edf84355f" + integrity sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA== + dependencies: + "@algolia/cache-browser-local-storage" "4.17.0" + "@algolia/cache-common" "4.17.0" + "@algolia/cache-in-memory" "4.17.0" + "@algolia/client-account" "4.17.0" + "@algolia/client-analytics" "4.17.0" + "@algolia/client-common" "4.17.0" + "@algolia/client-personalization" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/logger-console" "4.17.0" + "@algolia/requester-browser-xhr" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/requester-node-http" "4.17.0" + "@algolia/transporter" "4.17.0" + +ansi-align@^3.0.0, ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0, arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.12, autoprefixer@^10.4.7: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +babel-loader@^8.2.5: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== + dependencies: + ansi-align "^3.0.1" + camelcase "^6.2.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1, camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001486" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz#56a08885228edf62cbe1ac8980f2b5dae159997e" + integrity sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg== + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +clean-css@^5.2.2, clean-css@^5.3.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-table3@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commander@~10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +copy-text-to-clipboard@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz#6bf40deef0a51ac6858efb0d76ded2c6d6a15059" + integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.25.1: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b" + integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA== + dependencies: + browserslist "^4.21.5" + +core-js-pure@^3.25.1: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.2.tgz#005a82551f4af3250dcfb46ed360fad32ced114e" + integrity sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg== + +core-js@^3.23.3: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc" + integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cosmiconfig@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-declaration-sorter@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== + +css-loader@^6.7.1: + version "6.7.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" + integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.19" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + +css-minimizer-webpack-plugin@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz#79f6199eb5adf1ff7ba57f105e3752d15211eb35" + integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== + dependencies: + cssnano "^5.1.8" + jest-worker "^29.1.2" + postcss "^8.4.17" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.3.8: + version "5.3.10" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz#25558a1fbf3a871fb6429ce71e41be7f5aca6eef" + integrity sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ== + dependencies: + autoprefixer "^10.4.12" + cssnano-preset-default "^5.2.14" + postcss-discard-unused "^5.1.0" + postcss-merge-idents "^5.1.1" + postcss-reduce-idents "^5.2.0" + postcss-zindex "^5.1.0" + +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.1.12, cssnano@^5.1.8: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + dependencies: + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + dependencies: + address "^1.0.1" + debug "4" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.6.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" + integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.284: + version "1.4.388" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.388.tgz#ec0d1be823d5b14da56d91ec5c57e84b4624ea45" + integrity sha512-xZ0y4zjWZgp65okzwwt00f2rYibkFPHUv9qBz+Vzn8cB9UXIo9Zc6Dw81LJYhhNt0G/vR1OJEfStZ49NKl0YxQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.13.0: + version "5.14.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.0.tgz#0b6c676c8a3266c99fa281e4433a706f5c0c61c4" + integrity sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +entities@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.1.1.tgz#dfc1ced5e5515211cb9c6c9fac3eed86f4cce3e1" + integrity sha512-daWDLvwOCghtrXRVI4LEt57/R3hFwCidxRlczeYUGBWZ/8MuyZiusOFiCAXkVziuBMdku/lKQk2BgH1hsmijbA== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572" + integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@^1.0.0, follow-redirects@^1.14.7: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" + integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stdin@~9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +github-slugger@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~10.2.2: + version "10.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.3.tgz#aa6765963fe6c5936d5c2e00943e7af06302a1a7" + integrity sha512-Kb4rfmBVE3eQTAimgmeqc2LwSnN0wIOkkUL6HmxEFxNJ4fHghYHVbFba/HcGcRjE6s9KoMNK3rSOwkL4PioZjg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.0" + minipass "^5.0.0" + path-scurry "^1.7.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^5.2.0, ignore@~5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +image-size@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + +immer@^9.0.7: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.43: + version "0.2.0-alpha.43" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0" + integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ini@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" + integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + dependencies: + has "^1.0.3" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jackspeak@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.0.tgz#497cbaedc902ec3f31d5d61be804d2364ff9ddad" + integrity sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.1.2: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + dependencies: + "@types/node" "*" + jest-util "^29.5.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jiti@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + +joi@^17.6.0: + version "17.9.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" + integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== + dependencies: + uc.micro "^1.0.1" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^9.0.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +markdown-it@13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== + dependencies: + argparse "^2.0.1" + entities "~3.0.1" + linkify-it "^4.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +markdownlint-cli@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/markdownlint-cli/-/markdownlint-cli-0.34.0.tgz#d7a4ae8e59911de6dfb01782a7cd554e8a245947" + integrity sha512-4G9I++VBTZkaye6Yfc/7dU6HQHcyldZEVB+bYyQJLcpJOHKk/q5ZpGqK80oKMIdlxzsA3aWOJLZ4DkoaoUWXbQ== + dependencies: + commander "~10.0.1" + get-stdin "~9.0.0" + glob "~10.2.2" + ignore "~5.2.4" + js-yaml "^4.1.0" + jsonc-parser "~3.2.0" + markdownlint "~0.28.2" + minimatch "~9.0.0" + run-con "~1.2.11" + +markdownlint-micromark@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/markdownlint-micromark/-/markdownlint-micromark-0.1.2.tgz#5520e04febffa46741875a2f297509ffdb561f5c" + integrity sha512-jRxlQg8KpOfM2IbCL9RXM8ZiYWz2rv6DlZAnGv8ASJQpUh6byTBnEsbuMZ6T2/uIgntyf7SKg/mEaEBo1164fQ== + +markdownlint@~0.28.2: + version "0.28.2" + resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.28.2.tgz#ea31586a02fe3a06403ecafbbe22d77e363c8ed5" + integrity sha512-yYaQXoKKPV1zgrFsyAuZPEQoe+JrY9GDag9ObKpk09twx4OCU5lut+0/kZPrQ3W7w82SmgKhd7D8m34aG1unVw== + dependencies: + markdown-it "13.0.1" + markdownlint-micromark "0.1.2" + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdurl@^1.0.0, mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.5.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.1.tgz#f0cd1e2bfaef58f6fe09bfb9c2288f07fea099ec" + integrity sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-css-extract-plugin@^2.6.1: + version "2.7.5" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" + integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.0, minimatch@~9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.0.tgz#bfc8e88a1c40ffd40c172ddac3decb8451503b56" + integrity sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.7.0.tgz#99c741a2cfbce782294a39994d63748b5a24f6db" + integrity sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg== + dependencies: + lru-cache "^9.0.0" + minipass "^5.0.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-discard-unused@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" + integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + +postcss-loader@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.0.tgz#05991c1e490d8ff86ef18358d87db3b5b2dcb5f5" + integrity sha512-qLAFjvR2BFNz1H930P7mj1iuWJFjGey/nVhimfOAAQ1ZyPpcClAxP8+A55Sl8mBvM+K2a9Pjgdj10KpANWrNfw== + dependencies: + cosmiconfig "^8.1.3" + jiti "^1.18.2" + klona "^2.0.6" + semver "^7.3.8" + +postcss-merge-idents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" + integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-idents@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" + integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.12" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz#2efae5ffab3c8bfb2b7fbf0c426e3bca616c4abb" + integrity sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^4.2.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz#04a5a78db3921eb78f28a1a781a2e68e65258128" + integrity sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw== + dependencies: + sort-css-media-queries "2.1.0" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" + integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== + +postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.19, postcss@^8.4.23: + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== + +prismjs@^1.28.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.1.tgz#53933d9e14f364281d6cba24bfed7a4afb808b5f" + integrity sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg== + +react-helmet-async@*, react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.4" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.4, react-router@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-textarea-autosize@^8.3.2: + version "8.4.1" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335" + integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q== + dependencies: + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +registry-auth-token@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== + dependencies: + rc "1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.2, resolve@^1.3.2: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rtl-detect@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" + integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== + dependencies: + find-up "^5.0.0" + picocolors "^1.0.0" + postcss "^8.3.11" + strip-json-comments "^3.1.1" + +run-con@~1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/run-con/-/run-con-1.2.11.tgz#0014ed430bad034a60568dfe7de2235f32e3f3c4" + integrity sha512-NEMGsUT+cglWkzEr4IFK21P4Jca45HqiAbIIZIBdX5+UZTB24Mb/21iNGgz9xZa8tL6vbW7CXmq7MFN42+VjNQ== + dependencies: + deep-extend "^0.6.0" + ini "~3.0.0" + minimist "^1.2.6" + strip-json-comments "~3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.4: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d" + integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.5" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375" + integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.1.2" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.1.tgz#96a61033896120ec9335d96851d902cc98f0ba2a" + integrity sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw== + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-css-media-queries@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" + integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.0.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +sucrase@^3.32.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7" + integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^2.7.0, svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +tailwindcss@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3" + integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.18.2" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + postcss-value-parser "^4.2.0" + resolve "^1.22.2" + sucrase "^3.32.0" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: + version "5.3.8" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz#415e03d2508f7de63d59eca85c5d102838f06610" + integrity sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.10.0, terser@^5.16.8: + version "5.17.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.3.tgz#7f908f16b3cdf3f6c0f8338e6c1c674837f90d25" + integrity sha512-AudpAZKmZHkG9jueayypz4duuCFJMMNGRMwaPvQKWfxKedh8Z2x3OCoDqIIi1xx5+iwx1u6Au8XQcc9Lke65Yg== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.7.4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +ua-parser-js@^0.7.30: + version "0.7.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" + integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +wait-on@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" + integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== + dependencies: + axios "^0.25.0" + joi "^17.6.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^7.5.4" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.5.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" + integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== + dependencies: + "@discoveryjs/json-ext" "0.5.7" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.3: + version "4.15.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" + integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.2, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.73.0: + version "5.82.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.0.tgz#3c0d074dec79401db026b4ba0fb23d6333f88e7d" + integrity sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.13.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" + integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 130d141bb2507d69afa3a3096d38ed054dacb2fb Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 15 May 2023 22:47:38 +0200 Subject: [PATCH 03/23] review updates --- .github/workflows/deploy-docs.yml | 46 +++++++++++++++++++++++++++++++ .github/workflows/deploy.yml | 43 ----------------------------- .github/workflows/test-deploy.yml | 4 +-- go.mod | 3 -- 4 files changed, 48 insertions(+), 48 deletions(-) create mode 100644 .github/workflows/deploy-docs.yml delete mode 100644 .github/workflows/deploy.yml delete mode 100644 go.mod diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 000000000..3a816a47f --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,46 @@ +name: Deploy docs +# This job builds and deploys documenation to github pages. +# It runs on every push to main with a change in the docs folder. +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "docs/**" + - "x/**/*.md" + - .github/workflows/deploy-docs.yml + +permissions: + contents: read + +jobs: + build-and-deploy: + permissions: + contents: write # for JamesIves/github-pages-deploy-action to push changes in repo + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v3 + with: + persist-credentials: false + fetch-depth: 0 + path: "." + + - name: Setup Node.js 🔧 + uses: actions/setup-node@v3 + with: + node-version: "16.x" + + # npm install npm should be removed when https://github.com/npm/cli/issues/4942 is fixed + - name: Build 🔧 + run: | + npm install -g npm@8.5.5 + npm run build + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4.4.1 + with: + branch: gh-pages + folder: ~/output + single-commit: true \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index a6f92c596..000000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Deploy to GitHub Pages - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - deploy: - name: Deploy to GitHub Pages - runs-on: ubuntu-latest - env: - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} - permissions: write-all - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 16.x - cache: npm - - - run: yarn install --frozen-lockfile - - run: yarn crowdin:sync - - name: Clean Crowdin Front Matter issues - run: bash clean.sh - shell: bash - - run: yarn build - - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./build - keep_files: ${{ github.event_name == 'push' }} - # The following lines assign commit authorship to the official - # GH-Actions bot for deploys to `gh-pages` branch: - # https://github.com/actions/checkout/issues/13#issuecomment-724415212 - # The GH actions bot is used by default if you didn't specify the two fields. - # You can swap them out with your own user credentials. - cname: docs.cosmos.network - user_name: samricotta - user_email: sam@binary.builders diff --git a/.github/workflows/test-deploy.yml b/.github/workflows/test-deploy.yml index 0459a13f1..52988431d 100644 --- a/.github/workflows/test-deploy.yml +++ b/.github/workflows/test-deploy.yml @@ -15,5 +15,5 @@ jobs: with: node-version: 16.x cache: npm - - run: yarn install --frozen-lockfile - - run: yarn build + - run: npm install -g npm@8.5.5 + - run: npm run build diff --git a/go.mod b/go.mod deleted file mode 100644 index 8c4b0e58c..000000000 --- a/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module cosmos-sdk-docs - -go 1.20 From 680025c068299e007352fc8594b265939383f85a Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 15 May 2023 22:55:24 +0200 Subject: [PATCH 04/23] update actions --- .github/workflows/deploy-docs.yml | 9 ++++++--- .github/workflows/test-deploy.yml | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 3a816a47f..8f5b53c0f 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -34,9 +34,12 @@ jobs: # npm install npm should be removed when https://github.com/npm/cli/issues/4942 is fixed - name: Build 🔧 - run: | - npm install -g npm@8.5.5 - npm run build + - run: yarn install --frozen-lockfile + - run: yarn crowdin:sync + - name: Clean Crowdin Front Matter issues + run: bash clean.sh + shell: bash + - run: yarn build - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4.4.1 diff --git a/.github/workflows/test-deploy.yml b/.github/workflows/test-deploy.yml index 52988431d..d90e62f6e 100644 --- a/.github/workflows/test-deploy.yml +++ b/.github/workflows/test-deploy.yml @@ -15,5 +15,5 @@ jobs: with: node-version: 16.x cache: npm - - run: npm install -g npm@8.5.5 - - run: npm run build + - run: yarn install --frozen-lockfile + - run: yarn build \ No newline at end of file From 45ef225396dc8069ca6be789d4d356783c5c70c4 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 17 May 2023 10:38:19 +0200 Subject: [PATCH 05/23] remove path --- .github/workflows/deploy-docs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 8f5b53c0f..e66d51eaf 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -8,7 +8,6 @@ on: - main paths: - "docs/**" - - "x/**/*.md" - .github/workflows/deploy-docs.yml permissions: From 8480865122fbfb9838cd58731644df7f1febc8f5 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Sat, 6 May 2023 17:57:02 +0200 Subject: [PATCH 06/23] wip --- custom-version-plugin.js | 59 +++++++++++++++++++ docs/develop/_category_.json | 5 -- docusaurus.config.js | 15 +---- versioned_docs/version-0.45/.gitkeep | 0 versioned_docs/version-0.46/.gitkeep | 0 versioned_docs/version-0.47/.gitkeep | 0 versioned_sidebars/version-0.45-sidebars.json | 26 ++++++++ versioned_sidebars/version-0.46-sidebars.json | 26 ++++++++ versioned_sidebars/version-0.47-sidebars.json | 26 ++++++++ versions.json | 5 ++ 10 files changed, 145 insertions(+), 17 deletions(-) create mode 100644 custom-version-plugin.js create mode 100644 versioned_docs/version-0.45/.gitkeep create mode 100644 versioned_docs/version-0.46/.gitkeep create mode 100644 versioned_docs/version-0.47/.gitkeep create mode 100644 versioned_sidebars/version-0.45-sidebars.json create mode 100644 versioned_sidebars/version-0.46-sidebars.json create mode 100644 versioned_sidebars/version-0.47-sidebars.json create mode 100644 versions.json diff --git a/custom-version-plugin.js b/custom-version-plugin.js new file mode 100644 index 000000000..79b5b8a54 --- /dev/null +++ b/custom-version-plugin.js @@ -0,0 +1,59 @@ +const fs = require('fs'); +const path = require('path'); + +// Helper function to get all files recursively from a directory +function getAllFiles(dirPath, arrayOfFiles) { + const files = fs.readdirSync(dirPath); + + arrayOfFiles = arrayOfFiles || []; + + files.forEach(function (file) { + if (fs.statSync(path.join(dirPath, file)).isDirectory()) { + arrayOfFiles = getAllFiles(path.join(dirPath, file), arrayOfFiles); + } else { + arrayOfFiles.push(path.join(dirPath, file)); + } + }); + + return arrayOfFiles; +} + +module.exports = function (_context, _options) { + return { + name: 'custom-version-plugin', + + async loadContent() { + // Read the versions.json file to get the list of versions + const versionsJsonPath = path.join(_context.siteDir, 'versions.json'); + const versions = JSON.parse(fs.readFileSync(versionsJsonPath, 'utf8')); + + // Read all the files in the /docs folder + const docsPath = path.join(_context.siteDir, 'docs'); + const files = getAllFiles(docsPath); + + // Iterate through the list of versions + for (const version of versions) { + const versionedDocsPath = path.join(_context.siteDir, 'versioned_docs', `version-${version}`); + + // Check if the version directory exists + if (fs.existsSync(versionedDocsPath)) { + // Iterate through the list of files in the /docs folder + for (const file of files) { + const relativePath = path.relative(docsPath, file); + const customFilePath = path.join(versionedDocsPath, relativePath); + + // Check if the file exists in the version directory + if (!fs.existsSync(customFilePath)) { + // Create the directory if it doesn't exist + fs.mkdirSync(path.dirname(customFilePath), { recursive: true }); + + // If the file doesn't exist, copy it from the /docs folder + fs.copyFileSync(file, customFilePath); + console.log(`Copied file from /docs to version-${version}:`, relativePath); + } + } + } + } + }, + }; +}; diff --git a/docs/develop/_category_.json b/docs/develop/_category_.json index f40637f4d..e69de29bb 100644 --- a/docs/develop/_category_.json +++ b/docs/develop/_category_.json @@ -1,5 +0,0 @@ -{ - "label": "Develop", - "position": 0, - "link": null -} \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 0454ec6f8..5e275e1a9 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -3,6 +3,8 @@ const lightCodeTheme = require("prism-react-renderer/themes/github"); const darkCodeTheme = require("prism-react-renderer/themes/dracula"); +const customVersionPlugin = require('./custom-version-plugin'); + // const lastVersion = "v0.47"; const lastVersion = "current"; @@ -106,18 +108,6 @@ const config = { position: "right", dropdownActiveClassDisabled: true, // versions not yet migrated to docusaurus - dropdownItemsAfter: [ - { - href: "https://docs.cosmos.network/v0.46/", - label: "v0.46", - target: "_self", - }, - { - href: "https://docs.cosmos.network/v0.45/", - label: "v0.45", - target: "_self", - }, - ], }, ], }, @@ -218,6 +208,7 @@ const config = { }, }; }, + customVersionPlugin, [ "@docusaurus/plugin-google-analytics", { diff --git a/versioned_docs/version-0.45/.gitkeep b/versioned_docs/version-0.45/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/versioned_docs/version-0.46/.gitkeep b/versioned_docs/version-0.46/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/versioned_docs/version-0.47/.gitkeep b/versioned_docs/version-0.47/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/versioned_sidebars/version-0.45-sidebars.json b/versioned_sidebars/version-0.45-sidebars.json new file mode 100644 index 000000000..1a24a3b8d --- /dev/null +++ b/versioned_sidebars/version-0.45-sidebars.json @@ -0,0 +1,26 @@ +{ + "developSidebar": [ + { + "type": "autogenerated", + "dirName": "develop" + } + ], + "integrateSidebar": [ + { + "type": "autogenerated", + "dirName": "integrate" + } + ], + "userSidebar": [ + { + "type": "autogenerated", + "dirName": "user" + } + ], + "validateSidebar": [ + { + "type": "autogenerated", + "dirName": "validate" + } + ] +} diff --git a/versioned_sidebars/version-0.46-sidebars.json b/versioned_sidebars/version-0.46-sidebars.json new file mode 100644 index 000000000..1a24a3b8d --- /dev/null +++ b/versioned_sidebars/version-0.46-sidebars.json @@ -0,0 +1,26 @@ +{ + "developSidebar": [ + { + "type": "autogenerated", + "dirName": "develop" + } + ], + "integrateSidebar": [ + { + "type": "autogenerated", + "dirName": "integrate" + } + ], + "userSidebar": [ + { + "type": "autogenerated", + "dirName": "user" + } + ], + "validateSidebar": [ + { + "type": "autogenerated", + "dirName": "validate" + } + ] +} diff --git a/versioned_sidebars/version-0.47-sidebars.json b/versioned_sidebars/version-0.47-sidebars.json new file mode 100644 index 000000000..1a24a3b8d --- /dev/null +++ b/versioned_sidebars/version-0.47-sidebars.json @@ -0,0 +1,26 @@ +{ + "developSidebar": [ + { + "type": "autogenerated", + "dirName": "develop" + } + ], + "integrateSidebar": [ + { + "type": "autogenerated", + "dirName": "integrate" + } + ], + "userSidebar": [ + { + "type": "autogenerated", + "dirName": "user" + } + ], + "validateSidebar": [ + { + "type": "autogenerated", + "dirName": "validate" + } + ] +} diff --git a/versions.json b/versions.json new file mode 100644 index 000000000..6b1b18dae --- /dev/null +++ b/versions.json @@ -0,0 +1,5 @@ +[ + "0.47", + "0.46", + "0.45" +] From 8288a37c60219f11792444b4a21f8a8f82bf1914 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Thu, 11 May 2023 10:52:26 +0200 Subject: [PATCH 07/23] wip --- custom-version-plugin.js | 15 +++++++++++++++ docs/develop/_category_.json | 5 +++++ version_config.json | 8 ++++++++ 3 files changed, 28 insertions(+) create mode 100644 version_config.json diff --git a/custom-version-plugin.js b/custom-version-plugin.js index 79b5b8a54..ec5ae9ef9 100644 --- a/custom-version-plugin.js +++ b/custom-version-plugin.js @@ -18,6 +18,12 @@ function getAllFiles(dirPath, arrayOfFiles) { return arrayOfFiles; } +// Helper function to check if a file should be excluded for a specific version +function shouldExcludeFile(version, filePath, versionConfig) { + const excludedPaths = versionConfig[version]?.excludedPaths || []; + return excludedPaths.some((excludedPath) => filePath.startsWith(excludedPath)); +} + module.exports = function (_context, _options) { return { name: 'custom-version-plugin', @@ -27,6 +33,10 @@ module.exports = function (_context, _options) { const versionsJsonPath = path.join(_context.siteDir, 'versions.json'); const versions = JSON.parse(fs.readFileSync(versionsJsonPath, 'utf8')); + // Read the version_config.json file + const versionConfigPath = path.join(_context.siteDir, 'version_config.json'); + const versionConfig = JSON.parse(fs.readFileSync(versionConfigPath, 'utf8')); + // Read all the files in the /docs folder const docsPath = path.join(_context.siteDir, 'docs'); const files = getAllFiles(docsPath); @@ -42,6 +52,11 @@ module.exports = function (_context, _options) { const relativePath = path.relative(docsPath, file); const customFilePath = path.join(versionedDocsPath, relativePath); + // Check if the file should be excluded for this version + if (shouldExcludeFile(version, relativePath, versionConfig)) { + continue; + } + // Check if the file exists in the version directory if (!fs.existsSync(customFilePath)) { // Create the directory if it doesn't exist diff --git a/docs/develop/_category_.json b/docs/develop/_category_.json index e69de29bb..8b015fa11 100644 --- a/docs/develop/_category_.json +++ b/docs/develop/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Develop", + "position": 0, + "link": null +} \ No newline at end of file diff --git a/version_config.json b/version_config.json new file mode 100644 index 000000000..9dc87ac0e --- /dev/null +++ b/version_config.json @@ -0,0 +1,8 @@ +{ + "0.45": { + "excludedPaths": ["integrate/tooling"] + }, + "0.46": { + "excludedPaths": [] + } +} From c5202d14e1051b0a744ddb445bb847db5cb0b83c Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 15 May 2023 15:17:13 +0200 Subject: [PATCH 08/23] update version plugin --- custom-version-plugin.js | 27 +++++++++++++++------------ docusaurus.config.js | 1 - 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/custom-version-plugin.js b/custom-version-plugin.js index ec5ae9ef9..b4db15796 100644 --- a/custom-version-plugin.js +++ b/custom-version-plugin.js @@ -33,8 +33,8 @@ module.exports = function (_context, _options) { const versionsJsonPath = path.join(_context.siteDir, 'versions.json'); const versions = JSON.parse(fs.readFileSync(versionsJsonPath, 'utf8')); - // Read the version_config.json file - const versionConfigPath = path.join(_context.siteDir, 'version_config.json'); + // Read the version config file + const versionConfigPath = path.join(_context.siteDir, 'versionConfig.json'); const versionConfig = JSON.parse(fs.readFileSync(versionConfigPath, 'utf8')); // Read all the files in the /docs folder @@ -52,21 +52,24 @@ module.exports = function (_context, _options) { const relativePath = path.relative(docsPath, file); const customFilePath = path.join(versionedDocsPath, relativePath); - // Check if the file should be excluded for this version - if (shouldExcludeFile(version, relativePath, versionConfig)) { - continue; - } - // Check if the file exists in the version directory - if (!fs.existsSync(customFilePath)) { - // Create the directory if it doesn't exist - fs.mkdirSync(path.dirname(customFilePath), { recursive: true }); - - // If the file doesn't exist, copy it from the /docs folder + if (!fs.existsSync(customFilePath) && !shouldExcludeFile(version, relativePath, versionConfig)) { + // If the file doesn't exist and it's not excluded, copy it from the /docs folder fs.copyFileSync(file, customFilePath); console.log(`Copied file from /docs to version-${version}:`, relativePath); } } + + // After copying all files, iterate over the versioned directory to remove excluded files + const versionedFiles = getAllFiles(versionedDocsPath); + for (const file of versionedFiles) { + const relativePath = path.relative(versionedDocsPath, file); + + if (shouldExcludeFile(version, relativePath, versionConfig)) { + fs.unlinkSync(file); + console.log(`Removed excluded file from version-${version}:`, relativePath); + } + } } } }, diff --git a/docusaurus.config.js b/docusaurus.config.js index 5e275e1a9..58eee8fb0 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -6,7 +6,6 @@ const darkCodeTheme = require("prism-react-renderer/themes/dracula"); const customVersionPlugin = require('./custom-version-plugin'); -// const lastVersion = "v0.47"; const lastVersion = "current"; /** @type {import('@docusaurus/types').Config} */ From d97669fd48824f4678b7e52be2519ff1d3267a0a Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Wed, 17 May 2023 10:36:39 +0200 Subject: [PATCH 09/23] wip --- custom-version-plugin.js | 3 +-- version_config.json | 10 ++++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/custom-version-plugin.js b/custom-version-plugin.js index b4db15796..c9975b4d5 100644 --- a/custom-version-plugin.js +++ b/custom-version-plugin.js @@ -18,7 +18,6 @@ function getAllFiles(dirPath, arrayOfFiles) { return arrayOfFiles; } -// Helper function to check if a file should be excluded for a specific version function shouldExcludeFile(version, filePath, versionConfig) { const excludedPaths = versionConfig[version]?.excludedPaths || []; return excludedPaths.some((excludedPath) => filePath.startsWith(excludedPath)); @@ -34,7 +33,7 @@ module.exports = function (_context, _options) { const versions = JSON.parse(fs.readFileSync(versionsJsonPath, 'utf8')); // Read the version config file - const versionConfigPath = path.join(_context.siteDir, 'versionConfig.json'); + const versionConfigPath = path.join(_context.siteDir, 'version_config.json'); const versionConfig = JSON.parse(fs.readFileSync(versionConfigPath, 'utf8')); // Read all the files in the /docs folder diff --git a/version_config.json b/version_config.json index 9dc87ac0e..db4c62213 100644 --- a/version_config.json +++ b/version_config.json @@ -1,8 +1,14 @@ { "0.45": { - "excludedPaths": ["integrate/tooling"] + "excludedPaths": ["integrate/modules/slashing", "integrate/modules/nft", "integrate/modules/group", "integrate/modules/genutil", + "integrate/modules/consensus", "integrate/modules/circuit", "integrate/building-modules/autocli", "integrate/building-modules/depinject", + "integrate/building-modules/testing", "integrate/building-apps", "integrate/architecture/rfc", "integrate/specs"] }, "0.46": { - "excludedPaths": [] + "excludedPaths": ["integrate/modules/genutil", "integrate/modules/consensus", "integrate/modules/circuit", "integrate/architecture/rfc", + "integrate/specs", "integrate/tooling", "integrate/building-modules/depinject"] + }, + "0.47": { + "excludedPaths": ["integrate/run-node/cosmovisor"] } } From 2d029e035ed414600c9450e1a33ff88db39148b5 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 19 May 2023 11:05:25 +0200 Subject: [PATCH 10/23] versioning wip --- version_config.json | 23 +- .../version-0.45/integrate/ibc/README.md | 20 + .../version-0.45/integrate/ibc/custom.md | 468 ++++++++++++++++++ .../version-0.45/integrate/ibc/integration.md | 252 ++++++++++ .../version-0.45/integrate/ibc/overview.md | 151 ++++++ .../version-0.45/integrate/ibc/proposals.md | 42 ++ .../version-0.45/integrate/ibc/relayer.md | 47 ++ .../integrate/ibc/upgrades/README.md | 14 + .../integrate/ibc/upgrades/developer-guide.md | 50 ++ .../integrate/ibc/upgrades/quick-guide.md | 54 ++ 10 files changed, 1118 insertions(+), 3 deletions(-) create mode 100644 versioned_docs/version-0.45/integrate/ibc/README.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/custom.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/integration.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/overview.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/proposals.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/relayer.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/upgrades/README.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md create mode 100644 versioned_docs/version-0.45/integrate/ibc/upgrades/quick-guide.md diff --git a/version_config.json b/version_config.json index db4c62213..efcb80dcd 100644 --- a/version_config.json +++ b/version_config.json @@ -2,13 +2,30 @@ "0.45": { "excludedPaths": ["integrate/modules/slashing", "integrate/modules/nft", "integrate/modules/group", "integrate/modules/genutil", "integrate/modules/consensus", "integrate/modules/circuit", "integrate/building-modules/autocli", "integrate/building-modules/depinject", - "integrate/building-modules/testing", "integrate/building-apps", "integrate/architecture/rfc", "integrate/specs"] + "integrate/building-modules/testing", "integrate/building-apps", "integrate/architecture/rfc", "integrate/specs", "interate/architeture/adr-041-in-place-store-migrations", "interate/architeture/adr-042-group-module", + "integrate/architecture/adr-043-nft-module", "integrate/architecture/adr-044-protobuf-updates-guidelines", "integrate/architecture/adr-045-check-delivertx-middlewares", + "integrate/architecture/adr-046-module-params", "integrate/architecture/adr-046-module-params", "integrate/architecture/adr-047-extend-upgrade-plan", + "integrate/architecture/adr-048-consensus-fees", "integrate/architecture/adr-049-state-sync-hooks", "integrate/architecture/adr-050-sign-mode-textual", + "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/architecture/adr-053-go-module-refactoring","integrate/arcitecture/adr-054-semver-compatible-modules", + "integrate/architecture/adr-055-orm", "integrate/architecture/adr-057-app-wiring", "integrate/architecture/adr-058-auto-generated-cli", "integrate/architecture/adr-059-test-scopes", + "integrate/architecture/adr-060-abci-1.0", "integrate/architecture/adr-061-liquid-staking", "integrate/architecture/adr-062-collections-state-layer", + "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-063-core-module-api", "integrate/architecture/adr-064-abci-2.0", + "integrate/architecture/adr-065-store-v2"] }, "0.46": { "excludedPaths": ["integrate/modules/genutil", "integrate/modules/consensus", "integrate/modules/circuit", "integrate/architecture/rfc", - "integrate/specs", "integrate/tooling", "integrate/building-modules/depinject"] + "integrate/specs", "integrate/tooling", "integrate/building-modules/depinject", "integrate/architecture/adr-007-specialization-groups", + "integrate/architecture/adr-008-dCERT-group", "integrate/architecture/adr-014-proportional-slashing", + "integrate/architecture/adr-034-account-rekeying", "interate/architeture/adr-041-in-place-store-migrations", "interate/architeture/adr-042-group-module", + "integrate/architecture/adr-043-nft-module", "integrate/architecture/adr-044-protobuf-updates-guidelines", "integrate/architecture/adr-045-check-delivertx-middlewares", + "integrate/architecture/adr-048-consensus-fees", "integrate/architecture/adr-049-state-sync-hooks", "integrate/architecture/adr-050-sign-mode-textual", + "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/arcitecture/adr-054-semver-compatible-modules", + "integrate/architecture/adr-055-orm", "integrate/architecture/adr-057-app-wiring", "integrate/architecture/adr-058-auto-generated-cli", "integrate/architecture/adr-059-test-scopes", + "integrate/architecture/adr-060-abci-1.0", "integrate/architecture/adr-061-liquid-staking", "integrate/architecture/adr-062-collections-state-layer", + "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-063-core-module-api", "integrate/architecture/adr-064-abci-2.0", + "integrate/architecture/adr-065-store-v2"] }, "0.47": { - "excludedPaths": ["integrate/run-node/cosmovisor"] + "excludedPaths": [] } } diff --git a/versioned_docs/version-0.45/integrate/ibc/README.md b/versioned_docs/version-0.45/integrate/ibc/README.md new file mode 100644 index 000000000..3d002f2df --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/README.md @@ -0,0 +1,20 @@ + + +# IBC + +This repository contains reference documentation for the IBC protocol integration and concepts: + +1. [Overview](overview.md) +2. [Integration](integration.md) +3. [Customization](custom.md) +4. [Relayer](relayer.md) +5. [Governance Proposals](proposals.md) + +**NOTE**: The IBC module has been moved to its [own repository](https://github.com/cosmos/ibc-go). + +After reading about IBC, head on to the [Building Modules +documentation](../building-modules/README.md) to learn more about the process of building modules. diff --git a/versioned_docs/version-0.45/integrate/ibc/custom.md b/versioned_docs/version-0.45/integrate/ibc/custom.md new file mode 100644 index 000000000..b521868cc --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/custom.md @@ -0,0 +1,468 @@ + + +# Customization + +Learn how to configure your application to use IBC and send data packets to other chains. {synopsis} + +This document serves as a guide for developers who want to write their own Inter-blockchain +Communication Protocol (IBC) applications for custom [use-cases](https://github.com/cosmos/ics/blob/master/ibc/4_IBC_USECASES.md). + +Due to the modular design of the IBC protocol, IBC +application developers do not need to concern themselves with the low-level details of clients, +connections, and proof verification. Nevertheless a brief explanation of the lower levels of the +stack is given so that application developers may have a high-level understanding of the IBC +protocol. Then the document goes into detail on the abstraction layer most relevant for application +developers (channels and ports), and describes how to define your own custom packets, and +`IBCModule` callbacks. + +To have your module interact over IBC you must: bind to a port(s), define your own packet data and acknolwedgement structs as well as how to encode/decode them, and implement the +`IBCModule` interface. Below is a more detailed explanation of how to write an IBC application +module correctly. + +## Pre-requisites Readings + +- [IBC Overview](overview.md)) {prereq} +- [IBC default integration](integration.md) {prereq} + +## Create a custom IBC application module + +### Implement `IBCModule` Interface and callbacks + +The Cosmos SDK expects all IBC modules to implement the [`IBCModule` +interface](https://github.com/cosmos/ibc-go/tree/main/modules/core/05-port/types/module.go). This +interface contains all of the callbacks IBC expects modules to implement. This section will describe +the callbacks that are called during channel handshake execution. + +Here are the channel handshake callbacks that modules are expected to implement: + +```go +// Called by IBC Handler on MsgOpenInit +func (k Keeper) OnChanOpenInit(ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) error { + // OpenInit must claim the channelCapability that IBC passes into the callback + if err := k.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return err + } + + // ... do custom initialization logic + + // Use above arguments to determine if we want to abort handshake + // Examples: Abort if order == UNORDERED, + // Abort if version is unsupported + err := checkArguments(args) + return err +} + +// Called by IBC Handler on MsgOpenTry +OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version, + counterpartyVersion string, +) error { + // 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 the module can already authenticate the capability then the 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 !k.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 := k.scopedKeeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return err + } + } + + // ... do custom initialization logic + + // Use above arguments to determine if we want to abort handshake + err := checkArguments(args) + return err +} + +// Called by IBC Handler on MsgOpenAck +OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyVersion string, +) error { + // ... do custom initialization logic + + // Use above arguments to determine if we want to abort handshake + err := checkArguments(args) + return err +} + +// Called by IBC Handler on MsgOpenConfirm +OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // ... do custom initialization logic + + // Use above arguments to determine if we want to abort handshake + err := checkArguments(args) + return err +} +``` + +The channel closing handshake will also invoke module callbacks that can return errors to abort the +closing handshake. Closing a channel is a 2-step handshake, the initiating chain calls +`ChanCloseInit` and the finalizing chain calls `ChanCloseConfirm`. + +```go +// Called by IBC Handler on MsgCloseInit +OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // ... do custom finalization logic + + // Use above arguments to determine if we want to abort handshake + err := checkArguments(args) + return err +} + +// Called by IBC Handler on MsgCloseConfirm +OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // ... do custom finalization logic + + // Use above arguments to determine if we want to abort handshake + err := checkArguments(args) + return err +} +``` + +#### Channel Handshake Version Negotiation + +Application modules are expected to verify versioning used during the channel handshake procedure. + +* `ChanOpenInit` callback should verify that the `MsgChanOpenInit.Version` is valid +* `ChanOpenTry` callback should verify that the `MsgChanOpenTry.Version` is valid and that `MsgChanOpenTry.CounterpartyVersion` is valid. +* `ChanOpenAck` callback should verify that the `MsgChanOpenAck.CounterpartyVersion` is valid and supported. + +Versions must be strings but can implement any versioning structure. If your application plans to +have linear releases then semantic versioning is recommended. If your application plans to release +various features in between major releases then it is advised to use the same versioning scheme +as IBC. This versioning scheme specifies a version identifier and compatible feature set with +that identifier. Valid version selection includes selecting a compatible version identifier with +a subset of features supported by your application for that version. The struct is used for this +scheme can be found in `03-connection/types`. + +Since the version type is a string, applications have the ability to do simple version verification +via string matching or they can use the already impelemented versioning system and pass the proto +encoded version into each handhshake call as necessary. + +ICS20 currently implements basic string matching with a single supported version. + +### Bind Ports + +Currently, ports must be bound on app initialization. A module may bind to ports in `InitGenesis` +like so: + +```go +func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, state types.GenesisState) { + // ... other initialization logic + + // Only try to bind to port if it is not already bound, since we may already own + // port capability from capability InitGenesis + if !isBound(ctx, state.PortID) { + // module binds to desired ports on InitChain + // and claims returned capabilities + cap1 := keeper.IBCPortKeeper.BindPort(ctx, port1) + cap2 := keeper.IBCPortKeeper.BindPort(ctx, port2) + cap3 := keeper.IBCPortKeeper.BindPort(ctx, port3) + + // NOTE: The module's scoped capability keeper must be private + keeper.scopedKeeper.ClaimCapability(cap1) + keeper.scopedKeeper.ClaimCapability(cap2) + keeper.scopedKeeper.ClaimCapability(cap3) + } + + // ... more initialization logic +} +``` + +### Custom Packets + +Modules connected by a channel must agree on what application data they are sending over the +channel, as well as how they will encode/decode it. This process is not specified by IBC as it is up +to each application module to determine how to implement this agreement. However, for most +applications this will happen as a version negotiation during the channel handshake. While more +complex version negotiation is possible to implement inside the channel opening handshake, a very +simple version negotation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go). + +Thus, a module must define its a custom packet data structure, along with a well-defined way to +encode and decode it to and from `[]byte`. + +```go +// Custom packet data defined in application module +type CustomPacketData struct { + // Custom fields ... +} + +EncodePacketData(packetData CustomPacketData) []byte { + // encode packetData to bytes +} + +DecodePacketData(encoded []byte) (CustomPacketData) { + // decode from bytes to packet data +} +``` + +Then a module must encode its packet data before sending it through IBC. + +```go +// Sending custom application packet data +data := EncodePacketData(customPacketData) +packet.Data = data +IBCChannelKeeper.SendPacket(ctx, packet) +``` + +A module receiving a packet must decode the `PacketData` into a structure it expects so that it can +act on it. + +```go +// Receiving custom application packet data (in OnRecvPacket) +packetData := DecodePacketData(packet.Data) +// handle received custom packet data +``` + +#### Packet Flow Handling + +Just as IBC expected modules to implement callbacks for channel handshakes, IBC also expects modules +to implement callbacks for handling the packet flow through a channel. + +Once a module A and module B are connected to each other, relayers can start relaying packets and +acknowledgements back and forth on the channel. + +![IBC packet flow diagram](https://media.githubusercontent.com/media/cosmos/ics/master/spec/ics-004-channel-and-packet-semantics/packet-state-machine.png) + +Briefly, a successful packet flow works as follows: + +1. module A sends a packet through the IBC module +2. the packet is received by module B +3. if module B writes an acknowledgement of the packet then module A will process the + acknowledgement +4. if the packet is not successfully received before the timeout, then module A processes the + packet's timeout. + +##### Sending Packets + +Modules do not send packets through callbacks, since the modules initiate the action of sending +packets to the IBC module, as opposed to other parts of the packet flow where msgs sent to the IBC +module must trigger execution on the port-bound module through the use of callbacks. Thus, to send a +packet a module simply needs to call `SendPacket` on the `IBCChannelKeeper`. + +```go +// retrieve the dynamic capability for this channel +channelCap := scopedKeeper.GetCapability(ctx, channelCapName) +// Sending custom application packet data +data := EncodePacketData(customPacketData) +packet.Data = data +// Send packet to IBC, authenticating with channelCap +IBCChannelKeeper.SendPacket(ctx, channelCap, packet) +``` + +::: warning +In order to prevent modules from sending packets on channels they do not own, IBC expects +modules to pass in the correct channel capability for the packet's source channel. +::: + +##### Receiving Packets + +To handle receiving packets, the module must implement the `OnRecvPacket` callback. This gets +invoked by the IBC module after the packet has been proved valid and correctly processed by the IBC +keepers. Thus, the `OnRecvPacket` callback only needs to worry about making the appropriate state +changes given the packet data without worrying about whether the packet is valid or not. + +Modules may return an acknowledgement as a byte string and return it to the IBC handler. +The IBC handler will then commit this acknowledgement of the packet so that a relayer may relay the +acknowledgement back to the sender module. + +```go +OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, +) (res *sdk.Result, ack []byte, abort error) { + // Decode the packet data + packetData := DecodePacketData(packet.Data) + + // do application state changes based on packet data + // and return result, acknowledgement and abortErr + // Note: abortErr is only not nil if we need to abort the entire receive packet, and allow a replay of the receive. + // If the application state change failed but we do not want to replay the packet, + // simply encode this failure with relevant information in ack and return nil error + res, ack, abortErr := processPacket(ctx, packet, packetData) + + // if we need to abort the entire receive packet, return error + if abortErr != nil { + return nil, nil, abortErr + } + + // Encode the ack since IBC expects acknowledgement bytes + ackBytes := EncodeAcknowledgement(ack) + + return res, ackBytes, nil +} +``` + +::: warning +`OnRecvPacket` should **only** return an error if we want the entire receive packet execution +(including the IBC handling) to be reverted. This will allow the packet to be replayed in the case +that some mistake in the relaying caused the packet processing to fail. + +If some application-level error happened while processing the packet data, in most cases, we will +not want the packet processing to revert. Instead, we may want to encode this failure into the +acknowledgement and finish processing the packet. This will ensure the packet cannot be replayed, +and will also allow the sender module to potentially remediate the situation upon receiving the +acknowledgement. An example of this technique is in the `ibc-transfer` module's +[`OnRecvPacket`](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go). +::: + +### Acknowledgements + +Modules may commit an acknowledgement upon receiving and processing a packet in the case of synchronous packet processing. +In the case where a packet is processed at some later point after the packet has been received (asynchronous execution), the acknowledgement +will be written once the packet has been processed by the application which may be well after the packet receipt. + +NOTE: Most blockchain modules will want to use the synchronous execution model in which the module processes and writes the acknowledgement +for a packet as soon as it has been received from the IBC module. + +This acknowledgement can then be relayed back to the original sender chain, which can take action +depending on the contents of the acknowledgement. + +Just as packet data was opaque to IBC, acknowledgements are similarly opaque. Modules must pass and +receive acknowledegments with the IBC modules as byte strings. + +Thus, modules must agree on how to encode/decode acknowledgements. The process of creating an +acknowledgement struct along with encoding and decoding it, is very similar to the packet data +example above. [ICS 04](https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope) +specifies a recommended format for acknowledgements. This acknowledgement type can be imported from +[channel types](https://github.com/cosmos/ibc-go/tree/main/modules/core/04-channel/types). + +While modules may choose arbitrary acknowledgement structs, a default acknowledgement types is provided by IBC [here](https://github.com/cosmos/ibc-go/blob/main/proto/ibc/core/channel/v1/channel.proto): + +```proto +// Acknowledgement is the recommended acknowledgement format to be used by +// app-specific protocols. +// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental +// conflicts with other protobuf message formats used for acknowledgements. +// The first byte of any message with this format will be the non-ASCII values +// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS: +// https://github.com/cosmos/ics/tree/master/spec/ics-004-channel-and-packet-semantics#acknowledgement-envelope +message Acknowledgement { + // response contains either a result or an error and must be non-empty + oneof response { + bytes result = 21; + string error = 22; + } +} +``` + +#### Acknowledging Packets + +After a module writes an acknowledgement, a relayer can relay back the acknowledgement to the sender module. The sender module can +then process the acknowledgement using the `OnAcknowledgementPacket` callback. The contents of the +acknowledgement is entirely upto the modules on the channel (just like the packet data); however, it +may often contain information on whether the packet was successfully processed along +with some additional data that could be useful for remediation if the packet processing failed. + +Since the modules are responsible for agreeing on an encoding/decoding standard for packet data and +acknowledgements, IBC will pass in the acknowledgements as `[]byte` to this callback. The callback +is responsible for decoding the acknowledgement and processing it. + +```go +OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, +) (*sdk.Result, error) { + // Decode acknowledgement + ack := DecodeAcknowledgement(acknowledgement) + + // process ack + res, err := processAck(ack) + return res, err +} +``` + +#### Timeout Packets + +If the timeout for a packet is reached before the packet is successfully received or the +counterparty channel end is closed before the packet is successfully received, then the receiving +chain can no longer process it. Thus, the sending chain must process the timeout using +`OnTimeoutPacket` to handle this situation. Again the IBC module will verify that the timeout is +indeed valid, so our module only needs to implement the state machine logic for what to do once a +timeout is reached and the packet can no longer be received. + +```go +OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, +) (*sdk.Result, error) { + // do custom timeout logic +} +``` + +### Routing + +As mentioned above, modules must implement the IBC module interface (which contains both channel +handshake callbacks and packet handling callbacks). The concrete implementation of this interface +must be registered with the module name as a route on the IBC `Router`. + +```go +// app.go +func NewApp(...args) *App { +// ... + +// Create static IBC router, add module routes, then set and seal it +ibcRouter := port.NewRouter() + +ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule) +// Note: moduleCallbacks must implement IBCModule interface +ibcRouter.AddRoute(moduleName, moduleCallbacks) + +// Setting Router will finalize all routes by sealing router +// No more routes can be added +app.IBCKeeper.SetRouter(ibcRouter) +``` + +## Working Example + +For a real working example of an IBC application, you can look through the `ibc-transfer` module +which implements everything discussed above. + +Here are the useful parts of the module to look at: + +[Binding to transfer +port](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/types/genesis.go) + +[Sending transfer +packets](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/relay.go) + +[Implementing IBC +callbacks](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/module.go) + +## Next {hide} + +Learn about [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/intro.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/ibc/integration.md b/versioned_docs/version-0.45/integrate/ibc/integration.md new file mode 100644 index 000000000..209f51e46 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/integration.md @@ -0,0 +1,252 @@ + + +# Integration + +Learn how to integrate IBC to your application and send data packets to other chains. {synopsis} + +This document outlines the required steps to integrate and configure the [IBC +module](https://github.com/cosmos/ibc-go/tree/main/modules/core) to your Cosmos SDK application and +send fungible token transfers to other chains. + +## Integrating the IBC module + +Integrating the IBC module to your SDK-based application is straighforward. The general changes can be summarized in the following steps: + +- Add required modules to the `module.BasicManager` +- Define additional `Keeper` fields for the new modules on the `App` type +- Add the module's `StoreKeys` and initialize their `Keepers` +- Set up corresponding routers and routes for the `ibc` and `evidence` modules +- Add the modules to the module `Manager` +- Add modules to `Begin/EndBlockers` and `InitGenesis` +- Update the module `SimulationManager` to enable simulations + +### Module `BasicManager` and `ModuleAccount` permissions + +The first step is to add the following modules to the `BasicManager`: `x/capability`, `x/ibc`, +`x/evidence` and `x/ibc-transfer`. After that, we need to grant `Minter` and `Burner` permissions to +the `ibc-transfer` `ModuleAccount` to mint and burn relayed tokens. + +```go +// app.go +var ( + + ModuleBasics = module.NewBasicManager( + // ... + capability.AppModuleBasic{}, + ibc.AppModuleBasic{}, + evidence.AppModuleBasic{}, + transfer.AppModuleBasic{}, // i.e ibc-transfer module + ) + + // module account permissions + maccPerms = map[string][]string{ + // other module accounts permissions + // ... + ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, +) +``` + +### Application fields + +Then, we need to register the `Keepers` as follows: + +```go +// app.go +type App struct { + // baseapp, keys and subspaces definitions + + // other keepers + // ... + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + EvidenceKeeper evidencekeeper.Keeper // required to set up the client misbehaviour route + TransferKeeper ibctransferkeeper.Keeper // for cross-chain fungible token transfers + + // make scoped keepers public for test purposes + ScopedIBCKeeper capabilitykeeper.ScopedKeeper + ScopedTransferKeeper capabilitykeeper.ScopedKeeper + + /// ... + /// module and simulation manager definitions +} +``` + +### Configure the `Keepers` + +During initialization, besides initializing the IBC `Keepers` (for the `x/ibc`, and +`x/ibc-transfer` modules), we need to grant specific capabilities through the capability module +`ScopedKeepers` so that we can authenticate the object-capability permissions for each of the IBC +channels. + +```go +func NewApp(...args) *App { + // define codecs and baseapp + + // 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(ibchost.ModuleName) + scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) + + // ... other modules keepers + + // Create IBC Keeper + app.IBCKeeper = ibckeeper.NewKeeper( + appCodec, keys[ibchost.StoreKey], app.StakingKeeper, scopedIBCKeeper, + ) + + // Create Transfer Keepers + app.TransferKeeper = ibctransferkeeper.NewKeeper( + appCodec, keys[ibctransfertypes.StoreKey], + app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, + app.AccountKeeper, app.BankKeeper, scopedTransferKeeper, + ) + transferModule := transfer.NewAppModule(app.TransferKeeper) + + // Create evidence Keeper for to register the IBC light client misbehaviour evidence route + evidenceKeeper := evidencekeeper.NewKeeper( + appCodec, keys[evidencetypes.StoreKey], &app.StakingKeeper, app.SlashingKeeper, + ) + + // .. continues +} +``` + +### Register `Routers` + +IBC needs to know which module is bound to which port so that it can route packets to the +appropriate module and call the appropriate callbacks. The port to module name mapping is handled by +IBC's port `Keeper`. However, the mapping from module name to the relevant callbacks is accomplished +by the port +[`Router`](https://github.com/cosmos/ibc-go/blob/main/modules/core/05-port/types/router.go) on the +IBC module. + +Adding the module routes allows the IBC handler to call the appropriate callback when processing a +channel handshake or a packet. + +The second `Router` that is required is the evidence module router. This router handles genenal +evidence submission and routes the business logic to each registered evidence handler. In the case +of IBC, it is required to submit evidence for [light client +misbehaviour](https://github.com/cosmos/ics/tree/master/spec/ics-002-client-semantics#misbehaviour) +in order to freeze a client and prevent further data packets from being sent/received. + +Currently, a `Router` is static so it must be initialized and set correctly on app initialization. +Once the `Router` has been set, no new routes can be added. + +```go +// app.go +func NewApp(...args) *App { + // .. continuation from above + + // Create static IBC router, add ibc-tranfer module route, then set and seal it + ibcRouter := port.NewRouter() + ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule) + // Setting Router will finalize all routes by sealing router + // No more routes can be added + app.IBCKeeper.SetRouter(ibcRouter) + + // create static Evidence routers + + evidenceRouter := evidencetypes.NewRouter(). + // add IBC ClientMisbehaviour evidence handler + AddRoute(ibcclient.RouterKey, ibcclient.HandlerClientMisbehaviour(app.IBCKeeper.ClientKeeper)) + + // Setting Router will finalize all routes by sealing router + // No more routes can be added + evidenceKeeper.SetRouter(evidenceRouter) + + // set the evidence keeper from the section above + app.EvidenceKeeper = *evidenceKeeper + + // .. continues +``` + +### Module Managers + +In order to use IBC, we need to add the new modules to the module `Manager` and to the `SimulationManager` in case your application supports [simulations](./../building-modules/simulator.md). + +```go +// app.go +func NewApp(...args) *App { + // .. continuation from above + + app.mm = module.NewManager( + // other modules + // ... + capability.NewAppModule(appCodec, *app.CapabilityKeeper), + evidence.NewAppModule(app.EvidenceKeeper), + ibc.NewAppModule(app.IBCKeeper), + transferModule, + ) + + // ... + + app.sm = module.NewSimulationManager( + // other modules + // ... + capability.NewAppModule(appCodec, *app.CapabilityKeeper), + evidence.NewAppModule(app.EvidenceKeeper), + ibc.NewAppModule(app.IBCKeeper), + transferModule, + ) + + // .. continues +``` + +### Application ABCI Ordering + +One addition from IBC is the concept of `HistoricalEntries` which are stored on the staking module. +Each entry contains the historical information for the `Header` and `ValidatorSet` of this chain which is stored +at each height during the `BeginBlock` call. The historical info is required to introspect the +past historical info at any given height in order to verify the light client `ConsensusState` during the +connection handhake. + +The IBC module also has +[`BeginBlock`](https://github.com/cosmos/ibc-go/blob/main/modules/core/02-client/abci.go) logic as +well. This is optional as it is only required if your application uses the [localhost +client](https://github.com/cosmos/ics/blob/master/spec/ics-009-loopback-client) to connect two +different modules from the same chain. + +::: tip +Only register the ibc module to the `SetOrderBeginBlockers` if your application will use the +localhost (_aka_ loopback) client. +::: + +```go +// app.go +func NewApp(...args) *App { + // .. continuation from above + + // add evidence, staking and ibc modules to BeginBlockers + app.mm.SetOrderBeginBlockers( + // other modules ... + evidencetypes.ModuleName, stakingtypes.ModuleName, ibchost.ModuleName, + ) + + // ... + + // 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, + // other modules ... + ibchost.ModuleName, evidencetypes.ModuleName, ibctransfertypes.ModuleName, + ) + + // .. continues +``` + +::: warning +**IMPORTANT**: The capability module **must** be declared first in `SetOrderInitGenesis` +::: + +That's it! You have now wired up the IBC module and are now able to send fungible tokens across +different chains. If you want to have a broader view of the changes take a look into the SDK's +[`SimApp`](https://github.com/cosmos/ibc-go/blob/main/testing/simapp/app.go). + +## Next {hide} + +Learn about how to create [custom IBC modules](custom.md) for your application {hide} diff --git a/versioned_docs/version-0.45/integrate/ibc/overview.md b/versioned_docs/version-0.45/integrate/ibc/overview.md new file mode 100644 index 000000000..437114ace --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/overview.md @@ -0,0 +1,151 @@ + + +# IBC Overview + +Learn what IBC is, its components, and use cases. {synopsis} + +## What is the Inter-Blockchain Communication Protocol (IBC)? + +This document is a guide for developers who want to write their own IBC apps for custom use cases. + +The modular design of the IBC protocol means that IBC app developers do not require in-depth knowledge of the low-level details of clients, connections, and proof verification. This brief explanation of the lower levels of the stack is provided so that app developers can gain a high-level understanding of the IBC protocol. + +The abstraction layer details on channels and ports are relevant for app developers. You can define your own custom packets and IBCModule callbacks. + +The following requirements must be met for a module to interact over IBC: + +- Bind to one or more ports + +- Define the packet data + +- Define optional acknowledgement structures and methods to encode and decode them + +- Implement the IBCModule interface + +## Components Overview + +This section describes the IBC components and links to the repos. + +### [Clients](https://github.com/cosmos/ibc-go/blob/main/modules/core/02-client) + +IBC clients are light clients that are identified by a unique client id. IBC clients track the consensus states of other blockchains and the proof specs of those blockchains that are required to properly verify proofs against the client's consensus state. A client can be associated with any number of connections to multiple chains. The supported IBC clients are: + +- [Solo Machine light client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/06-solomachine): devices such as phones, browsers, or laptops. +- [Tendermint light client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/07-tendermint): The default for Cosmos SDK-based chains. +- [Localhost (loopback) client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/09-localhost): Useful for testing, simulation, and relaying packets to modules on the same application. + +### [Connections](https://github.com/cosmos/ibc-go/blob/main/modules/core/03-connection) + +Connections encapsulate two `ConnectionEnd` objects on two separate blockchains. Each `ConnectionEnd` is associated with a client of the other blockchain (the counterparty blockchain). The connection handshake is responsible for verifying that the light clients on each chain are correct for their respective counterparties. Connections, once established, are responsible for facilitating all cross-chain verification of IBC state. A connection can be associated with any number of channels. + +### [Proofs](https://github.com/cosmos/ibc-go/blob/main/modules/core/23-commitment) and [Paths](https://github.com/cosmos/ibc-go/blob/main/modules/core/24-host) + +In IBC, blockchains do not directly pass messages to each other over the network. + +- To communicate, a blockchain commits some state to a precisely defined path reserved for a specific message type and a specific counterparty. For example, a blockchain that stores a specific connectionEnd as part of a handshake or a packet intended to be relayed to a module on the counterparty chain. + +- A relayer process monitors for updates to these paths and relays messages by submitting the data stored under the path along with a proof of that data to the counterparty chain. + +- The paths that all IBC implementations must support for committing IBC messages are defined in [ICS-24 host requirements](https://github.com/cosmos/ics/tree/master/spec/core/ics-024-host-requirements). + +- The proof format that all implementations must produce and verify is defined in [ICS-23 implementation](https://github.com/confio/ics23). + +### [Capabilities](./ocap.md) + +IBC is intended to work in execution environments where modules do not necessarily trust each other. IBC must authenticate module actions on ports and channels so that only modules with the appropriate permissions can use the channels. This security is accomplished using [dynamic capabilities](../architecture/adr-003-dynamic-capability-store.md). Upon binding to a port or creating a channel for a module, IBC returns a dynamic capability that the module must claim to use that port or channel. This binding strategy prevents other modules from using that port or channel since those modules do not own the appropriate capability. + +While this explanation is useful background information, IBC modules do not need to interact at all with these lower-level abstractions. The relevant abstraction layer for IBC application developers is that of channels and ports. + +Write your IBC applications as self-contained **modules**. A module on one blockchain can communicate with other modules on other blockchains by sending, receiving, and acknowledging packets through channels that are uniquely identified by the `(channelID, portID)` tuple. + +A useful analogy is to consider IBC modules as internet apps on a computer. A channel can then be conceptualized as an IP connection, with the IBC portID is like an IP port, and the IBC channelID is like an IP address. A single instance of an IBC module can communicate on the same port with any number of other modules and IBC correctly routes all packets to the relevant module using the `(channelID, portID)` tuple. An IBC module can also communicate with another IBC module over multiple ports by sending each `(portID<->portID)` packet stream on a different unique channel. + +### [Ports](https://github.com/cosmos/ibc-go/blob/main/modules/core/05-port) + +An IBC module can bind to any number of ports. Each port must be identified by a unique `portID`. Since IBC is designed to be secure with mutually-distrusted modules that operate on the same ledger, binding a port returns the dynamic object capability. To take action on a particular port, for example, to open a channel with its portID, a module must provide the dynamic object capability to the IBC handler. This requirement prevents a malicious module from opening channels with ports it does not own. + +IBC modules are responsible for claiming the capability that is returned on `BindPort`. + +### [Channels](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) + +An IBC channel can be established between two IBC ports. A port is exclusively owned by a single module. IBC packets are sent over channels. Just as IP packets contain the destination IP address, IP port, the source IP address, and source IP port, IBC packets contain the destination portID, channelID, the source portID, and channelID. The IBC packets enable IBC to correctly route the packets to the destination module, while also allowing modules receiving packets to know the sender module. + +- A channel can be `ORDERED` so that packets from a sending module must be processed by the receiving module in the order they were sent. + +- Recommended, a channel may be `UNORDERED` so that packets from a sending module are processed in the order they arrive, which may not be the order the packets were sent. + +Modules may choose which channels they wish to communicate over with. IBC expects modules to implement callbacks that are called during the channel handshake. These callbacks may do custom channel initialization logic. If an error is returned, the channel handshake fails. By returning errors on callbacks, modules can programmatically reject and accept channels. + +The channel handshake is a 4-step handshake. Briefly, if a given chain A wants to open a channel with chain B using an already established connection: + +1. Chain A sends a `ChanOpenInit` message to signal a channel initialization attempt with chain B. +2. Chain B sends a `ChanOpenTry` message to try opening the channel on chain A. +3. Chain A sends a `ChanOpenAck` message to mark its channel end status as open. +4. Chain B sends a `ChanOpenConfirm` message to mark its channel end status as open. + +If all of these actions happen successfully, the channel is open on both sides. At each step in the handshake, the module associated with the `ChannelEnd` executes its callback for that step of the handshake. So on `ChanOpenInit`, the module on chain A has its callback `OnChanOpenInit` executed. + +Just as ports came with dynamic capabilities, channel initialization returns a dynamic capability that the module **must** claim so that they can pass in a capability to authenticate channel actions like sending packets. The channel capability is passed into the callback on the first parts of the handshake: `OnChanOpenInit` on the initializing chain or `OnChanOpenTry` on the other chain. + +### [Packets](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) + +Modules communicate with each other by sending packets over IBC channels. All IBC packets contain: + +- Destination `portID` + +- Destination `channelID` + +- Source `portID` + +- Source `channelID` + + These port and channels allow the modules to know the sender module of a given packet. + +- A sequence to optionally enforce ordering + +- `TimeoutTimestamp` and `TimeoutHeight` + + When non-zero, these timeout values determine the deadline before which the receiving module must process a packet. + + If the timeout passes without the packet being successfully received, the sending module can timeout the packet and take appropriate actions. + +Modules send custom application data to each other inside the `Data []byte` field of the IBC packet. Packet data is completely opaque to IBC handlers. The sender module must encode their application-specific packet information into the `Data` field of packets. The receiver module must decode that `Data` back to the original application data. + +### [Receipts and Timeouts](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) + +Since IBC works over a distributed network and relies on potentially faulty relayers to relay messages between ledgers, IBC must handle the case where a packet does not get sent to its destination in a timely manner or at all. Packets must specify a timeout height or timeout timestamp after which a packet can no longer be successfully received on the destination chain. + +If the timeout is reached, then a proof-of-packet timeout can be submitted to the original chain which can then perform application-specific logic to timeout the packet, perhaps by rolling back the packet send changes (refunding senders any locked funds, and so on). + +In ORDERED channels, a timeout of a single packet in the channel closes the channel. If packet sequence `n` times out, then no packet at sequence `k > n` can be successfully received without violating the contract of ORDERED channels that packets are processed in the order that they are sent. Since ORDERED channels enforce this invariant, a proof that sequence `n` hasn't been received on the destination chain by packet `n`'s specified timeout is sufficient to timeout packet `n` and close the channel. + +In the UNORDERED case, packets can be received in any order. IBC writes a packet receipt for each sequence it has received in the UNORDERED channel. This receipt contains no information and is simply a marker intended to signify that the UNORDERED channel has received a packet at the specified sequence. To timeout a packet on an UNORDERED channel, proof that a packet receipt does not exist is required for the packet's sequence by the specified timeout. Of course, timing out a packet on an UNORDERED channel triggers the application specific timeout logic for that packet, and does not close the channel. + +For this reason, most modules that use UNORDERED channels are recommended as they require less liveness guarantees to function effectively for users of that channel. + +### [Acknowledgements](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) + +Modules also write application-specific acknowledgements when processing a packet. Acknowledgements can be done: + +- Synchronously on `OnRecvPacket` if the module processes packets as soon as they are received from IBC module. + +- Asynchronously if module processes packets at some later point after receiving the packet. + +This acknowledgement data is opaque to IBC much like the packet `Data` and is treated by IBC as a simple byte string `[]byte`. The receiver modules must encode their acknowledgement so that the sender module can decode it correctly. How the acknowledgement is encoded should be decided through version negotiation during the channel handshake. + +The acknowledgement can encode whether the packet processing succeeded or failed, along with additional information that allows the sender module to take appropriate action. + +After the acknowledgement has been written by the receiving chain, a relayer relays the acknowledgement back to the original sender module which then executes application-specific acknowledgment logic using the contents of the acknowledgement. This acknowledgement can involve rolling back packet-send changes in the case of a failed acknowledgement (refunding senders). + +After an acknowledgement is received successfully on the original sender the chain, the IBC module deletes the corresponding packet commitment as it is no longer needed. + +## Further Readings and Specs + +To learn more about IBC, check out the following specifications: + +- [IBC specs](https://github.com/cosmos/ibc/tree/master/spec) +- [IBC protocol on the Cosmos SDK](https://github.com/cosmos/ibc-go/blob/main/docs/spec.md) + +## Next {hide} + +Learn about how to [integrate](integration.md) IBC to your application {hide} diff --git a/versioned_docs/version-0.45/integrate/ibc/proposals.md b/versioned_docs/version-0.45/integrate/ibc/proposals.md new file mode 100644 index 000000000..d82609262 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/proposals.md @@ -0,0 +1,42 @@ + + +# Governance Proposals + +In uncommon situations, a highly valued client may become frozen due to uncontrollable +circumstances. A highly valued client might have hundreds of channels being actively used. +Some of those channels might have a significant amount of locked tokens used for ICS 20. + +If the one third of the validator set of the chain the client represents decides to collude, +they can sign off on two valid but conflicting headers each signed by the other one third +of the honest validator set. The light client can now be updated with two valid, but conflicting +headers at the same height. The light client cannot know which header is trustworthy and therefore +evidence of such misbehaviour is likely to be submitted resulting in a frozen light client. + +Frozen light clients cannot be updated under any circumstance except via a governance proposal. +Since a quorum of validators can sign arbitrary state roots which may not be valid executions +of the state machine, a governance proposal has been added to ease the complexity of unfreezing +or updating clients which have become "stuck". Without this mechanism, validator sets would need +to construct a state root to unfreeze the client. Unfreezing clients, re-enables all of the channels +built upon that client. This may result in recovery of otherwise lost funds. + +Tendermint light clients may become expired if the trusting period has passed since their +last update. This may occur if relayers stop submitting headers to update the clients. + +An unplanned upgrade by the counterparty chain may also result in expired clients. If the counterparty +chain undergoes an unplanned upgrade, there may be no commitment to that upgrade signed by the validator +set before the chain-id changes. In this situation, the validator set of the last valid update for the +light client is never expected to produce another valid header since the chain-id has changed, which will +ultimately lead the on-chain light client to become expired. + +In the case that a highly valued light client is frozen, expired, or rendered non-updateable, a +governance proposal may be submitted to update this client, known as the subject client. The +proposal includes the client identifier for the subject, the client identifier for a substitute +client, and an initial height to reference the substitute client from. Light client implementations +may implement custom updating logic, but in most cases, the subject will be updated with information +from the substitute client, if the proposal passes. The substitute client is used as a "stand in" +while the subject is on trial. It is best practice to create a substitute client *after* the subject +has become frozen to avoid the substitute from also becoming frozen. An active substitute client +allows headers to be submitted during the voting period to prevent accidental expiry once the proposal +passes. diff --git a/versioned_docs/version-0.45/integrate/ibc/relayer.md b/versioned_docs/version-0.45/integrate/ibc/relayer.md new file mode 100644 index 000000000..10fbdfc07 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/relayer.md @@ -0,0 +1,47 @@ + + +# Relayer + +## Prerequisites Readings + +- [IBC Overview](overview.md) {prereq} +- [Events](https://github.com/cosmos/cosmos-sdk/blob/master/docs/core/events.md) {prereq} + +## Events + +Events are emitted for every transaction processed by the base application to indicate the execution +of some logic clients may want to be aware of. This is extremely useful when relaying IBC packets. +Any message that uses IBC will emit events for the corresponding TAO logic executed as defined in +the [IBC events spec](https://github.com/cosmos/ibc-go/blob/main/modules/core/spec/06_events.md). + +In the SDK, it can be assumed that for every message there is an event emitted with the type `message`, +attribute key `action`, and an attribute value representing the type of message sent +(`channel_open_init` would be the attribute value for `MsgChannelOpenInit`). If a relayer queries +for transaction events, it can split message events using this event Type/Attribute Key pair. + +The Event Type `message` with the Attribute Key `module` may be emitted multiple times for a single +message due to application callbacks. It can be assumed that any TAO logic executed will result in +a module event emission with the attribute value `ibc_` (02-client emits `ibc_client`). + +### Subscribing with Tendermint + +Calling the Tendermint RPC method `Subscribe` via [Tendermint's Websocket](https://docs.tendermint.com/master/rpc/) will return events using +Tendermint's internal representation of them. Instead of receiving back a list of events as they +were emitted, Tendermint will return the type `map[string][]string` which maps a string in the +form `.` to `attribute_value`. This causes extraction of the event +ordering to be non-trivial, but still possible. + +A relayer should use the `message.action` key to extract the number of messages in the transaction +and the type of IBC transactions sent. For every IBC transaction within the string array for +`message.action`, the necessary information should be extracted from the other event fields. If +`send_packet` appears at index 2 in the value for `message.action`, a relayer will need to use the +value at index 2 of the key `send_packet.packet_sequence`. This process should be repeated for each +piece of information needed to relay a packet. + +## Example Implementations + +- [Golang Relayer](https://github.com/iqlusioninc/relayer) +- [Hermes](https://github.com/informalsystems/ibc-rs/tree/master/relayer) +- [Typescript Relayer](https://github.com/confio/ts-relayer) diff --git a/versioned_docs/version-0.45/integrate/ibc/upgrades/README.md b/versioned_docs/version-0.45/integrate/ibc/upgrades/README.md new file mode 100644 index 000000000..d43ab3980 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/upgrades/README.md @@ -0,0 +1,14 @@ + + +### Upgrading IBC Chains Overview + +This directory contains information on how to upgrade an IBC chain without breaking counterparty clients and connections. + +IBC-connnected chains must be able to upgrade without breaking connections to other chains. Otherwise there would be a massive disincentive towards upgrading and disrupting high-value IBC connections, thus preventing chains in the IBC ecosystem from evolving and improving. Many chain upgrades may be irrelevant to IBC, however some upgrades could potentially break counterparty clients if not handled correctly. Thus, any IBC chain that wishes to perform a IBC-client-breaking upgrade must perform an IBC upgrade in order to allow counterparty clients to securely upgrade to the new light client. + +1. The [quick-guide](quick-guide.md) describes how IBC-connected chains can perform client-breaking upgrades and how relayers can securely upgrade counterparty clients using the SDK. +2. The [developer-guide](developer-guide.md) is a guide for developers intending to develop IBC client implementations with upgrade functionality. diff --git a/versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md b/versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md new file mode 100644 index 000000000..f48f0d8c8 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md @@ -0,0 +1,50 @@ + + +# IBC Client Developer Guide to Upgrades + +Learn how to implement upgrade functionality for your custom IBC client. {synopsis} + +As mentioned in the [README](README.md), it is vital that high-value IBC clients can upgrade along with their underlying chains to avoid disruption to the IBC ecosystem. Thus, IBC client developers will want to implement upgrade functionality to enable clients to maintain connections and channels even across chain upgrades. + +The IBC protocol allows client implementations to provide a path to upgrading clients given the upgraded client state, upgraded consensus state and proofs for each. + +```go +// Upgrade functions +// NOTE: proof heights are not included as upgrade to a new revision is expected to pass only on the last +// height committed by the current revision. Clients are responsible for ensuring that the planned last +// height of the current revision is somehow encoded in the proof verification process. +// This is to ensure that no premature upgrades occur, since upgrade plans committed to by the counterparty +// may be cancelled or modified before the last planned height. +VerifyUpgradeAndUpdateState( + ctx sdk.Context, + cdc codec.BinaryCodec, + store sdk.KVStore, + newClient ClientState, + newConsState ConsensusState, + proofUpgradeClient, + proofUpgradeConsState []byte, +) (upgradedClient ClientState, upgradedConsensus ConsensusState, err error) +``` + +Note that the clients should have prior knowledge of the merkle path that the upgraded client and upgraded consensus states will use. The height at which the upgrade has occurred should also be encoded in the proof. The Tendermint client implementation accomplishes this by including an `UpgradePath` in the ClientState itself, which is used along with the upgrade height to construct the merkle path under which the client state and consensus state are committed. + +Developers must ensure that the `UpgradeClientMsg` does not pass until the last height of the old chain has been committed, and after the chain upgrades, the `UpgradeClientMsg` should pass once and only once on all counterparty clients. + +Developers must ensure that the new client adopts all of the new Client parameters that must be uniform across every valid light client of a chain (chain-chosen parameters), while maintaining the Client parameters that are customizable by each individual client (client-chosen parameters) from the previous version of the client. + +Upgrades must adhere to the IBC Security Model. IBC does not rely on the assumption of honest relayers for correctness. Thus users should not have to rely on relayers to maintain client correctness and security (though honest relayers must exist to maintain relayer liveness). While relayers may choose any set of client parameters while creating a new `ClientState`, this still holds under the security model since users can always choose a relayer-created client that suits their security and correctness needs or create a Client with their desired parameters if no such client exists. + +However, when upgrading an existing client, one must keep in mind that there are already many users who depend on this client's particular parameters. We cannot give the upgrading relayer free choice over these parameters once they have already been chosen. This would violate the security model since users who rely on the client would have to rely on the upgrading relayer to maintain the same level of security. Thus, developers must make sure that their upgrade mechanism allows clients to upgrade the chain-specified parameters whenever a chain upgrade changes these parameters (examples in the Tendermint client include `UnbondingPeriod`, `ChainID`, `UpgradePath`, etc.), while ensuring that the relayer submitting the `UpgradeClientMsg` cannot alter the client-chosen parameters that the users are relying upon (examples in Tendermint client include `TrustingPeriod`, `TrustLevel`, `MaxClockDrift`, etc). + +Developers should maintain the distinction between Client parameters that are uniform across every valid light client of a chain (chain-chosen parameters), and Client parameters that are customizable by each individual client (client-chosen parameters); since this distinction is necessary to implement the `ZeroCustomFields` method in the `ClientState` interface: + +```go +// Utility function that zeroes out any client customizable fields in client state +// Ledger enforced fields are maintained while all custom fields are zero values +// Used to verify upgrades +ZeroCustomFields() ClientState +``` + +Counterparty clients can upgrade securely by using all of the chain-chosen parameters from the chain-committed `UpgradedClient` and preserving all of the old client-chosen parameters. This enables chains to securely upgrade without relying on an honest relayer, however it can in some cases lead to an invalid final `ClientState` if the new chain-chosen parameters clash with the old client-chosen parameter. This can happen in the Tendermint client case if the upgrading chain lowers the `UnbondingPeriod` (chain-chosen) to a duration below that of a counterparty client's `TrustingPeriod` (client-chosen). Such cases should be clearly documented by developers, so that chains know which upgrades should be avoided to prevent this problem. The final upgraded client should also be validated in `VerifyUpgradeAndUpdateState` before returning to ensure that the client does not upgrade to an invalid `ClientState`. diff --git a/versioned_docs/version-0.45/integrate/ibc/upgrades/quick-guide.md b/versioned_docs/version-0.45/integrate/ibc/upgrades/quick-guide.md new file mode 100644 index 000000000..d277de14f --- /dev/null +++ b/versioned_docs/version-0.45/integrate/ibc/upgrades/quick-guide.md @@ -0,0 +1,54 @@ + + +# How to Upgrade IBC Chains and their Clients + +Learn how to upgrade your chain and counterparty clients. {synopsis} + +The information in this doc for upgrading chains is relevant to SDK chains. However, the guide for counterparty clients is relevant to any Tendermint client that enables upgrades. + +### IBC Client Breaking Upgrades + +IBC-connected chains must perform an IBC upgrade if their upgrade will break counterparty IBC clients. The current IBC protocol supports upgrading tendermint chains for a specific subset of IBC-client-breaking upgrades. Here is the exhaustive list of IBC client-breaking upgrades and whether the IBC protocol currently supports such upgrades. + +IBC currently does **NOT** support unplanned upgrades. All of the following upgrades must be planned and committed to in advance by the upgrading chain, in order for counterparty clients to maintain their connections securely. + +Note: Since upgrades are only implemented for Tendermint clients, this doc only discusses upgrades on Tendermint chains that would break counterparty IBC Tendermint Clients. + +1. Changing the Chain-ID: **Supported** +2. Changing the UnbondingPeriod: **Partially Supported**, chains may increase the unbonding period with no issues. However, decreasing the unbonding period may irreversibly break some counterparty clients. Thus, it is **not recommended** that chains reduce the unbonding period. +3. Changing the height (resetting to 0): **Supported**, so long as chains remember to increment the revision number in their chain-id. +4. Changing the ProofSpecs: **Supported**, this should be changed if the proof structure needed to verify IBC proofs is changed across the upgrade. Ex: Switching from an IAVL store, to a SimpleTree Store +5. Changing the UpgradePath: **Supported**, this might involve changing the key under which upgraded clients and consensus states are stored in the upgrade store, or even migrating the upgrade store itself. +6. Migrating the IBC store: **Unsupported**, as the IBC store location is negotiated by the connection. +7. Upgrading to a backwards compatible version of IBC: Supported +8. Upgrading to a non-backwards compatible version of IBC: **Unsupported**, as IBC version is negotiated on connection handshake. +9. Changing the Tendermint LightClient algorithm: **Partially Supported**. Changes to the light client algorithm that do not change the ClientState or ConsensusState struct may be supported, provided that the counterparty is also upgraded to support the new light client algorithm. Changes that require updating the ClientState and ConsensusState structs themselves are theoretically possible by providing a path to translate an older ClientState struct into the new ClientState struct; however this is not currently implemented. + +### Step-by-Step Upgrade Process for SDK chains + +If the IBC-connected chain is conducting an upgrade that will break counterparty clients, it must ensure that the upgrade is first supported by IBC using the list above and then execute the upgrade process described below in order to prevent counterparty clients from breaking. + +1. Create an `UpgradeProposal` with an IBC ClientState in the `UpgradedClientState` field and a `UpgradePlan` in the `Plan` field. Note that the proposal `Plan` must specify an upgrade height **only** (no upgrade time), and the `ClientState` should only include the fields common to all valid clients and zero out any client-customizable fields (such as TrustingPeriod). +2. Vote on and pass the `UpgradeProposal` + +Upon the `UpgradeProposal` passing, the upgrade module will commit the UpgradedClient under the key: `upgrade/UpgradedIBCState/{upgradeHeight}/upgradedClient`. On the block right before the upgrade height, the upgrade module will also commit an initial consensus state for the next chain under the key: `upgrade/UpgradedIBCState/{upgradeHeight}/upgradedConsState`. + +Once the chain reaches the upgrade height and halts, a relayer can upgrade the counterparty clients to the last block of the old chain. They can then submit the proofs of the `UpgradedClient` and `UpgradedConsensusState` against this last block and upgrade the counterparty client. + +### Step-by-Step Upgrade Process for Relayers Upgrading Counterparty Clients + +Once the upgrading chain has committed to upgrading, relayers must wait till the chain halts at the upgrade height before upgrading counterparty clients. This is because chains may reschedule or cancel upgrade plans before they occur. Thus, relayers must wait till the chain reaches the upgrade height and halts before they can be sure the upgrade will take place. + +Thus, the upgrade process for relayers trying to upgrade the counterparty clients is as follows: + +1. Wait for the upgrading chain to reach the upgrade height and halt +2. Query a full node for the proofs of `UpgradedClient` and `UpgradedConsensusState` at the last height of the old chain. +3. Update the counterparty client to the last height of the old chain using the `UpdateClient` msg. +4. Submit an `UpgradeClient` msg to the counterparty chain with the `UpgradedClient`, `UpgradedConsensusState` and their respective proofs. +5. Submit an `UpdateClient` msg to the counterparty chain with a header from the new upgraded chain. + +The Tendermint client on the counterparty chain will verify that the upgrading chain did indeed commit to the upgraded client and upgraded consensus state at the upgrade height (since the upgrade height is included in the key). If the proofs are verified against the upgrade height, then the client will upgrade to the new client while retaining all of its client-customized fields. Thus, it will retain its old TrustingPeriod, TrustLevel, MaxClockDrift, etc; while adopting the new chain-specified fields such as UnbondingPeriod, ChainId, UpgradePath, etc. Note, this can lead to an invalid client since the old client-chosen fields may no longer be valid given the new chain-chosen fields. Upgrading chains should try to avoid these situations by not altering parameters that can break old clients. For an example, see the UnbondingPeriod example in the supported upgrades section. + +The upgraded consensus state will serve purely as a basis of trust for future `UpdateClientMsgs` and will not contain a consensus root to perform proof verification against. Thus, relayers must submit an `UpdateClientMsg` with a header from the new chain so that the connection can be used for proof verification again. From 6fc681e0849185f80bc51131d24d091604c1b3de Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 15 May 2023 22:47:38 +0200 Subject: [PATCH 11/23] review updates --- .github/workflows/deploy-docs.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index e66d51eaf..3a816a47f 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -8,6 +8,7 @@ on: - main paths: - "docs/**" + - "x/**/*.md" - .github/workflows/deploy-docs.yml permissions: @@ -33,12 +34,9 @@ jobs: # npm install npm should be removed when https://github.com/npm/cli/issues/4942 is fixed - name: Build 🔧 - - run: yarn install --frozen-lockfile - - run: yarn crowdin:sync - - name: Clean Crowdin Front Matter issues - run: bash clean.sh - shell: bash - - run: yarn build + run: | + npm install -g npm@8.5.5 + npm run build - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4.4.1 From fdefd6284d3e8891b52ea615bb1fbd1afe38abbe Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Mon, 15 May 2023 22:55:24 +0200 Subject: [PATCH 12/23] update actions --- .github/workflows/deploy-docs.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 3a816a47f..8f5b53c0f 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -34,9 +34,12 @@ jobs: # npm install npm should be removed when https://github.com/npm/cli/issues/4942 is fixed - name: Build 🔧 - run: | - npm install -g npm@8.5.5 - npm run build + - run: yarn install --frozen-lockfile + - run: yarn crowdin:sync + - name: Clean Crowdin Front Matter issues + run: bash clean.sh + shell: bash + - run: yarn build - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4.4.1 From 2d1f472ff37891a1ef15bc09e8a90c5e6413502a Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 19 May 2023 11:35:10 +0200 Subject: [PATCH 13/23] wip --- .github/workflows/deploy-docs.yml | 5 ----- custom-version-plugin.js | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 8f5b53c0f..3929c418b 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -8,7 +8,6 @@ on: - main paths: - "docs/**" - - "x/**/*.md" - .github/workflows/deploy-docs.yml permissions: @@ -35,10 +34,6 @@ jobs: # npm install npm should be removed when https://github.com/npm/cli/issues/4942 is fixed - name: Build 🔧 - run: yarn install --frozen-lockfile - - run: yarn crowdin:sync - - name: Clean Crowdin Front Matter issues - run: bash clean.sh - shell: bash - run: yarn build - name: Deploy 🚀 diff --git a/custom-version-plugin.js b/custom-version-plugin.js index c9975b4d5..f1ecdba1f 100644 --- a/custom-version-plugin.js +++ b/custom-version-plugin.js @@ -29,15 +29,15 @@ module.exports = function (_context, _options) { async loadContent() { // Read the versions.json file to get the list of versions - const versionsJsonPath = path.join(_context.siteDir, 'versions.json'); + const versionsJsonPath = path.join(_context.siteDir, 'cosmos-sdk-docs', 'versions.json'); const versions = JSON.parse(fs.readFileSync(versionsJsonPath, 'utf8')); // Read the version config file - const versionConfigPath = path.join(_context.siteDir, 'version_config.json'); + const versionConfigPath = path.join(_context.siteDir, 'cosmos-sdk-docs', 'version_config.json'); const versionConfig = JSON.parse(fs.readFileSync(versionConfigPath, 'utf8')); // Read all the files in the /docs folder - const docsPath = path.join(_context.siteDir, 'docs'); + const docsPath = path.join(_context.siteDir, 'cosmos-sdk-docs', 'docs'); const files = getAllFiles(docsPath); // Iterate through the list of versions From 8f291cb1275c3037411ae56016b3aec211244243 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Sun, 11 Jun 2023 16:34:02 +0200 Subject: [PATCH 14/23] Update deploy-docs.yml --- .github/workflows/deploy-docs.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index e66d51eaf..5e2e3201e 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -31,12 +31,6 @@ jobs: with: node-version: "16.x" - # npm install npm should be removed when https://github.com/npm/cli/issues/4942 is fixed - - name: Build 🔧 - - run: yarn install --frozen-lockfile - - run: yarn crowdin:sync - - name: Clean Crowdin Front Matter issues - run: bash clean.sh shell: bash - run: yarn build From c7d8c0d711e53fcf5fba149c04a7e90d50e7115e Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Fri, 19 May 2023 11:45:23 +0200 Subject: [PATCH 15/23] Update custom-version-plugin.js --- custom-version-plugin.js | 18 ++-- docs/develop/_category_.json | 6 +- docusaurus.config.js | 16 +++- version_config.json | 20 ++-- .../version-0.45/integrate/ibc/README.md | 2 +- .../version-0.45/integrate/ibc/integration.md | 2 +- .../version-0.45/integrate/ibc/overview.md | 2 +- .../version-0.45/integrate/modules/README.md | 37 ++++++++ .../version-0.45/integrate/rfc/README.md | 34 +++++++ .../building-modules/11-structure.md | 93 +++++++++++++++++++ .../version-0.46/integrate/modules/README.md | 39 ++++++++ .../version-0.46/integrate/rfc/README.md | 34 +++++++ 12 files changed, 276 insertions(+), 27 deletions(-) create mode 100644 versioned_docs/version-0.45/integrate/modules/README.md create mode 100644 versioned_docs/version-0.45/integrate/rfc/README.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/11-structure.md create mode 100644 versioned_docs/version-0.46/integrate/modules/README.md create mode 100644 versioned_docs/version-0.46/integrate/rfc/README.md diff --git a/custom-version-plugin.js b/custom-version-plugin.js index f1ecdba1f..8c4cf997d 100644 --- a/custom-version-plugin.js +++ b/custom-version-plugin.js @@ -3,15 +3,15 @@ const path = require('path'); // Helper function to get all files recursively from a directory function getAllFiles(dirPath, arrayOfFiles) { - const files = fs.readdirSync(dirPath); - arrayOfFiles = arrayOfFiles || []; + const files = fs.readdirSync(dirPath); files.forEach(function (file) { - if (fs.statSync(path.join(dirPath, file)).isDirectory()) { - arrayOfFiles = getAllFiles(path.join(dirPath, file), arrayOfFiles); + const filePath = path.join(dirPath, file); + if (fs.statSync(filePath).isDirectory()) { + arrayOfFiles = getAllFiles(filePath, arrayOfFiles); } else { - arrayOfFiles.push(path.join(dirPath, file)); + arrayOfFiles.push(filePath); } }); @@ -29,15 +29,15 @@ module.exports = function (_context, _options) { async loadContent() { // Read the versions.json file to get the list of versions - const versionsJsonPath = path.join(_context.siteDir, 'cosmos-sdk-docs', 'versions.json'); + const versionsJsonPath = path.join(_context.siteDir, 'versions.json'); const versions = JSON.parse(fs.readFileSync(versionsJsonPath, 'utf8')); // Read the version config file - const versionConfigPath = path.join(_context.siteDir, 'cosmos-sdk-docs', 'version_config.json'); + const versionConfigPath = path.join(_context.siteDir, 'version_config.json'); const versionConfig = JSON.parse(fs.readFileSync(versionConfigPath, 'utf8')); // Read all the files in the /docs folder - const docsPath = path.join(_context.siteDir, 'cosmos-sdk-docs', 'docs'); + const docsPath = path.join(_context.siteDir, 'docs'); const files = getAllFiles(docsPath); // Iterate through the list of versions @@ -54,6 +54,8 @@ module.exports = function (_context, _options) { // Check if the file exists in the version directory if (!fs.existsSync(customFilePath) && !shouldExcludeFile(version, relativePath, versionConfig)) { // If the file doesn't exist and it's not excluded, copy it from the /docs folder + const customFileDir = path.dirname(customFilePath); + fs.mkdirSync(customFileDir, { recursive: true }); fs.copyFileSync(file, customFilePath); console.log(`Copied file from /docs to version-${version}:`, relativePath); } diff --git a/docs/develop/_category_.json b/docs/develop/_category_.json index 8b015fa11..f40637f4d 100644 --- a/docs/develop/_category_.json +++ b/docs/develop/_category_.json @@ -1,5 +1,5 @@ { - "label": "Develop", - "position": 0, - "link": null + "label": "Develop", + "position": 0, + "link": null } \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 58eee8fb0..0454ec6f8 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -3,9 +3,8 @@ const lightCodeTheme = require("prism-react-renderer/themes/github"); const darkCodeTheme = require("prism-react-renderer/themes/dracula"); -const customVersionPlugin = require('./custom-version-plugin'); - +// const lastVersion = "v0.47"; const lastVersion = "current"; /** @type {import('@docusaurus/types').Config} */ @@ -107,6 +106,18 @@ const config = { position: "right", dropdownActiveClassDisabled: true, // versions not yet migrated to docusaurus + dropdownItemsAfter: [ + { + href: "https://docs.cosmos.network/v0.46/", + label: "v0.46", + target: "_self", + }, + { + href: "https://docs.cosmos.network/v0.45/", + label: "v0.45", + target: "_self", + }, + ], }, ], }, @@ -207,7 +218,6 @@ const config = { }, }; }, - customVersionPlugin, [ "@docusaurus/plugin-google-analytics", { diff --git a/version_config.json b/version_config.json index efcb80dcd..5c9fa3b7c 100644 --- a/version_config.json +++ b/version_config.json @@ -1,29 +1,29 @@ { "0.45": { - "excludedPaths": ["integrate/modules/slashing", "integrate/modules/nft", "integrate/modules/group", "integrate/modules/genutil", - "integrate/modules/consensus", "integrate/modules/circuit", "integrate/building-modules/autocli", "integrate/building-modules/depinject", - "integrate/building-modules/testing", "integrate/building-apps", "integrate/architecture/rfc", "integrate/specs", "interate/architeture/adr-041-in-place-store-migrations", "interate/architeture/adr-042-group-module", + "excludedPaths": ["integrate/modules/slashing", "integrate/modules/nft", "integrate/building-modules/15-depinject.md", "integrate/modules/genutil", + "integrate/modules/consensus", "integrate/modules/circuit", "integrate/building-apps","integrate/building-modules/autocli", "integrate/building-modules/depinject", + "integrate/building-modules/testing", "integrate/building-apps", "integrate/architecture/rfc", "integrate/specs", "integrate/architecture/adr-041-in-place-store-migrations", "integrate/architecture/adr-042-group-module", "integrate/architecture/adr-043-nft-module", "integrate/architecture/adr-044-protobuf-updates-guidelines", "integrate/architecture/adr-045-check-delivertx-middlewares", "integrate/architecture/adr-046-module-params", "integrate/architecture/adr-046-module-params", "integrate/architecture/adr-047-extend-upgrade-plan", "integrate/architecture/adr-048-consensus-fees", "integrate/architecture/adr-049-state-sync-hooks", "integrate/architecture/adr-050-sign-mode-textual", - "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/architecture/adr-053-go-module-refactoring","integrate/arcitecture/adr-054-semver-compatible-modules", + "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/architecture/adr-053-go-module-refactoring","integrate/architecture/adr-054-semver-compatible-modules", "integrate/architecture/adr-055-orm", "integrate/architecture/adr-057-app-wiring", "integrate/architecture/adr-058-auto-generated-cli", "integrate/architecture/adr-059-test-scopes", "integrate/architecture/adr-060-abci-1.0", "integrate/architecture/adr-061-liquid-staking", "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-063-core-module-api", "integrate/architecture/adr-064-abci-2.0", - "integrate/architecture/adr-065-store-v2"] + "integrate/architecture/adr-065-store-v2", "integrate/architecture/README"] }, "0.46": { - "excludedPaths": ["integrate/modules/genutil", "integrate/modules/consensus", "integrate/modules/circuit", "integrate/architecture/rfc", - "integrate/specs", "integrate/tooling", "integrate/building-modules/depinject", "integrate/architecture/adr-007-specialization-groups", + "excludedPaths": ["integrate/modules/genutil", "integrate/building-modules/15-depinject.md","integrate/modules/consensus", "integrate/modules/circuit", "integrate/architecture/rfc", + "integrate/specs", "integrate/building-apps", "integrate/building-modules/depinject", "integrate/architecture/adr-007-specialization-groups", "integrate/architecture/adr-008-dCERT-group", "integrate/architecture/adr-014-proportional-slashing", - "integrate/architecture/adr-034-account-rekeying", "interate/architeture/adr-041-in-place-store-migrations", "interate/architeture/adr-042-group-module", + "integrate/architecture/adr-034-account-keying", "integrate/architecture/adr-041-in-place-store-migrations", "integrate/architecture/adr-042-group-module", "integrate/architecture/adr-043-nft-module", "integrate/architecture/adr-044-protobuf-updates-guidelines", "integrate/architecture/adr-045-check-delivertx-middlewares", "integrate/architecture/adr-048-consensus-fees", "integrate/architecture/adr-049-state-sync-hooks", "integrate/architecture/adr-050-sign-mode-textual", - "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/arcitecture/adr-054-semver-compatible-modules", + "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/architecture/adr-054-semver-compatible-modules", "integrate/architecture/adr-055-orm", "integrate/architecture/adr-057-app-wiring", "integrate/architecture/adr-058-auto-generated-cli", "integrate/architecture/adr-059-test-scopes", "integrate/architecture/adr-060-abci-1.0", "integrate/architecture/adr-061-liquid-staking", "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-063-core-module-api", "integrate/architecture/adr-064-abci-2.0", - "integrate/architecture/adr-065-store-v2"] + "integrate/architecture/adr-065-store-v2", "integrate/architecture/README"] }, "0.47": { "excludedPaths": [] diff --git a/versioned_docs/version-0.45/integrate/ibc/README.md b/versioned_docs/version-0.45/integrate/ibc/README.md index 3d002f2df..8caf30f1b 100644 --- a/versioned_docs/version-0.45/integrate/ibc/README.md +++ b/versioned_docs/version-0.45/integrate/ibc/README.md @@ -17,4 +17,4 @@ This repository contains reference documentation for the IBC protocol integratio **NOTE**: The IBC module has been moved to its [own repository](https://github.com/cosmos/ibc-go). After reading about IBC, head on to the [Building Modules -documentation](../building-modules/README.md) to learn more about the process of building modules. +documentation](../building-modules/) to learn more about the process of building modules. diff --git a/versioned_docs/version-0.45/integrate/ibc/integration.md b/versioned_docs/version-0.45/integrate/ibc/integration.md index 209f51e46..6364c8275 100644 --- a/versioned_docs/version-0.45/integrate/ibc/integration.md +++ b/versioned_docs/version-0.45/integrate/ibc/integration.md @@ -165,7 +165,7 @@ func NewApp(...args) *App { ### Module Managers -In order to use IBC, we need to add the new modules to the module `Manager` and to the `SimulationManager` in case your application supports [simulations](./../building-modules/simulator.md). +In order to use IBC, we need to add the new modules to the module `Manager` and to the `SimulationManager` in case your application supports [simulations](../building-modules/simulator). ```go // app.go diff --git a/versioned_docs/version-0.45/integrate/ibc/overview.md b/versioned_docs/version-0.45/integrate/ibc/overview.md index 437114ace..82ccddf15 100644 --- a/versioned_docs/version-0.45/integrate/ibc/overview.md +++ b/versioned_docs/version-0.45/integrate/ibc/overview.md @@ -50,7 +50,7 @@ In IBC, blockchains do not directly pass messages to each other over the network - The proof format that all implementations must produce and verify is defined in [ICS-23 implementation](https://github.com/confio/ics23). -### [Capabilities](./ocap.md) +### Capabilities IBC is intended to work in execution environments where modules do not necessarily trust each other. IBC must authenticate module actions on ports and channels so that only modules with the appropriate permissions can use the channels. This security is accomplished using [dynamic capabilities](../architecture/adr-003-dynamic-capability-store.md). Upon binding to a port or creating a channel for a module, IBC returns a dynamic capability that the module must claim to use that port or channel. This binding strategy prevents other modules from using that port or channel since those modules do not own the appropriate capability. diff --git a/versioned_docs/version-0.45/integrate/modules/README.md b/versioned_docs/version-0.45/integrate/modules/README.md new file mode 100644 index 000000000..eaa7b96fc --- /dev/null +++ b/versioned_docs/version-0.45/integrate/modules/README.md @@ -0,0 +1,37 @@ +--- +sidebar_position: 0 +slug : /modules +--- + +# Module Summary + +Here are some production-grade modules that can be used in Cosmos SDK applications, along with their respective documentation: + +* [Auth](auth/README.md) - Authentication of accounts and transactions for Cosmos SDK applications. +* [Authz](authz/README.md) - Authorization for accounts to perform actions on behalf of other accounts. +* [Bank](bank/README.md) - Token transfer functionalities. +* [Crisis](crisis/README.md) - Halting the blockchain under certain circumstances (e.g. if an invariant is broken). +* [Distribution](distribution/README.md) - Fee distribution, and staking token provision distribution. +* [Evidence](evidence/README.md) - Evidence handling for double signing, misbehaviour, etc. +* [Feegrant](feegrant/README.md) - Grant fee allowances for executing transactions. +* [Governance](gov/README.md) - On-chain proposals and voting. +* [Mint](mint/README.md) - Creation of new units of staking token. +* [Params](params/README.md) - Globally available parameter store. +* [Staking](staking/README.md) - Proof-of-Stake layer for public blockchains. +* [Upgrade](upgrade/README.md) - Software upgrades handling and coordination. + +To learn more about the process of building modules, visit the [building modules reference documentation](https://docs.cosmos.network/main/building-modules/intro). + +## IBC + +The IBC module for the SDK is maintained by the IBC Go team in its [own repository](https://github.com/cosmos/ibc-go). + +Additionally, the [capability module](https://github.com/cosmos/ibc-go/tree/fdd664698d79864f1e00e147f9879e58497b5ef1/modules/capability) is from v0.48+ maintained by the IBC Go team in its [own repository](https://github.com/cosmos/ibc-go/tree/fdd664698d79864f1e00e147f9879e58497b5ef1/modules/capability). + +## CosmWasm + +The CosmWasm module enables smart contracts, learn more by going to their [documentation site](https://book.cosmwasm.com/), or visit [the repository](https://github.com/CosmWasm/cosmwasm). + +## EVM + +Read more about writing smart contracts with solidity at the official [`evm` documentation page](https://docs.evmos.org/modules/evm/). diff --git a/versioned_docs/version-0.45/integrate/rfc/README.md b/versioned_docs/version-0.45/integrate/rfc/README.md new file mode 100644 index 000000000..be74d080d --- /dev/null +++ b/versioned_docs/version-0.45/integrate/rfc/README.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 1 +--- + +# Requests for Comments + +A Request for Comments (RFC) is a record of discussion on an open-ended topic +related to the design and implementation of the Cosmos SDK, for which no +immediate decision is required. + +The purpose of an RFC is to serve as a historical record of a high-level +discussion that might otherwise only be recorded in an ad-hoc way (for example, +via gists or Google docs) that are difficult to discover for someone after the +fact. An RFC _may_ give rise to more specific architectural _decisions_ for +the Cosmos SDK, but those decisions must be recorded separately in +[Architecture Decision Records (ADR)](../architecture). + +As a rule of thumb, if you can articulate a specific question that needs to be +answered, write an ADR. If you need to explore the topic and get input from +others to know what questions need to be answered, an RFC may be appropriate. + +## RFC Content + +An RFC should provide: + +* A **changelog**, documenting when and how the RFC has changed. +* An **abstract**, briefly summarizing the topic so the reader can quickly tell + whether it is relevant to their interest. +* Any **background** a reader will need to understand and participate in the + substance of the discussion (links to other documents are fine here). +* The **discussion**, the primary content of the document. + +The [rfc-template.md](rfc-template.md) file includes placeholders for these +sections. diff --git a/versioned_docs/version-0.46/integrate/building-modules/11-structure.md b/versioned_docs/version-0.46/integrate/building-modules/11-structure.md new file mode 100644 index 000000000..3520dfa48 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/11-structure.md @@ -0,0 +1,93 @@ +--- +sidebar_position: 1 +--- + +# Recommended Folder Structure + +:::note Synopsis +This document outlines the recommended structure of Cosmos SDK modules. These ideas are meant to be applied as suggestions. Application developers are encouraged to improve upon and contribute to module structure and development design. +::: + +## Structure + +A typical Cosmos SDK module can be structured as follows: + +```shell +proto +└── {project_name} +    └── {module_name} +    └── {proto_version} +       ├── {module_name}.proto +       ├── event.proto +       ├── genesis.proto +       ├── query.proto +       └── tx.proto +``` + +* `{module_name}.proto`: The module's common message type definitions. +* `event.proto`: The module's message type definitions related to events. +* `genesis.proto`: The module's message type definitions related to genesis state. +* `query.proto`: The module's Query service and related message type definitions. +* `tx.proto`: The module's Msg service and related message type definitions. + +```shell +x/{module_name} +├── client +│   ├── cli +│   │ ├── query.go +│   │   └── tx.go +│   └── testutil +│   ├── cli_test.go +│   └── suite.go +├── exported +│   └── exported.go +├── keeper +│   ├── genesis.go +│   ├── grpc_query.go +│   ├── hooks.go +│   ├── invariants.go +│   ├── keeper.go +│   ├── keys.go +│   ├── msg_server.go +│   └── querier.go +├── module +│   └── module.go +│   └── abci.go +├── simulation +│   ├── decoder.go +│   ├── genesis.go +│   ├── operations.go +│   └── params.go +├── {module_name}.pb.go +├── codec.go +├── errors.go +├── events.go +├── events.pb.go +├── expected_keepers.go +├── genesis.go +├── genesis.pb.go +├── keys.go +├── msgs.go +├── params.go +├── query.pb.go +├── tx.pb.go +└── 05-depinject.md +``` + +* `client/`: The module's CLI client functionality implementation and the module's CLI testing suite. +* `exported/`: The module's exported types - typically interface types. If a module relies on keepers from another module, it is expected to receive the keepers as interface contracts through the `expected_keepers.go` file (see below) in order to avoid a direct dependency on the module implementing the keepers. However, these interface contracts can define methods that operate on and/or return types that are specific to the module that is implementing the keepers and this is where `exported/` comes into play. The interface types that are defined in `exported/` use canonical types, allowing for the module to receive the keepers as interface contracts through the `expected_keepers.go` file. This pattern allows for code to remain DRY and also alleviates import cycle chaos. +* `keeper/`: The module's `Keeper` and `MsgServer` implementation. +* `module/`: The module's `AppModule` and `AppModuleBasic` implementation. + * `abci.go`: The module's `BeginBlocker` and `EndBlocker` implementations (this file is only required if `BeginBlocker` and/or `EndBlocker` need to be defined). +* `simulation/`: The module's [simulation](14-simulator.md) package defines functions used by the blockchain simulator application (`simapp`). +* `REAMDE.md`: The module's specification documents outlining important concepts, state storage structure, and message and event type definitions. Learn more how to write module specs in the [spec guidelines](../spec/SPEC_MODULE.md). +* The root directory includes type definitions for messages, events, and genesis state, including the type definitions generated by Protocol Buffers. + * `codec.go`: The module's registry methods for interface types. + * `errors.go`: The module's sentinel errors. + * `events.go`: The module's event types and constructors. + * `expected_keepers.go`: The module's [expected keeper](06-keeper.md#type-definition) interfaces. + * `genesis.go`: The module's genesis state methods and helper functions. + * `keys.go`: The module's store keys and associated helper functions. + * `msgs.go`: The module's message type definitions and associated methods. + * `params.go`: The module's parameter type definitions and associated methods. + * `*.pb.go`: The module's type definitions generated by Protocol Buffers (as defined in the respective `*.proto` files above). diff --git a/versioned_docs/version-0.46/integrate/modules/README.md b/versioned_docs/version-0.46/integrate/modules/README.md new file mode 100644 index 000000000..2270e78eb --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/README.md @@ -0,0 +1,39 @@ +--- +sidebar_position: 0 +slug : /modules +--- + +# Module Summary + +Here are some production-grade modules that can be used in Cosmos SDK applications, along with their respective documentation: + +* [Auth](auth/README.md) - Authentication of accounts and transactions for Cosmos SDK applications. +* [Authz](authz/README.md) - Authorization for accounts to perform actions on behalf of other accounts. +* [Bank](bank/README.md) - Token transfer functionalities. +* [Crisis](crisis/README.md) - Halting the blockchain under certain circumstances (e.g. if an invariant is broken). +* [Distribution](distribution/README.md) - Fee distribution, and staking token provision distribution. +* [Evidence](evidence/README.md) - Evidence handling for double signing, misbehaviour, etc. +* [Feegrant](feegrant/README.md) - Grant fee allowances for executing transactions. +* [Governance](gov/README.md) - On-chain proposals and voting. +* [Mint](mint/README.md) - Creation of new units of staking token. +* [Params](params/README.md) - Globally available parameter store. +* [Slashing](slashing/README.md) - Validator punishment mechanisms. +* [Staking](staking/README.md) - Proof-of-Stake layer for public blockchains. +* [Upgrade](upgrade/README.md) - Software upgrades handling and coordination. +* [NFT](nft/README.md) - NFT module implemented based on [ADR43](https://docs.cosmos.network/main/architecture/adr-043-nft-module.html). + +To learn more about the process of building modules, visit the [building modules reference documentation](https://docs.cosmos.network/main/building-modules/intro). + +## IBC + +The IBC module for the SDK is maintained by the IBC Go team in its [own repository](https://github.com/cosmos/ibc-go). + +Additionally, the [capability module](https://github.com/cosmos/ibc-go/tree/fdd664698d79864f1e00e147f9879e58497b5ef1/modules/capability) is from v0.48+ maintained by the IBC Go team in its [own repository](https://github.com/cosmos/ibc-go/tree/fdd664698d79864f1e00e147f9879e58497b5ef1/modules/capability). + +## CosmWasm + +The CosmWasm module enables smart contracts, learn more by going to their [documentation site](https://book.cosmwasm.com/), or visit [the repository](https://github.com/CosmWasm/cosmwasm). + +## EVM + +Read more about writing smart contracts with solidity at the official [`evm` documentation page](https://docs.evmos.org/modules/evm/). diff --git a/versioned_docs/version-0.46/integrate/rfc/README.md b/versioned_docs/version-0.46/integrate/rfc/README.md new file mode 100644 index 000000000..be74d080d --- /dev/null +++ b/versioned_docs/version-0.46/integrate/rfc/README.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 1 +--- + +# Requests for Comments + +A Request for Comments (RFC) is a record of discussion on an open-ended topic +related to the design and implementation of the Cosmos SDK, for which no +immediate decision is required. + +The purpose of an RFC is to serve as a historical record of a high-level +discussion that might otherwise only be recorded in an ad-hoc way (for example, +via gists or Google docs) that are difficult to discover for someone after the +fact. An RFC _may_ give rise to more specific architectural _decisions_ for +the Cosmos SDK, but those decisions must be recorded separately in +[Architecture Decision Records (ADR)](../architecture). + +As a rule of thumb, if you can articulate a specific question that needs to be +answered, write an ADR. If you need to explore the topic and get input from +others to know what questions need to be answered, an RFC may be appropriate. + +## RFC Content + +An RFC should provide: + +* A **changelog**, documenting when and how the RFC has changed. +* An **abstract**, briefly summarizing the topic so the reader can quickly tell + whether it is relevant to their interest. +* Any **background** a reader will need to understand and participate in the + substance of the discussion (links to other documents are fine here). +* The **discussion**, the primary content of the document. + +The [rfc-template.md](rfc-template.md) file includes placeholders for these +sections. From 1a38534dbe886c7a19e58fbe9a9c340c83bb5281 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Sun, 11 Jun 2023 23:12:07 +0200 Subject: [PATCH 16/23] update to versioning --- versioned_docs/version-0.45/.gitkeep | 0 versioned_docs/version-0.46/.gitkeep | 0 versioned_docs/version-0.47/.gitkeep | 0 .../version-0.47/validate/05-run-testnet.md | 101 ++++++++++++++++++ 4 files changed, 101 insertions(+) delete mode 100644 versioned_docs/version-0.45/.gitkeep delete mode 100644 versioned_docs/version-0.46/.gitkeep delete mode 100644 versioned_docs/version-0.47/.gitkeep create mode 100644 versioned_docs/version-0.47/validate/05-run-testnet.md diff --git a/versioned_docs/version-0.45/.gitkeep b/versioned_docs/version-0.45/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/versioned_docs/version-0.46/.gitkeep b/versioned_docs/version-0.46/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/versioned_docs/version-0.47/.gitkeep b/versioned_docs/version-0.47/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/versioned_docs/version-0.47/validate/05-run-testnet.md b/versioned_docs/version-0.47/validate/05-run-testnet.md new file mode 100644 index 000000000..e9a06ed34 --- /dev/null +++ b/versioned_docs/version-0.47/validate/05-run-testnet.md @@ -0,0 +1,101 @@ +--- +sidebar_position: 1 +--- + +# Running a Testnet + +:::note Synopsis +The `simd testnet` subcommand makes it easy to initialize and start a simulated test network for testing purposes. +::: + +In addition to the commands for [running a node](../user/run-node/01-run-node.md), the `simd` binary also includes a `testnet` command that allows you to start a simulated test network in-process or to initialize files for a simulated test network that runs in a separate process. + +## Initialize Files + +First, let's take a look at the `init-files` subcommand. + +This is similar to the `init` command when initializing a single node, but in this case we are initializing multiple nodes, generating the genesis transactions for each node, and then collecting those transactions. + +The `init-files` subcommand initializes the necessary files to run a test network in a separate process (i.e. using a Docker container). Running this command is not a prerequisite for the `start` subcommand ([see below](#start-testnet)). + +In order to initialize the files for a test network, run the following command: + +```bash +simd testnet init-files +``` + +You should see the following output in your terminal: + +```bash +Successfully initialized 4 node directories +``` + +The default output directory is a relative `.testnets` directory. Let's take a look at the files created within the `.testnets` directory. + +### gentxs + +The `gentxs` directory includes a genesis transaction for each validator node. Each file includes a JSON encoded genesis transaction used to register a validator node at the time of genesis. The genesis transactions are added to the `genesis.json` file within each node directory during the initilization process. + +### nodes + +A node directory is created for each validator node. Within each node directory is a `simd` directory. The `simd` directory is the home directory for each node, which includes the configuration and data files for that node (i.e. the same files included in the default `~/.simapp` directory when running a single node). + +## Start Testnet + +Now, let's take a look at the `start` subcommand. + +The `start` subcommand both initializes and starts an in-process test network. This is the fastest way to spin up a local test network for testing purposes. + +You can start the local test network by running the following command: + +```bash +simd testnet start +``` + +You should see something similar to the following: + +```bash +acquiring test network lock +preparing test network with chain-id "chain-mtoD9v" + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++ THIS MNEMONIC IS FOR TESTING PURPOSES ONLY ++ +++ DO NOT USE IN PRODUCTION ++ +++ ++ +++ sustain know debris minute gate hybrid stereo custom ++ +++ divorce cross spoon machine latin vibrant term oblige ++ +++ moment beauty laundry repeat grab game bronze truly ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +starting test network... +started test network +press the Enter Key to terminate +``` + +The first validator node is now running in-process, which means the test network will terminate once you either close the terminal window or you press the Enter key. In the output, the mnemonic phrase for the first validator node is provided for testing purposes. The validator node is using the same default addresses being used when initializing and starting a single node (no need to provide a `--node` flag). + +Check the status of the first validator node: + +```shell +simd status +``` + +Import the key from the provided mnemonic: + +```shell +simd keys add test --recover --keyring-backend test +``` + +Check the balance of the account address: + +```shell +simd q bank balances [address] +``` + +Use this test account to manually test against the test network. + +## Testnet Options + +You can customize the configuration of the test network with flags. In order to see all flag options, append the `--help` flag to each command. From 32951efac9afe66eaba99d1a26666450c192d2e6 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Sun, 11 Jun 2023 23:30:07 +0200 Subject: [PATCH 17/23] Update docusaurus.config.js --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 0454ec6f8..e56d017f1 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -13,7 +13,7 @@ const config = { tagline: "Cosmos SDK is the world's most popular framework for building application-specific blockchains.", url: "https://docs.cosmos.network", - baseUrl: "/", + baseUrl: "/cosmos-sdk-docs", onBrokenLinks: "warn", onBrokenMarkdownLinks: "warn", favicon: "img/favicon.svg", From aed7321b2de405f5683369815114fb1421dc51d0 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Sun, 11 Jun 2023 23:34:35 +0200 Subject: [PATCH 18/23] Update deploy-docs.yml --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index b762ea92f..f3a4447ee 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -39,5 +39,5 @@ jobs: uses: JamesIves/github-pages-deploy-action@v4.4.1 with: branch: gh-pages - folder: build + folder: ~/output single-commit: true \ No newline at end of file From 7f05aab7a430bc06e3582f10c76b58d830016b0c Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Thu, 13 Jul 2023 19:22:48 +0200 Subject: [PATCH 19/23] Update docusaurus.config.js --- docusaurus.config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docusaurus.config.js b/docusaurus.config.js index e56d017f1..0fa2e5272 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -3,6 +3,7 @@ const lightCodeTheme = require("prism-react-renderer/themes/github"); const darkCodeTheme = require("prism-react-renderer/themes/dracula"); +const customVersionPlugin = require('./custom-version-plugin'); // const lastVersion = "v0.47"; const lastVersion = "current"; @@ -218,6 +219,7 @@ const config = { }, }; }, + customVersionPlugin, [ "@docusaurus/plugin-google-analytics", { From 1f13d71aca8ce139d0377fb15c9e5df1f44043ea Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 18 Jul 2023 12:57:28 +0200 Subject: [PATCH 20/23] wip 0.46 --- .../develop/advanced-concepts/00-baseapp.md | 434 ++++++++++++++++++ .../advanced-concepts/01-transactions.md | 195 ++++++++ .../develop/advanced-concepts/04-store.md | 281 ++++++++++++ .../develop/advanced-concepts/10-ocap.md | 77 ++++ .../baseapp_state-begin_block.png | Bin 0 -> 20565 bytes .../baseapp_state-checktx.png | Bin 0 -> 82308 bytes .../baseapp_state-commit.png | Bin 0 -> 47662 bytes .../baseapp_state-deliver_tx.png | Bin 0 -> 59007 bytes .../baseapp_state-initchain.png | Bin 0 -> 32800 bytes .../baseapp_state-processproposal.png | Bin 0 -> 248588 bytes .../advanced-concepts/baseapp_state_types.png | Bin 0 -> 133747 bytes .../develop/advanced-concepts/ocap.md | 78 ++++ .../high-level-concepts/01-tx-lifecycle.md | 264 +++++++++++ .../high-level-concepts/03-accounts.md | 168 +++++++ 14 files changed, 1497 insertions(+) create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/04-store.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/10-ocap.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-begin_block.png create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-checktx.png create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-commit.png create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-deliver_tx.png create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-initchain.png create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-processproposal.png create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state_types.png create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/ocap.md create mode 100644 versioned_docs/version-0.46/develop/high-level-concepts/01-tx-lifecycle.md create mode 100644 versioned_docs/version-0.46/develop/high-level-concepts/03-accounts.md diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md b/versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md new file mode 100644 index 000000000..ce6bc4957 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md @@ -0,0 +1,434 @@ +# BaseApp + +:::note Synopsis +This document describes `BaseApp`, the abstraction that implements the core functionalities of a Cosmos SDK application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) +* [Lifecycle of a Cosmos SDK transaction](../high-level-concepts/01-tx-lifecycle.md) + +::: + +## Introduction + +`BaseApp` is a base type that implements the core of a Cosmos SDK application, namely: + +* The [Application Blockchain Interface](#main-abci-10-messages), for the state-machine to communicate with the underlying consensus engine (e.g. CometBFT). +* [Service Routers](#service-routers), to route messages and queries to the appropriate module. +* Different [states](#state-updates), as the state-machine can have different volatile states updated based on the ABCI message received. + +The goal of `BaseApp` is to provide the fundamental layer of a Cosmos SDK application +that developers can easily extend to build their own custom application. Usually, +developers will create a custom type for their application, like so: + +```go +type App struct { + // reference to a BaseApp + *baseapp.BaseApp + + // list of application store keys + + // list of application keepers + + // module manager +} +``` + +Extending the application with `BaseApp` gives the former access to all of `BaseApp`'s methods. +This allows developers to compose their custom application with the modules they want, while not +having to concern themselves with the hard work of implementing the ABCI, the service routers and state +management logic. + +## Type Definition + +The `BaseApp` type holds many important parameters for any Cosmos SDK based application. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L50-L146 +``` + +Let us go through the most important components. + +> **Note**: Not all parameters are described, only the most important ones. Refer to the +> type definition for the full list. + +First, the important parameters that are initialized during the bootstrapping of the application: + +* [`CommitMultiStore`](04-store.md#commitmultistore): This is the main store of the application, + which holds the canonical state that is committed at the [end of each block](#commit). This store + is **not** cached, meaning it is not used to update the application's volatile (un-committed) states. + The `CommitMultiStore` is a multi-store, meaning a store of stores. Each module of the application + uses one or multiple `KVStores` in the multi-store to persist their subset of the state. +* Database: The `db` is used by the `CommitMultiStore` to handle data persistence. +* [`Msg` Service Router](#msg-service-router): The `msgServiceRouter` facilitates the routing of `sdk.Msg` requests to the appropriate + module `Msg` service for processing. Here a `sdk.Msg` refers to the transaction component that needs to be + processed by a service in order to update the application state, and not to ABCI message which implements + the interface between the application and the underlying consensus engine. +* [gRPC Query Router](#grpc-query-router): The `grpcQueryRouter` facilitates the routing of gRPC queries to the + appropriate module for it to be processed. These queries are not ABCI messages themselves, but they + are relayed to the relevant module's gRPC `Query` service. +* [`TxDecoder`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types#TxDecoder): It is used to decode + raw transaction bytes relayed by the underlying CometBFT engine. +* [`AnteHandler`](#antehandler): This handler is used to handle signature verification, fee payment, + and other pre-message execution checks when a transaction is received. It's executed during + [`CheckTx/RecheckTx`](#checktx) and [`DeliverTx`](#delivertx). +* [`InitChainer`](../high-level-concepts/00-overview-app.md#initchainer), + [`BeginBlocker` and `EndBlocker`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblocker): These are + the functions executed when the application receives the `InitChain`, `BeginBlock` and `EndBlock` + ABCI messages from the underlying CometBFT engine. + +Then, parameters used to define [volatile states](#state-updates) (i.e. cached states): + +* `checkState`: This state is updated during [`CheckTx`](#checktx), and reset on [`Commit`](#commit). +* `deliverState`: This state is updated during [`DeliverTx`](#delivertx), and set to `nil` on + [`Commit`](#commit) and gets re-initialized on BeginBlock. +* `processProposalState`: This state is updated during [`ProcessProposal`](#process-proposal). +* `prepareProposalState`: This state is updated during [`PrepareProposal`](#prepare-proposal). + +Finally, a few more important parameters: + +* `voteInfos`: This parameter carries the list of validators whose precommit is missing, either + because they did not vote or because the proposer did not include their vote. This information is + carried by the and can be used by the application for various things like + punishing absent validators. +* `minGasPrices`: This parameter defines the minimum gas prices accepted by the node. This is a + **local** parameter, meaning each full-node can set a different `minGasPrices`. It is used in the + `AnteHandler` during [`CheckTx`](#checktx), mainly as a spam protection mechanism. The transaction + enters the [mempool](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#mempool-methods) + only if the gas prices of the transaction are greater than one of the minimum gas price in + `minGasPrices` (e.g. if `minGasPrices == 1uatom,1photon`, the `gas-price` of the transaction must be + greater than `1uatom` OR `1photon`). +* `appVersion`: Version of the application. It is set in the + [application's constructor function](../high-level-concepts/00-overview-app.md#constructor-function). + +## Constructor + +```go +func NewBaseApp( + name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp), +) *BaseApp { + + // ... +} +``` + +The `BaseApp` constructor function is pretty straightforward. The only thing worth noting is the +possibility to provide additional [`options`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/options.go) +to the `BaseApp`, which will execute them in order. The `options` are generally `setter` functions +for important parameters, like `SetPruning()` to set pruning options or `SetMinGasPrices()` to set +the node's `min-gas-prices`. + +Naturally, developers can add additional `options` based on their application's needs. + +## State Updates + +The `BaseApp` maintains two primary volatile states and a root or main state. The main state +is the canonical state of the application and the volatile states, `checkState` and `deliverState`, +are used to handle state transitions in-between the main state made during [`Commit`](#commit). + +Internally, there is only a single `CommitMultiStore` which we refer to as the main or root state. +From this root state, we derive two volatile states by using a mechanism called _store branching_ (performed by `CacheWrap` function). +The types can be illustrated as follows: + +![Types](./baseapp_state_types.png) + +### InitChain State Updates + +During `InitChain`, the two volatile states, `checkState` and `deliverState` are set by branching +the root `CommitMultiStore`. Any subsequent reads and writes happen on branched versions of the `CommitMultiStore`. +To avoid unnecessary roundtrip to the main state, all reads to the branched store are cached. + +![InitChain](./baseapp_state-initchain.png) + +### CheckTx State Updates + +During `CheckTx`, the `checkState`, which is based off of the last committed state from the root +store, is used for any reads and writes. Here we only execute the `AnteHandler` and verify a service router +exists for every message in the transaction. Note, when we execute the `AnteHandler`, we branch +the already branched `checkState`. +This has the side effect that if the `AnteHandler` fails, the state transitions won't be reflected in the `checkState` +-- i.e. `checkState` is only updated on success. + +![CheckTx](./baseapp_state-checktx.png) + +### BeginBlock State Updates + +During `BeginBlock`, the `deliverState` is set for use in subsequent `DeliverTx` ABCI messages. The +`deliverState` is based off of the last committed state from the root store and is branched. +Note, the `deliverState` is set to `nil` on [`Commit`](#commit). + +![BeginBlock](./baseapp_state-begin_block.png) + +### DeliverTx State Updates + +The state flow for `DeliverTx` is nearly identical to `CheckTx` except state transitions occur on +the `deliverState` and messages in a transaction are executed. Similarly to `CheckTx`, state transitions +occur on a doubly branched state -- `deliverState`. Successful message execution results in +writes being committed to `deliverState`. Note, if message execution fails, state transitions from +the AnteHandler are persisted. + +![DeliverTx](./baseapp_state-deliver_tx.png) + +### Commit State Updates + +During `Commit` all the state transitions that occurred in the `deliverState` are finally written to +the root `CommitMultiStore` which in turn is committed to disk and results in a new application +root hash. These state transitions are now considered final. Finally, the `checkState` is set to the +newly committed state and `deliverState` is set to `nil` to be reset on `BeginBlock`. + +![Commit](./baseapp_state-commit.png) + +## ParamStore + +During `InitChain`, the `RequestInitChain` provides `ConsensusParams` which contains parameters +related to block execution such as maximum gas and size in addition to evidence parameters. If these +parameters are non-nil, they are set in the BaseApp's `ParamStore`. Behind the scenes, the `ParamStore` +is actually managed by an `x/params` module `Subspace`. This allows the parameters to be tweaked via +on-chain governance. + +## Service Routers + +When messages and queries are received by the application, they must be routed to the appropriate module in order to be processed. Routing is done via `BaseApp`, which holds a `msgServiceRouter` for messages, and a `grpcQueryRouter` for queries. + +### `Msg` Service Router + +[`sdk.Msg`s](#../building-modules/messages-and-queries.md#messages) need to be routed after they are extracted from transactions, which are sent from the underlying Tendermint engine via the [`CheckTx`](#checktx) and [`DeliverTx`](#delivertx) ABCI messages. To do so, `BaseApp` holds a `msgServiceRouter` which maps fully-qualified service methods (`string`, defined in each module's Protobuf `Msg` service) to the appropriate module's `MsgServer` implementation. + +The [default `msgServiceRouter` included in `BaseApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/msg_service_router.go) is stateless. However, some applications may want to make use of more stateful routing mechanisms such as allowing governance to disable certain routes or point them to new modules for upgrade purposes. For this reason, the `sdk.Context` is also passed into each [route handler inside `msgServiceRouter`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/msg_service_router.go#L31-L32). For a stateless router that doesn't want to make use of this, you can just ignore the `ctx`. + +The application's `msgServiceRouter` is initialized with all the routes using the application's [module manager](../building-modules/module-manager.md#manager) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../basics/app-anatomy.md#constructor-function). + +### gRPC Query Router + +Similar to `sdk.Msg`s, [`queries`](../../integrate/building-modules/02-messages-and-queries.md#queries) need to be routed to the appropriate module's [`Query` service](../../integrate/building-modules/04-query-services.md). To do so, `BaseApp` holds a `grpcQueryRouter`, which maps modules' fully-qualified service methods (`string`, defined in their Protobuf `Query` gRPC) to their `QueryServer` implementation. The `grpcQueryRouter` is called during the initial stages of query processing, which can be either by directly sending a gRPC query to the gRPC endpoint, or via the [`Query` ABCI message](#query) on the CometBFT RPC endpoint. + +Just like the `msgServiceRouter`, the `grpcQueryRouter` is initialized with all the query routes using the application's [module manager](../../integrate/building-modules/01-module-manager.md) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../high-level-concepts/00-overview-app.md#app-constructor). + +## Main ABCI 1.0 Messages + +The [Application-Blockchain Interface](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md) (ABCI) is a generic interface that connects a state-machine with a consensus engine to form a functional full-node. It can be wrapped in any language, and needs to be implemented by each application-specific blockchain built on top of an ABCI-compatible consensus engine like CometBFT. + +The consensus engine handles two main tasks: + +* The networking logic, which mainly consists in gossiping block parts, transactions and consensus votes. +* The consensus logic, which results in the deterministic ordering of transactions in the form of blocks. + +It is **not** the role of the consensus engine to define the state or the validity of transactions. Generally, transactions are handled by the consensus engine in the form of `[]bytes`, and relayed to the application via the ABCI to be decoded and processed. At keys moments in the networking and consensus processes (e.g. beginning of a block, commit of a block, reception of an unconfirmed transaction, ...), the consensus engine emits ABCI messages for the state-machine to act on. + +Developers building on top of the Cosmos SDK need not implement the ABCI themselves, as `BaseApp` comes with a built-in implementation of the interface. Let us go through the main ABCI messages that `BaseApp` implements: + +* [`Prepare Proposal`](#prepare-proposal) +* [`Process Proposal`](#process-proposal) +* [`CheckTx`](#checktx) +* [`DeliverTx`](#delivertx) + + +### CheckTx + +`CheckTx` is sent by the underlying consensus engine when a new unconfirmed (i.e. not yet included in a valid block) +transaction is received by a full-node. The role of `CheckTx` is to guard the full-node's mempool +(where unconfirmed transactions are stored until they are included in a block) from spam transactions. +Unconfirmed transactions are relayed to peers only if they pass `CheckTx`. + +`CheckTx()` can perform both _stateful_ and _stateless_ checks, but developers should strive to +make the checks **lightweight** because gas fees are not charged for the resources (CPU, data load...) used during the `CheckTx`. + +In the Cosmos SDK, after [decoding transactions](06-encoding.md), `CheckTx()` is implemented +to do the following checks: + +1. Extract the `sdk.Msg`s from the transaction. +2. **Optionally** perform _stateless_ checks by calling `ValidateBasic()` on each of the `sdk.Msg`s. This is done + first, as _stateless_ checks are less computationally expensive than _stateful_ checks. If + `ValidateBasic()` fail, `CheckTx` returns before running _stateful_ checks, which saves resources. + This check is still performed for messages that have not yet migrated to the new message validation mechanism defined in [RFC 001](https://docs.cosmos.network/main/rfc/rfc-001-tx-validation) and still have a `ValidateBasic()` method. +3. Perform non-module related _stateful_ checks on the [account](../high-level-concepts/03-accounts.md). This step is mainly about checking + that the `sdk.Msg` signatures are valid, that enough fees are provided and that the sending account + has enough funds to pay for said fees. Note that no precise [`gas`](../high-level-concepts/04-gas-fees.md) counting occurs here, + as `sdk.Msg`s are not processed. Usually, the [`AnteHandler`](../high-level-concepts/04-gas-fees.md#antehandler) will check that the `gas` provided + with the transaction is superior to a minimum reference gas amount based on the raw transaction size, + in order to avoid spam with transactions that provide 0 gas. + +`CheckTx` does **not** process `sdk.Msg`s - they only need to be processed when the canonical state need to be updated, which happens during `DeliverTx`. + +Steps 2. and 3. are performed by the [`AnteHandler`](../high-level-concepts/04-gas-fees.md#antehandler) in the [`RunTx()`](#runtx) +function, which `CheckTx()` calls with the `runTxModeCheck` mode. During each step of `CheckTx()`, a +special [volatile state](#state-updates) called `checkState` is updated. This state is used to keep +track of the temporary changes triggered by the `CheckTx()` calls of each transaction without modifying +the [main canonical state](#state-updates). For example, when a transaction goes through `CheckTx()`, the +transaction's fees are deducted from the sender's account in `checkState`. If a second transaction is +received from the same account before the first is processed, and the account has consumed all its +funds in `checkState` during the first transaction, the second transaction will fail `CheckTx`() and +be rejected. In any case, the sender's account will not actually pay the fees until the transaction +is actually included in a block, because `checkState` never gets committed to the main state. The +`checkState` is reset to the latest state of the main state each time a blocks gets [committed](#commit). + +`CheckTx` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#checktx). +The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. +* `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +* `GasUsed (int64)`: Amount of gas consumed by transaction. During `CheckTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction. Next is an example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/basic.go#L96 +``` + +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](08-events.md) for more. +* `Codespace (string)`: Namespace for the Code. + +#### RecheckTx + +After `Commit`, `CheckTx` is run again on all transactions that remain in the node's local mempool +excluding the transactions that are included in the block. To prevent the mempool from rechecking all transactions +every time a block is committed, the configuration option `mempool.recheck=false` can be set. As of +Tendermint v0.32.1, an additional `Type` parameter is made available to the `CheckTx` function that +indicates whether an incoming transaction is new (`CheckTxType_New`), or a recheck (`CheckTxType_Recheck`). +This allows certain checks like signature verification can be skipped during `CheckTxType_Recheck`. + +### DeliverTx + +When the underlying consensus engine receives a block proposal, each transaction in the block needs to be processed by the application. To that end, the underlying consensus engine sends a `DeliverTx` message to the application for each transaction in a sequential order. + +Before the first transaction of a given block is processed, a [volatile state](#state-updates) called `deliverState` is initialized during [`BeginBlock`](#beginblock). This state is updated each time a transaction is processed via `DeliverTx`, and committed to the [main state](#state-updates) when the block is [committed](#commit), after what it is set to `nil`. + +`DeliverTx` performs the **exact same steps as `CheckTx`**, with a little caveat at step 3 and the addition of a fifth step: + +1. The `AnteHandler` does **not** check that the transaction's `gas-prices` is sufficient. That is because the `min-gas-prices` value `gas-prices` is checked against is local to the node, and therefore what is enough for one full-node might not be for another. This means that the proposer can potentially include transactions for free, although they are not incentivised to do so, as they earn a bonus on the total fee of the block they propose. +2. For each `sdk.Msg` in the transaction, route to the appropriate module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). Additional _stateful_ checks are performed, and the branched multistore held in `deliverState`'s `context` is updated by the module's `keeper`. If the `Msg` service returns successfully, the branched multistore held in `context` is written to `deliverState` `CacheMultiStore`. + +During the additional fifth step outlined in (2), each read/write to the store increases the value of `GasConsumed`. You can find the default cost of each operation: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L230-L241 +``` + +At any point, if `GasConsumed > GasWanted`, the function returns with `Code != 0` and `DeliverTx` fails. + +`DeliverTx` returns a response to the underlying consensus engine of type [`abci.ResponseDeliverTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#delivertx). The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. +* `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +* `GasUsed (int64)`: Amount of gas consumed by transaction. During `DeliverTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction, and by adding gas each time a read/write to the store occurs. +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](08-events.md) for more. +* `Codespace (string)`: Namespace for the Code. + +## RunTx, AnteHandler, RunMsgs, PostHandler + +### RunTx + +`RunTx` is called from `CheckTx`/`DeliverTx` to handle the transaction, with `runTxModeCheck` or `runTxModeDeliver` as parameter to differentiate between the two modes of execution. Note that when `RunTx` receives a transaction, it has already been decoded. + +The first thing `RunTx` does upon being called is to retrieve the `context`'s `CacheMultiStore` by calling the `getContextForTx()` function with the appropriate mode (either `runTxModeCheck` or `runTxModeDeliver`). This `CacheMultiStore` is a branch of the main store, with cache functionality (for query requests), instantiated during `BeginBlock` for `DeliverTx` and during the `Commit` of the previous block for `CheckTx`. After that, two `defer func()` are called for [`gas`](../high-level-concepts/04-gas-fees.md) management. They are executed when `runTx` returns and make sure `gas` is actually consumed, and will throw errors, if any. + +After that, `RunTx()` calls `ValidateBasic()`, when available and for backward compatibility, on each `sdk.Msg`in the `Tx`, which runs preliminary _stateless_ validity checks. If any `sdk.Msg` fails to pass `ValidateBasic()`, `RunTx()` returns with an error. + +Then, the [`anteHandler`](#antehandler) of the application is run (if it exists). In preparation of this step, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L663-L672 +``` + +This allows `RunTx` not to commit the changes made to the state during the execution of `anteHandler` if it ends up failing. It also prevents the module implementing the `anteHandler` from writing to state, which is an important part of the [object-capabilities](10-ocap.md) of the Cosmos SDK. + +Finally, the [`RunMsgs()`](#runmsgs) function is called to process the `sdk.Msg`s in the `Tx`. In preparation of this step, just like with the `anteHandler`, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + +### AnteHandler + +The `AnteHandler` is a special handler that implements the `AnteHandler` interface and is used to authenticate the transaction before the transaction's internal messages are processed. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/handler.go#L6-L8 +``` + +The `AnteHandler` is theoretically optional, but still a very important component of public blockchain networks. It serves 3 primary purposes: + +* Be a primary line of defense against spam and second line of defense (the first one being the mempool) against transaction replay with fees deduction and [`sequence`](01-transactions.md#transaction-generation) checking. +* Perform preliminary _stateful_ validity checks like ensuring signatures are valid or that the sender has enough funds to pay for fees. +* Play a role in the incentivisation of stakeholders via the collection of transaction fees. + +`BaseApp` holds an `anteHandler` as parameter that is initialized in the [application's constructor](../high-level-concepts/00-overview-app.md#application-constructor). The most widely used `anteHandler` is the [`auth` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/ante.go). + +Click [here](../high-level-concepts/04-gas-fees.md#antehandler) for more on the `anteHandler`. + +### RunMsgs + +`RunMsgs` is called from `RunTx` with `runTxModeCheck` as parameter to check the existence of a route for each message the transaction, and with `runTxModeDeliver` to actually process the `sdk.Msg`s. + +First, it retrieves the `sdk.Msg`'s fully-qualified type name, by checking the `type_url` of the Protobuf `Any` representing the `sdk.Msg`. Then, using the application's [`msgServiceRouter`](#msg-service-router), it checks for the existence of `Msg` service method related to that `type_url`. At this point, if `mode == runTxModeCheck`, `RunMsgs` returns. Otherwise, if `mode == runTxModeDeliver`, the [`Msg` service](../../integrate/building-modules/03-msg-services.md) RPC is executed, before `RunMsgs` returns. + +### PostHandler + +`PostHandler` is similar to `AnteHandler`, but it, as the name suggests, executes custom post tx processing logic after [`RunMsgs`](#runmsgs) is called. `PostHandler` receives the `Result` of the the `RunMsgs` in order to enable this customizable behavior. + +Like `AnteHandler`s, `PostHandler`s are theoretically optional, one use case for `PostHandler`s is transaction tips (enabled by default in simapp). +Other use cases like unused gas refund can also be enabled by `PostHandler`s. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/posthandler/post.go#L1-L15 +``` + +Note, when `PostHandler`s fail, the state from `runMsgs` is also reverted, effectively making the transaction fail. + +## Other ABCI Messages + +### InitChain + +The [`InitChain` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when the chain is first started. It is mainly used to **initialize** parameters and state like: + +* [Consensus Parameters](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#consensus-parameters) via `setConsensusParams`. +* [`checkState` and `deliverState`](#state-updates) via `setState`. +* The [block gas meter](../high-level-concepts/04-gas-fees.md#block-gas-meter), with infinite gas to process genesis transactions. + +Finally, the `InitChain(req abci.RequestInitChain)` method of `BaseApp` calls the [`initChainer()`](../high-level-concepts/00-overview-app.md#initchainer) of the application in order to initialize the main state of the application from the `genesis file` and, if defined, call the [`InitGenesis`](../../integrate/building-modules/08-genesis.md#initgenesis) function of each of the application's modules. + +### BeginBlock + +The [`BeginBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when a block proposal created by the correct proposer is received, before [`DeliverTx`](#delivertx) is run for each transaction in the block. It allows developers to have logic be executed at the beginning of each block. In the Cosmos SDK, the `BeginBlock(req abci.RequestBeginBlock)` method does the following: + +* Initialize [`deliverState`](#state-updates) with the latest header using the `req abci.RequestBeginBlock` passed as parameter via the `setState` function. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L406-L433 + ``` + + This function also resets the [main gas meter](../high-level-concepts/04-gas-fees.md#main-gas-meter). + +* Initialize the [block gas meter](../high-level-concepts/04-gas-fees.md#block-gas-meter) with the `maxGas` limit. The `gas` consumed within the block cannot go above `maxGas`. This parameter is defined in the application's consensus parameters. +* Run the application's [`beginBlocker()`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblock), which mainly runs the [`BeginBlocker()`](../../integrate/building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. +* Set the [`VoteInfos`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#voteinfo) of the application, i.e. the list of validators whose _precommit_ for the previous block was included by the proposer of the current block. This information is carried into the [`Context`](02-context.md) so that it can be used during `DeliverTx` and `EndBlock`. + +### EndBlock + +The [`EndBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after [`DeliverTx`](#delivertx) as been run for each transaction in the block. It allows developers to have logic be executed at the end of each block. In the Cosmos SDK, the bulk `EndBlock(req abci.RequestEndBlock)` method is to run the application's [`EndBlocker()`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblock), which mainly runs the [`EndBlocker()`](../../integrate/building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. + +### Commit + +The [`Commit` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after the full-node has received _precommits_ from 2/3+ of validators (weighted by voting power). On the `BaseApp` end, the `Commit(res abci.ResponseCommit)` function is implemented to commit all the valid state transitions that occurred during `BeginBlock`, `DeliverTx` and `EndBlock` and to reset state for the next block. + +To commit state-transitions, the `Commit` function calls the `Write()` function on `deliverState.ms`, where `deliverState.ms` is a branched multistore of the main store `app.cms`. Then, the `Commit` function sets `checkState` to the latest header (obtained from `deliverState.ctx.BlockHeader`) and `deliverState` to `nil`. + +Finally, `Commit` returns the hash of the commitment of `app.cms` back to the underlying consensus engine. This hash is used as a reference in the header of the next block. + +### Info + +The [`Info` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is a simple query from the underlying consensus engine, notably used to sync the latter with the application during a handshake that happens on startup. When called, the `Info(res abci.ResponseInfo)` function from `BaseApp` will return the application's name, version and the hash of the last commit of `app.cms`. + +### Query + +The [`Query` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is used to serve queries received from the underlying consensus engine, including queries received via RPC like CometBFT RPC. It used to be the main entrypoint to build interfaces with the application, but with the introduction of [gRPC queries](../../integrate/building-modules/04-query-services.md) in Cosmos SDK v0.40, its usage is more limited. The application must respect a few rules when implementing the `Query` method, which are outlined [here](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#query). + +Each CometBFT `query` comes with a `path`, which is a `string` which denotes what to query. If the `path` matches a gRPC fully-qualified service method, then `BaseApp` will defer the query to the `grpcQueryRouter` and let it handle it like explained [above](#grpc-query-router). Otherwise, the `path` represents a query that is not (yet) handled by the gRPC router. `BaseApp` splits the `path` string with the `/` delimiter. By convention, the first element of the split string (`split[0]`) contains the category of `query` (`app`, `p2p`, `store` or `custom` ). The `BaseApp` implementation of the `Query(req abci.RequestQuery)` method is a simple dispatcher serving these 4 main categories of queries: + +* Application-related queries like querying the application's version, which are served via the `handleQueryApp` method. +* Direct queries to the multistore, which are served by the `handlerQueryStore` method. These direct queries are different from custom queries which go through `app.queryRouter`, and are mainly used by third-party service provider like block explorers. +* P2P queries, which are served via the `handleQueryP2P` method. These queries return either `app.addrPeerFilter` or `app.ipPeerFilter` that contain the list of peers filtered by address or IP respectively. These lists are first initialized via `options` in `BaseApp`'s [constructor](#constructor). diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md b/versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md new file mode 100644 index 000000000..06757ad43 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md @@ -0,0 +1,195 @@ +# Transactions + +:::note Synopsis +`Transactions` are objects created by end-users to trigger state changes in the application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](../high-level-concepts/00-overview-app.md) + +::: + +## Transactions + +Transactions are comprised of metadata held in [contexts](02-context.md) and [`sdk.Msg`s](../../integrate/building-modules/02-messages-and-queries.md) that trigger state changes within a module through the module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). + +When users want to interact with an application and make state changes (e.g. sending coins), they create transactions. Each of a transaction's `sdk.Msg` must be signed using the private key associated with the appropriate account(s), before the transaction is broadcasted to the network. A transaction must then be included in a block, validated, and approved by the network through the consensus process. To read more about the lifecycle of a transaction, click [here](../high-level-concepts/01-tx-lifecycle.md). + +## Type Definition + +Transaction objects are Cosmos SDK types that implement the `Tx` interface + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L42-L50 +``` + +It contains the following methods: + +* **GetMsgs:** unwraps the transaction and returns a list of contained `sdk.Msg`s - one transaction may have one or multiple messages, which are defined by module developers. +* **ValidateBasic:** lightweight, [_stateless_](../high-level-concepts/01-tx-lifecycle.md#types-of-checks) checks used by ABCI messages [`CheckTx`](00-baseapp.md#checktx) and [`DeliverTx`](00-baseapp.md#delivertx) to make sure transactions are not invalid. For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth) module's `ValidateBasic` function checks that its transactions are signed by the correct number of signers and that the fees do not exceed what the user's maximum. When [`runTx`](00-baseapp.md#runtx) is checking a transaction created from the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module, it first runs `ValidateBasic` on each message, then runs the `auth` module AnteHandler which calls `ValidateBasic` for the transaction itself. + + :::note + This function is different from the deprecated `sdk.Msg` [`ValidateBasic`](../high-level-concepts/01-tx-lifecycle.md#ValidateBasic) methods, which was performing basic validity checks on messages only. + ::: + +As a developer, you should rarely manipulate `Tx` directly, as `Tx` is really an intermediate type used for transaction generation. Instead, developers should prefer the `TxBuilder` interface, which you can learn more about [below](#transaction-generation). + +### Signing Transactions + +Every message in a transaction must be signed by the addresses specified by its `GetSigners`. The Cosmos SDK currently allows signing transactions in two different ways. + +#### `SIGN_MODE_DIRECT` (preferred) + +The most used implementation of the `Tx` interface is the Protobuf `Tx` message, which is used in `SIGN_MODE_DIRECT`: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 +``` + +Because Protobuf serialization is not deterministic, the Cosmos SDK uses an additional `TxRaw` type to denote the pinned bytes over which a transaction is signed. Any user can generate a valid `body` and `auth_info` for a transaction, and serialize these two messages using Protobuf. `TxRaw` then pins the user's exact binary representation of `body` and `auth_info`, called respectively `body_bytes` and `auth_info_bytes`. The document that is signed by all signers of the transaction is `SignDoc` (deterministically serialized using [ADR-027](../../integrate/architecture/adr-027-deterministic-protobuf-serialization.md)): + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 +``` + +Once signed by all signers, the `body_bytes`, `auth_info_bytes` and `signatures` are gathered into `TxRaw`, whose serialized bytes are broadcasted over the network. + +#### `SIGN_MODE_LEGACY_AMINO_JSON` + +The legacy implementation of the `Tx` interface is the `StdTx` struct from `x/auth`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx.go#L83-L93 +``` + +The document signed by all signers is `StdSignDoc`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdsign.go#L38-L52 +``` + +which is encoded into bytes using Amino JSON. Once all signatures are gathered into `StdTx`, `StdTx` is serialized using Amino JSON, and these bytes are broadcasted over the network. + +#### Other Sign Modes + +The Cosmos SDK also provides a couple of other sign modes for particular use cases. + +#### `SIGN_MODE_DIRECT_AUX` + +`SIGN_MODE_DIRECT_AUX` is a sign mode released in the Cosmos SDK v0.46 which targets transactions with multiple signers. Whereas `SIGN_MODE_DIRECT` expects each signer to sign over both `TxBody` and `AuthInfo` (which includes all other signers' signer infos, i.e. their account sequence, public key and mode info), `SIGN_MODE_DIRECT_AUX` allows N-1 signers to only sign over `TxBody` and _their own_ signer info. Morever, each auxiliary signer (i.e. a signer using `SIGN_MODE_DIRECT_AUX`) doesn't +need to sign over the fees: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L97 +``` + +The use case is a multi-signer transaction, where one of the signers is appointed to gather all signatures, broadcast the signature and pay for fees, and the others only care about the transaction body. This generally allows for a better multi-signing UX. If Alice, Bob and Charlie are part of a 3-signer transaction, then Alice and Bob can both use `SIGN_MODE_DIRECT_AUX` to sign over the `TxBody` and their own signer info (no need an additional step to gather other signers' ones, like in `SIGN_MODE_DIRECT`), without specifying a fee in their SignDoc. Charlie can then gather both signatures from Alice and Bob, and +create the final transaction by appending a fee. Note that the fee payer of the transaction (in our case Charlie) must sign over the fees, so must use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. + +A concrete use case is implemented in [transaction tips](15-tips.md): the tipper may use `SIGN_MODE_DIRECT_AUX` to specify a tip in the transaction, without signing over the actual transaction fees. Then, the fee payer appends fees inside the tipper's desired `TxBody`, and as an exchange for paying the fees and broadcasting the transaction, receives the tipper's transaction tips as payment. + +#### `SIGN_MODE_TEXTUAL` + +`SIGN_MODE_TEXTUAL` is a new sign mode for delivering a better signing experience on hardware wallets, it is currently still under implementation. If you wish to learn more, please refer to [ADR-050](https://github.com/cosmos/cosmos-sdk/pull/10701). + +## Transaction Process + +The process of an end-user sending a transaction is: + +* decide on the messages to put into the transaction, +* generate the transaction using the Cosmos SDK's `TxBuilder`, +* broadcast the transaction using one of the available interfaces. + +The next paragraphs will describe each of these components, in this order. + +### Messages + +:::tip +Module `sdk.Msg`s are not to be confused with [ABCI Messages](https://docs.cometbft.com/v0.37/spec/abci/) which define interactions between the CometBFT and application layers. +::: + +**Messages** (or `sdk.Msg`s) are module-specific objects that trigger state transitions within the scope of the module they belong to. Module developers define the messages for their module by adding methods to the Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md), and also implement the corresponding `MsgServer`. + +Each `sdk.Msg`s is related to exactly one Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md) RPC, defined inside each module's `tx.proto` file. A SDK app router automatically maps every `sdk.Msg` to a corresponding RPC. Protobuf generates a `MsgServer` interface for each module `Msg` service, and the module developer needs to implement this interface. +This design puts more responsibility on module developers, allowing application developers to reuse common functionalities without having to implement state transition logic repetitively. + +To learn more about Protobuf `Msg` services and how to implement `MsgServer`, click [here](../../integrate/building-modules/03-msg-services.md). + +While messages contain the information for state transition logic, a transaction's other metadata and relevant information are stored in the `TxBuilder` and `Context`. + +### Transaction Generation + +The `TxBuilder` interface contains data closely related with the generation of transactions, which an end-user can freely set to generate the desired transaction: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L50 +``` + +* `Msg`s, the array of [messages](#messages) included in the transaction. +* `GasLimit`, option chosen by the users for how to calculate how much gas they will need to pay. +* `Memo`, a note or comment to send with the transaction. +* `FeeAmount`, the maximum amount the user is willing to pay in fees. +* `TimeoutHeight`, block height until which the transaction is valid. +* `Signatures`, the array of signatures from all signers of the transaction. + +As there are currently two sign modes for signing transactions, there are also two implementations of `TxBuilder`: + +* [wrapper](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/builder.go#L18-L34) for creating transactions for `SIGN_MODE_DIRECT`, +* [StdTxBuilder](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx_builder.go#L15-L21) for `SIGN_MODE_LEGACY_AMINO_JSON`. + +However, the two implementation of `TxBuilder` should be hidden away from end-users, as they should prefer using the overarching `TxConfig` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L22-L31 +``` + +`TxConfig` is an app-wide configuration for managing transactions. Most importantly, it holds the information about whether to sign each transaction with `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. By calling `txBuilder := txConfig.NewTxBuilder()`, a new `TxBuilder` will be created with the appropriate sign mode. + +Once `TxBuilder` is correctly populated with the setters exposed above, `TxConfig` will also take care of correctly encoding the bytes (again, either using `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`). Here's a pseudo-code snippet of how to generate and encode a transaction, using the `TxEncoder()` method: + +```go +txBuilder := txConfig.NewTxBuilder() +txBuilder.SetMsgs(...) // and other setters on txBuilder + +bz, err := txConfig.TxEncoder()(txBuilder.GetTx()) +// bz are bytes to be broadcasted over the network +``` + +### Broadcasting the Transaction + +Once the transaction bytes are generated, there are currently three ways of broadcasting it. + +#### CLI + +Application developers create entry points to the application by creating a [command-line interface](07-cli.md), [gRPC and/or REST interface](09-grpc_rest.md), typically found in the application's `./cmd` folder. These interfaces allow users to interact with the application through command-line. + +For the [command-line interface](../../integrate/building-modules/09-module-interfaces.md#cli), module developers create subcommands to add as children to the application top-level transaction command `TxCmd`. CLI commands actually bundle all the steps of transaction processing into one simple command: creating messages, generating transactions and broadcasting. For concrete examples, see the [Interacting with a Node](../../user/run-node/02-interact-node.md) section. An example transaction made using CLI looks like: + +```bash +simd tx send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake +``` + +#### gRPC + +[gRPC](https://grpc.io) is the main component for the Cosmos SDK's RPC layer. Its principal usage is in the context of modules' [`Query` services](../../integrate/building-modules/04-query-services.md). However, the Cosmos SDK also exposes a few other module-agnostic gRPC services, one of them being the `Tx` service: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/service.proto +``` + +The `Tx` service exposes a handful of utility functions, such as simulating a transaction or querying a transaction, and also one method to broadcast transactions. + +Examples of broadcasting and simulating a transaction are shown [here](../../user/run-node/03-txs.md#programmatically-with-go). + +#### REST + +Each gRPC method has its corresponding REST endpoint, generated using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). Therefore, instead of using gRPC, you can also use HTTP to broadcast the same transaction, on the `POST /cosmos/tx/v1beta1/txs` endpoint. + +An example can be seen [here](../../user/run-node/03-txs.md#using-rest) + +#### CometBFT RPC + +The three methods presented above are actually higher abstractions over the CometBFT RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.cometbft.com/v0.37/core/rpc). This means that you can use the CometBFT RPC endpoints directly to broadcast the transaction, if you wish so. diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md b/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md new file mode 100644 index 000000000..3fab28cf5 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md @@ -0,0 +1,281 @@ + + +# Store + +A store is a data structure that holds the state of the application. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) {prereq} + +## Introduction to Cosmos SDK Stores + +The Cosmos SDK comes with a large set of stores to persist the state of applications. By default, the main store of Cosmos SDK applications is a `multistore`, i.e. a store of stores. Developers can add any number of key-value stores to the multistore, depending on their application needs. The multistore exists to support the modularity of the Cosmos SDK, as it lets each module declare and manage their own subset of the state. Key-value stores in the multistore can only be accessed with a specific capability `key`, which is typically held in the [`keeper`](../../integrate/building-modules/06-keeper.md) of the module that declared the store. + +```text ++-----------------------------------------------------+ +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 1 - Manage by keeper of Module 1 | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 2 - Manage by keeper of Module 2 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 3 - Manage by keeper of Module 2 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 4 - Manage by keeper of Module 3 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 5 - Manage by keeper of Module 4 | | +| | | | +| +--------------------------------------------+ | +| | +| Main Multistore | +| | ++-----------------------------------------------------+ + + Application's State +``` + +### Store Interface + +At its very core, a Cosmos SDK `store` is an object that holds a `CacheWrapper` and has a `GetStoreType()` method: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L16-L19 + +The `GetStoreType` is a simple method that returns the type of store, whereas a `CacheWrapper` is a simple interface that implements store read caching and write branching through `Write` method: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L247-L277 + +Branching and cache is used ubiquitously in the Cosmos SDK and required to be implemented on every store type. A storage branch creates an isolated, ephemeral branch of a store that can be passed around and updated without affecting the main underlying store. This is used to trigger temporary state-transitions that may be reverted later should an error occur. Read more about it in [context](./02-context.md) + +### Commit Store + +A commit store is a store that has the ability to commit changes made to the underlying tree or db. The Cosmos SDK differentiates simple stores from commit stores by extending the basic store interfaces with a `Committer`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L30-L34 + +The `Committer` is an interface that defines methods to persist changes to disk: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L21-L28 + +The `CommitID` is a deterministic commit of the state tree. Its hash is returned to the underlying consensus engine and stored in the block header. Note that commit store interfaces exist for various purposes, one of which is to make sure not every object can commit the store. As part of the [object-capabilities model](./ocap.md) of the Cosmos SDK, only `baseapp` should have the ability to commit stores. For example, this is the reason why the `ctx.KVStore()` method by which modules typically access stores returns a `KVStore` and not a `CommitKVStore`. + +The Cosmos SDK comes with many types of stores, the most used being [`CommitMultiStore`](#multistore), [`KVStore`](#kvstore) and [`GasKv` store](#gaskv-store). [Other types of stores](#other-stores) include `Transient` and `TraceKV` stores. + +## Multistore + +### Multistore Interface + +Each Cosmos SDK application holds a multistore at its root to persist its state. The multistore is a store of `KVStores` that follows the `Multistore` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L97-L133 + +If tracing is enabled, then branching the multistore will firstly wrap all the underlying `KVStore` in [`TraceKv.Store`](#tracekv-store). + +### CommitMultiStore + +The main type of `Multistore` used in the Cosmos SDK is `CommitMultiStore`, which is an extension of the `Multistore` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L141-L187 + +As for concrete implementation, the [`rootMulti.Store`] is the go-to implementation of the `CommitMultiStore` interface. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/rootmulti/store.go#L38-L61 + +The `rootMulti.Store` is a base-layer multistore built around a `db` on top of which multiple `KVStores` can be mounted, and is the default multistore store used in [`baseapp`](./00-baseapp.md). + +### CacheMultiStore + +Whenever the `rootMulti.Store` needs to be branched, a [`cachemulti.Store`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/cachemulti/store.go) is used. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/cachemulti/store.go#L20-L36 + +`cachemulti.Store` branches all substores (creates a virtual store for each substore) in its constructor and hold them in `Store.stores`. Moreover caches all read queries. `Store.GetKVStore()` returns the store from `Store.stores`, and `Store.Write()` recursively calls `CacheWrap.Write()` on all the substores. + +## Base-layer KVStores + +### `KVStore` and `CommitKVStore` Interfaces + +A `KVStore` is a simple key-value store used to store and retrieve data. A `CommitKVStore` is a `KVStore` that also implements a `Committer`. By default, stores mounted in `baseapp`'s main `CommitMultiStore` are `CommitKVStore`s. The `KVStore` interface is primarily used to restrict modules from accessing the committer. + +Individual `KVStore`s are used by modules to manage a subset of the global state. `KVStores` can be accessed by objects that hold a specific key. This `key` should only be exposed to the [`keeper`](../../integrate/building-modules/06-keeper.md) of the module that defines the store. + +`CommitKVStore`s are declared by proxy of their respective `key` and mounted on the application's [multistore](#multistore) in the [main application file](../high-level-concepts/00-overview-app.md). In the same file, the `key` is also passed to the module's `keeper` that is responsible for managing the store. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L192-L226 + +Apart from the traditional `Get` and `Set` methods, that a `KVStore` must implement via the `BasicKVStore` interface; a `KVStore` must provide an `Iterator(start, end)` method which returns an `Iterator` object. It is used to iterate over a range of keys, typically keys that share a common prefix. Below is an example from the bank's module keeper, used to iterate over all account balances: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/keeper/view.go#L114-L132 + +### `IAVL` Store + +The default implementation of `KVStore` and `CommitKVStore` used in `baseapp` is the `iavl.Store`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/iavl/store.go#L37-L40 + +`iavl` stores are based around an [IAVL Tree](https://github.com/cosmos/iavl), a self-balancing binary tree which guarantees that: + +* `Get` and `Set` operations are O(log n), where n is the number of elements in the tree. +* Iteration efficiently returns the sorted elements within the range. +* Each tree version is immutable and can be retrieved even after a commit (depending on the pruning settings). + +The documentation on the IAVL Tree is located [here](https://github.com/cosmos/iavl/blob/master/docs/overview.md). + +### `DbAdapter` Store + +`dbadapter.Store` is a adapter for `dbm.DB` making it fulfilling the `KVStore` interface. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/dbadapter/store.go#L14-L17 + +`dbadapter.Store` embeds `dbm.DB`, meaning most of the `KVStore` interface functions are implemented. The other functions (mostly miscellaneous) are manually implemented. This store is primarily used within [Transient Stores](#transient-stores) + +### `Transient` Store + +`Transient.Store` is a base-layer `KVStore` which is automatically discarded at the end of the block. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/transient/store.go#L16-L19 + +`Transient.Store` is a `dbadapter.Store` with a `dbm.NewMemDB()`. All `KVStore` methods are reused. When `Store.Commit()` is called, a new `dbadapter.Store` is assigned, discarding previous reference and making it garbage collected. + +This type of store is useful to persist information that is only relevant per-block. One example would be to store parameter changes (i.e. a bool set to `true` if a parameter changed in a block). + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/params/types/subspace.go#L21-L31 + +Transient stores are typically accessed via the [`context`](./context.md) via the `TransientStore()` method: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/context.go#L264-L267 + +## KVStore Wrappers + +### CacheKVStore + +`cachekv.Store` is a wrapper `KVStore` which provides buffered writing / cached reading functionalities over the underlying `KVStore`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/cachekv/store.go#L27-L35 + +This is the type used whenever an IAVL Store needs to be branched to create an isolated store (typically when we need to mutate a state that might be reverted later). + +#### `Get` + +`Store.Get()` firstly checks if `Store.cache` has an associated value with the key. If the value exists, the function returns it. If not, the function calls `Store.parent.Get()`, caches the result in `Store.cache`, and returns it. + +#### `Set` + +`Store.Set()` sets the key-value pair to the `Store.cache`. `cValue` has the field dirty bool which indicates whether the cached value is different from the underlying value. When `Store.Set()` caches a new pair, the `cValue.dirty` is set `true` so when `Store.Write()` is called it can be written to the underlying store. + +#### `Iterator` + +`Store.Iterator()` have to traverse on both cached items and the original items. In `Store.iterator()`, two iterators are generated for each of them, and merged. `memIterator` is essentially a slice of the `KVPairs`, used for cached items. `mergeIterator` is a combination of two iterators, where traverse happens ordered on both iterators. + +### `GasKv` Store + +Cosmos SDK applications use [`gas`](../basics/gas-fees.md) to track resources usage and prevent spam. [`GasKv.Store`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/gaskv/store.go) is a `KVStore` wrapper that enables automatic gas consumption each time a read or write to the store is made. It is the solution of choice to track storage usage in Cosmos SDK applications. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/gaskv/store.go#L11-L17 + +When methods of the parent `KVStore` are called, `GasKv.Store` automatically consumes appropriate amount of gas depending on the `Store.gasConfig`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/gas.go#L219-L228 + +By default, all `KVStores` are wrapped in `GasKv.Stores` when retrieved. This is done in the `KVStore()` method of the [`context`](./context.md): + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/context.go#L259-L262 + +In this case, the default gas configuration is used: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/gas.go#L230-L241 + +### `TraceKv` Store + +`tracekv.Store` is a wrapper `KVStore` which provides operation tracing functionalities over the underlying `KVStore`. It is applied automatically by the Cosmos SDK on all `KVStore` if tracing is enabled on the parent `MultiStore`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/tracekv/store.go#L20-L43 + +When each `KVStore` methods are called, `tracekv.Store` automatically logs `traceOperation` to the `Store.writer`. `traceOperation.Metadata` is filled with `Store.context` when it is not nil. `TraceContext` is a `map[string]interface{}`. + +### `Prefix` Store + +`prefix.Store` is a wrapper `KVStore` which provides automatic key-prefixing functionalities over the underlying `KVStore`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/prefix/store.go#L16-L22 + +When `Store.{Get, Set}()` is called, the store forwards the call to its parent, with the key prefixed with the `Store.prefix`. + +When `Store.Iterator()` is called, it does not simply prefix the `Store.prefix`, since it does not work as intended. In that case, some of the elements are traversed even they are not starting with the prefix. + +### `ListenKv` Store + +`listenkv.Store` is a wrapper `KVStore` which provides state listening capabilities over the underlying `KVStore`. +It is applied automatically by the Cosmos SDK on any `KVStore` whose `StoreKey` is specified during state streaming configuration. +Additional information about state streaming configuration can be found in the [store/streaming/README.md](https://github.com/cosmos/cosmos-sdk/tree/v0.46.0-rc1/store/streaming). + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/listenkv/store.go#L11-L18 + +When `KVStore.Set` or `KVStore.Delete` methods are called, `listenkv.Store` automatically writes the operations to the set of `Store.listeners`. + +## New Store package (`store/v2alpha1`) + +The SDK is in the process of transitioning to use the types listed here as the default interface for state storage. At the time of writing, these cannot be used within an application and are not directly compatible with the `CommitMultiStore` and related types. + +These types use the new `db` sub-module of Cosmos-SDK (`github.com/cosmos/cosmos-sdk/db`), rather than `tmdb` (`github.com/tendermint/tm-db`). + +See [ADR-040](../../integrate/architecture/adr-040-storage-and-smt-state-commitments.md) for the motivations and design specifications of the change. + +## `BasicKVStore` interface + +An interface providing only the basic CRUD functionality (`Get`, `Set`, `Has`, and `Delete` methods), without iteration or caching. This is used to partially expose components of a larger store, such as a `root.Store`. + +## MultiStore + +This is the new interface (or, set of interfaces) for the main client store, replacing the role of `store/types.MultiStore` (v1). There are a few significant differences in behavior compared with v1: + +* Commits are atomic and are performed on the entire store state; individual substores cannot be committed separately and cannot have different version numbers. +* The store's current version and version history track that of the backing `db.DBConnection`. Past versions are accessible read-only. +* The set of valid substores is defined at initialization and cannot be updated dynamically in an existing store instance. + +### `CommitMultiStore` + +This is the main interface for persisent application state, analogous to the original `CommitMultiStore`. + +* Past version views are accessed with `GetVersion`, which returns a `BasicMultiStore`. +* Substores are accessed with `GetKVStore`. Trying to get a substore that was not defined at initialization will cause a panic. +* `Close` must be called to release the DB resources being used by the store. + +### `BasicMultiStore` + +A minimal interface that only allows accessing substores. Note: substores returned by `BasicMultiStore.GetKVStore` are read-only and will panic on `Set` or `Delete` calls. + +### Implementation (`root.Store`) + +The canonical implementation of `MultiStore` is in `store/v2alpha1/root`. It internally decouples the concerns of state storage and state commitment: values are stored in, and read directly from, the backing key-value database (state storage, or *SS*), but are also mapped in a logically separate database which generates cryptographic proofs (for state-commitment or *SC*). + +The state-commitment component of each substore is implemented as an independent `smt.Store` (see below). Internally, each substore is allocated in a logically separate partition within the same backing DB, such that commits apply to the state of all substores. Therefore, views of past versions also include the state of all substores (including *SS* and *SC* data). + +This store can optionally be configured to use a different backend database instance for *SC* (e.g., `badgerdb` for the state storage DB and `memdb` for the state-commitment DB; see `StoreConfig.StateCommitmentDB`). + +## SMT Store + +`store/v2alpha1/smt.Store` maps values into a Sparse Merkle Tree (SMT), and supports a `BasicKVStore` interface as well as methods for cryptographic proof generation. + +## Next {hide} + +Learn about [encoding](./encoding.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/10-ocap.md b/versioned_docs/version-0.46/develop/advanced-concepts/10-ocap.md new file mode 100644 index 000000000..078b23e58 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/10-ocap.md @@ -0,0 +1,77 @@ +--- +sidebar_position: 1 +--- + +# Object-Capability Model + +## Intro + +When thinking about security, it is good to start with a specific threat model. Our threat model is the following: + +> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +The Cosmos SDK is designed to address this threat by being the +foundation of an object capability system. + +> The structural properties of object capability systems favor +> modularity in code design and ensure reliable encapsulation in +> code implementation. +> +> These structural properties facilitate the analysis of some +> security properties of an object-capability program or operating +> system. Some of these — in particular, information flow properties +> — can be analyzed at the level of object references and +> connectivity, independent of any knowledge or analysis of the code +> that determines the behavior of the objects. +> +> As a consequence, these security properties can be established +> and maintained in the presence of new objects that contain unknown +> and possibly malicious code. +> +> These structural properties stem from the two rules governing +> access to existing objects: +> +> 1. An object A can send a message to B only if object A holds a +> reference to B. +> 2. An object A can obtain a reference to C only +> if object A receives a message containing a reference to C. As a +> consequence of these two rules, an object can obtain a reference +> to another object only through a preexisting chain of references. +> In short, "Only connectivity begets connectivity." + +For an introduction to object-capabilities, see this [Wikipedia article](https://en.wikipedia.org/wiki/Object-capability_model). + +## Ocaps in practice + +The idea is to only reveal what is necessary to get the work done. + +For example, the following code snippet violates the object capabilities +principle: + +```go +type AppAccount struct {...} +account := &AppAccount{ + Address: pub.Address(), + Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)}, +} +sumValue := externalModule.ComputeSumValue(account) +``` + +The method `ComputeSumValue` implies a pure function, yet the implied +capability of accepting a pointer value is the capability to modify that +value. The preferred method signature should take a copy instead. + +```go +sumValue := externalModule.ComputeSumValue(*account) +``` + +In the Cosmos SDK, you can see the application of this principle in simapp. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L294-L318 +``` + +The following diagram shows the current dependencies between keepers. + +![Keeper dependencies](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/keeper_dependencies.svg) + diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-begin_block.png b/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-begin_block.png new file mode 100644 index 0000000000000000000000000000000000000000..745d4a5a971292bb0346c35893b42ebfbcdc206e GIT binary patch literal 20565 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 HU84U7#M|-t literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-checktx.png b/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-checktx.png new file mode 100644 index 0000000000000000000000000000000000000000..38b217acdd04fb2430a2332946864de04474ae5a GIT binary patch literal 82308 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 N1zA-Y;BI{L{{e+~Yq9_U literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-deliver_tx.png b/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-deliver_tx.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a54b4ec34bbe282ed6eff81369428d02dec095 GIT binary patch literal 59007 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 E2iU8KRR910 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-initchain.png b/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-initchain.png new file mode 100644 index 0000000000000000000000000000000000000000..d03e88ef2ae0745aaedc52cf72863080388d7e9c GIT binary patch literal 32800 zcmZ^~Wmr^E-#1EkcZW1cNr!YvcZY z`{8_Xu+KxkEdH&Z;FTlTDh?Y{h>_EiiCp^9yZ2?74RmI0WNBV zg9Du_(+eUZK=Gi7i4$k;+wIVFesAaQET_LFX8+Uupub zPAf~?tR)A&eQ3>kTM%AHnh|- zU;s^uAH-TTBszvcg%g#?Z&s~mC)q;r5pyeof{f}45<(hEfr~0ejJx(5gN(Y;ok%N~ zKUTs;QeR8&F}w_Hf;hcP;2!=IaeY?OCmVqMtuiC;56*r>UiEZEo_JpJ4}npa7{ty zQO_jP?ajT;CYvstlWBWb&^Dj*6_ix^VvonBr^62Y>`pI<&hJpa!7QQl^d|*MM1DV4 zr6&`@=l3D>AAbD3b@umrp@KuY{M!%zl2R}VAuS%yWyfPs3@h7tkw~U!`p)Pdj%mPL|rI;pPjJ}71w*|8oQ3+_V05R zZT0Lsbsylh!<2=S$C9e_LsV~37}N)3RoWzf@;=^<|bA>4i*S+-JL@17UO7dhaC{j{J4o( zOt5k~X>XtAV28-oVXM-V)N@qn64WR7ve26(=)Whbh^3bZ)3qK`_V303H9Ev-?2+`; zsIBKS7#$T$Zbi;4w0U#Dh(@Xc5&HIQQ;9M+=!pfWwm?@hYZ>4%g<(@+gK8u=5J^gq zAzwRU%>OQx5m|=EwM>k62V%9^trr`YEDBVbciK`@tkff7ig?JgHAa{TnSk;zEbZi{zX$}Z21stuu27@Z;Faz$ zJDdAU*<&f$@oFtkLXPFe07N*XYfXPJxd5e^ZdqQPkpCf0q3?|bhy51P@Yu8s@4HW< zB>|02-HLB1cnCg~&367V3Z%0;Cm3+vxG*ml+s+yBjv|o$Rh0raC>|gjl6`X$Qf3CM z^vuBLfm4~_Id!1h@N3uS3ga_FoRN;<{+$P~njXN6h==Zk2o!Rp*?2kS`s!gARU>g` ziG4}2q(mh0j`E8&tsltM*r8%JYoXOuA&+}#bTYpU;S+53r_)uTuKM{dBzQZWkooz` z+6NjihD&*#DKzXG?65wGIr!Q`UhGNdZs;d!e+FL%a^YYy0f|~Hq z^vmahzjy+|z>)b(*e$}>JvS{9FYG9M>+2?sUu4Q`+-#icSJ*rLJEdq}WG#GbQ0%5$ zL+*>>Uig`VlqR_+=b>>Eioi>AF|SyiH#-&dnRv^78hdi2|EXnaG(+&Fw}Xi9%wQhP zcB+XBj;n#OxbO^ldj5uM8YH?N!H3d7MxuP%itr&%2#P*@2etR=VGGOK9o z1?OXPW6v(3Q9O@YfLn<=!V~;<-YM~?8t=8YqOHEjSz6m`tK0Rdo8y?$aC+;Gw#;%j zwnZHyt^KhCc*QZzV^ZV}3C)pV!6K%MKCy%%+T1DJg#Ot-?w8azOJFqtS5xXf)5rx z(W@j=5C@1y7Ch$>(Br^SLEFA?5Jp=ZKdL2Ldu(HiTRswd%A3dU zQ5HWtTrZn_r*+kxCYqJGF43c%;0rwI93GNi%$>i6Ee4H~6};1sAgF%b^obHCgxP+- z16$6$tMq_`dqM>zG14ZSeI3!D5cGFrp5M{r-*M9~{PqldJe$<`b~23ed2W-sjuXS` z3qm_L8VIONm=k_X0;}@WcSuG=qo`WAlxZwRSeD>2Vd|j8JYUa5^vkC>;%cWSMMSMI zu}Y)pa;o7g-}_zK3G08w3w~GYLX}w$@RNU*2!4(I$yl91RLOiOKBepS#X#kOmN39! zcdBHMYCk0KQwFJJ+}l(1cBsH>a_r8+S5QGOk8D@veu>n5$_x=^*JwOFSg7Lz)!zKn zcFkjOj3Mu2e?-FD&hg#m4`Ad+P}OnGFZj*3&w?Ba-WCfeG^eDwns4}=1=lFKGJ{o1 zD_d5jV&>%4SXp&nT+ujbJlTeC&El_I;N=EgKR=lg78fkg%MBs~;EZ)of@NeSgF1M! z%6T$q_>?i$HfFKAr7@m968=Y#atS~35a}{?5;?Ct&g1Fy{aH&I5I2Jnx&@vYqMf+lyLzLN>?QM=r!~b72^N`=B7X)%#2_$D9N<+k*X>2Wm1iYFzdOaq1Yo1<5;N zRLLHu=N%G5-iHTk6{%Fsgzp8j=3b-99phVhT?vIe#lnTZAn`lWo9x{h-#%dClJ zy0!S5>rOJ4O9bp%Jdo6>xYa`*8$?kuf5$qp=Grv@#oeo~wkZ`s84O~u1y~v#&jdK& z+IAsKo?HYp5L739{i$-|#fa%7DG~+hQK=vHM6TC;^MDCfNLH?hR?KFJb}4LKoqf>(dmO zsJ~daNlZ+r2;W!BzQ*oO4cYq34*FfeLU1RVdbvgQ!(W*3z_l0H zHl$h1I4S@#&t>^pL7?<&RhPVjL(7#QZG*o~8o$0en?-5Fcwct-<#-*W^JVENzS-R7qcKs?S7?JxA-6n;P-l14a+FmJ@bodvUqNngcgF%=bhh?P~vN_@0 zrx1{$XyBN|ZAapSeLq zMix~RNA-xzk@mY7Cq3Cz%r|Ov^<({_X5atQ{kOsrAC!Tq_Djfw z7#JAOj!?YlOp$~Xynt3?n*Pd=LYz$St%k&dG7dPJ`e~zF2UY;Mz3*H;ZS*TY)er*q z#*S@5phMlU@Hzpc9}cwrp5@2j!fVrNAdP?i3U>yuR-?y#YMTml;30bEyBRSJw1JUF z53nRf!tqxDAa+0-;3}wbCIvU8CJL4Lh$RB=v8LnDH zf3W0Xp%%?$gFmtF1p{ei)c9B!(CBRu*B?)`JJ=<~o!)uz00ZLDVm2BjA_Q-|j~f4Q za&k@pj*j)xlq0AXdwoSts`>J{FaX#8Crz`OEWv0P&Vr_|3XE#dj)gB0jz|lbU<*w{ zPgyw7%zN<(5sePC*N5!-5YG__hYAM`30+z3i6*vhm@FFoPGe&N+*q{*!;s)>B!Ch$ zv^j6D9OzZDM578UlHcDBlehYu8SDJum+no~v4$@&YxfHlm=ZF0m#>f{tm^Z)eZ@wv zn5bWG*H5st(^J~%c!O9aU?K&gsZzMkX^ug7Eo-Oo}yxgE3zeKa3^A0^QSG_Y= zA)U8mpxx%g!|VD4#GLWoS9K`0fdmnaptt@&kIQ8fW(eKb@%Qs-%>JTM%7_Qe7~ZPK z=09BMA75gX41PXg;@`c)KLRH-Q zkU>3;mP3-*h-tyctgqrju`Vqwz}u%jBm!h-p~>{R>`~C~6g&Sz0+CT;WyI)MTPjgC z&ZmJyc?AWo87KYV4)4io?@3xw|9b>@q|1)dB#~1p;WwGs{=Od)43pdF97T~xE#N?E zS)!e3JT_w$Mgo`n)996zm2e>LRCE?rw7IWvHLxJ36>9F^@DhJcg=Gk#0V1u~z_$DG zGRkr8w-?8R%>W*YTNnazo@{)%{@J2?zGBA6rgmyZ93j9bP-ZzEBSGE0X-^!Hdpy-&L21IMSUMpFol~_O|G-c0&{F) z-YKLpvRgl$^1QPit{j*^bOQj)i)lOB%daP9_0~i?@FG$E_DRd93}+f!!sC^;FUfyI zC7Jy$_8G)j)JepTm!lB#{JAW~k*xa9a6u;RA!q)=c@~+ywg+o5f5KXCwuX-V=t<|> zJP&+Q@4817e*A^?C-;x(tWAESw+u&Q7vj1-*+9GCi`BVfro-Q&T87*>?U4NO_>k~+ z?=P-#vm2Gua%<<5oux*ZE<6VLJEH!CqK@1Xn>_cj5fXs_!3K~~9A1x-<$9O_*aZ~X zcD!6{kk=-O6EZut_B2+YrADt74_Em|q@yI7%}*W^ZV6(*lk&!FIb?N2QEIvPq*Z&K zYU%yzR6)vp`cb{pPI-q@|AYhqizbG2xDSn1;oDSVh+0|7qRsKtZbu;Ft_IIsV` z+pC^uycfreBl5azh7re9W|z2Nh(CcvepAb)25_N+4e zMk;o^?~DB+R1EzkROo$$lv4zdNAAy^hNAvp>gZm~?lTi3^=cVA$hXv>#~wwCeVSRW zJCYs)KK~FG|J`Hv>+@GdL1zgc+Wf1;m0Bljuj_WHfJca> z$T#McN>3hn^wPIeS&FE0uww2L+g(y%${x3!8%O*=K~ZhD_SR}JiM&ORQ!dTPKG)RO zCU0Zi%f_oEN4?~C@lt7CX~ya8#j^?c3cY&H%-GFXH3L>4Tof7OF!GqgU!zHr4^ewK zy#gbW$4z|*7CI7uA>9ED4o|%p5Ut)q6Iuu@XfIMWLzxFtSCVDi8Y$6vepX4 z+y~jXG-&t(F(+Eh`uwgpoe>!^DBHa5wI#z=&e;_b1-Ti$-K0k~64Y}obhe89bQ|Ev z+>ax*`mikSti+X9oGDU9v-mgJ3`)rSGTUT-6R?bbI%WPjR|{Wet;{8;{JH3Zo*p7j zW2LEF99aS3S3*`Dqy$l80vOz%yUJ$=jH;EXLVw})Ml&@e`o-d0Kws=cVmIy*_?y$>_WFNPW@x#x;1GTB3cf=;F1d=a7cZwOq=r(I>OCqN~-(dqiBb@vF;#$im zqwmbPi3dDBJ-VXJf!G_qo>CFd-RjMXDu{Mr{o$F-mJh%0^l`a#h5WEj9?{#69d**a z&ATwqxwugV0hEVr_8acI5F+WuM}zE|$tj;YRFG>0H|>B~@{gJjyeKO_yr_b@DHg!EtNi5S#o2b-j1;ik0uM;5e@_t|&OUU$fw&*N z`@yJGDdp|IuM_kV{>R>Nikc}lw_~SZYBpu$5lK9SAMGm&nPHp!%?ayny5}wiAi>t4 zDdBmfdwR+TubX`Ymo?ivk}vUA4(9UYRk*i2_OUz$T*3@Ymm`lBPIH~C+94YGnZL9K z3WzcxhnO3LuidMr7R%EJhcpf!C%unKg3IqyV{=)0XhsQ9n{c zNxM?|!*J1(A+?hn>mm ztrA?GP%JQJHR-wv8@7*ALVc?(@8AkJ@w;pDl0R#AC?m&j?Lt)DJf)h*uBI+J+^!y} z(e6<;FP>WCpAtk_36xGxX7fwOot@dqcLEo#EyKSH^KFe5$6bq~a6cVv>W6HPb^tGZ zX!)}_&uW8ZpB%I$keE{Bk=U0B!u?H{{bM{Vl!Sl!*Z$c?-~JAn_Fm6YqZ5Uq!c4K~UkHWlwaJa~hwDT%G23|Yf$d4Zqf>ju%JI427y z8sK)VPdG24{*px+MI0SM6o8BOTtp&i@j<3q`V+dAnO;&odm?{bM(n0=N{(=k)pb0r zH1(I;Y97$H5DEXQ;7twcQNObi3x`Do^=syHZTg;{w!t-?mSpazzrCO?=t>H;eyiJF z_#mhMW^5N<@{?Pf2NJWz*KfZh1(aN|kd;k}XIx1SJi~_!FsGNAJrJp4%1BHGJ^W^M zH-{34sr}Qb54Kf1qgX64wgzU3BLWh(yYj|ok;bNO;{9`dOV~SXP*POq0Nlg9ySOkw zJH^!e)$!h^yT#pqXxSAnx))2je_;AM`z%wc*c|4@>~V-q?LL}9cPRN%SxqG+;lI7k zqp|IJB>l-y^4Vo>?SZRZ=m+1OZ9c*VMlZFc01USy6mR!M4-M5cq=~~SDmUU7$|%3= zB=w*oM;tDG4&eZd_I(o-%u7KkxE2Pym>+GJ?Y)4wMTg+*Z{&dra)Uysa-{nhZI_yB z(TeQ%*1D04b@K>_IMJl;F-WJk5iC~;x!m7MNlUMd&&oGByTZeN=XVs=Nm+Kr2S2=Q z(6=bEpV_>1{|cv@C-FJR=#~$J(9pc_HSc$C4CmFAYY}TiMD}}(tzoL|NRH5UEi6p4 zFk|&B(NBuT?Os@};Wv5?(0xy^u7q4)Op7Gx4E-Y^>s^6is+znkHfX4?noc?aO8Mc` z5^^<=T@+8}XQs-+m;m*>!)jfif~envt~t6i@%1hZFF56iqS zn2zA%JLd%C7>roi6R_RtHjmAhkoVXxO&?KkPnJuDVW%<=dUv0PmtHaqof^CzQLG*W z1=`9D$yazCznJn321zJ_Cqvoz47hy0qM1b?Hv;kj>#u3v^`G4I%QlCXT+z2DkN%XP zD>fG5i_K?~k4-*D%@*o|3%l!2lu=0)#l41pMRKEwO2o^3?vx7;H`+gu0fAu3t#$P9j4NmpfM*=r#jTpbD!#IlQ^K>8~+ zU7s81kCqXj+wi8%s2Nqf+@N$u?=GMn z7OVe<`B_-J{cOqhKd|R7=?N>=d;!mwlYao*T!?RS-Fky)Yuqif6Mpx5^O59_eUc6> zABSJN+r5Ane?{p`{uYP6Ow;EW;Tv^_{<*4nRraL3zSHeuP=)&8U{vu!xlXEj4h#6< zVCY2dVfbEvGd-rto=;*#?V>aW-){{+YCyZ<3t)ql-e-&Xd<6f}RVA?V82h^m5ga`f5vaCpQE18u;gYXb z%X-7m;3tl}b-=56k)wv-589;B=Mk;S7U(*fuC-Aw(~(DP!;o$Fd48)X;ti0>%N@uO zw4T)SWSKuq@vg;jkskouywb&qI}mR#k8aNP$FE05ac>+KF6VISG>=H8@dVy*ZT3_C zS{rqql*-Hq!CHkj@qj(-3Zl53LhpyCuqF^MX3g_YV7kc!o`k^n=c2KH(|<5X6@Wk> zW@AY8XVvP$$fP!aN)`dlfxK}qj&FLaSP&%I>UI`}Yo9`+6$|wq^IWIcYQ_ca*SmI& zVX1&O)`hNoITEQGty2s)4@0A!ZU{521#dJ1kvcT8k6KNhpy|~_sd>r*jKj}D4Z4rs}vVW>~Nr}CS$MusU_5$GK1{WYInZBPYnd2%0 z7vFi*#KxK?2FAb8D`$&VFLEIxRP*jlSQe_85in~ktZL)^{uaaL{Da=U!uV?2k&uL^ z1``BAnR6k@$)N>5H$xW6bB-8ivM~K^lW9GlTE}~)V#U^krCJts$d*R)1e{Fi41T|4 zn+{*ubDD~VhDuK`Fa7Lr5e28@X#O}GOyT_g?o;Wm2b<}j0UY!Vc~F=lot8oXC)!-% zt0;hrhC>LRWVP^0z_C1>f#LAXf$x!NR0%XKdYVB3QpE8K^>v!1H8aoS&j`-G zws(88$m!|mmKzp=o|@vsTf4ZMyCe1cJYzVO3<|n-mq*B}L`ipyACoIJ;irx2_*znR zL_pSYQt#w|REkkP-UlSWNkb_MQVGi7QzpY+aWB);Xwqf(@%lSY+d9ML;d>1K5)o8s zRH2*s9dLc!MWY%vk~#LW>IcN(l(Oii%hVf z?rMB{f{KGP;r1>hgun*N-j*AhFiREvYyTO6Z zXqtIh&}4w%k&zYJeE$g|6bKA$YN&#{allGoEe?1h#5dZ2^B*iq^D4cfZfZ2Pn4>}F zml6kpWP(Wm#gvHd?sHLfP)1P3k!Zz))*nEgJQsbHqiaUPWMYTI|6EY*zuliJ0sao8 zT<&cbpQ`c5AoEXQ12D3%=*%6MKn{ioXCl4qRkyC)-qE_ZHhdM4&nfgP;GEkudhC;` zb7KKuCss!8|Qvy~736sCq#XTXgKyaBH=cVYX z%-SRXnQ-X1G$>RS_gXsV$EU7K`3G-chfI6xYxN*Uu~>up#E85;2lTlrK1!7D z@aeNM01Hb`{~mx^j>FY zTEMU#9U`m5zsQm((RsujvfqQzhPO|d$X&3f($RslE zg81*o!wr{jDwC=GLy^uqLXV?&USA$pEX^uDc9wx z(Cgut9SfnN_a`oV_34~Y{$MI8dz4jA)Ji3t&Vn1`11=uLXI(K}FrWzoj&ekr_~W;+ z)sL?TR#q`38vHFV^N!NMWm{_BZLhm7?@82u`)y&TqY+NS+pOr5WXImK%#7(-pP&LH z|NZ2?pb~U;Bv4p2^h;E(dC{@;Xr^fj5IT}GRPA8bjHH)7e2v&WkjXb8!ZtE1SsNkZ zF+;|Y(qKDaVZ^=U_F+dTz?KTmH>EwPYa5k}(Eo`%eU*vCTf2^N(C1n}?(=k%?2cU; zA8^E3ZuN=8H8EW6?Qyk*7BJZhdxRPNK})UQp$C#)E2m>XE`%Ka!J}u@VDNM>c z{g9?I^97&Q$<*={ZMOb-g!|5D;&Z59gVQsh^LHUFp{q_B!mg1MHF5f1y)dTbfAm7K zwBI{_;~gdE8a`9WvCrp28~i29R(Wii(%BfLY=GQZ-bt7N8uZ&RHRaf;>+-@d`pWgG z#KdMl?&CclVDo+j6l><;z~y$WPVf`flJbna?aR&pgJ@eIF(5Qxoy-q%y@)uyDqF16 z4tRUWk^k9K!slM2me+i-F6e;wl04LaMz0RupkG4#HP2h+4zrWp>Drm`k0VVSNDVSJ zd-hZ#I-IWWX?Y3FXmDUjN4)~&F|9Ta>GE`bsvD=3E`WlA-5%u1)5T1ML;}s)zEZLg zu@L{${`#G^?d*?8j`WK;vq=FX5a^O(@534hCZEYc{ZXI*&@cJ5zgd*}e3o#pn!4%x zz*s6i#k`wTJ0P)#!RQTPhAGu=UGNAR->8nop_Ug%3|?DUf>c)O#wkE9aYj!Agh&yR+p@H-F->f=X`f)C*AfVskC!; z&nWMS?rpO`ahUnVER9}U2*i1>b;5a~5FQOlXj#`EDMxwQ@Rvi+*+jjCLLDFM?G>A} zNCB%}UuxFT^eE5HEy{nzI<$8JoIk%rc%F2)4u}@Cz(PGhy6OwvvoGRcr9_mfEb;Ed z=l84Bb=X2KJAA@{ZW3zL;$eVNV1BrtsgTJ}`S`v$CsK=3+hMtPHR~E%A4ZIPC5{|x zc3dmzxHk)V#?$Xcm(O(DZmtRWm5b3Nh@S}9Rl>ei@y|tp%+J_VWM1ob45Kmq=cDI` z36Ql}ME{k}&_~?UybPls-{~q@^snQnZ^?+;b5jDttePmB;BAP}EC-$4@6CZD!+mkZ zPGvk~WKoDex(O>$5A>rQ0%%kc@ghr12ou+f5 zjxSp6%r`M>ddZ88<^{B(rN{zZc(5Xo-GL7Kz~YsU$yn_L7xdo&lQc^8UgmjJX?^R$ z28BXMUC0dpVwmuGmslE zC;ec$E@bbt_Uukkxs=K=O;#gc@?OX+Qt8H9%Vq!i)+#-Ln zF}3AH;L*o6PUHKYn8lm$ItKtiM8v-ax)pzt=sk;8boni&jP@;lSFgJ|)zw*kJb(kT z35Z`5{Y$!1FfMSZnn;62mV#9rs(~z2sC4mFsQEzLIg!K@)(BeSE@V8-lEmY1pORVo zT&dnUrDT6RZ{Tyqb$xnj+>)nVoKUnY3%;Wx{5|O3dF{<} z2u4~hD{6^Z)|;LwYc#FVZZ+}G4=?~C`Ge6;mX^@{(C+idP?Ec`?+nxWfMN7;Aw*iZM(&Ax=k0ziSkoFE$t?K| zR#x6rZU+xRoqG(`<$&VFkq;GR&9@I95KY^Z_;bM}oP>!OS@i^19}+rW^H0}Xa!4G# zD@`u(aJ-I3WEY?M?`jNZKa~f%J?w&<^WeKPG~A(p7dtmbyRlI9HKmMYS`_h_R4rVdQ9z`%+v@6mM_t+ADzguJGsQ}30O*Qa-)h$- zm#oZukls@gs8raiQl7cFSk9!r{KC~}zI=%?D`rnk4hPabg=IB)jY8PGmiB+E`acmV z;dFRF?hN;^&Gm?UcUBzb?BG%IzagoMM7xPDr+K1!j;K$&rUigDAjJA|ly%vYd}2f1 z+!cc|+}u>crv~UC8|eaF6th*CFIP;2nv-~*^}3D=iWMIg1p|?YVo7rYdcNFCZ&&`U zWs2+ixzXTvZcDMyY+Av$k^6v~nGq46_wX;WcyR_58a&|cZM@h!j15S@S}nq9Bom_E ztH}Ao-#-X_1F{L~cO>sxo%eqBKdS(OJ;3p&kr1BlT%fe2;*F}}rl9Y(6Vp0hsOz7r zDXFr%vhgMS7x=k;%FgyKp#wmS)oUn~Jwj5TGH;T1DngNTf65~%J-vOh58G0qCEWfH z16R*+zql?7VqOKOCslFXqJ~D)D-c6DJz}7Bwbxg4^=YflnMTxp?dG{Z3?Gt(uxbsFq6D<`UG(=2BRvJ66&Uv70&~*s6>4?(VX)KaFQhjR7cEL|C zLrI&%Ks7YD^yAS$8>EU7aDnt6QDEX!0H=Dy)62%gzx-gY`vD+Jk*s+q)DQg|9Cg{w z@Ceu&4CU3(7EdS4ql1gIeQN2(g!?8xoUE9EjUp#`w!XX7ZP@+JwzhyPJS?ma-Mda8 z^1|&n2RO5Kp8}}@Hzrc+tzL|R@rOHw46zMl$MjOQ73%P;#iWr?*}hRWoS3($5ZS`- zk78H=FOG(f&s&g@^2-?vC7CYzJ93_Z4)WkX6ePzok!%Ll8@fxCDC%sKn>aYxc0)@_ zqlb;3T^;`SC`KGS;-)_-@*DYjRM^I1R>nI=fRs1RWlJ?H-GG*~4`3LciaPFA0_56q zd&I#aDtmORjB2W)%pC`Cvv8{~CVnr^k4i3Z0)B`v;BU61ilUbSlKd>I$uvdp&9MzT z*v&`VE54a_4C`7C9N*tX5y!%K-96)6_?`&(GWZ52{aV7Dn?a&qwRYfPe2S?72s3xG zI_p<>fV{3tSlM-@!kM0ow$c~dMK+F}QVd~x>_vw;1L-Csr~?OkZ!K{BnJDZ;tHJBx zABF_0C`!cLhBF0*_mI8zxJ=yw-CE%N@F+3%Td4t8%ujw^IMD~lz9-1>qm|FB3Y4EM zg9}!GEdysy^}hs037z{D_->OaVsdLrxGtf9)*E^h6bFfjz_sOBni-hPKwt_!f!-vM zt!k6>s}myc?C>ro@7YpQ7_=?ONGj_ILD&Pf5kdHjpZ~Kn^z-Mg!>X1Kun2Hq*wfzU zaGMr7AP>3Jl#nH_1)TEXjaKB=piw3C+B`|b5ziAJo134X=kq?_B&4LEXj9A-cF*;_ zIo^t%jQrj!6RfXGqm=wMC0ji3nS-8w^Y&o2DsDJKz$v_h5q~`*@=QDs)<*OmmAbh)j$)0(dpO20Rs;V z*cwQp><-6#&^;&)%Ft0ub5kY2L6iv&D}d?F^S;>5oGntz{*3Cd`OZ+I0|KX2r25D8 z?tE(`I5>DQO}axRivSoN@CDd1jgFok2CMbIkss(q?fJCcP)6DyhJ=Q4+m8KO6>{A! zcK8Prlebj9_y2q$_=N!M?Ce~jo)c1)muJa1E(83`b5%#FP8k)2h{q5U7ZUr{3b>NFT*8x>42sES17x!eu`Nq?CpQ z#`jxvcY9;VQw5#h?0#farMNSVlMF@5@qf5xHf@FUdt|@&4G(<2L;iwB7^Sf?#4;qb zJ5xa(j!7O4hlrM{g)qhGFjKAo{9@SM@UV?;o^$Gl4tA`bZo&hoqilj=R@y_ zB8>Lq8vj@0wx=21rCwtpi&%(-g*9Hh)&2%SAY{Ai3%dD8ninyLvHDm7x20Ty<2i?l z{VA{@`p8=CWALHE?)zc5baKBG;@?>BN!%Vnn_TldKp?SNvY2jVKyYJj;AQxqxx;CK z+YZTSD@4U-qzQa}v|Vm(TI<{BjnU#fNnld5SZVV|>o9BtRlsadm+7I2CbJubSGC=v zz4yJAY4f}5a#IZr2WFW(;O6?sNKi8L*?VBavWwWOGnAHaf$XCa7E`h9&Y-XvWo*8=c-}*e=u}s zz4tx67!~gx97Mm`pN7Y_X4oB%w=hesyRJ0-6UCsE{Bd_IM-kb~%nZkCvCb}U;Y0iz z*;H;PCAa{yE}LA2C&0?<+T4JiK%2DeMt)BmeG-571D6B375j`BXF(?S8+^A7i@*5JoUnHK`?YUBx zsF2Uq{+B%YI5N|GAT-GTO&fiZ8#+KN5**4UB}kKahPaX^kDd6|0B46O;KK3mc(!S6t78E(leO^}coS%>Z)nI#aEQ6Au5DaZ`B0u5BD1^@qhxB z|8%q5%AkUd7@X6+qHNZbn8->B*h1|RP1Z0)fo~&t!QXz3H8>h+mum09gIip8u*9Bk zEw5a=NNB%vx_4nN@pPeQvOUMr$_UGc!8CKZ-JvJ~D_^SN^L*kYkl10|s^iAJM&Ux> zYqkr^dG~36S^t;PzekKrJYGSnX7hUcY0Xcl5q)vgdR#I$->x=CGRc8vto2b*VT?in z&azCmV)f)C4oKKY!IJh3pB>;Ix$NYJuv+dKhg+b@V$XY3ARV$A3+r-!l~@{--W!vIwdPAZI<$ z{15n7T~icn%`O-(XIrFVm=uEQLK21(U2ahN4j1LHHzEIk#Iufmj4CE20sHtDI*2o@ z_*yuK7+*k$*Kr{+qKK7PJ-hB5hBqET7gMuW7>*QSu#C}x?5Vj40)H1QZJfhHDoRNh zQnP_!JE?uaM(^d-tQi{(T6?DiHV8PrbU7gVeEh zn(fFGYF`#kP(f4i8B}#L#DfG7XDa0wd2;yfO$1iUD^2Mqebl)HW4j}sL?!t|RXeNZ zG*<~mFaMbJmM1w}6*P*#u7#Lj3!2VNFKKdA~GZfspl;ieS z?0z?oEBZVpnEXHpyc*q@M1!D%g5c8sty16)Gtg) zeBH1{PR{ZDd*uYkv3lPnW@94{mQj4%+J9zdCP~X6s~EA#p9=ZiR_`NIiemoOPxfv? zildcgtlYEoijO5Sk9N!yaz(;mIuKw_MF&m&sHBtpo0#1Gbe&& z#hY*Llinh}*X8$F86VdzXy#WPR%s4VXUbnF2W z-iBWG+_N#-PyaHS$AA~Y+1)<%^A5#mD%|yOeLZ(OG{==4N|pv%2*-21A2k`<7WI8~ zxpZ&G-^E5f1Tn@|C%!)OFPkn$K_HwYthqQ`vB5!hw+_1yM%1;@SV{G5qP0z$*CbBnrV znK#A#Goeok%o9W%4(*nU#*>Aae0_ZO&`%}xgMNp|vqO6cg`_5Jr#YHOqI}^VcP&6q zF1xY^jt@p?u1NZux9Rd&v5Jsc;5H$kY`jtivvGVFc*>d$RH{Ri>}4Kw3V z_OT0xZlu41!|yJDZV@m2{qp=Ffl()eNS`SV!`vSu;demz8y=v(3Vo8z-#n&f?1nps z!oVh}mn2R9l!QZDWTdxqSn8S`_L!Ha>cmap#y7l+BWF#0n^WMym_6euY~XhDMzOG0 z`l!B5R=Y}!dU1_RG#R}rTc}yK;Dvi!X$F$^KumY{Uo^EY6AXcC6eRtINS<@?m(Oj@ ziH~M=j6I*6m=LG#BM_YveDym2FZcy$5D+%TGjQU8slUm8s?rY*-&B4kY$ysRvbu|vg)F{7?E;gh=|JaoqD|f`m$ATkDJ)G>yBc0Zw_+Zv+sN#=s_@?VT0$Jl+ zBAL@NMt{=UKW(S^iKfeBLwplYb#rAOz&FPx-A{EI6*B+vPy_z6Lju%H zhemj{*OJn!9&gloyX*jUy4CTgb=H{T11Try5R`1I5?tFss0%J=%P#8`xJIlTkk)>|3b zGxYiN|EcRO!=n1$@8MzSkdp3{2I&+KL{dshI#fzvkPcx$x3BouD*XRV-Rv?cVsFN7u0KT0JpH&{r+>YPFu!3J^ZJGxRf?}T;%fVV*O$~ zw^f_ZNpiLSj=)IpGU7dAAVoPD_7r2pZrR8ufL3%3t#=}Qy-kpa=<-FY%)7YoyWv_K zT3LEiPY)|}83G16Lww$0T(;LNduP$q-Jg{0{WQ`mc+BvOA!IOv$QvoJt{12tGWpeW zL7;8@r_)5J^2e(AmfEa0mP@mrTGmsVjy?;^a>)30>q-09rwUk9^bFk`m&r@j`p2bv zx8M`O;~apB;Inm-#lK2Vhsl6Ef)FvryvTk?U}5j&=rDgwz&}^~tS#Wp0R_fa6`y9v zG3hA|fj`&Xn3p42_S7JZn_AUs!LnCsITwO}BlA(IPOKSPYqt*9hg1H?-yo0j$o9$aG_h6CSxDotW ziMbG~&-82Se{oGAV!6<&L&NPr`7ZNzFKKs%R#TtLC=|6be@ZelYSe&Bf9>4WxI zm{M_+mB1a1bA=*SMeGewxQil~LPQlXK9bFu^$FdUOkNSB5*s07pO)0q%BrSF- zt37dwX+~W$c}K2fT;dP<4wb}r0Iu;vi>&W|&8-|)Bxa*Ru(ohk1eqq)9y`Tn zpR2yh;u{R<{176|H`d7Fe%M_Zt`KZ;-jyb|Prk~BJwvYLK19`jhsc>mg;WfO(%m|a zPBO2f_)1`VX$?aG|6xQVjGTe)oBXg)T?Xg{C zu3XqFYT1J3g0@RN6CN?pIkS3o=x5^7zTibtlP8m1xUD$WX!?(-|q_cM_1oF@ef@pK$0`gyXM3tl7vdA2+4#L>X zgeQCN)0r_qQy5U^y6a8+Qflr`H$*_`$(ce(aV&II)J`$wHO7oj00}DP@|@21b@t0yh*YHZyJq@iwh%;NXm@j zmKXT$xK~LyOQl|YTwAMl;_s-`FHL=2fr!(>x1vQCulR0*NDjyU3o85mC(k7^AVr}z zxXzi3HoL-QrP$(4F7D?a#GF1Kx!vG=y)fY@LA&hH7GqA^1a(^fN03QN+t&pgd(lj6 z(~Fzixs=fl2iCkCB8w6FJs>&P3tc*a^5 zaRq`Rs)B%?2_&~sW6wa3VN?@M)S_|+p~X1Ckn1jG=kwv=;ePu?{8UYf&WI4)3MU)M zRI8HYKhG>ceWWMbK}-3;jqh&fI}EBY9b9vQj6)?&Dkd^&X~K{=8fN(4Y30)(Y094r z7FWQ$0kG3%r2WCkcTdMLz_@GPUokI9ts@&ucB$Bql%PnDBWL=y=Rk;F z!&xRLTD5g!O%O#(jnMIH3U_bv{*A5JiD46${o#J5>YGg!8prI4dv&8nu8KjPhtl-I zQWYVpa&mH*Q^qWVZhQ>%LQKz(h>8&bEh4V*L#wJ^iRm$3rg!B}1jVRF5(Hmf5z@$N-2b(NvlzZa$UzO5kA zadJ?YYTCHj8mr3y$und-SxUzV2;prqHqGztnjfRjze^dg%lt5cFh3xcc2;1k-?Q!! zcKkx;1@2OaT$u5bx{9 zW;y;Z&qZ^SuEl;3(i?Pe{v9YtSr?X1OGcK4j^!VPvoBDP*RfUp-&*4V`?5_hxOrp& zHtSbATucHIp;u~_V-zJd8ZcN@FrmV;b99gQ*%deg_Zep?%6Yx$9K7B-c-((gQkij5 zL)c;HZB$c`KvKu}mENK2YDeo4Hcm!=Z`HlOf_iFaQO?Dlk7)xn5qYV;wgaeYU7k}u zfMQy?PdL)+TweHpIK2|Mq|xy`SO~fhojM5BB5)Mysu*HatU#40z`jo&SI_s%Sf!`J zRNnkP`}R6!f`c1d!tt6ECVXa}Y697fgCczw(%W*lSyDqQ;my>)p3_PIwwKS2FcsXEqPV%hAOnsS2qq2yMl z{qNi_c`WT=!p&BFoOsi4Km&-~R~=XS7t=_Sz(1{QGq!WRr}>^fcdXl4l*}#d_J}eS zp!z6kd7AU^kqyXV&!|%mBmZTwHh9ydh|u|6d;3o(XLetl8B*HKa%CL(rMRT7e>jUS zh+4`J7zHBvy>^e%@A6Mf?UUY_7vBqh;C+xY6YICyPcBO6Y`Ng$)Z!U!J9~Ie#xRh( zd+?lIChM)CwqVzgS%-1sM$D{vKgg8_H2Nj}?GjaYF<;@LyiIYu3Lc+b#p^stKOeaQQ6v0FmAJMNd2-&64MWA8FQj!O%}pdJh2FbpjV zy|-r9yPle8f}QL&C3n2l;ywcZoo%Np<-K^xMOPXW$>6e?w^OPC|L5iU;wz~0sYr$p z#lLylkw-Iuic1;E;AXGCJ-lydUO%k(#>X8)Kx+M`O*kRFuA$oDm0;H0p8HH_G3%Lv zhbZx^@S=H%+=nFl%_~aV#w;y|2_|#1s^RL*Z{Hns)%(oI5fQu`xA@te_JHWyYHnB2 z#ej{NcMsi2(z4SX8JL*GSO2YGzg=U2U0$Kd5nt~J-n&FIFR0Se25RWcBo*GDKKQ6; zKGxmoV>_JrDd(MhPZekUz`_%98S&WljKc#PzG?z5n0Z@(*~hV>l>FrqFV>$#9m4UB zRu(wEG8VC3iKKY3u>%Hw^)OJcJk|>4|Gg?eg;|f`Jd@kjLJvP^*R}wZ!;jV75Pqo_ zEi)1DZWFYPRKb;AMGNYql^Ib5?Ad#JzCV&a;cuQi9p0|@E+-|bS*_ETsZCo?JiP1- zC*omZYazzLeI)ZLZBeDe@cf3<7Y9S;Z5(zd!vo(5i1ZF??mKaj(P|qDAAb730~xFv z1VRO>X)zun*>V=w=F%mp^THZxI5xBs5#oFYVfYLVgRaDnd^$0R@QX?xdtaU}$N%8N z)xZ#E5GzYrwrY0YlaN&qZhNVcf<5Day*^&P%tzKDG%$^*ZF1TjQ9%w(zSOwj`3FaT zO59F7SRqO60Wq;r<*#ej#T$6)34!2M=KeQtHM+ z9?Y!)Tbp`^EPe`vA0-sXE32(%TV6+sD-yH3$1ya0`q*&DC~!0B5DT}1@v{8_$FD_P z6r_`QC>)0njoq2b)7@XCr3E;-7~;XF43yU zAqv|k7nw|C-xeAd%z~-xcnOaZ+rIx5V2|ncEN~d$wp3r}(dJSNo>4k-U)bO!(WXje zL)u4L$p+Ih#}ap`_rBloB>C`rJ@_!sV=m496(6l)Wy@ui;Ddx>+UGLRHIZv z{qsBMMHlL$V-+{!BloN#Dwr!LtZ`CuEy9@HR=(v<&W*9>`ziPG$RJ2m!U?GJE{d_m zp;R9QD_lW_;=(xUIV7Z~L6y(b=U9njGsAvF@W#Qb+hO^;d|Ji5&Tb6pu;LS|xr62L zoXIa*E;~~|se4JIj-MxAOU8tFGhgac+por)^L_9HY)V5M?WxG2iPinAtgIZ?Zv5Fz z8dr35ML2jJ_8)r1Y0`Naksf_EtYlc5Q{$foxMee5%@*1+AQ2qOY0$QYKT2=KX{V07 z7v`XnUAf?|pl7wKZmBolDb5biMSc?^D0c9A?vSHOmDBn78w*^prC%``H^TkYh*98a z@!cM=pA1u_hvtSAfvlX>be%OHE>*-6w#TXRVhK>(h81O~2MU!8me1l&1W{@@FWWW| zf|=@P@!EY|`1_6Z330T6#X%Vquf@bFHeT&jg|%^lj_!2K&9|JEj{v2d{(u6IyWa(5 z)qkNQ4p-GEC}hA4`KfS#8Si7++lqUX}? zke`fD?x1LS75Iu-p}SC{`Tllgn*kxqWl4%nn`Wj&?$+9cXqW@F?+e*-Id_zV=V{+G zV#5f)_69$)c?>Jg{a5lQ>ft8ID@lWS@~B&}xG-=8v@WvnPpxMMl@>n@J?~8nvi-yY zL*$+UHRY1qM{30Y_Z9DO?zW7(%ni*k>`;1Dmk$o{QM}gPn zv%IGCacsrCDS~nRiHrPDoy|uyw3KE~6c{|LrzZ`PfF0&w@^9hx+Z(LmqJ%}i4>)`_ zlZxaM`iO9jKIjl0rD9oiC3lbTHm45k?Mg6vj}<|aW?<4 zmHzLyu>w)QSA`#iF;vOY^SMC0|GmgRUc3=b}%va>C|hMXs{r?YjrW?b@q zUA~CgC^$=Pv!kUybboPsnVkPF^M3^Id@4muZ?XBfXNL}a8v-Ji4;K?tj-`TsA09&K zstic#k8Oj%G4}w<_V2>t;tk}$Da2{WF^vr*AjrSu3s`BfwBr2PQXUS{fXNl=xYbgR zjD-BZN7>riPI2phj&U5zQ`$P;39seDGs=JhBGo4V5EeIp6|ccWl{tAXwaMLTBCuUC zo!edJ7JfvpJJi|>KaW}0$#A{_KBU0Wiq89t5Onvm>=xfDeV=)RfyjjsPb)tB@E5)P zkB=$Ckx^F4YeiDNwZum7_I}sZ%(B$QtqbROE>44;|29ectKybnclp zrzcRVSs4tq!k=9Du8_S53^c4h7&4yo%|qv;?KH<5((b*%a*Ik&S>Nefp00P7o$)ze zkWQNd&#j=4^Ar$<2JokIx+RHOiPp8t-5K1uXS0z=2wy zB8M1kCDv^4(4A%cA`CMQ+?^S)`rftqSP2PeuAQ)600Bz0Q!kq3S@lxGwn~Z^{V8^N$McarDk&H8sFYHS zwb{BYzp^Yr61UTvsC6wyn@mRz4bWiUAzbu3cKesQ!&1z>njb#diT9@~RrPO0X}2;| z&`iK-zUb&bTcs4D4}?AX_S*w;mPq(}z|roY0NeB(JNTJJL!ojWyqnyp!FjgSBH+)9 zQ-J8p)b@9~)*uGOEUc(t%Y8pvI#xhH-g0-@lPEW=%xa>0U#thZ5gflt-@1>w$~mV} z1NTv&^_?qkbM@ZF67k#$1zrYAph2JHXibztiz-s>BqJ})0+Pg`6?77WW;fc78T9on zSs6JHz+(*?5oAxEjM^s%a8EkD+K_2??1yLBjm^@7CgrYg{CuN%%5sATp6Ig(lIY3h zchJxuSNrC5RKor!{hyQ0=I8ajf!Q3dDqYjey>C_o#rV^MK+`W0h@TT=-3(Ues%8GE zv$v4u-d79YS$pRPU{kgLH?*ZlR-MnfqJ#935cDGcu3g$GnB{jG?;+E?%(h?Rl{QA< zJ?Tx?R7u76uVukjG%0NF5ej50#V-a@%L_|O9X%PgxK+tiRPcZ)o7>u8Ge}^b(GU}l z3Jf-jG2I@5E_x{T@fGb~9x>L%ho)udBpY7DeX|x)Pvu>%ZrC&2AU;1I>wRFc>%QiNX;B=RFPJfGtL{CJj-7(3!ff`~HV|-K>UszyIes4i zzB_38xjiuH5t^SKTsh!i9uU?0*+A_v1b8gkk&n`6ZOz}^xtOJ#{m}GkdQ}@H(ltIV z_xR0!5Opm2An9{d(DZy7h@3yu;#OygLkylDn2vI>z*vn0lO=tQ9|G;65|XNOrV==) zQ~|$%3+%yg<$Ugc%43xjn*aO|yxsru1Lf~yJm-)SBzo~g5vG(`2w%tCak19H&Y0rL z-xfA=*}yPlBDxM}&;e$ZXrOhz^c2ULccjYkV({6mk?gIvYQF%39F!V#44V+Sh_)5S z(|5S<%O1=lEKW*`E8FnqkErQ3fAh_p(dKR0jt5Nk45>GU7mfSDYNpn08R1)}QW8&> zw}6t02pc;*N;Qe?Q~JFpA0D0U%?_lEiXt`QL17{@ToU4shn8qfeRgCghM;#6N19Cnc z2U0$|i>l|#2+utR`cJ-RQDj&pzQCzchQ?4(KILmKXp>PImhnjxdG;D8@P{F9F_i9{ zBJe$cZSaq{)Ta3K12lxaWgl_z*DKK8U-jZJ^S**$veb(KD*|VI0AiE8@%-`wyb1yJ{5oJDxL>=j?y~&`f%5WKXx{G zY)|-#zxzv>pz=WTNJB~1@Ius?rYd$UN~yl*$v#2}6SaYmWK$0VX1002U~j_t$Jpq1 z4$u#*`16XY%~O2*<=}JJ?~b>W^fka;(*2aC5QWhH-plGS^P5|w)C;8%^lQf|i_^4; zcdNn8;AFHlKVKO;-b(upii+Ze+$_hS!q<@~+KWD7*ZkoJgRWrIlAycoYG3_z1k|$} z-WmW5zYDsL7CPX+fP!UWZw$~rx!So3ID~`-e_yW+M)E$ZWjFqNqCzKLV;k12_OxYQ z-vLrT4HaiVQ#gxi7Tz?lZ&t%qHKjb;IaI`S&|-X`jsJK5?`6Cy%tXYK6DY}Z6+W6u zum8_-QM>YuVGVK@G(%4lOOP*5?mgZT*}U&qf}QoihhT*3c)_4jfhs&U!Jy*h13mlS zMRl>_JnVz5#p==Y zd%D#(az^koNTOiWf@su2w$}@E;(Qa5ej}<^C%s$*_EXyAHW4)rPnB<*k8KQgks_6I zVWQ3#ZVSIxslz^QOA|L61XOM<7}qfel_s$0bJy_?yS-*QqPQNhT9&BDeDHSI{Oi_b z@7aE?--$p>n9oW7uRm)TuBgEq;oG}H`Gs51h6!HS>qxB*wnK=obe z+XnrmSPYb9LKm}rva_aTBXA1*BoyLNp}dS0QNmVHXA`y269zitbImqo&TopN@i;;A zd}uKdBaN6?x`P&yk6W182RP9qCvRIr>!_ozZ}1S^UwcUEiA_NE)EQ-P>^I5RJEXoo zmKTnlSxROYXZ2iM7zgy`IdHLof?4dAvy9cyqw{=v%YTYZCc}UI)n9B!%3SW|w_w8l z&bR%bY5kUT+a=n!e|x3WTlRDHXY|LfZg-w&B*{D#)FA>=)IkjJ621@6H3mplnF*Rt zpYhq1%06k%t(Y~#9aKJ>9EG=sH{Bk-_a||VUH&#<72CY6hqTmgsZ@_!N7vb7)>d^m z$XdH!jo(%b*~t_DAl)_qbZpbQvTqs$93TC&0A!RJa$J1i4km#;eTK(K{BM3VFx3<_ zs{hjP{~HJB_VoJxg%tu}?7aO(Ko;Ys8T6Lweff?b)FjshwE$@}Y5;@0_2O&BD1o%| zp%MPdQw&(ye_omG^m;W#DVyw*23geu%$<|Yq0^TNzPz_MgZv5@qEba7P+;vC19rDL z%bYqBoNM|$IG3kbt`MCL)92ft=nMXjFp_DRq3L|`mesavR~ z&n_ZT`}}C7Z~lSL5nHi`M)+?9vZ@&9=FQaHd-zYIYu77nYVM*uQZD;KGM2(eD#2h`VGy`_r_AL}O`Bn*`E`+)(~QQ7bWlbX2^SMM_KFi6JK5;A zE{9D>m(F4rogJ<#99sdE_SzGnrlyvz`SOL30-aYgI{3vm1@baH_km2Z%@(NAe7+?x8}=_zj7WcKR7c}Vc!kHti*WU=H7GaM^4yuO z_Wk1Yd6EaSLx)LP`Z5D(q~`Cz@Rj+@SZ}WoaR-x>0tF31z5#X9UP@|eDh;i!BZV$g zJy|-?h}MHALPUY+p8RSj_HXW5$W)AA+v9};6P`c-E43UW{2K#2BjQIv;KUi#HocnU zh|R+UDEM(#JQNrI_D!1|1=MhUaxq^3!{eb^Z}RCDpBic@_l?IvCWl)UV_*~s&`=#F zo%ZraKo}jcHQ)A^B$Pz?OfBeL4~TV{BFTvn z?1yWPo43O(1V2Hb#GV-Ak;Q_)=8fsJg5NS>MyaC(nUEz1TpjifHOvP%p1T45tAX_u z3NeQA-7a4%Ofwe(X&%1h7BJ4RzPY({c?yUr&cQO689nlKvVO}eP?=1=49e2 zNjV3_squor!TKXFwc9bBhJq1tmJn7w$&?raj*SDg4nO+iAhqtBa!K1h`-}X71^%_D3q3_zlyI-W4y_}-c5a#`WWXtJ3!>8mI zIh*sV{D|!+x0?KP=iHxh&jZMi#XPnq1Oe_c;+Ew+4mSbvD-AFSch1Iv2+z`Cs=|qa z*T|A{YuJ1owO=;dHl^cDcD$>*kXreu3G6#yl|046LFHA^%MW@?nc2cQO@raXKzz!Z zgT^m^mx2Sbo}frr9q97&OQEW|x-bxnH!%xx8!$i!&bHnX$=Y!nl-XUJY}@iTt|ZBn zyCSKtzaDhpzx?^-1;q@6`U2QoMPO3Pb7cn1`>fOB%f-taMf_RM4kVcTg3pgYD$EFv z$k>1y-U+UULK;!J24#89*i%^7JN61sgL(Wl z&>Ep1?`otNNy(QD40&tKYe2j}z8Sn)Z#MVIjcRnIJw`d8K4WfpB;7n{LK`2{fm z3ii5V{PiY~?wec_Np0jL9RHRTBSgWK;BK4ag_BQi`gtnT$$1Q>CC&VH>rN>wv*v#i z?VIoOOd*hbcz@AK)c@_5WMH8xJv7C3Mp9Jh!gJM9xGC(+{STG!Y1Xs+D(rzuoc^N( zH!^(xRx6ADz-R%I&`BsgXgp(Q;eQzF^LtF0FS)Rw0OO-%Rd}ca;F+-o$VWTre1C6P zIX7+I!)Gzd>ev)#W$iQ`L&*dYQZ9%6AVf&*A(nS!AZ$4#Q`StxRm(cg1Os%3)-iq^ zxEw3P@4p67m$_72U+%Y2oK{UrQXUV!7k&aB!kxgd@mC<=u1(v-i%yxk#fFN&?|h7t zT%%e>HN(jcJr+%|{l_SsQI^NQ@%MY4$FRoBj3Yd%ZosphzPi}1te3-f-t#)`-Sr@2 z=&WiYLxi%w<4^jxmB!pI`&XC?Yvxx*vyWqGUX+^~4Q9PLeddUH92_$h8^tr!I&D^# z=@o^TK9X91h#Uy@EQNdE@-SRO9wA=df*jj7tXKk-0UyaDeVQdiCKa-O$FmbelUgb) zOJ885L-Z(1_H)7xt4|x(etdfaR$YZD;rr)q{hP1&}e33qomuN$xc`W z`XuTGGsE^iY#A0z`)ulct`pX!#Hk4so?=tUP(Q>5bxGM>E!6)03 z<>jSEXY+v#&Z-dh%3GlZz9Z;aXvm4+p)h2f6fW~x{2l#^Xn@+)2!#AEog|8 zRa!adHuAuB>MboTeEVljv4^eS*##V(FrwpKdSDu~;YxIz{NK)Rq#!>Bx+SUxf+MeRUPEZ-7X+ISqybCj?NaLwcGyR%rT1aAu)nz4m zye8tN{WfEI`-W|pkf}>8RDVpA@IJ)4>td`*11;2_K~1=FE`aHHEvr+1>y#a}-EzDF zSG_+pOCu?|{Xv?Xz#r;h5qMqq;7#<+U{LGHUR`uhbjNbKEx5HM1Jh;I+h~ec3`ds3 zF37i>mon_=$PUC7aCnl{=hPw6e4?VFXF|GemWz1cn+}@XMs4kTFS0!{FGSWVNbSf1+ClXr`$v&7R|r?eus;AWT8h#eM|Pv{T`X6G%;Nms}7IA)!?AUFLI=O zg>cSW8EYSMPolc=mWd$oEw3;KJxnGKY&m&!4&uI%#}|Z5QDig)GY5tYIA=O|9MWw( z>Pn=RY3E|7n^_OSDu{gBk71KlxEeIERt32WmRLP|g-Tl#I=w-o+3tL{ z|50D-!nai+M--y^y^PP7-49=HGnT~$;3eER^)x8R6edD?=N%_id3rW&ns4DsB-rS00DdJF+JAnyyz9Ysx9BUUAKLQ$96SW zw7Go!(<6(GEVf|G!c98Qb)mD>3DxBEgP^GgwTVK7KsS8R#7FNv83e~N;XKCbTnJNJgI=MCDglVB}tt(*@_Px z#`&~6ovjQr1cJYS$wQ{y8%=|Q{s9jC%wX!fSvX0qCI_dr#HNGDwIuXmuOVa8MBUoo zM8Aj$=v&jWHnYUih76|5srm;oS>k)~$SZMu2906!6`dKiX?3$8t@8{((qb-Y$z8jf z?30<5hQuE~Akp7#8clQs zU2P5~#`rKSgVFFhAxh-?lcuH9n{Y-PXp6!#R65ZC{>pvjHN37wf;5jW7Kk3uZf0{v z<;XSvPA+a981g!KuvCL@m!XM!F*^2s=$XqSKbA+g91u;zCoGZOZ#jPT0&|LSgy_YP z!sc5-IL8!v6`S_jPsr;}pFs&OoxvuVbPpE&h|i4YcKew=!)tMgX|$Zz%2%;Hpk!wT za~zu(oPkcM9+DyUtTYNe%BnN$=c7iW89O5>?}x`r>!HH~wAyZ%V`z}2#;Qz+rP2Ec z54S^S`EMXg+Eu5rTnr5WS=q0zX!yKBa7v#UI)v4ej@RpDf(UCguC>QkR01%|gvax6 z25ds_cAFuo?XsFO@{xT!3<_#=LqUprNMfYbgRV9!<|dH)I)$PyEdDUGxYioCG@QZH zZV&E$V<-Q>U=0%?2qx)(q)oY#Z_pbeSlG5fJFD_Mx+poK;|Oa9S~Fo@4xo>3*!Scb zc#qKoMl+2oKs8_c=U|l7(mL>*fe9;a49iP6r>hkrF;!J;ggZ7cdp4%b_>8H03CjqY zXoMW?`~{a*^FiyA!LE=iYp|oxV4QrC$uy~TipIlO6)Vl??P&uIOcV(+VRP6tzTMqG zJzoY5h^D<>6zX28m)3=W(8X)uj)4Jr+*0s~RtoS2t!vS%xZ(_x{HCTx)ewkjq7kZP zA&mBJX)OL@ukH~pt5Cm`*BWH(#b^&={>*yKKdV~yyD4}@aq_Twd@M61no{B#A~*L% z*R)dtrQWHaLT6G%`fQlK(Xt)7J?F8#D2t6rH+j$`(`t<{5&*(-O9bZ(w-9*MYQ$?ZGqhzs=<%7sO zMQE_vLmN~k#_MkL3xMxXVYUc56Ha3_65`V=uVIQCdfnye4Z*!zR`@ne1{()v?*vM2 z1qx?wTUGoQuF)7MBXl@Cny{2X`zY?gEl6WDFATtY-DV^#1xWzGRz^My6k*Wd9Bh{VV<^g-7r z#~hdHG0c$2?pPyHS?tqkn=EwR%Hi?Qf$`b!QnCi_Jxf&D;Cl(#zx&-fjW+O4Hn)!Z8UoB1)^@@(|VBNK|37Tnn;^u>bNkh#b_wJ-o zCm`45apd8@QhOvIL=_U^6$8}RmQ6+vDo%<~>2iTz%^Dmb_~A5kWQ`Icl?KC31AQ7( z=~~~5o}4uid9(C5f}Y(*DQiJq04%z4@XyYiXHv-tR8`6DVV7N1+n~b9$*Ax>B--hP zT-{c>I4=o9gf$%;K6^+nDRh;qb-szLBNi8Mb=}E8_pkLhLp$Dc=RR}&hK5fKzTVe! zB^jgJ>g&-gH+Pe+eE&^V)I*KM*N< zMn{Fb{x*<8DKJUL`#5op7vGC82A31f8A09}yMNA`v{KXFgNgAB|N7Akr5n;=(|R`e zM5~2yi1BYXqU_EtOJ6ZXg{LWY$nsWC`KIot14({Zz_jwsbNVi>Bk5xW!?wBhJ+~2@ z%crBFA>$lL9${|f)~F60)v5m;)dYD21>z6K-qN6o4R9t9cC>0Yi|8(6QuWK{kHJcS zGJyQmm+l|Lr^|GYjFTT`Q;ku$yw;iWEm9d3b@MJmkU8oeGp0XChJUO4cTx>b?aT#= zyZDoA1@dTQ#0YYEk=cLgZ~|1R5~S=KqO(&ENZooCu_!GNmFw?tmhn-fR+M#E|8htu zX9B@O&mx+p?CYc-*$F?ILsw*3`634XQf!_kLEq}J%oViU$Wmq3GV3YlG|5}_9G~r$ zkMw(CTsKRVWHuFEpz&{6Vq=?HESgh(5<3iNMe@ygX& z=)HBwYGF+O~J}h z(X~EmPkf#x<7E!Zzu{a?q(DEr*XLm$gA3E?%DM?Y=`?~+H*S_J$X5s*jU7@;PS~;i zF62gIFI15w_?BoG52AlxOVE>}11rof7S-Vg`yOoH?uZ3IukYeGazPuao{ua2@5Ll` z!X%|fK{y?vlI-WnYl}Za47j#zmKX~C$qj`1of0|gfr5bI0M5Y_fzfD`d&RFu+Mz2= zKFyr{3^*mcYP-HTsTo!3MpqL~ESYL2BF8fIz)*7&WMJ>8fu|#NfDz`O?b03pT_a@2@k@lI$Xac}I>8;4v!}0O) zG9@A}ek7)8o!wZ6aRfiiS)MbRrNaG-#y0V?N_&w#8}ak{qy|N z%X*nAgBy>H#B*v)x#aNL!}RWTb|R8*%*$x|-9HE@^7hS}^G)e$wxV|HUTm#U$99&d zz~zGS#3)DyrV2NfmO)lY$+~LCG9?`&a7_XwJ#A9Zdk)8eQ@#b1_{vR-!v=oi8~M$E9Q!f4t65bJsrLOCRY z>8zBW@0)l#6qO(a?gZY2wJm+9GlHEfM)PRia$&N`!?6aaAD-qaV0NA$o~H4cyo?@e z<|aZ|Msl%=m4Q;qlMAi)?h9*VeJI)GySLZim^ zbCyP9hja1p3}h{>teOLp3lnb!eELzvLvQO1n4?q)Kmdk6HUSF^zZ|%PNZCt->G3u; zjI|tRQp$P@qGjm{Y%)&gZu4LXDO5Gt8}JeE>o}kR>)@((0$wY1+aS%W$lvfQISgtC z_7+Bt&jD*-bB-(U;S(+@>ap_4e_LCq9vJPN0g}mk)-w_saPt1b9T1Z)t$<0AVz53LTn5 zR|F3*w{YU~s0I3`m0$7Ar=St7E}W(1&H__d+})zVplLD9blL0Q-^K35_nadl(c~wG zt{UTv8buu^G3Xf$1!4W|chlv|825I|2A1?Qn?0v+W8N!DUgTVh7+Lz`5O=} zj;2%${|gw& z3v1xZV4UqW=kp?8HXX!M*8(IkQSky(yjqvYs$2x7&2Cvl|KGIb@r(jyksk1f*oiUv zPrx19Z1)q=Nx=LJ3=Ft^L4ei!Z@vaOiE%JAKN;6;1%r|387gqSyjL8l5@c-vu^Sj3 zp8E=Ry(Z9Be4)8uFi4xT_+R`E#BB1~Hy7sMu(dKaHdcF!bw_P2FuVeUt70T@MLNA5 z)krevRR)~vz%1SiSM`?G$*6w^J< R0ton{s-*d-Lcucl{{yUICl~+# literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-processproposal.png b/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-processproposal.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6012378dd580b0ced3ed6809288d9d312a2e96 GIT binary patch literal 248588 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�Q$m+%cbW>>CE4LMI{h!Miwojp=q}grfdo zJf2$ZJp~{$KrQ%&-r+{%y?x;JDk1uqzNPhs0MqEfm zL@^n4FOd1UlT#jq{;_yg1Lh;_7$X7~GuVD7=_*G~rAR?{5N|a^61jJoi|lTBujfJw z`Z(|38-8U#638f*)mTk*PjjIHtD6;5I>oB+;8PeG9@l;4lyPjdc32| zERoh+TSid(5**q!t$B~8_Xp?VgDZ$g+8&a@e0^H4YL{scDWkbd{R*=>%b-6HhvnqE ztNG2VWj5vkXAEhC@)$sW$Dzum`94*0gvCW2@5s;jUUK5ynxX{&cLOgvz)zN^?5vlhb5+a z)|qyn&N?mdGMQl82i#>q)AZSAGP_HMmL|-4OET7n`uE6Fnco6%U!nBfQlwhazh8BG zvA635Mx4G(8!$iG*Dw(ke-?&Rb$HUVPjC$6vOJPY8@J-`9^U{AFaKdn&2 zM5JfJU=9a82I8-sk6LYcDIVX|ReGI^h})V#se9-*lC|}@&LPH;pXbQ+OJx?9z#KEb z_We%)1?mswwaE|h#krjPL>4cQGfM8)O!%0Bgkw%W{2KTL1Rq*if9_8c^9{F=1AUlXB-S(aU0T#tQEAykN zM)Ez-S&4%V#k8#NTy@~_eZn#ObB~`>2UkJPmOzjfnY==FExDg@3ddtOuzMu;iGK^3 zsPntYejJSjQPP4nqTgP0#%ToRmb&Nf!S13j{Y`0@nZmX~_aMWA>VNi)>;^KvF%OmVT&?q;CocCr3wpb! z6filQLW=yXf~N8QE!pATqNljjo-o)6$ zf2=v@7EA?iYOS^h>Jj|aj2{eifIl@FVPnMKi?Oei4GIDFZ@+H}z{>sBJdGpNfP zkzGb?a65jWcXfo4-VvCC?9EQba)MoL?>;^>k4ri}JQ~0)#djL{$lrYuoO3bw>4$wL z<7dch44_cIe|CGd#~VjOyx&AOe*JRZsh$dwKD#ufFgOTk3VSRL0r!#`c`sJkhgf$~ z9k@k*Vsz$HSnwb_&f|qgF8@h3o`H4%w9RnE)%6S&{AP>do2junqxI)Ub&*9rKc%%z z;{HlN{@4oiE4juWY&jL7_PVyA&%Vs6ePmfg1X5PUDF43eiQK)lXLtvtTW$ zU;}S*aPg>u3zL4j)D~?Ib#PWlnBlIju=ZP;5`zLCl3g)KNKO!EbvsZbLwg*^7o5d= zD3#;yiOT=AY(uFm`KLnaNDK=zFQ=33l^1Zk{6U1(J+pt-qsu(8XFN@Ld(g!pbD0KD z$(-&=enZ$7DHR1=eA~b7-!m0nPpHA{cfK;9VsVl43~u+-cj9!=qYmVqE{cvl>_tUs zfA((u4?1vP_RE}ZH-TK9H8l-7*#O9aBXVVKuFJ<*UtkC{Nl?)+{T)n7;rjbr_93?Nkd)#ax}Q}6sM zUn9$P>$D#zK$2(m)@?DdGGTJ_&sZ{ZA&Z7a_pT)+B>8|))guC1cLj~W!H~JUw%<6vi;KEg*|W^pND~>&>CFR z(z%X}zY-C!TY}p02PM7T=uFQx`1C#wss58K)iE3nL=;A9s}JSeb_aL3=NxNyZ=(oP zu+7QmRMTM&ZY?&858e!ujV^V%@n;2fM%MSQAD*o$rM|tdFMO87NZ2yix)y0}HGfeR z6$|eFy@7Z^zTSuL2gK8;J_jhk$?l2$!V*D%reg*}5|hso@BDmBwA)4lKI{hgz`o6J zM}Q66xPR+U*$BZ|UEdK@4v&e)K0(U=YS$}>`WXMb`x$32vhg?as{+f#_Gwd3osFZWWo*pKi5y-a{~_%ucHr_m%Oi|kXlS!`$ctK&Ooz=#9Qha za%BSfD-2HR$o%?iz`6C0_O{&0}z!-06*IzQy0xga3b6eaelZrV#))L z>9azRi!A|l(4vB*92j$;ZcW_Z!||(neGZ;XGrxkp6cBQ0%58Dc8I9rYjh=m35I|K> zPf!GCp0Asfi+Z-l0EJ(=jF(MTM3oUtk*1q66Q2%VI&a+T&ht>6AB5yUau@0tHc*_h zgV*pSb1)-qurXWv`@wmHl|)wuNk_L;kJ`w#ys6-5NAELeUpDIMo&muR)bkBmG7EdI z$YfxuSfobsTF-8^njE0V+=+ePLA*nZTb`a5z)SaV`LSoWIUiOD98O!msj2p?Zcg^> z(E(Y}3=>Z%i&<&&E5AW6mJXXH!=iT(J zdI*y8)?qpkC&G`v*YK(lf+0 zA9~7uj)rxF^U;OdC;3{DY^H^X0i@BiTdi#TNlm5(ujTqfAsst(M&DvBlva`p#xKZn zp>XcLyHwl$VBKR#J*yUM)9~8Nox`=sRI+S0v9)dTbbW2yr7d96{K3vWat%FUxB7;9 z-n*%@C$23{vbA+t4)#61F@Fy$Z2blrE1vkRl8{fBcL7-q?yr;m2pY)=PVnGOo1y%C zrPrfK-;khyp9d{-YZ{Ar>4%SN^kgAV(S%=N5ia}V$6Lurs(Nw#Zq3^}>fd7hn#)~z z0nbg{OUYFGbh~eiY`R#Og;Z|)=lTdQw`aSBh5usqHE06We{By^a^%(Gxj*e8VBYJ9COLzO_>M&-T_DZ}Lx6p#S#b8-wh;W^%#t4gSt#BV;{&A9 zs9)f^carU=3~ihJSo&J(InL%QZ9N5ER)6^woXh9)4F@kgh0^lv5CRJ;*DMMIhT(aw zl;wQU_22TdYPL-7C`oD6*?=S%v#;xEzX|i3H04@YCM*rTS@b8Cs51 z9uri4+1DI0Kkc{R?|#oRya}E%%4|ZSf^)tVVs3`X3w;&{b%9n-h#%f})zKKW!A$or zkd~do$;>j^BfUvO<|z;60(p@o5m&;cfMfgKpB5jCucMCql)CF(%tI5XP4`cs=~Hxt zJj_c8JZMVu6Wt}tWsU0lw}`PH2sY1_lL3bK@F8O%VD#6%_1SNPko!>o=n;Z+Apo@| zGjXAZk%Z2QdA8J+em!4;&ckAFkGJ{51MEsD2d837m*|^;2Mf;_Gu4$Nw-#;Bk{AK$ z0A&D(p*Z!ueT8UA&c;U@RzhOkcaWV?jh7?}l9D_ZSvY!6O=vUBJfHOe z{tW<-_6osaACK=-_}2+3Pxr^s-S^4qqp;>2CBf^&b0E#v3%BnI`wdNj9GE;flz+Fx zkS@5)b)WBNMUI}F4FN3!ZtiVXh}}|{{U1}0Yi2BWrBjR>-2p&t{R!p$e3%BXPuZIo zwiEBMAf8&WV485^?y!q|o*rq?XaMC5@DKxyt9l!1Bhita(aB^$%~Yj|DFh-faN%M# zOOI9-J(pCDD{yt}aZ*F*EbljY<#kgVQu*^Di1;=` z7R8c=#pLMB$M36Sqm;e*=)av7QZq;C!HnVfAv-O(Uo1SVv>rwD6-Hl%$8Dk}yWd}| zhq@LG8wp&ANxwF~=QcM!BwRO&c= zU6?Ocf{A)1xcfv8a`V8wHAa!neeVqny!W_G7Du_Dn3RoywX#&AVdJW+AINLoY#bSf z!%op3)?RzSsh3+xDyl!`+rd#3jJZEV7{OP>iU^KaTyJ;IF92#fVDe3S8W!2iRA6JSc*|bEc4PTO( zdL;^lx1qnpiEv7Cg-<=I*-kAI_NA5&g(oY=!wy7ZcBqKN|I~OG+^j61bom4QoGEkN zKH~WDhn-s3V5N72%zVzc9JFzhZZ50wUDD2Ze*E;uYdW9iKJ9<>Wx_xUv`nW_T#emn zdH{f--M9TzhbvTotldy3*vI-y--lb%2>UPxtwx&)AKgB;C*6AHGl{REq3||##y;BP z+J67$38kf?++IEcu|Ulb0yk&oRNjN$oB?M*&4oYI>C4wjb&aueIhPkk>x}x$iLj!0+(? zdEL+W~||S*gv~HZI?&F^fFy)u&V%lGfnsl_2@$sWlk`7*YshfOJfQRE$^dtH9 zdS~d%Jec^+X0fNdV13KtxAU{4_way&u(z(ok4f=?8Mv)7r!&u`JYQC|s|fvd(L+JH zza90kmZ1fUHH%d-OQh_(ysJI6lTs5tT`6nA@9%PlFXgI`B?2|cvvvsu`Q6i8nJoJx zT(hQePY=$qgUk4t-#2#rz8GVE6NMMNk>Ms6IM&Qq3%VCLM&wWEMC=N51_S{beJqGKfpY7Yq>dA)A5q@ok z(1q~I{i&xsFltV>^X&*poqc6|kE$%_a8*296nT~~Anflm(vE!~Ux}%9=udi=6si~x z1;GMiMJUwZJe}rx(4-WKcLXsKG9N@Zf)r@~^&syDzq7m!Z-Hgl!Td3&56~EXENTPs zmGlWL5cFrgvBsVM+Wh@6E=Wj`aP$tO1$W^oHuTn$-LAz=Fq-A7JZe4`UbBQ=@WpRbHiVahsOw|Y;#n0>_h4fbKRo8DKCaZi%FSA6Mx&3wPA2z{zb zD>?9Q$b`M8-(XE!%Q=n|B{_u^x#R*+UvcQIG3u(w@6shj&3&j7sfEKoB89nE?|`2Uy>73pGx#n>vu|X zy(FInnmp48XC+>T6#HOIPyWjG#*Al&vPjU%})q5L_i2(MX`WEsGQz3}f?=kTE? zwBC-8KsrVaQ%kiq%QwjI)~{q8KFRY*Uz0sy<^9SO$wWHM^S%JnOMb9##Ih8y)IML( z6HDvf(w;tp+KuLpHBS;aH}I_i%EBT{dA7I@OKKXauTkwi$-;l zR0hsc)?hlEHZLIUKSdELxHfO-+Q(1L;Elvxx_vBTxq<+!Yru9{EO#Fiiy0|6R53NQ zDdFc7%nHN=acu5^X`f)?3rd&_$?MbQrN;sSM<*e0aJM*^UwVK7iOh*xIfT|}9~Zux zeHCJ<&pyc=cVeD8k}b3z?!iGjU2G~nze?{Re=&W8%cWf^lGxq1Q7p{l!WTy3@j)L{ zJEFaG$<(M)L3F=zv;J!zkJ~!mUErG8;p2zp$;;!m{#v!;Uk>tHXR=i-|L9au*Qc(k z)#pxIB=$jm0=XV4JS{5azOwI25(12BT!T9-;-noLAsnY^zx=Koo;3C&uwiY$Dv2WE z9PM+qd|%(6gwC;9y6GWdw};$nm$`MDQEwnJ4kK~^cgwcJWPWHoPQv9*-v$zlj0PVn z%uu=&QDn#*=^>o48m9Mv1Y_Y%V3m;eot7}~8ZliC%s1xw`CO$msaDlKf10DRkD_p3 zly0ISKZkU7ull8+T3^cK6#fo6oivmQ)euP4(lD8hbnO2&lVs+Jl(MTv4Nx~DPyGw{ z4|g{{mMVzoa9{k-OTET;sDvC3Gcoj{wgpCh;28V<#&5Bb#I$+PP^MOJ&|;q&Cpqot zI?2U9w5Kt^{ojMJPr_jtDYaH`cq|0c&H z%$;UPR;lJXnJ@blq&6f=v2g#n{@tms{wIk4y^-{Hh0}ODld0~j+2c;qH7f698{D!J zsPF5$2Ps)=t0b~3T{W@7K@{;u5VOADZSuxa>o0^Z(ft}t#?>MUlmcv4x+!-T9%mw@ z1G!LLxUeeM452r2ahzddWM|%K^AadDXZ^}men4CZ@=iqT;r*yTN&G3RPxN{pB_SsDBas)y!G4^|3p4xf%zKyEpnCE_6iuyr;6-ee-YdNJaZc8g(%kuOzRLZ(Z zzC%I86ZI93v;iL4om?fvAcE*s0IsvlKA+0s_UnTEMpABehryS}MNI{6Y5K8ST!J)B z&z&>_6FCWj>tFK8ghQ#p1E96MlA_rjD8sTucVIc$>=@in60$9yiQ_AOF^T3_Xftb* zXky*jEvfc1h1KB+1Gi=`A(4;CqAAp46tTLSC-+bI|EZdg3)8(_*Dkhsy>Z3Q~-}as_v^demD!j3h1&ugCn$m`zD%$ zAGn|jl=Sf1LoI%-LhUv8Wsz##W1GMyj$Xsy#jT0C76T!WluqSy z1(Op>;4hG~YJ`xGxhH0w09mao>d(oQ0g~*)Ba7sXv@X^v6YB(;IGoQAlw<_5@QYdy z1@EZw-PdUT_0#w3@P`3BjAU!tT-l=;4snduxdpGu zW^)Qy#Nrn<(kKaMP1gfny`FWSuYS+*uAvUcBnKf%xvtRV7WVNGYU4zGT_4aH-*6uE zYKH6WGebuU9z%K8Wvl-BmV{sZVRN7@QPx<)FZGoW4|8U{9G3pv5668uISuDug#T{f zDi@1Skk1EAmeb?T*BWWf6S3MS^Q9MBgM$*%v%-odT>os_8y+~xyRt?^9P4~LT~v<= zNhGO|Tc)de|H4M}dKh}(O@HcBP*hPA<XyIqSU`3W?`qNvp^ps@c7GwV{{CJF4TZ zvw|}cGGQQ0Sa6(M-B*+!T3y?9v8`@6JzEIBZ8UK!C6XArs-{IsGiT>Jc>8q9q|=u? z!^=AG7xg(ze2j*3a2o%xF>`bv**tA7Fi|b|1DpR|kVIICB{Up46q@w-$lJp^S2iwF zf6MVlnzhNkcpZAXGjuWv1-{+kcYqCM+##Q1ch8^{(Vu__ZjqdnM0e^a;5T2yjFC$eNE=9TBomty; zrnIx*(-}#JZZo#QV4k@^*fP$cqOSYaxP!*m*$9yfh&hs;lkX82N~fr^mUlKG=b^CI zcru{X(Ch3)WR^Xc9tsIQ$ilTrrBj_9yMzqy`K@~XY=4c5#{4rCP%;*wzwEA&hxNUv z78W@aVITHN{dfINKIk*mZO`4Ij#7T~-n$TV*^~X%Q!fjwpJ&b3VOwvwsSNu<|9E;n z&=k(Ao;pNR!mE^dw}KkaBo4=C3eiHB@Y#JW<;QM>^)sqmXhkPwQ+l5sXo$A>mSlyV z6Qq={d2-ePWUa;Q#=dhh1X>EfR)lK;2eSO4{#vuYe=l_W9QS|*>8)}5i>PNyHY1hS zY2m!>vk+B7Rus`1yc&zWoG%1OvC=X`w^vg#6~3f=FbvGG?STz}pc zu?lw=UKonzer~rS+-!e_A^Tf@JH@o6wlxBP_w^c8M>xE8&Gr6%8GQP=^H!h{9m|+| z+M~6$SflxqD-}(O(bf2ztL@5@qCV_)GU&bPipY&n@fz8XoNnm*U9Qc&WKm=* zQGfW_zpE$WBp>Dgt&C_wO25l8iOf9(7~}*BdmGZ z>eVcjI2#0C9z31p-!HH#R_tSvbe+~Nbj2G4f{&Q+^pY@e3OPcq`Lko_>Cq6Da@rVj zqCn+4^|opAQurC$2W0=1x7MB>b_SvK3?X+8zx%oQyar61#4=jydx#BEZSgr`9G`1> z;$}fyAQ_wp#)>9v`{M&Zd_8ig^wC{O&>@4&1x##{K zqY9HtQHQ#b&X4AOtGqO6e;K7FRvM5|QGeZcqy_ISi4 zHh5G2k~^2_!w;olRLoW2dB%}sjf$ujh3m`5KGp-eQgXUJQ~1?YeNhlpwLX5u1||T@ z=%-eLvWAYP-y}JF`hc3f9A#&9F2>%=2|Feli z?UcWZm}9FVy?Ry%{#=jbZsm8HM%h(j3|s)%H%d9Jb-Nb}kUc#~UKs-|`Wg1wtzWN- zw%;QfvG^fg^qC?w%GUOL0b#$2ogFhIaGnSu0&fZzCkDQ+p&VsOE;kpASgB*iy?(aA zzCeuUF9S1rr|7(GAo$LVR3n zTIfGv27|5%&esRK8^BhQSB#AHS^sL2T5M!#)03?xVIYB z6MhS6v@~$ujID{KB|!H%TJX(uZy6w{u573JyKmgmXyAS?Y4T8fLh0a-yXIILr$2_? z2sN|4pwoEf1QVchaQ`GE?+x&dbiOkls4BX@FPi3w_`>T>4fk!l{DzBTtk|UY|rT~fj`L4qgaol$-ZmObO%kxbVUj=l3-lc8OIR|Yqs zprCkodY$+aswTA5qbkGB%Y%@N##(}OWcpFQDbu~(YadO{3wFduYQn%(abF$N=rt+> zmd5KG=P3{G$S_?TIy&cb1yCE&A)80U51XfIVzxq1`K8~g*cB;4R`e?%aq#|=?Uncdu;ym!uTLyXn7#!y))`hNE`W(=azOTW9fA*0K$k*TrP zz1AEtzn{xbw>i4IRnmh)U}!vVO2Xy2OcI~bHb_|7KYN@zXra!h*gx0r$?X55_t9TG z#NGM&GJB71KJa4g1Bucz%;PG$*wr6zV*k86W#@z3ntXSe3P_)sEK+O^`@Az;e57Lc zREw~&EyiBiL=xWl=1S$;9dd0yGeJ@vS(0@OlgXXkxivtZzf`%Qkxv3pQMhZk)Ag7j zQ6Lwg2YD05ceov|rrbBjA6IVRuaM73>&8z}Mzn{*d%VcqSKJ2$D?SQ9q9=^x8 zYSKZdkC9)*NZ8rEYFAUdENmqfowCwgvhFdku#k-f5;ROTv6AmW7sdx26vt1G3R;@F2eZApOVoIgiJs}bRsjv&=X-)QX>LwTEPLVg933NiNeN7~^)xO(R8dH?b z*KK(_g*zEh*L0hw22bo)Eh+FwE~HueJ*3E$BopAte~u=4pIXroVfVoKcUC>~J}Yr2 zHVxinZ9<7H@iqq{6mj}?4l=6h>egfE#P|EH3E%Q7MHfPX2%C~=N%YnOj+)jUwCr4F zr^ydkPlq4_+6{gNdm+&Xs#4c?UPRn)xjaLZbRHmFm*x_>HzW9=`CmXi;Zt}%Qa4xkMeN^ z7lJfi$OiHDgLKlmzqIa6ky)CYn04QH1^Q>ck&OSA`)o*RFMl|fT1FHiMk=XDvLdbN z_Q-you@~N+>>aDmnrm;$3(*94I=8$L%|$7v`yIUQk1Lg6r-!HcqqF0>>+*#&9O>*0h_UMcI8)X zk#E;B`*f5a{NRQruz+363$dVD6G(XQHGQ827SX{&My#22`{AA`c~hVJKD{tsAnbht zm9F=Rx(|hIssAACh506z)K7YS$@wl@o(J_9pXu5Xk(0CZ{pQX>s19!xu!mZJMU1_f^5tntbV4C*aT-DD= z&ZzFffny&R3#Il&GK`zY=O&tvU7!{NB4Lh^HxdrY~{wf^8Rft+FU zl^M>FuI@{ny16GKrBt(g8z?iY-`H|g*DnC}hy?CGuS#~&I?&sU-(OkkOwzc?0@w|) zSL?_AL>Q|ViML0kqK?%~{Xu^*5QCn&_&&9dXfp#_ZYJKABN71h;bOsS85@?c0PT22 zQpIme?yQ@sPp8|nH;^~wh~Ep7s~&qC2I`H$ujs1B;px7EpL4x;GQS0ks;mxD8L#sq ztK4e}y8tQJPlxFAv^H5DqiS+p_+6AHEbnJ>ob7Y;y8~2p(qBFitX5(SzqCnl1tJC+ zt{qg{(j#7}I|^sg{&2zr-dORo;^)L^xF>uRirY~$9Ko1WgP-KEShLWTJu$1NRC^l; z97Jx!enlg%z=k1}h$@6>h)6h4^XF=yMiZtC%@B0Oukj1Q!m=myRmhmqX~zB1lX?1m z!}It1bbJvAi)Na&^re7i9Eko3>6@AF$I|54n^}qH@3>qW{s9O{5Qv&RgaW62Z4=`$ z>_lZ``#$JMNxS^0>)~LnFLn7aInw{I=JKl1j|%bB=R1!?3U2vqjT+z^Nt45m_-b9g z>ATQM>R`;ZcQ5$y^7)?h%Nrc<%V~L})^aK}_xfrF>v~{32j!%k zZvL1Wad0=%;pPtlQEk(2+13{HLWveYNl9_( z;<1%aHO``~AIPu1XJvg<`NU2vUN&>rss?yYc@}7c(yyC&iP5yAOoVM3>Vrk@?PzggElhh8w*s!ZYD+;x>D9~A#s%c0T}t$K z^6ew?o;H}T_mJZS(U*vIMv!LuHD56%Q;F3-S?b)*>y2H%Wb;n!)V>#ohf$F3@4c zv1SQu$5;z`CHMJt#b75ca{RBakxw{-PgqE^gd{0BL-2zVcqmzGD#K#Qo$5RZ`7Q6OyJZ|6T z(YIm0oeqyTIXr`>hD;FpbJug=pXLhSk?*GI$#;LduTrjDni4Qv=Kde6R+Ub_wcsL? z_5vBOwYeCWwi3$gdCNG10$@gePi$~(S-q@nY_G(nFx*aOHSgX{w;zlSNi~Z$w#1!M zR`LFPIY|5^*k=`f&H-vtur;3*R5}+NFfOtS=VE+spDQS=*%oCQ?oa{y#r)kkSv;~6 z^;9`H53yJ8Jl04xb}jr&|DAnDy`gUi!NB3X-!&+!WxZ|-WOSVN2$|7EbZ&4w*BJY{ zOxm`jkCktUr`}@T(XVx9^es0P;nB^u1Wmlf(Ko-g?0u)#$?| zwAu{1z`lrQqmr$6Z|VSV3-|mQcgTWZoa?1AH4N_eXQ(^KPOB6+yTJe})wTQ?w z?olRihw?!6#0PH^_xbqrQp*;aeh^{VgbB=;2`Z3T^3H+qwY+XZnU~9<@qgHOnZGR( zN1urJP=^rLwjlC*SwQpF)9B;Sw!XHZvHPk}q}!-rp5hwEHx>dyZH=%E;N8SfV!s$!s-5k^{mh>Uggog z_!B-t?U_Q@uo+=)562}4U+C)cCJ6mDMwKe6wy;QEypRW-JJpw~!!<}#?wZ01MBqAJ z&N?G$gX5UocW^~W)Vxn(>P>Z^9ksBk{rFJnWVPYE_uAkT=I0xQFpoUNZ1Pd={H?}F zyWfH9m$k2Zm7M!Of>v&Rf^DRwdhp-B^SK1%{WaOcnE;cayt$ctx?LgWt(|*_Jd2UeLX?H?GXDM*LXTq=4J~h_(15G&JT4%vg>bNi#zT?fo@GM3B?R$A|@G6=6c*j zg1Qgx<8TPTT$vGjx$UC^oEW?+wH(4G`_5BnLfF_> zfAs*8Umg$6boR@IrM|~W4z_WcP13RifVCDB{YXQfey8_J4y}B9 zWDWCv#L|XLy<$2bVCdbPHUE=~i_U^EtSs#!eFeYg&EIr52f?|e7VUI_kruYE`L_oi zNf)ts3B2>m_Q^|($O{}pp!RP%(Y+?lI_f~5TlNnTSxC*a5aa5sXxFA%jY#6b%b7VS zDOi_Xirn=c(jNv3ky88d!yl3@;Fe@HLUOhqUzaj;w#fDb;MxAL zU!JJ^)m(1~xjwU(a!93VaE$qSe;9elXX}Nm`CSh!ooVlmcxg`pIbgya$kfj(Qjzyl zK{J-j5n~>m1oKg|(nK~P*C9QxU+a^8meD@ptu?Wt(|yeLvhB_9YhE!h4F}O|-n&80 zbx7?k?eA&ZvM;Z}sJ#|nh767m;vwi0hDzacJ8(uxbIHa>BFmIymEd+n5 zvTv45d~o7t+>MeIDxa_K!OY>Ct3t!FvU1n5uH!yAgkzjYkt$}Nh8yc8@rPG>f$6BX z?d^vk%;#Z*sqNIRBA+noEZ^zsNlF_3eWDyJ86HzJ>F%{)&VJdGaNQR+K4yV?y78Y& z_VY#hIm-&G1sNT^yF^egC#`Z(Zx7gsd%>r1s+Q7pGYJU-$TACiM{s{ICq9~>RRQ$d zV1SN%`Pr-SCVBhlUOrw!Hub0!g$9RR@W(kP(Z|S;&nS*c5jo%SFrEm`q0ZP2@{l|m z;%Vr@9aycC^dk503Rh5c-AIr#nOq+ffGK5Pj zLy}EUtNnib4fY7bJI`Zt#0LTvn&Grt$E6Cb($igf zk!x3|mfr~C2TaG8Sk6ONCP8UyA&QwtC&fu=e5le8G?W{H)i1)biOLi9czdav zP4n6#uEr6TybHOimg@6EdCD(so+Wb{YeAQd4<}Q>3<~^FJZ`HkhjhB%m;F!GoJnL) z`^6guP+CYUfVk+DUXVo?nwbB3y8>{&%s}-tb(L-&_c2`>q;n;xoP^s3nzS6XSgJ~` z;ntV3Cut~h)>R81XC`^ek!Nu3$(WEOE*8Y+_i6jkx}JV~zO#6gNIgW}A+8MC zVjB-OLV0yxLgfUhXU55mi*$|OFI&v}P)^;aGh&QNHL&^Sx;R5l@3WjOD(SP$4kw*qDq!y5?=uz~OC=)X_~;f}*=KB1+^#RDnAS-zw#*74$>gyFh`p z2FwYVX(~t$&`dgQ3U}qLvw6_2-yW{--x+2rD)?b@4WDFAVT`h4OvMq}!fxDQM+B#1fHDetqSVr8|{Gl3(lL)3;R-2EYXWgqB>q z7||ObvPiSIk3-d!P91HHZH?wS-*q#pSrU)4>!B z(hGKwXQy@tnFU(&yqDaV?ftc+ZZ5m|4InmnO`zG!%lFO5-?y;r2dod>Tu{Z0DhKj{ zK~<19$AbjlVe`dW6)SaRPMX7`_)UNcJ7{SNKNWTr+wyu3THd7&qM&0k|EWoURUOI? zXM5iA8_?1^U<7!}JG|sFM20J(!e28IDjjx95SQ5OBb-YV!HvjhcEGH@rDolV81?y= z(V(QH+8v zh~(_by_R7gIA2Mq)5kj`%tb9>Oa-;&T{Mueu}94%^(Vy8T5HxmFQdmLb#oRqR~93S zcO~l|e^smN_>sq3LA)vAH{I?Ju6%s&po;`-5l8h}rwC7d`#g(p@H9eB?ylCJtTya2 z7=S4hMi!rwzv3CCu)_t_m(UxUJ#~eyqeh@(&Gi)9{xIH*UnJtTXF}%57OgKIdq^T4+}!XLX9c*JL zw9kk=)xXgggQ6!0DrX-aT95u`LNF z9zBKq1*o1+c3-Hwr7p$eBmy-Z#vLAFfVzVJDJ4(&Z|zjx%9n>1)0R&tqkkc|1$km5 zY$R%CvoHmMzuJ3eS0w?e@!?MAcjcX!Fd?wleHDtUPf%ucSW*}^FU<8R+);r^p4%Gx z4R~e%x3lys%$gS?eRwH+2?*#QD(|G$2XwrJ34U)*l2W9uyy=b!-PEJ=`V$~X!IZlU z)J5)S?KgMLH3fJ7PCnKpkV9~LF;P$Xe7Fv|Q&IMGF>Z&XTz=l;el(+Q>kfns`|t^m zqr8u1BVG}V+Q&XZVN24SJ^L1tnOR@G0tv(i>JdLXhciE6qTJz-Wlb8Z=lbzF{C-Gv z2YGQxO67g-0Li=a)di(^I92-y%|G~n_B@21?*)ie(TqG_{onO&y;RJ_?RPmLQ1v?< zFXW0qh)rP+I-89Z>}cz#cQZxm@&Io*{YZ`t5VUn=qvJrK+lt1U7(pq8e}TU6c;+N?Sv-mJ^Hx+# z&Dl^0pTEkyVaL3o=$qVQlSr!SmsWgqhez>49m09U=RMEv)D*gKb7X9m!PZDuXIXJ$UOa!2e(C_H{(f#x*4x}OtP_hp1fwPeb5 zBmo-06Nfj3J}J5gewqOseEXoeo}rzW$n*WYf%Gir5lS2B#wL`|2~9!Y(T|GR|G4i5m!c&4cASy~%S;+G^nIZi~%%vPj}IPTaydoeuIt z?*JAQ+8o58HQW=8Ezw1cDc@q@iu&R@rQW7|2wuY{Mu@aM^uMmAeruxit9*6kkew1WquSuN4>^_Owvo|l7wgt7 zZM_b**!*sY_%vngZQ=p=6PJ1Z^*|uzC@%6IuI;?R0}J?bb)v@B`eF^NdBlbHYv(Z5 zSW8=qqi!LoRr|H0KLvHMt(z%UIv1U8%oHk;TIADJ0OG8CsaUq2X7U%-t&z?bahc@3 znOGh*o)BmV0Gela6Akh0M}46@vNQEsg#!<6Ao7DK<2|_^dh*_T2yc!6XDs;z=8xVEx%xWgKpwV z)EXrWh7nv(;S~PVD7(r0G^UA!Ay+bzy=s9KHn5Qg=re8EyQ<->P;F#|H1KNWksfyMpEkMhk@BW?W!kS<|$+RXCvO}IdQ(k_A z2t?&a|MB{xFMn=Nlk`xI z9mWwJk8-e_B@d5h5>ZV|C(gbG63iHJ#>}6@Px@YePj2A2hs{yfYi1pTn*Z{vLvYKP zyR1CPp#w{MXscCXd$r5+IW*`<9;T}Vc*i6DzcZK=<=OeWsM%|SOqa^|fJ~~LLL$Gh zUp^&g$6Ta(uMQ&XGnRt{&$vf_Ay!`#~FPi}`tfn*x?L)6DPs`Y5g^ zq!iJ%1KcgWl&_7*Qgg4~_9yg(1SV*cV!vl8`a5iVh0Bgu$;YfE}U&C#Z=^7+jR(Bo zul1B)PUv~yCu+gw_wK3}wj(eofKTz`Y*tU2><1+G?t=#Y4EHn&PN$iLHc@)Y@x5f; zi0atK)^-F-leM0dM%HY=xlOL*F{p(U4|~;jcsx&U$|;B|`TO$UD6T7D{+MF{RthDH z6EzIcy;p(*2ds0yvc&enNC?MkdwAXxV_sXd;$V1o=JJPCkcH`0YVk|eOIxkvK2aJ8 zwz#XWMJ>8NBB$~stCAnTU`~BM7ydSyYP>JH4-t=pA)P^~A0xu?^Ku=^XZ|n;b7K2)<^Z3-#cmK>|7+~;Z>bt=-+ij6Qi4mMJx8xCaCj)$}+djLQP%qty>$snynC`z{URv~F zy#|ElZC{@=Am}jd!Bi#(~PK|7X9~|p)QUz)CK_HH@tAT00&w@O9R;Y3#&kTj^~-kaZf9+ z&y*MJakXj%txw{)UtjHDeoJz{X$hb))2IL8)KAwH_a`427%G9Pb!d4bKBc?q^i;l+ zm$HulhEhd3elUTeZ~2aq3Ey)VFh;_C8tkVY;6BejkR9VNjL#EQt_Qu0#Fi zq?}HMyCh9`zvf#OKK9ERP;&mGP@nMA=WEhq8784DmMRfpj2st8r@ctVu6zc{4h^FN zC;?%2*@uyTe+oj|`w`fn{JM*E2tV5Rm*sGd1sVgYFb~B8wqC45BsrHsFlma)QR9RZ z5f+WaOuQE=Pp&Fv5vLS^WMFPNiabB`x26b=^>DT!s2x5!0pbE4WWQhKXGQp4w`XF! z!Q!~@1J6E&;ZHnyB49wx1v`;T*Yc)%_Rh2w=D#<)-#7t6>#W1ZJP4lP5siGidG&2Q zm6a0dqnUoHF1hWaGsCI0XdiiKgsa1#ko+BZcznND4)dEKp?Y}ZdpAfFP26ijkSg!z zcM|yda#N^c*rf) zNUIs*{m%UjfED#PtCz&vM;Ro<}RqQ+PthM6L$d+;T2lKpy z3cY?R+$9UNlhn&2SG~K13l9y0uNL1-wP%V1w^hmcZ0f zjG1AO%zOQeW%D}^V{xH`0v?Bz!)_`c3<+MiiBsmWPf(l2sAAVc7yWmB9RHDJ*%kU^ zvUpVhWGL>*^`$<3^!P^>LyTb($Td(Mmgs$_h?Aq=>59@du zxb~TdrNy(DLj;Fl6n{5iA^X%caaNUc+_K!tupSM7RI{}w;k{jxgCu<$qQUhg@GzXP zi_4G`)0Q90y!(|7~s1YMi2Y`*`(e4VCf89S^P`|1k~>${sY z@lAMD@KT!_00A^6ui(hZsf{ePfuF!9o&+81Nr^d9sc5&|o}<#O4luUoYL z$_llW=3eb25HJ!*m#L7a`U1<~@D*5K5?+i)7&IVK@8Q}@v&tiN_AOW%l*cH)Bv1x8 zS|_7hAb+2=cpHbmzLLRAJz$ReoO;Lo2y%l;Q_BW$uX)>tr*$tUCcX}Lfi1)+%{5IM zfrKi932W=A@!8j-fsl2|2bu)qBNGFP48#nL)aR3eEd62krmyuXx+=RaNUM6Kal>y= zGmmFoq3RB~YpgR7Cgy$UoshAea;weDLO0XIaCC7Bjp8pIZet;Wk*>i|s*o`+#F^Bt zHstZ*RMpfEqmBShgBm|*aPF&9r#Er~H~r#2Ma%7m^r0K)y+0QC*pP|5yVc_k3r2&c zY6mwt-n!|5%Tt;8str*xlr>4HwYC9{cH9Tp?~44Pfa9&q*i@_k?RTU1y07|Kgky*K zL_ZB4z!lZpTYk{@qhBJ)I{Za!;u8Xu?j-qMU6xvi=d zB1wA*B_@u4m2HrLhS4}9#1;WzR~j#IfRh7wP}Uf{�B$R*D8&QF$+Na-F$TkYnl$1%^ zL)#?>MwQd4IVN|)zFs_@fuRr@+aFXi0Hp4NG4Yk8@b<+WE1h4-@cHA=9Qmsvyvkt~ zuWD}zhGwIt5(X)K0+nhWoSLz)rPj#OA;8H8(P}WHGxJ;*R(&uOGHk8*czMu8O~3-% z{A1aFG*=RV!|28Ws0Kd3Zxc|DmQExxxq;rx-RjP;Joc$P4&om?2OlX^zBen$_|hKD zd-J&_8rSC9G|&7z9NYQm(Y$`qlH??HoOwblWm4RXWNr#7;+%f`LO`AL#o&APebi>$+sJ8ttW}>rXt(A*Ocvw-S^Yp{F#eL)~LldJPs}&P8 zxQE$;_vQtmfZ*MeNK@!rgPr2T`)5L%8y4k{$cj(Q{}fHmheLO$*7B9-(uY2{ctPiy zi=@TS2!gy=>B|{zTLo%J2xJYJz(imU{QUxinSTG-Cpr@aleK2`5rt3tN9}Vr6l-I+ zRI7}jBLF&CIe~U$%n4S}^78SHZuIlQAhBu`oPEas*h(pjos$s=ekN~~Zd8EOJe%Va zujPE$Ti*82VyV1$y#!(_!2C_OSe_dXR`lx!xmOzn&9nXG={y7Wf(1zBrBopVQuGG? z_IYfIo3vyt=!4hLdn^ix`Qcgx9%IJoM$Shfi@qIsfZS;>8H%WrHTT8uH+*eeU^6xz z#Br3**i|c-3Os?YvB1)LobIk$oxl1%rGN#B+FZ&p!|TU)k4$Uew6@dyZcfEDj2YfN zc=@-vjK3IS5&{GNG`?g0`R6*&>{u+|bRe;M}}evnmyPL#`;?q!jZ$J*7UmA=vPszawiee1`&T>jx5q3fkYDTU z8uq%9I{s|8F^}wm)x|}rM|5(7#r2C!+H+wT=~o?(|^26C)rvu$=`!sfPe%}U=YmK~4henZ%H;KIG2GJB&{DLQ`Fnxy| z$LdN~Wp1<>%>h$EAMQ>u?{uO3_JrMu-!*DK=BxFwlxmK_>s?>3`!(jDo0U2rVJ|p? zGygyfiB09{4G|4e?2RBL;c~oekMwv5h^#Y-&g!H*N@!P8NuFZbYK7f9J-aDzJK?FDUN=Qi` z(psLE6S*dVHXJ_!d~aY4>4*029$d2>usv{3_hU0U1LV4Le*GLP{bNVY7#@}gAQ_o< z*vFY%SZdRj&1MRHd1a z>x_ab^T(IOA|y&u%4jhkMQv~$&r^(KH^KU;n^B5J;Sf2a!_9;#wop#u&p z*5qfcyYL;5qyBl2$Rdac!`?W*2xaczNj*i>OB~m06rESWWXePqh$g^}l8LmX+ma?} z~e;$fxtFbDTLV$CtHrW9F0!7A zZduML<5Jo>6nAC$qHe|g*AQqiR3WukFGk9T&1sG#y%#;lN6_r23XC-E5DO-HcLUpI*={ra9njxXA9-RC%&-$$|8T7uet9b=)S$sDLq+5H_Ef*4t zZP$8Uqei~Xfw6RH|6DlV^&hGOjWHx)QP#ZU5Wl6B;07s1CJfHsU$n0k|5ci(Nzct! zKB@1GNBJiGjz{i&UHs1!z@jN2T;%f(TlLO@DIcD_8u({W4g;OBxdg zVh?LuB&OfO8J?YH7h!h`f_ScP@1w;l$&srrdgWfJ0G_V&G)k5poBVqqeon{h!SOIr zbH3LtkE8qKr-Wtr&s0j72o1z!xa>2BEXw+=SB)Uvz&0mAWf{aNsTX8oezDMpE&dkV z@6Uk&o?+d%0dXH}dUs6+#2p#S0O5S+Vb%K#GdaZPmwLUrNDeHKZKIDg;5I-TIiL6~ za{vop(ag9oWqMQj_p%_vot_={ar2!%Pk(vTj(EQ(E-%)+i>kqO-kHzNWJJq8g2>v3q2$CAtPhzDU`**@-YY> zJMEd}*H8iPx65t-`aaCymmKQZ6&BkU21ILQiT4Iy!osBPqo@*MN0{w$;u>X~TQtuv?NhIpxeDAAZQHj%aI*p6cd02x3L14| z6CkPN*eo+C#t+UL8*WC3E=~mggy4eW=?ZW$2)6l)r5&nvF?#-ttfT5&vKHgp9^{e% zaO|hyg*M?3q(_%wXbA-)68@s6Zu|qGyM{QkZ~o-@^ZuG&uSf8ap%G(PZW?Dkt|d}( z*TcoC1L%I>Yqa#?dPt#XdI^CzREK#A8F@VX?Dw6@-{{;t-^Dp^lU>r#-0V~itQ41$YdsI*Zpw5b;htB-2T7~Q?nJh>aZwVO z5>RuxCtQqpON1wU24OGEI$}S%kA0%OxmwIF%ct=6`9py|AhAgHo6S5ba=mRW!=Xk$KFzI$Uuy3~8mWCn8lPRdgKP$T~I{nKOYA2%pTwUWD1 zeiF6WEk*)=e?pV=eAO*Nx_-ikQD1s>7%y2FI*f8botbu6+6{C5*1;cza=x9ii-vw}b}0ISPeZTN$pfPLxEctmpfPo>Y_j;lZS?f=&4KX2JPdy8e*W)F9$?wvT4^*6J>_yE4U0) zZU1pE*I~BYbR6g&hS#*`)4|;Y{!A!K$$B8I&a>ie0-{m)DmshLE$9V4HETyDx0mtB4)UzUlydntZ&_ z!i}DqSUmxT^|2|#M%L=}x0j8Oq*xQ(bb}jRP$;Ljv<(j0UA89Ie03JcxtY=1(3{s3 z2f!h&iYD4Ji!tHhdw~Fl*tg4*Tv_R%Rr7p>WZAf#U+6VS+|m=Zz5{in@xlaN0ZYz> zh;xM$gug7S2DBo*(xdhgGUbIIr8T2&QUmmb{$Zi0xlj`-vLSQtpsXRaVMJ;Ui4WPj z%@f&T_$VJVKRD1?peg@DUi1*EuyLV-(Kdp3&YAFh8vJo4rlf|}BcF;E+cFRMqBvhG z1RlwT_;h=B3iXSyk7CX9r@Z^<$;&t|!X2AB)_c5NWL1eT2TLAm2pS!jtMEheE)(_L z36X|tt1I?Kk%GBhFM|#RpzYRInqiys!F-*R(;Ludb=tlLr{CkoxFAx<$1BjU?swj{ z=Sm5a`g|L^2uKRnQD>S?g&H9ABWxs|kBQIWa$VjrZQ0rozO(8v2j5RIH_4k{AE^ATT;rO}HJ{&Yd{4mH8t7?Wqs$fN zmoPHq>n>)}F&eNY0-vu1#0%DM?lTzEW-^(UoRO1PzsA(-l91=3$1jno$8Yiu-?O{9*Q=7PXQn>91|rPaSg~B{{xNZC?@lro)wO(Rt#c0Q z2EW@0rW5>Lqwy3k-dWM-n0Op$(LjAGt>A*}4%_UB<%&8NWLzNdfr zD1Y4ndV1fWJT^!y06~}^I-;(BC%f6V)^l#kc_aM2XTUx*ES14P7-MVi<~$zz!~|Zr znQ!`L6Vz>bz!fNWJ!WfZpIEoZ-nVHl`R9PGL}S~29+MC8*6^=ZQu^3*&d^G{uAc|8 zI?-ppZ{DkGK$OB39-f!z#l0ve{_wX0gkX(agI7uwY>gWpii31M>QceK!{EWd>Ok6hP6ZN)`A+akth-fB5ia zfQj6yim&0w}@jAaifH%Gl%IkdYJ<=+=MPchk}pI z3nOXClz#>Nm6oY8RI`ipvgD6SSNKejpE65`%S?8%QpF1x=dFiIlj$Ly-q&yS_G4{r z)8A021PsvjVcqzb8&?}+#UO_B%Y*XnoKIEr^mE8$#W6c8$*N!GeRXBrKX)X4gOFqP zLdPCXXMjul<&n8P`@Bhzzj?yX+vHakM+@{D3)UoFq;tf6+QpTE&KVMvt4Zy1%;$61 zSBm>EyB+%^D8>Nbr?)($%n18!R*u*63pG68DjjK`!RFoq0$=X0MMx%1lIC5wT*|`r zP<>!F5<)_r?$2%dKDRbu9zq;FZfUVr$kdqSPYnd8ixPF|mSYjgVP4L~<#0-4iY&2k zOCr)C4==L6u%F3<-eq5K4~Q5ZYG8ACd`}w-X``G^}SN}NvMHfQwRuVA6yehYtK8CLAh?{za zS{t!a?n(q_ynfMry26i@SkHHPmjQr?f9ymjuFLMh3euQh7n5QHlR~@zWWRfy;g?D_ zXs-LOdxNbV%yS^1nJ~Id#NIn7=JTNQPghg(g{OFgYJLwE0v(^c#2N&_sSo0Uhn*hE zZyKOSg^&HDjQ8mvzcbOoPh|4JcG9Xyrq8_RRuuM|t`qYKlg`Ok5`1+$*sr}%e>485 zUDfx48*tVH<@Zqp*Ux?<;x@Q%tv`{-No29}XT3Ca03>L88T;m`ZnQhnsN0bAH5k{#OXAnNY$ zJ4TO~?@nIt&FV^A^V}|xB(W-;L}MX*&C(zzU5#OIOp$GU@eAK)3v%7p)Nla^r6G~O zhEG)bt-6vqY6d2E={k5VHGBnQ4?Yt>U3^xoRX0CZ^tnAR91HW}b4E(=mj>jGms#bI zs15ra%R2UNQ@Y#+xmp?uI+x)o~D|g5b zhUW)_I{tDU$GG!l4o3x#lR;UQQ;}2<^|3ZBt{g${9TtH#Vvk=)Py{=!j(Dui{cH|%YToo)+)(7#2u1=eodU=ISlMxY)V`uxb!Mv_{(^*s zg-Nq(bO`iNgM3vA+4eY=Xi^4bmOCR$h-nB9{Orz~+HXr5(C*Vb2d*oe(rR(n?(=f& zeVka8f*(tj*((T3LArVOyFOCnLhW@%TfO#`ZMp(d3#n-$`Po6e4f_(ROfAu~|C*%#Zna z+3FJ0GSPv+gRJHzU~j*vI-Hi&Fh z78Xwa@A$W1ogZ%-+qPuGMb_?5g?GB0kcBEaZ}t15B+WZH57Z%mo#K6#K3=dx!e5Z< z$-3VYfrw%tl{m0|z*B77<4I8|?f6Ty%QPjhQv!!_0Cmfx=n(uwqyT#U*wCMFPbNV? zu5U}0fl+@ys0iz>x`Xk9BQw?_b(~J_{+44Tc3w7p07*vgAtpfyr|&O=84sZT2$+Ln z{cXEP3p-ZN_)sohzudF3QXBie{3J%l>0HH@*%Tu@&H>)>vcGDvmdW9p_K-kcE-U-= zu%|vQqC`5A?;(-v@`0QAbS$C&ee~MFo(Yan~?aGO_#6$yB*9jHgV?0LR?_74lDVCD@x;i~j|7^0Q%O!Zf`4?qf z+{3Ud(BMPj@OSNkcyc?BxB3h5b-*r#cYefskdkkA`BwBKcc=|N*)O*}Emk_DCt6(k zYRxWlI0*_;X5Y^Y!qjKIzh00L%aP-zs8F%20Pt>#f2WV5`=;WU7`W6@MI2!|N)V0& zcJ1`>na}&`2;mGyZt2YSeh1! zIeV>Aig$R1d%zVCLF0K$yRWr)-rA>hNNIGz7u2rL{m^j095r;9u~37EQy}WR$9@SI z+vQ)pR?xw46!x~ynh{Xk9jY(L1L31x^yp!2;Kk8z8Mea!NXX;cdTfAGNqu;o3Tdx? zgwkl^PQR}x;b>uss`H>fy)V~vm$z}&AZFrpFUA)}?295O)5o96=G1`&i^*T9J$_zQ z$~KRe7jc1~VGiSwr?ECB*@tHkGD6I2)uC`Hgv_Z9t&TjtwygXwg{VF7qBH9WTe|1- zV{%5pHRoM%PP|{vHPD#P1Y_B^$>!lT*mYF-e!@JnR(+GmeWjzuflrI0P_MMgq5OGl zCy;!dvf)mUZ4^5q&>>6Y;+0Eg#^2CYnO`p0jUn%8AK_UJ5K09XVAQEp^D*Y;&fYYV zhWGoezLX=}&`<9hR>xZj(PuAESoM;YiF1dSp>vWHF?x9YS$RNSKz&=+<1JAOKV{$i zFSrzzsW8s>H&dBw)c&OMb~Za+vqhLUKU=RK^BPl^X|4p>{eFRjId#@vT>r&X7V3c|ivF5$Pi zhT#7lT?8jr)QH{pcT(Nbnzu${Z`atnQj{Ek$6$G*iWVnh(Q;*>E-&<6(jmxeU zCPH^-T{WsWqAqzeXsHbh@>xRhaXb+*IH@3sh*s>L3;rmi=cZ3`cMl)+=8@es4S>}LaN0sQ=_c`7^aKS_3ys9X5g#P`ej^q`{z@+0 zbpHiNsKld8E~TaJNs7#ZE%g}JujvRPpy(DF%WZp-YSgDoym&fnN+AA~=m3K1zV?1`njP`w zjoudn3c5W-_VnF_XV}4dfifWfs0hyFbA8VLlwZ%bZql%*5QGEtN5SC?-;u7l0;G z@o!V8Px2_Qq)f|{8TBh({#_V%dgc*Z-0tl2-7zKi@>>Q%S+GB*;hKd?CBK+6DI)WS zwzV?LEP0YF1gR?OA_P3PS`}(t$I1I<^jQBX8*W@)nVi?J(cK%&HnBgyydPu;;cHMB zsFCFX#&w7-?+?+13p9)CBVo*|hc2yFPvP8|fIAa=c{t`vEY{#TT*z&I;U8rOS7^ z++NHemEdj+r}OgUfXyJJZ!!n-YnuDkTc23w;13Ux^`QpPxE9u$14j$_aqFms(|`;@ z*WR_%$%~x_+sgO0uX$GVJg_(Jm#5RXsj8Q(XjC?18C@UFQ~0_znBDoPA0>{1mt9r9 zQx%qy#(JgEmF@X;<%3BXUiy^Cgc)Iq8fKGjt&M`zUKrF`?v8{`G@iW?d#Vb-w3GDUtjjHgSS3NQ6zW0UfSX%NI+RaN_szV@|DZBv#O~p4j!Jwvi zO7yx2{VN~Ap9TBx%w!c@-rTb;h6q4J_U3PwOIXxO$sUJK>FhBsw5z}Ccm68P)#iJt zV)PeE7Tdw(2CMcK6*BfT8Qetw;}MoGY)?em@KQm73#CR}N-Led9C$9)9S#e;)5B?-}CHUI8aU>tE@bZ@e>L~aDJ;TXxlP= zXmi`v3`h*spF<x~)iptP=q~(njDENJ)>2h5`bRJv z*xExK0a~(zg5*}Mmib8E@+)caYxux~fl1@6Kca{Brt70!X#1@Z_l4)yWp2VCWXeB3 z>|)WOVP)uE@i0A4Z1S}(XSfwq#uefNlwKmktVJbh+ECVYzpOsy9-gMEf*$k9d8?oe zaCg=rT(6SWh1piFyje?AKtoQStVW70P zMLw9A8GXB5;_!^H(St{CvvG-ZZvAI{Fs@_r8wNS_hN*zlFNc-_b@wjo8Z>^o06mxh zPq3fK(G2>i_=_n1RJF8iU{vHY)q~rQGd%%4*88FKSdFMI;vxE8sM}{S*n$lqo?Ps|w3VJ*GjNN0@orky8;D<#!0T2(Foa@(V#&%UiJY|m>9eu>JP?GBKYh@c(f zPaG=M8IyUxZzKJzhysJ$Tx1{UupCtB2g<}xI zfTM`FF`1{Agl{VNI;^(mhUVX;MrD8eX+N_Enaey6rT$NmFXz?K zfRE^bN#{~8GGFb^!Mr{BXy%EUH1j39K8iv-Cmqj>N(oG#vb_okfw9FxW!Pa?5Dr`(!MIf{|lZ$Lev zCom6WcPHL3Nk2cdh;u&L4TpK!8#rYpo>N#pCNkQxH6wra0-V~-&{mm#kfwa@moJ>4 zi;B7ygR7%9VV-rz=7Bo9rKE>4{vDwI;z{oeb!b12L&mE2`#DB6YRmVo1gG8F_-V@L zqfK)RJwf$=XkOi5pXJ#jzT0rN;P`THo?q+QU45w6CiqeinwjWCB5$tnlN1|j_D1S{ zSgQiwk0Xn(Bfo;cdK2h0@1+UeEYCI9mH-%MM?m2Bh)gud$eZT@_g74HaGix^*b}8( zM~`0ipy6xTQp_~;^YduV@fWr?Il_OEj^~Uj)01{s_z)5r=QC-p#5pjYtzTICjzo{G z2U14=;ld|q@cp?PDtAR_RBSGB0&Yrw{h%4-2g53yjxA96;_ae@mj*edn9GMad_BHn z*FuXT;|BiId^R=v83BxXRvRM7UPq(JiH#1!S0zCoJPRQ+Jx&{X6Og-V8r1gpYB9-u zyC(J@p!G8Qw~Xw?Qx5RkI_k~1=dY=|8PdGpH!c29d$fnDIR4_{3&=LBxN1golXRc> zaNlyDKf^aY>&-nFw(K`(LGqmm1T#4nSei~-dq95wGp%CgJY zL?CA+pIRAYryW>iMAi-JS3{ua%4WT((GMV&$ZJ%4jOqM~XmzRT0Iz;?aEN~IjfkG> z{CXoVeFQ4$?`uR)Kw|2+iv(8@afO?g+f4j#PMcQ#GU_xr_e!%M#0_I|}Zg-bKi z%=z_G6-8gP&uzjolD|#wxutv5X>U7;Rb==7!U|sLfgbjIxr{q#eEFRUr4_I{i}g$e z!{`V_{-d>wWFdu&M{^YczdvF0i|Ezl6S}sn$-LO(m3)sMtPNs)ja1@viVyaDhEpVM z9s)_a!p8v575VA z|BiE1!vS&G%VZzt1-mWoc7z$J4%3L#__~$CHVntwflW1zeJojD*2h2VY@0vBlt)+_ zCoIEuo}DolZ>iC^&x9|c3k;^LvTF8Qk)|5jF~X0U_A9cL0=#q^)Q3^Yx4%6_|Uq?0L0sk+mE%$x`58p-nWdL9edHH%OhnXUQGvG2XGuvMY^$tVXhf%)l zQ^k0?O6)Q~JL^sq8KcHPs%9vbqn~RQwWKxFRLAr9*)RRDwPeI0Zb_ssjGK8d=^xd{ zwo9@*{ETW1zZ@=;Izy)5&(0C%vg;TLeRR&rN>ucseONh4&vWqU{evqp>*Kw7c!e%T zsF5pK_(@-o9zgeC&d}%B>x3cLnDN&(gMrNa8CglFH&%;4OeFACAr3QtclL%rliN`_7;CIEaAvgDR2Ax zsF+i99-qg!>+xb!l23Q~H8s~kEmWvC9rxuVFYjHGeEzsi9K{#=pyC{Rg|4Ihx<60- zCd|p`nn#KS@hUiTgGrhEDa#W;F&Ug}y%>M)j(a3hkupA}dfhx=oAAq)X;1BxUAAH1 zmRrNaQYmZ+p^iF8`8`lU)u58yud^*u&f(A0yd(tAub?^U0%&~xp*Qgs4tS?#%CpLH zWbt-V;p9EQqbz3JJ35x3`*oL_3oU~$g?e*4zFnF%=Iq@cTK0D|ySLgL0RT+#`99Bm z=KL;T%IkDl?sIotg=v=19g0$Ize+LF?w|aboV-L>KQUAw>m0s$L<7N|SB!8)>s@OP z?*0g=M<~@~T`e;`2iFoT5QzCcw#Fi`BYl`Fk~nUohdBF(un7{6AM-;FoKh?f3+f&M$KmZ{3X zm)mJ-W2fqiPL|n$nzj$&xt-)&(vxFsg^wdU*8>l~@A&na>K`Dg`+b4x;Xd!3hu|@W zw})%D$G#onhCpOAAE8Hh0N<;o-cSDxp2VN0o815+B ziBB*4d=5Y0>eBZ!D`5-ISv4qG-=?LuV?@%wxHHG@PuR9Kw%hyeT}_j_peF2zm#Z{r z9s<2VX_h-iWM==o4}Uf`ZokvtHhg&#P6AP;@wL=H9oE$Y3?A9z{>@)c@6bRBYV|%} zU4oyvvQOsYe9;){9h*w^Blj_box><`LXG&rvEk_6FIO|c%hTBjYmuz6jJ212amNp# ztQ1OQNYC>JcpiAQaE6xd1sj+P-f#*Rq1GzkV<=bS>R%I8jR!6{zvu2gvDjtvX#LZY zvaWP@s6T~mwdy;Qj@I`iIrsDPJ1=-oz3S#-0!9gy)uePT$s1zC^JzE?zc+vT2_rtX z+MiGRs?g8zxuMH_F}+>6s~>Z4X8UIA<;5*7K?BV5^*+BW26_DsX<)q2Q|5CkbIM5< zdNPL(Jzrx&^WQy|y0weYwHn?m0G2)a{1`a-;&J>K&@w!*uSYhfP#rBIIkIm)sA&D+ z;xQDpNX8C-dioFI#!=ApDgMi~`SLZ-C~yerFmBhUa>BBqQbuZ@75di;S35ZnNGKiq zAbj43O}w@w+P5Ty5Mg9a-?f#|=tzpUGs}?7U?80mhGA?}C^i)7ow-kV}GXxatFB4pkCNDP!@(6&P5nT z=BIx@cV3#b3Fj0wy$PBlUT@g{)tu`D?EG?JOZJARpZ6s{GK08})I$tvnGPlp)qv7@ zDS4}_AZcH^VvC;7P-t}`;gVfA8+D5 zA`6Y@ZZPm+ocyRrr}>o41h*bXKb1f9a)L7=Kst#>KZ`PAqGEq05gq7qgP$B{)*zW~s+o9t7LjgH5}-3;ZY_kzlZPl?swp z6tb=D+kfEWW%zf<>hb&r!$4dpj^XR8g|SSSW87jp7Z)jBh!YM|?gVs44A^t`R=?TG z5~8(pRhZzHTLAvzh$z2qx0CHU^(}^am<>g@V7P_K`vMEq8kBB9AY`qh?)mk3%5VIQ z#q~Yc`hkBi=n%gyUoOTfGZc^czIqIF0MJQK5-Wy;(ZF3$G)&D<{nT&LkAMLH*rHr@ zp&|jO#@Q3I-a`feq~l?hft$PS%j|n{QC570`yf`2*QJvq+BmBdtPy@t-t6B_n@jia z_OYGiu9q0Jbu3;^by*Il$$iHV$U(jpr0hL0LUdZ`I}%*GNtr zSEsK!<@dpkkcBZF_){P5&Dov*#@m7}Z`y`mpSX~%i{5FgekFR3ne-c+Aw!%{#8Yd^ zdCDuZzD;S6!1v}a_dOsZ}+`Qa%bI7z<7SL)xE4~MhV$=Fwx3c(jd1ba3XRmGk5un0{H6ke> zWraIjI?fPJG%4T;#OzbzLu5*%K9z^RHVR{Q#%X$vH58us7mOS1CM|SY>CX9PJjD$1 zK_9r;zj(RgxB5|@!uThWw`;(PISN!WA%mmgc|lvzD%6yV1u$mC^S%mGo}6#6jKD9z z>DLY?+UMM_cTWvLYf9osE!wFZA?WvH!~rJsGpf@Ie>=Lt3i+%vMC?w5wQp0atY6e4 zbkgK3QtcCTLZQb90kFQUwZ($!JC;xP{K88mUy)ODm=`LGSmK%pH+t0*VT(bH>Htc+ z{sR%x{jG?IBp2*(CCtQy=w$-)b@S~UL zx$pB>Uk<^{YQ`0RKq0JugyGwyDuxQ>dkl33GfG-UOmW87{bYNeAU3Q+e@b9$4-yL= zE>pBZbgDh?3sQ^X(1dQ#L9dxI@Xhu_GqZ3`0`tQPM_MqhxE`Sj6+xlAqtJGfzD7f> zY`%Y`vq|D=f?n_IShhbe$~5fb z1J9o!>7bqX;RKVYtX8Gl`Fx(K(~G6~Bpbu)=eNsai5di964yRl-DRuZ#LdnfbC;xk zzuG{No(c|WidUy`DUlyY`UBulWz7hbchsHvJt4ZJI^P=eZebepEv!& zKA-WoepHW3*mr4|^7ktj{7!@qH?O<*Zi$aFCtRBB4lkQ3;T)#|qckDj@*XWR?3s&OMG+=_ zgdrL{mWvlmG@$veoI5llmnu971ibDq+29%RnIl}xV2_rWqw;Q>L$B~_y{jOI zM~`Xc;h_!z_kGN{pK_+v_qSsUu1EE-jZ$<0VKcV@C*!8dyOSb&61-3 z-0J3qWQve+tRGbMCi#_D7|+kVG4ak*1=HO+556_~7_?wO;=sBEQ03kw5-384u>f#V z2l@_Eki+@(`%c#tBpkNr3pf(Nc-rr)v)X?gox0mkTceP&s$!fF_{S>L-xa=@_}ub! zX#TojPZuJ7 zma5PsFip_E^ydyJXpr+5n|49T!Ew*4!?U+kMa@e|xY>D-7xo;Ev{dP@+&biHe+OiL zySKMueIrUi%d7Jy@Y_BkOd~~>OY`#WAD!3Zz&#~WIRk-~_rM6jAGUiz4+rOX)B3m8 z^~%T^MZr`T57|n`v9C^W8njD`)akmO_6sm$lBsMj_&?<&(fGXzA-xFm$sZjZ@Mju- z*#iy9Paa9XisD!p&i;=VF0dK80sZ7$&CgGq!wS9g!&Jb;My!Mxi=o;Sa3djdF$uvp z8`e_^=nQ_Q=HA@SD+jC=p7Yi93Y7Du!~vt+q1Ub0|Vxr-(T}^9O{}hSl9#o z(t+RawRAAl#>srtgmXg!Zq@+oSrZX~>=)cTf36Y87WBSIrdIo=MEkEOmW_CT-Dd)M zyUUc;lW6=-cRVW2jJjfdQUke!w4!kMg(^B~1j*k{zkZ)e9(Vb!^i11X$PzO0t5psT zIgO|TAq;J%*Y06niTSvEMdgp!YC7yGYQ>?Qx{^fRi98y#Ro0onxaX9%mPYg4-oXkQ?N!P zpXi%5KM~oJ*dn^}DN#Lc-2TbYJ4%3cTXuYss9k;;^hYv+!uEMjb&w=8?z3O=$Kye} z%zy-LyAAugi3~vOc%3w8caK$a6!6{6iUu=%O0d9zwk=tNI8nd`q{5et3eJ37jJoTl*8K%>V59vB`b}d?XeI6 zVDrg1RSuAbIZobi`xHTJC7vJj4S3{d zJ%_=ExG0dC#>+T(Z zGHstT-?*c&0i`Jz*EdF*tJJ@LP1>95$M1CEQ4S#(){v?mHg$A%yZZZz1E+X3&igHV zceyeg7V@XPEOx&=HwPZ_k;pzU2~|FHeRO(Db||wLEM}4&PiVtI;2tAZ>=P^wUohjD zxnY_nPDgLoevxo(MSa}ctkcQ3P*gK4li5yh-BGJOw;O@LRr7CYq*auKbaa)R2BwJF zCa@}|nq`DLL|QCws(6DiNOOEWo~61KM|af!{N7+UEPf32yN4R|y(d~8z5tO+@G)^< z^5&MVKVbIo7MU0bc|q#R<&%LNh$i9z9(8TTgNsI7dkC-qnk?LzI^7$WP|v1a-zVpH z&0UJ(Ol7n6y_&BVv&b)fg{88vjxXJRyiQ=YUN65{19f^wo?;^_raIgn7)#>dK5m76 zC~jN@-4^P7KaHQaSsV-{|Co0e2;)-|w;PUp`ZW41_(h<{8INvX2qW%;n_=NW?RYg> zi_V+3mlpWZZ;IZ5&D>1lwpzf$O;5by(Vkookn{sRV9TQ9EPde7e4Dj;Pz|oQ?SJxj zN1hMomR|VtU(_3F9d`nyuZ&E6X-C(u_n<^HCsG+-JoBQPi?T-+*RH8K`NBGy$qz^* zx_idDjf4-C#4?b=ta@Kief{mnu3Z94V1u)h#|hjUcGS*Qx*Uaq@SqZZ1Y${^XjW>q ztlQ+)$iCl=(@EI*QPW9C1@Z!$mAGc_HRPS`@ukVbo=eO`qYiyC1CX@eAT)PAOM=Ij zt8;&^CrOZvMyiZp|4>%wcXmphXGlR=qd7hH_0N9qg;#a_-JMY@x}NwND9O2RNPr!7 z^N@@#0cnr8eLU|s=KJbLNG^RY4edy!-4H02zQYzeqnePC>to-zaM8uptYJ#;E;!)QhH)sy+J-a$F{nsft zH`StEVWRT3DxFlI%828(xM}_-<;a%2iw9E30Y0G#Xxt8CPS?4(XbCFv@xxFz0il!4 zm(W)TEDWmy`}luDYj$&4_& zBO}V2Kl?<%)BCIfEC{Xz{`~DX6{MaYaQuz^Yb(X`Wc!ksg9oUGC%HeSvxI zAIAZ+qyNyaJ&H+KU)l4CyK+CC(~xZ1JMjdq5KsM@9Oo&c6)ppc0Za2>;b0o&mW38Yy^r<6jfmLyQ5r3(>RhB;MR1 z>nNlzoQjf;aNI-dfr7 zD1|Sy&At@n7&jQ%^`{klmdRFpZl0!Ba2N-wgAWA%xmDL;d4pv2U-7_rb5QN8F>eZ3 zWd0VMU(icde1>TNK|UDctRIqIZu%kY4+(?nhZ?A^{Fpo9NNw$3FTHI! z!}3fUN4+`t5HI*9EFriH3?O3rkIARp+t(tO6rlc<+)9!CS-~cDH`z^&Z)~bRiSUwr zP!s)^^-eC|2B@&|JYc5fTSFsM`RT8C2^XiAc>PtvIr2w_uRR=-T{RJx888vShhd!X zgYqZ&PO4UeD&)|8Vve%zJ2nBn(qC~CR5_`DYm}_<4gB1=zBe*t(55M-_4bG^;^6Ip zhbHe8iIZ|fUtn6xh0c%j_je#J$AsrrqOT%h-&8g%mivUJ>$$l-?{GnQVYk29lR@mS zC&7+r1Smi-hn1mQ12+R}o5_i|NY!ktwVbbG6Rs2)H!AmKo2}Ud`-6Xgpb=B@Ox zc4IO%NZp(`Kc+2%?w_Vr+25v{GA5~^l|krx?Z=1x8@IMv(}bO3v6pK&{hh}OIj2sHB9PwPoWkS?hG9<-koDKFOKOd(PP~@*&F$9`m8-)mR(hVc zUg~MJ0O)U`d%Q%wNweZ6NhmZ)8$nwPgdB6}IP5}asE$GZXGmnV8%xKpz+slD zS|=t{AfX!gJ(8GXpw%}?U5G?2hj%x804O8wCNVex)}WfNU;HyzR0l%Ni6By~M&Bt0 z1^S$Pu{+;Ud|tfUI#LtC*DkpjYHyz{S&3j0CGl0FsYM_8xEU*4j^j&z{v6w^rsGT& zDNnNJ4lIisquSe2+T^Ew-Tq`wIJ4OMm8x6VWP>A_FD=w8GAP5V(6`b@XQ>REdeiMCw;;rK??$nni ze}6bv@8;YB&O~GAnYrd-sv9w%utgPU*WwhMIiTP00e*j~3ht|aeN@k)$*buS5*}(s zy9+ZNKg|4wW0HHVqgj%STk?V8hQqAmWlnkf#3a6797FGU;(ojq?BeQbb9sG&FX8UJ zX)(IEWeQIY%gxQqV!r9P|`LzJa()R?dv=q^@lm~p54(o4}4v!?}=M}9H$Xw%jM5i&iFGCIl-S_W? zLdLB<$5nURfS%hLcF9R)==x~^lBvk`woZsgI zP}mD!SH#8qeMtA(TGMMgZp-uw+kJ(6IPytb0PxABRyxIt!hLU%*-+g(9cj8#mQuG7 z+eil7w?*~5BbNa$%%<@$1*Zb`Cs*Qnk(gY~{_G+%%`f>qoXQWFK4M1+bz>;Mhm{@$ zN`lzn(%K`VZ64wm|v6-ifBgFGv{}`dK#;YfV2kKLlaJ%}ec;IZ>PJP8dpVy-KQ{}6&k|%|01Zny zxo@BFS#A2cbh^Yz4*v6!!jkjY%eb2&d`1tdYknT@?|xy1H{_k0`_0F`tKJz+Z>jI| z1kr+_InT1>lO*);YlU}u;6k(I>Y8r{m>0ZJAR8Ll8A$q=P=fDaUj95a)iM3VeMR`@ z062K+6aLTZ9oTue6Yt9yJ29ne#oDXD{1p3pa{4{u>f6Mxh(89{I@{tq zC@<dd|^y^DK3S6b0y_~8$$S=)3S*m41&U3cc4_X;hLse_N;93@K>&pc4 z#JtC*;@Ku^$hW7#2I1qYukO-VJwOCgiA7P3)WLdQMKgvutW!Y?u-qJ)>fb3sUEcQ>Dw z)Oo3$tn(drOjIA862^~UnUr0ZMQryEsrq}B;NC?Jsf+hf69VUVYo^IrqB)G;YiqAv zS|MoDLejTkRP$RWK~SMz5Xls~qix_*=-9>my!{^KOW)>~`1^AZBU1s@-p>FfGp&4- z@5MhI-QPLy3Qo;@CHpR~J2+Sutu04D_3kJopEJTZu{1pHp7--U$nXKF#kNSSXEYqg z$+vjys~dbtXgtHYmr9dQzL{Z{)R>-Dn$>^)AiGWd6pe)&uwp^)>St|@o}A*J$M0#K zdVqs5Ru9+Iuk8!^xVa>lr;qTf=6f1{7)cfJxit&>-t7U$~`Doj@UFse_xL+8}~0-_9=(NCy$io>3S{-Q{s z?(~nI{YMz6kW`0kw)eQ>&-aR7c&I1QrRuo6pekFsnX;!$h`rdOR>$nTZ*Vw%mn zE}V-k=xWk#(51vhZe(PsF1H9ctL9~c4m_avJBhLqM>p@H ze6NM zwNEFAPhUM*I|;p@REO>P6~Bixr;Gbnu8t~mCpTXlH8O1la-Cwk7LI(vpP!DPBV!MvVyRkA^S+!hxL@r4zwQUS%*VcVN8Hn@&iMM! zu15_QPVAXvg_^Jil!{OS-2sUW_o76XyPgd#+dyZZUfMO(G3x!OeWIDcC%gl~(l)h> z3TFZwOu*2@IR(ruEvs@Vqe+Ilt<=~8Q+`q87JgB6IR(_4F}641*#Y6wmwQLNYBk}m zP+{6{U1q-_UP(PsmYmEd=N`7`zI@EM+}z(}PR7yfA5g$Fk8LEBNyMC02_169)0m{Y z5=-{$K#>{Ex$-l}`aoT?hOf#85&&Lr(ZD+B%SCoR5Q=#of%pK&v=&tknT)(D>~l42 z`^Rk?9m`6U*w5M4eO4F)!h=+Db{@W2Hf9G*-9AQ~yre7KOR+K19TCvUM}eUoeAQnQ55xCPg?<=UQa%R;!02qm8KZ3a zX*zzVuvJpTCY$qy!1m*+uTf4XhQz*TBC-PND@QNG*Hhd7$`;bE)Yzrr0OoVfGnT%Qwo(LR16;XjvsiIDprOey^; zv>{SMzAGkt@nSq&wO_)anzLU35)R{zo+Vpo32h3z_$?G);mDLStS{$_!Z+>TXaV=T&3;$qZ*B>{OeG-ls##^&c#%ya$m;plCq2^#e{5Fc7Et8%`vmF~v5~ zptmb$_v<91bJm80(ZSE^>CwbHt;_R7H?BR%!V9i0r;wSGMDqQ^J>Ki(dUKf~t%vH{ zq@LF&3O(V-n%_60zA>k{j-F)D`g$8uL5q2zAqb!udnoKCO0dZ#I6(WxSD~|$@QMsL z;#+GR;>v!VmW8rjbnY+Tp2+s{80CQa202p4oTaFy-EuUbkRLp0E0GV>s2)&%n;wnD z{4PXr_N`Hf)`;sOt0x`%g+nsZOaS1TYbPAJF=fw=q}fnt@93%kWn<}T<*bp zJCs+UGoKf%TU-5+l0CqbEBIBtlePG)Mzu#2!{j&7_gyznpwDu|wCZwx#M zDbt2;zCv$JCV2W<_50wU&Hdw`Hz0ZemKN)@S&$p7iUSgg)JAi<;&r|J_MWywBh}h) z?j@1=+`G7t2r+qk{=pZ1`rD(M~V&$^I@EC|Q8Z`rEX! zf8fG#@D6Xs>IglD@KB(c)1XaYr?N!ZR#p_$VI82$uPUUgK1y+4S!Gn^3j27#uU&qx zU!SyM%pjg8IexX_(+M3qT+;VTooGN&YO?xFhrbdEnFdR0yZ$?5t1ZJk;W99j7en6Asg^d^<`**1oCO0*P&5STmX)voN)>Fwc>S`wd!ht7&ip!i<@zJ|srjosvil^iDA|56UL?h~9DhR)y>tt(M$$%>z zf?W_-+56?SgjuV+#f+Qu2kPRAi3rRl?BFpE4;(C*$RS+GWMR1=eAwVr4%;e{`wT;f7dDpIF@Z!c%~1t+_?-kqUzy81-@VSW_4^T2 zhi{6lMcqt+GHzuXZm>hv;ck2m_C$)O^m1LwkfJWeHu4gvFvQo>_JmF%->#jK((Y+2ACjKKiv;M z@?*Y*-qI(eIwe^8`0HNwHeX}EUAX=9k|W^( z1$BWT-DPA&yIAUAI5*d?Hd%gG-VdnP6@~?AK8k{+5_0A7^xd~Qe+b?4r!iJ&Qn%t9 zoPSq^uK2V0sTT-NA(E~SRJDh8y;hoK5+#ap$N`p^l1YPp(?-$ z7x-~l89FkDysocT{_S28=4?vOBpw%c z`Aaau{Rqd1e7fx0%y}t+_bbmlY-|RA3h+=16VH>PwV(y*+Hn3>2hekY{xbIJ4a9p( z{rOkpSNvVo1Qfhp!ZT`h$l$k$WlPLVvMb|Wp*zqOjdx8C9T|W6frIGjNqdlI2K@w( z@?K01VYf6sR_fKI@PW*TBs1mk%g|tYW#aMvrVmx6Si0;VKfHIkIw{XF_Yulg2BMe- zDWOX4;f8EUOEAloQ>$J+4hD7&C!qVHSD(K)mWHHE5cwwSHlYBCbCBX8!E= zZHf@gY9L?40&H1-}59%L*WnJE&@O zbu$9zgU8+N!B3{M>Jts{PdwXqQ0T3$RF^fvW!_gpt~vco6ZZ1#i3 ztBFSf=>^ksILDB;=Tn84_D73#)@If3@Z7EeNEefQ5?WB|IvtJua)p9#-a6-f8N|wWEy+`bl6WL zbYadz@VdXC#R6|d!!yqW%kLrouG^n zunTI{F9b(>qOS(SDg@a7Gn<(S79;i3m^*Mzlu?@*Zj+b=ER1JebfTH+v0?10cV*67 z{mPFFJGxDj?4FN50?IT(eFx%Y|K?mi10wxN#>`v`(MJBZ63$-f5tcY0-u^xqC~Z4_ z<#A&Z53^kptQVz(BMHmT|U z^fR&{NJs1X-sJURE)=RUPaXp6B)?tELr<}N`{JSLEY2_zyy<7qxd=YDk%{9YrEjf_ zv?7ZD4B_)J@^4EV?%Ce<$^KmGH8tCBjTy&}#8vVkgBr2Fy=++Qd`{obj`V?{b~el7 zdViHkDMaHJv|Fk7PCp4g-b|XZg(5D?(CV98UW_&NlG}1|x5HyNKTOCVFddL`#)%hl zsI@4WpFSUo-vXb%vPXiufYVKf~$c{w+MU-kZF89eIe) zj|M@t3Jm4&hT3}Z{gj^w1xm3wZzL+qC*;+iU>?KQcp{+&dARLEKJx4HK2$yrH(F30 z1sbx`n3FMy2k})ywIzosgZ5x%dp~1Uv#(au*1W+U3duZ=rUplO4@KT^|JZxWsH)a* zZFn0P*d1VR8+COkh^xDMnX9{d8Q8H^(5+jsz%DEdLOHW-=Fv2JBEtPT5~?@nfG(YbzfK99%Sk;K840ZgaBLxy~V14C2sxA2%|NdU3zGk z@&uF$l}_g3@Pq*pUqus{g_5vHMv8Eq7_!1>Ba0~Pkc&)E#T950i>#sXm;`W8@G=tH zMiMZAAq`BhQpkv7)e%FCr^dUPVB0`EKFIXjFb-3gf{9whJkYwuVj?23Ea>GJShTQB zMic0v(58skwMwZR=nUam&|EGuUQ)9NLxipnPe_BT--xOND7jIjbcWC@fmRwW35x>+ zJ*427WRu7b5GkDrXccHm6o7xYa2*jI9Ys34fgKXo4r<)(AOY{SmF5N=Lq<3ThwD5`MS&XfE7R5TPA zylzCl09*?NngYxlMynskw5oYwER=@f9O%sj@@NLM_=!|@oLdRxTqL83K&N}6PE7>itp7ZF>aMuyRv#X`P}%D`F7QK63pkHnN()p(1|N98CX zZ>6P}tujAGNDvc*z`GB-sSZ2N7G$}xbkL7Rh5+i{a;P?ulb zOZ?Ew?emz;Y`xJOM<}C#xrhr+Ye)_q2gv=w?4<(pC;SV4^n6yB7M6x(2va-LuQnq6 z^;Ck#jq~f2L=3=zX)vx-Vpw6fk|-Pvk*s%wu|5(Vr`D)pGBdqKJ6Wk97}+Qq@}=1g zK{Sd82w~V|A!EsM8r7}DD(QZ#5v1t@XaLY_V^*N8#hcY+;Af)?ke7)TFp2>yjx>rh zS$>QdEktgQAhuGxE-6tiLFO88N=B?E9!SGWD1eZIEhK7REUZRMV288#b*{cx2K@eC zzkpL??2GtI7$tBgQAvJ$IBF6|Ax5MHEikg5d%UE!Srk@vTm_PlG5`GN~@QI;;uM;&P%`Zk3_@E?JQ8 z1zm0n_z+aC*Q--o+|b|?1h##Y#T_*;xe_KPDg{v&8z{E|;~!e;fEOC0mwALP9ZJOV zf$VWaisgqmN}n1&f#D!AWI-Pkchn?G3~{U+9CW}KR?#GQ36L--0Kvr92x+F6KkCPD zRUrNYvx{jZQn^5;>ehyRc0bk!TRdt-On^gK1BL)wi6;=ubb%gNJ#_SNByMJbiG=yY z1bBsyhjVGPkuZzxivlw#0B_7ftyN@KD(rrXp323mKw-qgS1Up)Mu6%AX(KCHW8*tm z3=|kAG{YkCff$g1i@fm;wAmepsDc_p>HLnkiXFhl-3A_BuL0g;y-^yFpu=@u_A9M*C2%}h{JkhUem>R5rJxU`AuB07z1}f2G(l_Nfx7FWk7a? zxK&K8j*6Gtm@Y1r%Z-P5MkWUUCw7Jk_5lSQi>I|ap|e#5y+=_O*T*8d`64f31SM{n z4KXW&{jmSsEu){-a$fpNx-N9pBMExp+6J;1D`1q5DiWM ztCCq-rATbkqKI~$8e?@tQP9>EP|Ja~obJ#my#^jZuZY?#9vn#ainL+}5!f*7YLW$v zE7d26N5GT|{XAe#l>kq$D;$?Icu?i{qb0Ck1GO~(CCUAAGEe9vVxYVMA01<>yb_EQ z80c+09RVApxoLEqHy~wefVvL$8?-u*eq#F2GMCFrivJb zYo$A(fChy03U|;?Vd|m|GQ&=B>vcW~3V1C%phRm$V_6YBFi2A+AlyWPB#4blV@O#J z9|q;;2I*QI+7t)QHed6o|mfg$$B{U|@)BaXUTAXE7i$18HU|Dy+6Rk>!ZM z_2_X>O=X*K42C!yg2aT2;?S6(g%^p!B@{CV68dCejh^5zIq@2TAcW?I5TGs7>;$nz zoks4Z5Pc#u-5c{VpL<45gm#6lXt<{5Q<4Uo=?MM`DNWVi9O0%Y;j zsiMJ%T!YpS;mWV9&7W|in9PC6HO9-<-*vQ+8Z&M3tK z-859UB`(&wfW8p6!tqWGoy%1_4b-sTzy@Y(F9R2rK^qZ^hK?L@)?cuT8;sMll4f z3|b4-QL4@p!P78GsGwLOXmZ0+O$FtiAn^RkElh- zK``!B8RZ&e7$iJ7ORv=s01FAIIKLT**;sLQJZcd+0>J=MnvwIo9*qMaaxkDwrOHf> z0%xw8?jVBJN?Zq>Axe!oCUj#w3@n<`{D5CK0d6cR2P9}9 z>?47;R@h~tM?!E>r^*OYFd~8u3w_sqr2{s>70{ZHMs9TJR4^>2`JwBMECoFxjp?_SuH;dTYON9- zW8uSmI9ZIB`H`RSaeSZ^B(Nih`+@v{C;k8OWB%Jq0bxh44*vR~O(dWL3x_x{|K;YW z^kNWMVoNka6kl#Ou-s7!d{h77%|!JE&@y3)ae#D0o|Q`xa13f^0EufP7@$=EvKcfo zE@Yln>eqWIZY~u-?_{zpL=6bp%wW``jS?JYhE2w>h=CCrhtmKXM}VaFakN1JD8LI* zI3^^=EmRZT8fOPxOeBLwWSO)^6rDm0hg?)CH%>7HAv~fIo( z70KcPxrkxF$AvU5q%RR3E6DN~gaMt`Bs4;!7Lx}n4-@5)0hZH_aze|HGK>@3ku};5 zBAJSqUPKO<%*bg0okbrP#$0ZNCSq1Ou@<9+8lrikT(edJX;eDT1|b_>M#Mw^9-I#H zTruGJ#(HdSJdO-C1>h9oVuR=yO$B)#t3>VwZzp5~Uy?}P5|2nIZl4^P>@g}ZV@o6s z?(cXAn72?7k02&8aFm4P+j5Q{^iJ1b~I5XH7AqzHpP5!(lB{nFpeu2x~#=MzA$jEsYXg&rIa3u03g zJ19BXxC+pC0CYLckLO8LaV#qiB7tHEx+#7XgDNA-4_AE&g%aB`rIU>lieb1)8QA(mCgL8*W{is}e?$TE*j zpoWflCL0ow5(`l$rgMByruF#vXbKc+1RT|G)tHdg5HYcJDj(E)nOrE|+VP$s!OPi9JM~4wN?8W)t-BaaDMaz=S62=@xwq@Ah)gAT&nQA~^|oQK5|K)=|B$LIqAM#y531(Bdv zPoPpPMr%|`rP@6)J}-u`G8o>N8j3((chn+PvcN_KaPZP-h*DET2;2$KL&zY*sZ5_S z2I5_A3Y$d_1pzT@QVQZ8r6?MeyX**Tjp<|If%zuj6Z_E+Ajc#zJ5_IUMf_334Z--S zM7DtzGQ#4bX5gWrfaOyd42bdZ5mCwrS{sOJ?IH>*sMLbUk`vUJH3X+N0!C2-G+6-Z z1Fkne5z@F37r_pKTzsn@ZqjK}VWNmXE{^L|6iAV}LrRs8h^!?l0iHn-X^9F!fDQ-_ zvsoDi-Z>xD0SW{>F&P)+X#}C5N`Z;U;Ap&7poG_j8K>idZe}Q;GI2o?3o)%;(0xPN zE+Ngyq*xeEU=<)nwHBF&t@X-q7;yH~0s^p@p^Rc37KKLMJ1*VfK!wo;9m5RLLLrpc zhI9IiHsCU$p_q&amlM{TIZ`_{2*-ktFOx^TW&(6uv8)^~23Rbq(wKk+>o`TOk&(43 z22m(O1gHo&i_7N?$h|T*!7OkH^;Q!JK91_)aV-*aP-v9<>?$vCIY5FIH2J^_0HhmQ z!SDeIS%?n!2?I@L<`8s1!vQqQ2EM|9r72lKG>!zh4K<&HCB*S=8gfO%$qKW8ILA&P zcns8#DjJfh$$AyY2}MOgvY*98ThPcdPUh>ZNY%zFB_hAZ`7DJK&k2b5Jix?qgmPFE z0G%BGD4*4735FsLT0AVWdaOcNih?qe1XRXsf*4;dR?1W;$mh!l8gf7{faYwol;lR6 z@B}9mvmhk53ph~|HRxh6fLYBdkVffLg;6QO!}XnV4uxV9`WdifQn^tHSBXaZ2mvt^ z8niq;+!eqYJvNcR6#`BL22_GAze~y}JdYs7#dUZ$kHP{4SiYOV6L8sjlNv2H;srvK z$)+Lzfn?m|rUL9FpoD)w_#EaoRixF@<59#0MSKK@4aGGPHBJdz6-GlFs34|tdYL%A zfDE1cMzsM;6Gsg!S;)xsLGsW5jo})mmdHX0pc_c8m9u#=Psm7eP(m&q0V7fQ&=_1G zPSAw~P7{SE(&N=~hnF9Ht=Tm6|v)1L&Vy z0S@OwjCCA@qD*2gW!n(VudGw_OopuuSile2yUH#-~bT_9a^K;>$x<&3hl69bY!0?0N6^D+D8kK zn2@s%Q$S7-_+(>Hj<8|GBDqnaR6(1FKtPCD=~1+eiWcg00k4e@#8L3<8ZX3^K9og5 z$J%&U8wZ19fa;qGA>Dz!I4c9V8Q_k9lt&{BswH$S1JV*~o`7Hy2UIK?PX)xrM3NW0 zUM2^q!i2&&-R#jQL<%v1VB?d`E``wTf}Kmm{EeB!a*r`A~=;z)?htU1lst z?tu6KEnxEuWY9$vazidm9KcBwKi6u*Gt_vB-i;4Yxi};TT}u_aT|uD%sG{K}H4=%+t7oaCWOm5R z@r7k_0vVdNpwF8~u!H&*5w0f+dn00f7^H6eV!mEQ(9&aUz(ioMI)XR=`yp-Zbw zq(P+`gXYR4APyrZq1C{@rlOKVe81Xa#>TZ&ssZs}flY^qGl~Hm>|`> z8Ksii#p;-e2;ypPg_$dm&;b_>7s7`mOa`RO{i?7@YWMSe8Vp}5)`S=#m)_>r8(cC| z&?+GjB{mGo>J^8g9Ep%0rm#IBg#&pkxC9Y8@{uo*PL!ZfOiB>s*x4Gc#buBA-Atbz zM1Gh`chC|+99xssjugSDd@VbQgP#!l;EZ}46PZL&fIeZvE~kykH3x8BxdtUv$Mpg; zT@@8MI8u>aW42FYX~Yywn1+rW#u(4dR1<_Ix(2f-@mkpf=6lP86}PNFmb?9I?C!l0;~ zvH-I9_yJ;#Hegsvbl8r<#uU`BPy(!vXc;K{fbuqzCNlu#of&MZ4miGyZhbJIl`?<` z%Ml`bY!|(N17v$d7xYR60;0^yHINNqgyoAGBS7&B zc~VuThjxP@q;ok!Hzfa@_J1EgFSdHKu=7m9;H zj9Cn-_;?8EI9hl_V1f@?1x`Q*^37}(--yeY!wD4AOd>@nxS*LJVq=u zHECsRa@?kllRRXdNySu}bSkMx%M~yH63P^s!8?y(HGDD40ZQs*e^`q{B(v3Wg*$*^ z0l|;ijF@(k9VA2u&={hLl7wu9nxW)E;!B`1LiR9fgKyqpw*&G2R)A>V9Kr1Y!zV%oA()UMke#c`6M@V+F#QFy3Kg zyLd`E-Yv583^XC6L!Gw$BNackQT zXdfB)#yx9qRCk5(*HV46lsCe4)^&yZ3)>HL&+5%+*8cO`*qmSYhaC}wmjD3P@6p?8n}LH;|}Tq|DMJZm+xZKlZ52cJ{tr1^;z%I3t>AY7v#!n`X#5H*C%P|NPMZ+}@c3 z+xuLYeXIBXdpq?Xk(c2sBygi?gN_A<{;%8r?*kwM{(s^d_))On-lXe4=Re^}Mm0|O ze*S6sI)zR8ds2={E!~@#x*aAK>q+GB$C+tQEApu1)w_muU`(4kV9(dfT~a&W$MhDk z$Nrv&PMDP`^G|L_Y?3@tK4r^@{>hhKs?R_FDwVXKJGcIY{=3_gGUrZ}s^Hou=QBP z2OnL{-BiDR>E70Yl~acWVdasH!ICyzutZLs0wId@U^glUEi7Z=>>n;4x_fA;jM28}d{WTe>-P)Pw7VXx!RANF0LK-BeBkRyWeW^$Hwk^ zg|kOQ+yljL$|If47h0b9E4O3ir@iPQT!6N-inU7bGT(dqLQ zt1{CT_Y=hL9n0wSFe~wRWuI@0@s5_k*Y`Tz-uF~K`NE1333=ry4N49QU!SpFyCb3; zK2ZLg+%Ngkn&P%!K6H?OdRRPh&ZEBm_4{(uKU5ECa$-Qqm!~cA_Ds6n@728n3GMo2 zo_al+D0#L||Loet0e|-w&HK`9bJgvATSyb%v=^?f>o&gq;CT;6QcTAem;`ldl^eV?bW zR}Ag5Yy9vz0~^FEuKsIauNgR4`?<%oBCoO~2z@llDBl zrA_Zq*{5c^tmQvl51!fHrQMato!-gcTq82y-k&v6)^R&Q)Z@;a#Sd{O?@hKSj+lql zFE!^<^2fJF71W_{G;i6E;T3ld z4DO5#Z=HT6MYDH<=-9=r<8}_cQ&3AgJ%}M*AMGOFJ+9NoY5`+CorCfo|7^XwWB8*p z3+F7mFrwmk$^GpY9){PP`e*R+%bP|!7W5#tBYMV_US3y>cD-o(iDrBKscgl*futOu zEr&UP!C)&`twZ5vGTh&L0Z@$$0 zR8{FO{ly)*s7dtnl=1oE693nl6{wmK893*y#L!C|1KC^2)}-?_OxHVfDMRp_hg&0NsAGit&g!-I7hyEojftb6kDshSu`ym@iO^r_^* zt^1f$f+;F?Y{tW)_&jo-Mib86>{B=3Doa^eck1YP^jc0Rg*>H&CG%D3B4y|bpDLT1t&S%>C z$J;J%b@Vv!4BskhJsbJnPPd?I{n9hpjq|DP-zgKCH!WSJxBUAzEjF1qMI$V^|EOC2nnx2N80*MD*rZBDK3XVH!A=Wl2fRI~5PS5B`{RZCjVx@8L%IhEnC*4&Qn={`$Gcya9_hs1FRbU$>Gb8GD>t zx@)6*=w?ByQ?~>C|Cuwo;@11D{4`zbjPLIoe|Y?F6+XwXJ^1;}*p1wOxU-t&qsGi! zbZ?8ON5aK{UxyHWyuY&UygWkjJyCUZ3`5KcgQ!^sFxJYLp)B@J@#kJDsdp7TQyD>QjZl-{QkY zW~r{~{nsbF9c!>%roH^UwczHZ+|1`QCJrS1+%>jA-Vgqr{o`S5vRRi_Zjx-{tZJ?6 zfyeY6b?LZfz_!&UsIDt*-CvMB_JbW?6^kTxlw3FQ^zFU!L z12lV!4m0mwEz@J)M@=*W!aEH0w1{3Vp zw{A(jdSyLh-`C-HdnRWkqnjS`S1SaY+3(To>0kEbt@gfpTAn;HoGbbD_QsJ7iLPh2 z4Qsz1D_G}wzy4F=i>B|>4!07&T~k*T!8v~ZlbEF08yu?Kb*rP(KVNx3yo=uf-pdo) z$1d*8Q2OrFpwcJT%4fMY^1tNkDhquZHj_f(<>yB#`|_5ZdQd#EO46lBO-6;aG#2;68cY6(RA&utJ5RRp#E$!0u16LP$$B|$XHx6y2j@?(YH4crs5-Y3jh|3lIOJRN(=RlX?7g47 zb3YS?te6oBY?&s`>+mbyL9$=kqJz23h;ftlH|xCV!SIY%sG~c_DogTrPU+aKczp%Q z`mx@|i#3(A*Yr%azTrL|Hg0%fmaxM})~99N#78NC<&z(z-dJ=zf6LP4QyBFgijOby zI=cj%7H&*`HUUo^iX81PJ zLn8;z{yL@jAEoH$ z{p&;EKFZUz`O0tY zGG9NKcYaG|URV>}`K68F$U&LcnU`Bb_Wx*=*=l>8sbhRS{_Vlq;!``4?w{c|t5;_J zv7#M`@Um>){qP$}Bh^76rd$n`jxk)?Z zSG;?3e`4P5^6%TH(Y%wY%Q*XOqdP6>cY*bD(yZ%eig?Q}<~cjvBNggS4%(qUnjl$E zS3G!qy~mc*Yo}hR+iP?OU*7ETDy#NtgC8$XJHC5dDhrI@<+^Ll&+Qvi zFiw_yx41!i-GPQ_$1`$%(&~kdJ?AYNdbfY)YX=s_bCEB{ZP@aoab|;+<@AE@xe2Ao z$D%)*e+q0mQT9;S+qV5zM%Slx{ZDkpFZiQ$V(pugcS0|Huj+iMlj_cPJ~6ig#D^7& z>NjnBigmOoCMni-Xg^r{XW=gJ+%saCu2?4R>2p){yxk)RC9|6Kpmxf(MD-QP2fnzU zoI7m~tgiifxx}y-ZRqH{Q`EBf$FZgzkMEXw_Pal|c=Pbs9HwAmP)wWr_3O5%zMw}Mlh5y*o^;6nMCP6J z?((=X#c>UOai57p`At^O*vMI8xV<-aZvKVg&6jj;|E|H&?UIL^i+7JJrk__HP!yq? z6~DL_B(43$PM!2F>oGa}%+TPIHLa*Br(27>CcD!b3$8!$pGkUnETe}aPkH+CI@{r>*?(4aTvyB|G0J9Z;!Wo>d@Zfa@SaLFNC zQv15StFJzOek=>M*C6vQ>E7&P&ubs~P3{*3yHEcbYC5I(d@EUdqeqQuaIMkgya_9F z?8g=_5f`}I9r!$L-1Fk3^6kTComV!Zk(!hieB~@noi)Ac-_b2As}}U|V}`Zrx^VDQ zVddSXf$P6k;5P)GtXEHdKTUhhJS=B+Rhx&urW#5`Yt0K^43NK*{mET=_SN5i{a8O$ zH0a%>^j{U1D<9_DFK8d1U)6YWJR>iNYM(p;i%tD9Z`JL(Cgj)$d9R~&T?V~>{IB6p z&fh8YYnO7$=Q!CS{Ye;5>=U3 zx|2r6KK$u_dU0pbj`xpFH`_OH;+?>z9~TR59LvZ6Z?{|S-IkGwg1mo4~~S|4ZONhl~kK@e$C5_UiO-2 z>};HI&7QCMJ4B#N;HMzVpkn3sadRdf)AK2jYC1sr)mf=;DI0_j{+^T#$Eh>EK~+9)3+C zrw@MdVrc5koGlfFk=&nWbB7HZv~<|Z{Cr+1yrpY%>#rhsPG2#UCS-nEqSh9$Ab~JZ zj(LCw?{ihV@q5q8ykpk+@%$XpIQ@djw)}t9lezWI^o-QJ9OQi^+vh%B0{7yTzCv*- zZna$exb6M+@7gDK8mg_IRKEL)Ys}R>kjsmXoA#H&4vCm4T_@eGKg|%hc)o%`I3jQRBf!ecKv)y`SoQI7(_u z+%|DN7@5{h+y42EUVe4U8pw0p9k_JN=G^+`sRmV!wX~pY(YYZ-T{@9kih9Myiy(tH zHg9OFmiF>p-7c;fF{ckJb8GU`+$moNnlG-lsaVTC?H+q%Hhg|Jy#4wg<9}7J@*H0< z^38x|orX4S<<@`wxB9}bUw^XefBdV%U~!&ui0MpekBkKySXqspx*~I2Gat=vk@V>L zHd)=v-N&5aFF!s%%=_G+L4(C98ccF(wDk(CB|L9l`mgU;e|6cs=3Ov_8`C^4dd02L zmYeh{%<$w^-BWKpu{Ubiu&_uFArA1qa-ZIm&O`3{NcSf0PQ%90OQt8F<2BXEIw`i_ej{;7KSBNCl7^#qqWCi=UsyAuQ}e8? zqYnLrEB>*-O8D50Y9t#uaz18MN;q_&VEOHvN>^ zVkxoNCf@QhdvqtSH{w6|<8s~+{}b+~jN#-#${p4~GOX!M-~76{b2PV8yc*IB^Lu1` zZ<9oDjuML(z1Sk(Cf#1Vbf9eed&r@Uu6H!eTV%b``-!bzaG%I-5R^+cFt;W3=>G21 zlwo5E*Pc0*zppGC-QZGA8V#%%^;!DFTIZ*(Pyhb3RdvvP|MGsDtb8c7!GV5W=h}bY zDP#>ZFOWaZtlFLU1hwV8{=oAN>dDWVcVFOsUh9j#oSix(<ydsx+%KH{<6#Luux~Ce;sRTZD>?CR1k)qxMSMyfBHV{NsGI;(()E z|MKR}#JQ}@Es`u%6qj`txV52I=ymQgT~vJjJQ3l zq+rUAuZbt}g5jr8`kumbH-&p>if61$8J!BxA$38 zuC`nI^RuUxX7w=q`1&dFI!uRcUmp~>R$ZMF+PdO^uja*#!G*tIA`i&!F>+GjbjJyD ztIV&pcRiA|qv|DmBKseUUD8(Ztp38))=tS;U9ij>ea;5PHQ9ahm5$wXyyx=TdfJ2T zoo7zU#AIg22jbM&hlYKa3!1D;KPj^&ed;}7xAp+H-lS-E@4*bx*jww4=QlgObn|K% zlmN*0Q^z_US8vE6P`-ZlK{`3(-N?iHq9c;8?c@BRzlW+U+uM3l(+S^4xbEz?zimkQ z`vE(r`S#N(b6V#0Odfx1O1FIdY3V3_7AkE`!#l9FH9XlRZSBn0lfTstB=sq>Js86q z(V0+^-u(Uq&7KL06O)5-u*uKixoNY8_!MBL7WRp31Ia`vRRyR!}by4TWcM<&00 zkanYXUc3J9&JR0AN+^YQr4)>cyz_z~V{KU`b%KtRLb_S=RMv3zx*eK*%p3hj1%8h0 z@}~0Qr9EkrnOKLhB6}_G zNSDne-mLK%KNQml#b?(wJIQ{A?%$+cV$*Bgh6lw-om>n1)NCHXBW;c>KkQ4MDVRMR zT&*)UQa^9IMVb?P`=^jLvsQ;~IR-&Si%fj+t;Q$0Tft@=8dLWiBb31kw4zz=0Wg-9 zE#n#uP0SY78$a7H1UGHmb;$ERp@+G`*&j#CUwdD(j*6cb^)hf6YS4r@AJw| zjM{pmBKooV!n=6x7F|vJnn+Y0a{a{nko1anCtinrG7rW*SBxzS`aW-OwCe zdct?5<(-R3?T)f86&^=Jk>}x$Ok&yDgv=J$4*I#Un9tlWb@y?!VdjB_+GT&Y-q-{R z(aOfuou(Xs98X9YR<)>0ma|!A(;W@*BXcb4BH;%`F?*k}>MxTIX%_v#n{eX=`gJm` zPm@yTl097xw@!K9!bC`%?y+7%Q~r5({$2eu9ro=J%+@R&AfZl6k*#g>SabC2i@}=~ z@APeiXmw`O1?cK(>KUf2&+J*K2idd6dC!c-UTaAFg08-cxrBb*^WI11^i{owG~1W4 zIz40Defgf5rdGtC`B~&Z_11+`%L+;shKl~J5Hui??A{$uR0U7SH)}qe8P;N&!LwSi zWFdGl#&-Rx|3c~v2T$bpk(~>UFWY>a^{zk|pZKx5MfN&M1J3Bz0a*{qqS)l;^Pco0 zO-w8<-rq~R-+Hc@(~~w)w58AftMmCi50r7r$~r9QTmAChgsmMcXG(^b)lhb$WP5yu zo~4Gtjs3@_{Agb{dj83lJ2mRs%d!he%g-+ElULTO=Ih7Vr^dB-y`smy@qN6`+AcNq zza?ZAPiSjuvVLmT04TQhY3JIbyE^gwp2X^$j&pBh_@OLRu8ucBd^b&R@aiUX1P9^* zMyB5~prQ!o;zdV){Me1KtgEw*1V?_rOswqHQ%bKV8q{;n)Tngw^U>|!je|3aL81Yq z!;a?<)-Buf`dn=){)&Inek4J%ZEA9lAuo~Ya1GQ})x%7i#vXxUZNcb4w6O!c&aKbi zkqt!&nTLD}lQz^usZRp)sf}LUNW8r5R9V;5tut4QDvY6vP6*be6cEUFwh!|r=j{D( z^bPoKFNfw2?FK)3=i%&I>OZJo${%>9{WyLHvnW5TU7_3!Y0W`zcbRnY{m2@1-EJPD zO(a~HvbkGTn}5e13Ab2`KGCG=n(*bm{j;85&7QHMvA6TichxC7_QzHh->Dq3tTxb{ zM5rz{SGVk5c_DpWvwe$Zj^vK$*>jXBsj{+v?e(g4gZVQ`zh6x$n|@-_#ni%?x$6e2 zcB%hawyidsxbpdz>?L;}^!7S;OZ{uy$nEyqxvNF9>eNwYL;^wavWaC~=7 zS?a-^+5^)5d(hV(fsgj=%7!`92aUUS&@=v@YsXLr(0EMkO=DONWl_dUAFP*&ij}kJVJ{9CJweBe(X-VD_r#JHJ(Br7!)Q z)mYqmdUO)5RnFR-;F!qzKfSU^Jdla8Z#m&&7MVM&|4Sh%-#VzCFm^=hkhz?FnE~fPC zsy{Y+4PV|Ic`IH=P59*Ljum9R25;=TY!2clewuK8=uKUEDt+dtvT(GDezwI+9O%Ti z$fP|qzQ5ezVp{GL?^y4o)J1)Z+IG!6xxMt$`Ou{UIt}SzYT-uh0ei`?!0VyvJ)^oc zGH9aL&VKr*zbNM&U-q_H^4-2m#%$bD-#oht>VbK~hCRT4WMyUz`|@mdI;r3&GULp?=vmC+8h481$Idsa7dszVR+D0}4O;X}tBo(W0Zyj4AC+ut$g z5xb{$5FM$v&)n(dm7(=9t=yI0-;c;4j>_#|@<%!*?tNa_JEe`eF1qqT z`U!OLtjS+%Bz^krf0rLxGd$Ej*uB^6cZ|8^ ze=N?*Z+bVm)9y__Zhq}W-wOZocZh<62%B;n|PAlRloA|L|?* zao@A7zU!8wF5-Dpp9tEQFEsT!HD~0-5xC^L+e<^dZ-uo((oPi|?d~i=f2$hv(Tw&z zI#oI4SYq;=!HdVNJqWLdAznY)ynp24-giS+j<9`scJ7t8Y?vml?0o)o4{5wXbkep) zF!b>Z%*G#keh>YKX=3`NLA3UDb*p-{1WTP3FHkpGKC$+dM6|Jqa~%<5OZwo9Wj2+s ze42@(&)w8GJI644^yR89hxZ(-dtWtUDmTi{9a;Q=Tj08@ENNG{dYrc7^iJ#kT2xX{ z`}%IDd&!kq-E9{d#NXT_f9gJMarbi>Kfkc1tvE0RAQu~p)-Rh?!CPxSGIRJ%gD!h^ zqsQ8^l(d3W<%)`tt~h!tW1^&l*0}4qokeK^`l& zklTKb^%F$o+h7u+8jkE(zhBy!qC=HkuU60O(xomV{l;g2Qk`mDhvr?@t-15IvBya|s4ershN5YIcE&b8wf9{=O0zas z#vM#3Ejm+j2Fe)`edn{q6@yXttEcgH-|r3O8Qe0bkB!+IhfG%VYbn7J@= z>pR6zxjFHU&_gaxwl&^;yeRWP>d`5a{{3T0N&5eaP#NEK%G~^wO*3I=EFF4}it27P zsF#_eZjsqEab~lQvm3R}ZbE^~jd)$_hABU{V#h5bR_GwVT$lH~ zRBsqAd0)EYhxcCd*o4jr%}R1a6(63Qx8SSQqnocIF7?r}Vd_`@c@I5w#Vlg;>$7%~ zw>PW2e1{b6L%o!5D$9RzqD70+q7@an5J_)6-+4U$$2MYR_T{sm);{NrD$4kE^y;#g zb7u)x4m(;$z26Z1_{7SwHANq)ryi5c48=cunR#47YS}GNwrco;x_6EGq>!rbJb632 zpkLw0XVJ=Q3*PDf`Eq+*4)qej1YAO35EWs&3KbbL02b*K!IC(+s&kZ0L)} zo0g{U>Z(tku|wVV=DKdItnP~OEo-`el=M92Ju%39$HUc9IM@8+er!D$Uq)hjgO=&t|X5ZOK@6aQ9{0j6*D!#km-@g2|+pYf(b8i_| zW!H9%3J3zy9Scwq>F!2J36U=8l5UU&Nd*=nNSAasNVhEM?v`%phHozK=l%|`G)_3 zKC^m~D;_i-N!*rXpxv4x&{yQsk{es~)y?tXIE0NWn0&x`tGEB_JJyp#CyFwWG%U8h zpHXF>hwS_AYAHW-Nc_s)NU|EMVDkzr-@8dM+2s;vBSGw_?hMB_95=QW@lQ;`LR)J5 zv~<7@d&$bj8>DS!SdI*PC*HVR$(s$p3KjicRuB!d!z?80=*gq-eB zQY0Bx5N)D<=$j7Obg}NE?fXMKnpZJ-6Zo^D?k6}lpEq6& z#fr-$3(>r|a(i{P%db={`RH2UtfH{*A?)PpsGPs)6Vr{qxe#-cCWijAWD7m^cJ>vY zE#`G~;uw&&8BZSVB(! zLni@>U4P?X+dpO>0l0s{#gVBkG$-+_pxi4NZQr>>YU$4OS&dmXTxBpfYA{n-+~W;;qUi*Gn!dN%E#vc5l9y>Od=2F*wI z4}OXosPmCky!=B)zI)TA!*iVBFmo-Ej8>~HU01cIS%BL`Ov+(`y6lqa7U_`gl@cOQ zh65#ylt(oaw($)zd;C3iL84t&lb(s$=Ep>24lXa$A)0fU{+Z%*dqr65&jSl+Zv|h* zj_d*MG_AuBmKfyR`!ZI`q|!2>G&Nh}L7Z#{c&y5Vy%!KD^u`VlON z&G1!rP%Lt1;@+GF{)Am3^-A^`1iNVpI>0LaJ`aDA)Q)bicyN$tQsqNkGBXTRHGUQK zRM*oPnDMQ@(e*%Jdb}J(<)ibH$)0JN;Z881H$cjGdFtRxiv;PI?INMH?|iT?)f}jI zQhi+*q~b;$OcQze`2Krd93zdg>925Cgv>JY4hHK>2L$!x=7_xE%tyQsGN^uw*QWus z&rdz?UgZtfBOE_GcKz|vlNZ6;Drw<~{aRomjE89W7 zhtNHx*CoSh2%H_|obB<*P@2JV7d|~+JF@jX(U8bzlFDolB8cyg_Y{u4dhZaN0)+B$ zt1h1?oA+4aLod4$s2?rqmm=cj%4DZc*{wcz@&1R3LLQTUdtWDlHYto`{{6%F{o&RtwL=jTCW>L`>ZZqBIOfU}K4=G^HP)Z>7ccGU~t#oB7UkR`uN8 zI#Sj#q6D7sGL+gzTpKa)dO%Bcg+lgMM6x>2F=3S3F$XlpD>fyb>k=vB}`M=9bB79A; ztQIWBgveem5rTc3L1Bp<*3337MVZ-J9%T-zu|b4UEyXWmrbv5FEpat^Q?DJ4w=?7% z2tijZM))7X`lMd6vX54M1B@&iq-KrNEqB|0h(J_A^!*~eA8n0u=&>tH2^HHM4n%IF zMD_Jl>GUTipT`{nl;?YEPQQ-B$&>@wE#qyFu$7mlTBGrUEf8U?!9kqmX6w%}w92Gx z`gZhg0snh>1LA;*y+WucjnIn$psaoj|5jE|dyDoKnn4+*ydd z>cK*nT{2Sj0#Z}sd+xG~X@M)<#`d=(?rX)Sb)Lrp9+S+G*FS6-BH5cdw<_1F&|q+a z5(cq08ijh>F2PNQ{pVUV{HK3rvG_bsa9-S15EteswtjQU{j(RyUvM?8X3k^4#je|y^e?JhC0P&)YdNFt6U0Kj9hKjHcY55Po+Q^ITLma@TB zJhwU%O*9cw;9d6ful}U90Z2X0N-krD;hk;=SC%9l zvt+{WO#!}{c&YjyH2^Oo_{yv;TM%60U+mJ<1Wr2<1Z}t;c-Jcfm$R4yRMUk>Gm-dj z^Dx0z4KGc$;EaARaR8Ps#+#F7!wb|u;O|tpg+l;b&OQ_T$Cf~+9uIz!7%lt~coT7n z%xVP$vaw8`{QMqp@514|q4byAi#IxY#1vkp!Z=WVb$!xOuLbXwYlUm9^Xx@#(n33U zD`$@nz7B`|=%e9~rPfRL^CD`5L%B~0zHl=?ZYPFIUVdu19ma3b6AgY0ll-q5OX9cYR!_3q(fn#o! z@Rk$3tB1dh1GqTmgOeOz>STHBAqIY!*DL?^XpL7(Q(h{}_SVh(oXJ1&)D3ItaRY?1 zz#9k&#Lm?5H(u%g#Hs~0fPrZuKAw$6(jH3$L~(@>l9iXptCdSH4{e;m$&LJnG-2@a zJ(*Wri&@MdZwtp5yviui$6oC#+eX0=wTQ5iR2PduT+o3OO1*rOfGA+jB5(C6 zP%YkdyVIVS(ZGan!jY}P@>k#5&E2i126wKGAizFeGh)tu2Q8v_M*0WO-x%r5=lJJf zysfLYZrbn4#&aKOGHXNv0)eR9f>Aa2*BmU`$;U6$;ngh!LN*Sz`WYULAGwpx=#ZW4 zqAIIM&?{$oCXH4=b;L`XQz_HVAkS-RRQ3j)gp@?rCaG|C)IxSi!T#px(rK>glK3}` z?8gsi_&YQS7PH=02hjE50#>SaDhTrX<HGcfe-&lBjywt|u__pdaA-4aB zdW#eP8PaJyqSPJJl<{nepxaP}l9X%0vpSLHDfZa+%}wV3V1LmXDLLI$FUk@v`_&eXqXaX4Ij<%N(eS!oT2nh zdrr`|V(F&YCo}uL1Un{ApfK9k=auBmTbJ2x$uwmekDe=hBa5g%Q@M{M9*w%AbJBolRPdVyF`M46Q($235N-{6oFdXYz%U`}|?=zFp3`#Ipw06rz zltKVMH;CR_1FETpK%)^a>MK%XJ^e8Ro9da*%|(viN<6#qZ@_^BIP{~dv%PC7nKLfP zy~{F_8ODClBe#R}RgF{o%M-M!Z9$CJ%0A(bVUY%Bp?9?om(N6)l~9VWL7YPy$zEoG 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 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state_types.png b/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state_types.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f91a6093e0099f409101276833e80bdc223f78 GIT binary patch literal 133747 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 T?XrE0gO|T|pjV|w#G(HHz@)&x literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/ocap.md b/versioned_docs/version-0.46/develop/advanced-concepts/ocap.md new file mode 100644 index 000000000..c4dec3106 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/ocap.md @@ -0,0 +1,78 @@ + + +# Object-Capability Model + +## Intro + +When thinking about security, it is good to start with a specific threat model. Our threat model is the following: + +> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +The Cosmos SDK is designed to address this threat by being the +foundation of an object capability system. + +> The structural properties of object capability systems favor +> modularity in code design and ensure reliable encapsulation in +> code implementation. +> +> These structural properties facilitate the analysis of some +> security properties of an object-capability program or operating +> system. Some of these — in particular, information flow properties +> — can be analyzed at the level of object references and +> connectivity, independent of any knowledge or analysis of the code +> that determines the behavior of the objects. +> +> As a consequence, these security properties can be established +> and maintained in the presence of new objects that contain unknown +> and possibly malicious code. +> +> These structural properties stem from the two rules governing +> access to existing objects: +> +> 1. An object A can send a message to B only if object A holds a +> reference to B. +> 2. An object A can obtain a reference to C only +> if object A receives a message containing a reference to C. As a +> consequence of these two rules, an object can obtain a reference +> to another object only through a preexisting chain of references. +> In short, "Only connectivity begets connectivity." + +For an introduction to object-capabilities, see this [Wikipedia article](https://en.wikipedia.org/wiki/Object-capability_model). + +## Ocaps in practice + +The idea is to only reveal what is necessary to get the work done. + +For example, the following code snippet violates the object capabilities +principle: + +```go +type AppAccount struct {...} +account := &AppAccount{ + Address: pub.Address(), + Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)}, +} +sumValue := externalModule.ComputeSumValue(account) +``` + +The method `ComputeSumValue` implies a pure function, yet the implied +capability of accepting a pointer value is the capability to modify that +value. The preferred method signature should take a copy instead. + +```go +sumValue := externalModule.ComputeSumValue(*account) +``` + +In the Cosmos SDK, you can see the application of this principle in simapp. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L258-L283 + +The following diagram shows the current dependencies between keepers. + +![Keeper dependencies](../uml/svg/keeper_dependencies.svg) + +## Next {hide} + +Learn about the [`runTx` middleware](./runtx_middleware.md) {hide} diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/01-tx-lifecycle.md b/versioned_docs/version-0.46/develop/high-level-concepts/01-tx-lifecycle.md new file mode 100644 index 000000000..afaa2834d --- /dev/null +++ b/versioned_docs/version-0.46/develop/high-level-concepts/01-tx-lifecycle.md @@ -0,0 +1,264 @@ +--- +sidebar_position: 1 +dislayed_sidebar: developSidebar +--- + +# Transaction Lifecycle + +:::note Synopsis +This document describes the lifecycle of a transaction from creation to committed state changes. Transaction definition is described in a [different doc](../advanced-concepts/01-transactions.md). The transaction is referred to as `Tx`. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](00-overview-app.md) +::: + +## Creation + +### Transaction Creation + +One of the main application interfaces is the command-line interface. The transaction `Tx` can be created by the user inputting a command in the following format from the [command-line](../advanced-concepts/07-cli.md), providing the type of transaction in `[command]`, arguments in `[args]`, and configurations such as gas prices in `[flags]`: + +```bash +[appname] tx [command] [args] [flags] +``` + +This command automatically **creates** the transaction, **signs** it using the account's private key, and **broadcasts** it to the specified peer node. + +There are several required and optional flags for transaction creation. The `--from` flag specifies which [account](03-accounts.md) the transaction is originating from. For example, if the transaction is sending coins, the funds are drawn from the specified `from` address. + +#### Gas and Fees + +Additionally, there are several [flags](../advanced-concepts/07-cli.md) users can use to indicate how much they are willing to pay in [fees](04-gas-fees.md): + +* `--gas` refers to how much [gas](04-gas-fees.md), which represents computational resources, `Tx` consumes. Gas is dependent on the transaction and is not precisely calculated until execution, but can be estimated by providing `auto` as the value for `--gas`. +* `--gas-adjustment` (optional) can be used to scale `gas` up in order to avoid underestimating. For example, users can specify their gas adjustment as 1.5 to use 1.5 times the estimated gas. +* `--gas-prices` specifies how much the user is willing to pay per unit of gas, which can be one or multiple denominations of tokens. For example, `--gas-prices=0.025uatom, 0.025upho` means the user is willing to pay 0.025uatom AND 0.025upho per unit of gas. +* `--fees` specifies how much in fees the user is willing to pay in total. +* `--timeout-height` specifies a block timeout height to prevent the tx from being committed past a certain height. + +The ultimate value of the fees paid is equal to the gas multiplied by the gas prices. In other words, `fees = ceil(gas * gasPrices)`. Thus, since fees can be calculated using gas prices and vice versa, the users specify only one of the two. + +Later, validators decide whether or not to include the transaction in their block by comparing the given or calculated `gas-prices` to their local `min-gas-prices`. `Tx` is rejected if its `gas-prices` is not high enough, so users are incentivized to pay more. + +#### CLI Example + +Users of the application `app` can enter the following command into their CLI to generate a transaction to send 1000uatom from a `senderAddress` to a `recipientAddress`. The command specifies how much gas they are willing to pay: an automatic estimate scaled up by 1.5 times, with a gas price of 0.025uatom per unit gas. + +```bash +appd tx send 1000uatom --from --gas auto --gas-adjustment 1.5 --gas-prices 0.025uatom +``` + +#### Other Transaction Creation Methods + +The command-line is an easy way to interact with an application, but `Tx` can also be created using a [gRPC or REST interface](../advanced-concepts/09-grpc_rest.md) or some other entry point defined by the application developer. From the user's perspective, the interaction depends on the web interface or wallet they are using (e.g. creating `Tx` using [Lunie.io](https://lunie.io/#/) and signing it with a Ledger Nano S). + +## Addition to Mempool + +Each full-node (running CometBFT) that receives a `Tx` sends an [ABCI message](https://docs.cometbft.com/v0.37/spec/p2p/messages/), +`CheckTx`, to the application layer to check for validity, and receives an `abci.ResponseCheckTx`. If the `Tx` passes the checks, it is held in the node's +[**Mempool**](https://docs.cometbft.com/v0.37/spec/p2p/messages/mempool/), an in-memory pool of transactions unique to each node, pending inclusion in a block - honest nodes discard a `Tx` if it is found to be invalid. Prior to consensus, nodes continuously check incoming transactions and gossip them to their peers. + +### Types of Checks + +The full-nodes perform stateless, then stateful checks on `Tx` during `CheckTx`, with the goal to +identify and reject an invalid transaction as early on as possible to avoid wasted computation. + +**_Stateless_** checks do not require nodes to access state - light clients or offline nodes can do +them - and are thus less computationally expensive. Stateless checks include making sure addresses +are not empty, enforcing nonnegative numbers, and other logic specified in the definitions. + +**_Stateful_** checks validate transactions and messages based on a committed state. Examples +include checking that the relevant values exist and can be transacted with, the address +has sufficient funds, and the sender is authorized or has the correct ownership to transact. +At any given moment, full-nodes typically have [multiple versions](../advanced-concepts/00-baseapp.md#state-updates) +of the application's internal state for different purposes. For example, nodes execute state +changes while in the process of verifying transactions, but still need a copy of the last committed +state in order to answer queries - they should not respond using state with uncommitted changes. + +In order to verify a `Tx`, full-nodes call `CheckTx`, which includes both _stateless_ and _stateful_ +checks. Further validation happens later in the [`DeliverTx`](#delivertx) stage. `CheckTx` goes +through several steps, beginning with decoding `Tx`. + +### Decoding + +When `Tx` is received by the application from the underlying consensus engine (e.g. CometBFT ), it is still in its [encoded](../advanced-concepts/06-encoding.md) `[]byte` form and needs to be unmarshaled in order to be processed. Then, the [`runTx`](../advanced-concepts/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) function is called to run in `runTxModeCheck` mode, meaning the function runs all checks but exits before executing messages and writing state changes. + +### ValidateBasic (deprecated) + +Messages ([`sdk.Msg`](../advanced-concepts/01-transactions.md#messages)) are extracted from transactions (`Tx`). The `ValidateBasic` method of the `sdk.Msg` interface implemented by the module developer is run for each transaction. +To discard obviously invalid messages, the `BaseApp` type calls the `ValidateBasic` method very early in the processing of the message in the [`CheckTx`](../advanced-concepts/00-baseapp.md#checktx) and [`DeliverTx`](../advanced-concepts/00-baseapp.md#delivertx) transactions. +`ValidateBasic` can include only **stateless** checks (the checks that do not require access to the state). + +:::warning +The `ValidateBasic` method on messages has been deprecated in the newest versions in favor of validating messages directly in their respective [`Msg` services](../../integrate/building-modules/03-msg-services.md#Validation). + +Read [RFC 001](https://docs.cosmos.network/main/rfc/rfc-001-tx-validation) for more details. +::: + +:::note +`BaseApp` still calls `ValidateBasic` on messages that implements that method for backwards compatibility. +::: + +#### Guideline + +`ValidateBasic` should not be used anymore. Message validation should be performed in the `Msg` service when [handling a message](../../integrate/building-modules/03-msg-services#Validation) in a module Msg Server. + +### AnteHandler + +After the ValidateBasic checks, the `AnteHandler`s are run. Technically, they are optional, but in practice, they are very often present to perform signature verification, gas calculation, fee deduction and other core operations related to blockchain transactions. + +A copy of the cached context is provided to the `AnteHandler`, which performs limited checks specified for the transaction type. Using a copy allows the `AnteHandler` to do stateful checks for `Tx` without modifying the last committed state, and revert back to the original if the execution fails. + +For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module `AnteHandler` checks and increments sequence numbers, checks signatures and account numbers, and deducts fees from the first signer of the transaction - all state changes are made using the `checkState`. + +### Gas + +The [`Context`](../advanced-concepts/02-context.md), which keeps a `GasMeter` that tracks how much gas is used during the execution of `Tx`, is initialized. The user-provided amount of gas for `Tx` is known as `GasWanted`. If `GasConsumed`, the amount of gas consumed during execution, ever exceeds `GasWanted`, the execution stops and the changes made to the cached copy of the state are not committed. Otherwise, `CheckTx` sets `GasUsed` equal to `GasConsumed` and returns it in the result. After calculating the gas and fee values, validator-nodes check that the user-specified `gas-prices` is greater than their locally defined `min-gas-prices`. + +### Discard or Addition to Mempool + +If at any point during `CheckTx` the `Tx` fails, it is discarded and the transaction lifecycle ends +there. Otherwise, if it passes `CheckTx` successfully, the default protocol is to relay it to peer +nodes and add it to the Mempool so that the `Tx` becomes a candidate to be included in the next block. + +The **mempool** serves the purpose of keeping track of transactions seen by all full-nodes. +Full-nodes keep a **mempool cache** of the last `mempool.cache_size` transactions they have seen, as a first line of +defense to prevent replay attacks. Ideally, `mempool.cache_size` is large enough to encompass all +of the transactions in the full mempool. If the mempool cache is too small to keep track of all +the transactions, `CheckTx` is responsible for identifying and rejecting replayed transactions. + +Currently existing preventative measures include fees and a `sequence` (nonce) counter to distinguish +replayed transactions from identical but valid ones. If an attacker tries to spam nodes with many +copies of a `Tx`, full-nodes keeping a mempool cache reject all identical copies instead of running +`CheckTx` on them. Even if the copies have incremented `sequence` numbers, attackers are +disincentivized by the need to pay fees. + +Validator nodes keep a mempool to prevent replay attacks, just as full-nodes do, but also use it as +a pool of unconfirmed transactions in preparation of block inclusion. Note that even if a `Tx` +passes all checks at this stage, it is still possible to be found invalid later on, because +`CheckTx` does not fully validate the transaction (that is, it does not actually execute the messages). + +## Inclusion in a Block + +Consensus, the process through which validator nodes come to agreement on which transactions to +accept, happens in **rounds**. Each round begins with a proposer creating a block of the most +recent transactions and ends with **validators**, special full-nodes with voting power responsible +for consensus, agreeing to accept the block or go with a `nil` block instead. Validator nodes +execute the consensus algorithm, such as [CometBFT](https://docs.cometbft.com/v0.37/spec/consensus/), +confirming the transactions using ABCI requests to the application, in order to come to this agreement. + +The first step of consensus is the **block proposal**. One proposer amongst the validators is chosen +by the consensus algorithm to create and propose a block - in order for a `Tx` to be included, it +must be in this proposer's mempool. + +## State Changes + +The next step of consensus is to execute the transactions to fully validate them. All full-nodes +that receive a block proposal from the correct proposer execute the transactions by calling the ABCI functions +[`BeginBlock`](00-overview-app.md#beginblocker-and-endblocker), `DeliverTx` for each transaction, +and [`EndBlock`](00-overview-app.md#beginblocker-and-endblocker). While each full-node runs everything +locally, this process yields a single, unambiguous result, since the messages' state transitions are deterministic and transactions are +explicitly ordered in the block proposal. + +```text + ----------------------- + |Receive Block Proposal| + ----------------------- + | + v + ----------------------- + | BeginBlock | + ----------------------- + | + v + ----------------------- + | DeliverTx(tx0) | + | DeliverTx(tx1) | + | DeliverTx(tx2) | + | DeliverTx(tx3) | + | . | + | . | + | . | + ----------------------- + | + v + ----------------------- + | EndBlock | + ----------------------- + | + v + ----------------------- + | Consensus | + ----------------------- + | + v + ----------------------- + | Commit | + ----------------------- +``` + +### DeliverTx + +The `DeliverTx` ABCI function defined in [`BaseApp`](../advanced-concepts/00-baseapp.md) does the bulk of the +state transitions: it is run for each transaction in the block in sequential order as committed +to during consensus. Under the hood, `DeliverTx` is almost identical to `CheckTx` but calls the +[`runTx`](../advanced-concepts/00-baseapp.md#runtx) function in deliver mode instead of check mode. +Instead of using their `checkState`, full-nodes use `deliverState`: + +* **Decoding:** Since `DeliverTx` is an ABCI call, `Tx` is received in the encoded `[]byte` form. + Nodes first unmarshal the transaction, using the [`TxConfig`](00-overview-app#register-codec) defined in the app, then call `runTx` in `runTxModeDeliver`, which is very similar to `CheckTx` but also executes and writes state changes. + +* **Checks and `AnteHandler`:** Full-nodes call `validateBasicMsgs` and `AnteHandler` again. This second check + happens because they may not have seen the same transactions during the addition to Mempool stage + and a malicious proposer may have included invalid ones. One difference here is that the + `AnteHandler` does not compare `gas-prices` to the node's `min-gas-prices` since that value is local + to each node - differing values across nodes yield nondeterministic results. + +* **`MsgServiceRouter`:** After `CheckTx` exits, `DeliverTx` continues to run + [`runMsgs`](../advanced-concepts/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) to fully execute each `Msg` within the transaction. + Since the transaction may have messages from different modules, `BaseApp` needs to know which module + to find the appropriate handler. This is achieved using `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). + For `LegacyMsg` routing, the `Route` function is called via the [module manager](../../integrate/building-modules/01-module-manager.md) to retrieve the route name and find the legacy [`Handler`](../../integrate/building-modules/03-msg-services.md#handler-type) within the module. + +* **`Msg` service:** Protobuf `Msg` service is responsible for executing each message in the `Tx` and causes state transitions to persist in `deliverTxState`. + +* **PostHandlers:** [`PostHandler`](../advanced-concepts/00-baseapp.md#posthandler)s run after the execution of the message. If they fail, the state change of `runMsgs`, as well of `PostHandlers`, are both reverted. + +* **Gas:** While a `Tx` is being delivered, a `GasMeter` is used to keep track of how much + gas is being used; if execution completes, `GasUsed` is set and returned in the + `abci.ResponseDeliverTx`. If execution halts because `BlockGasMeter` or `GasMeter` has run out or something else goes + wrong, a deferred function at the end appropriately errors or panics. + +If there are any failed state changes resulting from a `Tx` being invalid or `GasMeter` running out, +the transaction processing terminates and any state changes are reverted. Invalid transactions in a +block proposal cause validator nodes to reject the block and vote for a `nil` block instead. + +### Commit + +The final step is for nodes to commit the block and state changes. Validator nodes +perform the previous step of executing state transitions in order to validate the transactions, +then sign the block to confirm it. Full nodes that are not validators do not +participate in consensus - i.e. they cannot vote - but listen for votes to understand whether or +not they should commit the state changes. + +When they receive enough validator votes (2/3+ _precommits_ weighted by voting power), full nodes commit to a new block to be added to the blockchain and +finalize the state transitions in the application layer. A new state root is generated to serve as +a merkle proof for the state transitions. Applications use the [`Commit`](../advanced-concepts/00-baseapp.md#commit) +ABCI method inherited from [Baseapp](../advanced-concepts/00-baseapp.md); it syncs all the state transitions by +writing the `deliverState` into the application's internal state. As soon as the state changes are +committed, `checkState` starts afresh from the most recently committed state and `deliverState` +resets to `nil` in order to be consistent and reflect the changes. + +Note that not all blocks have the same number of transactions and it is possible for consensus to +result in a `nil` block or one with none at all. In a public blockchain network, it is also possible +for validators to be **byzantine**, or malicious, which may prevent a `Tx` from being committed in +the blockchain. Possible malicious behaviors include the proposer deciding to censor a `Tx` by +excluding it from the block or a validator voting against the block. + +At this point, the transaction lifecycle of a `Tx` is over: nodes have verified its validity, +delivered it by executing its state changes, and committed those changes. The `Tx` itself, +in `[]byte` form, is stored in a block and appended to the blockchain. diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/03-accounts.md b/versioned_docs/version-0.46/develop/high-level-concepts/03-accounts.md new file mode 100644 index 000000000..15911cf5b --- /dev/null +++ b/versioned_docs/version-0.46/develop/high-level-concepts/03-accounts.md @@ -0,0 +1,168 @@ +--- +sidebar_position: 1 +dislayed_sidebar: developSidebar +--- + +# Accounts + +:::note Synopsis +This document describes the in-built account and public key system of the Cosmos SDK. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](00-overview-app.md) + +::: + +## Account Definition + +In the Cosmos SDK, an _account_ designates a pair of _public key_ `PubKey` and _private key_ `PrivKey`. The `PubKey` can be derived to generate various `Addresses`, which are used to identify users (among other parties) in the application. `Addresses` are also associated with [`message`s](../../integrate/building-modules/02-messages-and-queries.md#messages) to identify the sender of the `message`. The `PrivKey` is used to generate [digital signatures](#keys-accounts-addresses-and-signatures) to prove that an `Address` associated with the `PrivKey` approved of a given `message`. + +For HD key derivation the Cosmos SDK uses a standard called [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). The BIP32 allows users to create an HD wallet (as specified in [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)) - a set of accounts derived from an initial secret seed. A seed is usually created from a 12- or 24-word mnemonic. A single seed can derive any number of `PrivKey`s using a one-way cryptographic function. Then, a `PubKey` can be derived from the `PrivKey`. Naturally, the mnemonic is the most sensitive information, as private keys can always be re-generated if the mnemonic is preserved. + +```text + Account 0 Account 1 Account 2 + ++------------------+ +------------------+ +------------------+ +| | | | | | +| Address 0 | | Address 1 | | Address 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Public key 0 | | Public key 1 | | Public key 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Private key 0 | | Private key 1 | | Private key 2 | +| ^ | | ^ | | ^ | ++------------------+ +------------------+ +------------------+ + | | | + | | | + | | | + +--------------------------------------------------------------------+ + | + | + +---------+---------+ + | | + | Master PrivKey | + | | + +-------------------+ + | + | + +---------+---------+ + | | + | Mnemonic (Seed) | + | | + +-------------------+ +``` + +In the Cosmos SDK, keys are stored and managed by using an object called a [`Keyring`](#keyring). + +## Keys, accounts, addresses, and signatures + +The principal way of authenticating a user is done using [digital signatures](https://en.wikipedia.org/wiki/Digital_signature). Users sign transactions using their own private key. Signature verification is done with the associated public key. For on-chain signature verification purposes, we store the public key in an `Account` object (alongside other data required for a proper transaction validation). + +In the node, all data is stored using Protocol Buffers serialization. + +The Cosmos SDK supports the following digital key schemes for creating digital signatures: + +* `secp256k1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256k1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256k1/secp256k1.go). +* `secp256r1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256r1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256r1/pubkey.go), +* `tm-ed25519`, as implemented in the [Cosmos SDK `crypto/keys/ed25519` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/ed25519/ed25519.go). This scheme is supported only for the consensus validation. + +| | Address length in bytes | Public key length in bytes | Used for transaction authentication | Used for consensus (cometbft) | +| :----------: | :---------------------: | :------------------------: | :---------------------------------: | :-----------------------------: | +| `secp256k1` | 20 | 33 | yes | no | +| `secp256r1` | 32 | 33 | yes | no | +| `tm-ed25519` | -- not used -- | 32 | no | yes | + +## Addresses + +`Addresses` and `PubKey`s are both public information that identifies actors in the application. `Account` is used to store authentication information. The basic account implementation is provided by a `BaseAccount` object. + +Each account is identified using `Address` which is a sequence of bytes derived from a public key. In the Cosmos SDK, we define 3 types of addresses that specify a context where an account is used: + +* `AccAddress` identifies users (the sender of a `message`). +* `ValAddress` identifies validator operators. +* `ConsAddress` identifies validator nodes that are participating in consensus. Validator nodes are derived using the **`ed25519`** curve. + +These types implement the `Address` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L108-L124 +``` + +Address construction algorithm is defined in [ADR-28](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-028-public-key-addresses.md). +Here is the standard way to obtain an account address from a `pub` public key: + +```go +sdk.AccAddress(pub.Address().Bytes()) +``` + +Of note, the `Marshal()` and `Bytes()` method both return the same raw `[]byte` form of the address. `Marshal()` is required for Protobuf compatibility. + +For user interaction, addresses are formatted using [Bech32](https://en.bitcoin.it/wiki/Bech32) and implemented by the `String` method. The Bech32 method is the only supported format to use when interacting with a blockchain. The Bech32 human-readable part (Bech32 prefix) is used to denote an address type. Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L281-L295 +``` + +| | Address Bech32 Prefix | +| ------------------ | --------------------- | +| Accounts | cosmos | +| Validator Operator | cosmosvaloper | +| Consensus Nodes | cosmosvalcons | + +### Public Keys + +Public keys in Cosmos SDK are defined by `cryptotypes.PubKey` interface. Since public keys are saved in a store, `cryptotypes.PubKey` extends the `proto.Message` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/types/types.go#L8-L17 +``` + +A compressed format is used for `secp256k1` and `secp256r1` serialization. + +* The first byte is a `0x02` byte if the `y`-coordinate is the lexicographically largest of the two associated with the `x`-coordinate. +* Otherwise the first byte is a `0x03`. + +This prefix is followed by the `x`-coordinate. + +Public Keys are not used to reference accounts (or users) and in general are not used when composing transaction messages (with few exceptions: `MsgCreateValidator`, `Validator` and `Multisig` messages). +For user interactions, `PubKey` is formatted using Protobufs JSON ([ProtoMarshalJSON](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/json.go#L14-L34) function). Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/output.go#L23-L39 +``` + +## Keyring + +A `Keyring` is an object that stores and manages accounts. In the Cosmos SDK, a `Keyring` implementation follows the `Keyring` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L54-L101 +``` + +The default implementation of `Keyring` comes from the third-party [`99designs/keyring`](https://github.com/99designs/keyring) library. + +A few notes on the `Keyring` methods: + +* `Sign(uid string, msg []byte) ([]byte, types.PubKey, error)` strictly deals with the signature of the `msg` bytes. You must prepare and encode the transaction into a canonical `[]byte` form. Because protobuf is not deterministic, it has been decided in [ADR-020](../../integrate/architecture/adr-020-protobuf-transaction-encoding.md) that the canonical `payload` to sign is the `SignDoc` struct, deterministically encoded using [ADR-027](../../integrate/architecture/adr-027-deterministic-protobuf-serialization.md). Note that signature verification is not implemented in the Cosmos SDK by default, it is deferred to the [`anteHandler`](../advanced-concepts/00-baseapp.md#antehandler). + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 +``` + +* `NewAccount(uid, mnemonic, bip39Passphrase, hdPath string, algo SignatureAlgo) (*Record, error)` creates a new account based on the [`bip44 path`](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) and persists it on disk. The `PrivKey` is **never stored unencrypted**, instead it is [encrypted with a passphrase](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/armor.go) before being persisted. In the context of this method, the key type and sequence number refer to the segment of the BIP44 derivation path (for example, `0`, `1`, `2`, ...) that is used to derive a private and a public key from the mnemonic. Using the same mnemonic and derivation path, the same `PrivKey`, `PubKey` and `Address` is generated. The following keys are supported by the keyring: + +* `secp256k1` +* `ed25519` + +* `ExportPrivKeyArmor(uid, encryptPassphrase string) (armor string, err error)` exports a private key in ASCII-armored encrypted format using the given passphrase. You can then either import the private key again into the keyring using the `ImportPrivKey(uid, armor, passphrase string)` function or decrypt it into a raw private key using the `UnarmorDecryptPrivKey(armorStr string, passphrase string)` function. From 4fcfedc123fca56d8b685d093a033607927486c6 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Tue, 18 Jul 2023 14:57:28 +0200 Subject: [PATCH 21/23] wip --- .../develop/advanced-concepts/04-store.md | 2 +- .../develop/advanced-concepts/ocap.md | 78 ------------------- 2 files changed, 1 insertion(+), 79 deletions(-) delete mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/ocap.md diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md b/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md index 3fab28cf5..291c2551f 100644 --- a/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md +++ b/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md @@ -76,7 +76,7 @@ The `Committer` is an interface that defines methods to persist changes to disk: +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L21-L28 -The `CommitID` is a deterministic commit of the state tree. Its hash is returned to the underlying consensus engine and stored in the block header. Note that commit store interfaces exist for various purposes, one of which is to make sure not every object can commit the store. As part of the [object-capabilities model](./ocap.md) of the Cosmos SDK, only `baseapp` should have the ability to commit stores. For example, this is the reason why the `ctx.KVStore()` method by which modules typically access stores returns a `KVStore` and not a `CommitKVStore`. +The `CommitID` is a deterministic commit of the state tree. Its hash is returned to the underlying consensus engine and stored in the block header. Note that commit store interfaces exist for various purposes, one of which is to make sure not every object can commit the store. As part of the [object-capabilities model](./10-ocap.md) of the Cosmos SDK, only `baseapp` should have the ability to commit stores. For example, this is the reason why the `ctx.KVStore()` method by which modules typically access stores returns a `KVStore` and not a `CommitKVStore`. The Cosmos SDK comes with many types of stores, the most used being [`CommitMultiStore`](#multistore), [`KVStore`](#kvstore) and [`GasKv` store](#gaskv-store). [Other types of stores](#other-stores) include `Transient` and `TraceKV` stores. diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/ocap.md b/versioned_docs/version-0.46/develop/advanced-concepts/ocap.md deleted file mode 100644 index c4dec3106..000000000 --- a/versioned_docs/version-0.46/develop/advanced-concepts/ocap.md +++ /dev/null @@ -1,78 +0,0 @@ - - -# Object-Capability Model - -## Intro - -When thinking about security, it is good to start with a specific threat model. Our threat model is the following: - -> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. - -The Cosmos SDK is designed to address this threat by being the -foundation of an object capability system. - -> The structural properties of object capability systems favor -> modularity in code design and ensure reliable encapsulation in -> code implementation. -> -> These structural properties facilitate the analysis of some -> security properties of an object-capability program or operating -> system. Some of these — in particular, information flow properties -> — can be analyzed at the level of object references and -> connectivity, independent of any knowledge or analysis of the code -> that determines the behavior of the objects. -> -> As a consequence, these security properties can be established -> and maintained in the presence of new objects that contain unknown -> and possibly malicious code. -> -> These structural properties stem from the two rules governing -> access to existing objects: -> -> 1. An object A can send a message to B only if object A holds a -> reference to B. -> 2. An object A can obtain a reference to C only -> if object A receives a message containing a reference to C. As a -> consequence of these two rules, an object can obtain a reference -> to another object only through a preexisting chain of references. -> In short, "Only connectivity begets connectivity." - -For an introduction to object-capabilities, see this [Wikipedia article](https://en.wikipedia.org/wiki/Object-capability_model). - -## Ocaps in practice - -The idea is to only reveal what is necessary to get the work done. - -For example, the following code snippet violates the object capabilities -principle: - -```go -type AppAccount struct {...} -account := &AppAccount{ - Address: pub.Address(), - Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)}, -} -sumValue := externalModule.ComputeSumValue(account) -``` - -The method `ComputeSumValue` implies a pure function, yet the implied -capability of accepting a pointer value is the capability to modify that -value. The preferred method signature should take a copy instead. - -```go -sumValue := externalModule.ComputeSumValue(*account) -``` - -In the Cosmos SDK, you can see the application of this principle in simapp. - -+++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L258-L283 - -The following diagram shows the current dependencies between keepers. - -![Keeper dependencies](../uml/svg/keeper_dependencies.svg) - -## Next {hide} - -Learn about the [`runTx` middleware](./runtx_middleware.md) {hide} From 8e6deda6a5dadc276ebfd8ab46c097cacba75361 Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Thu, 20 Jul 2023 14:07:20 +0200 Subject: [PATCH 22/23] Update versioning to have each version file in repo --- custom-version-plugin.js | 78 - docs/integrate/_category_.json | 2 +- .../building-modules/transaction_flow.svg | 48 + docs/integrate/libraries/02-collections.md | 2 +- docusaurus.config.js | 8 - version_config.json | 31 - .../develop/advanced-concepts/README.md | 28 + .../develop/advanced-concepts/baseapp.md | 399 ++++ .../baseapp_state-begin_block.png | Bin 0 -> 20565 bytes .../baseapp_state-checktx.png | Bin 0 -> 82308 bytes .../baseapp_state-commit.png | Bin 0 -> 47662 bytes .../baseapp_state-deliver_tx.png | Bin 0 -> 59007 bytes .../baseapp_state-initchain.png | Bin 0 -> 32800 bytes .../advanced-concepts/baseapp_state_types.png | Bin 0 -> 133747 bytes .../develop/advanced-concepts/cli.md | 156 ++ .../develop/advanced-concepts/context.md | 104 + .../develop/advanced-concepts/encoding.md | 261 ++ .../develop/advanced-concepts/events.md | 137 ++ .../develop/advanced-concepts/grpc_rest.md | 116 + .../advanced-concepts/keeper_dependencies.svg | 102 + .../develop/advanced-concepts/node.md | 76 + .../develop/advanced-concepts/ocap.md | 79 + .../advanced-concepts/runtx_middleware.md | 73 + .../develop/advanced-concepts/simulation.md | 101 + .../develop/advanced-concepts/store.md | 257 ++ .../develop/advanced-concepts/telemetry.md | 145 ++ .../advanced-concepts/transaction_flow.svg | 48 + .../develop/advanced-concepts/transactions.md | 159 ++ .../develop/advanced-concepts/upgrade.md | 160 ++ .../develop/high-level-concepts/README.md | 17 + .../develop/high-level-concepts/accounts.md | 153 ++ .../high-level-concepts/app-anatomy.md | 264 +++ .../develop/high-level-concepts/gas-fees.md | 89 + .../high-level-concepts/query-lifecycle.md | 152 ++ .../high-level-concepts/tx-lifecycle.md | 256 ++ .../version-0.45/develop/intro/README.md | 16 + .../version-0.45/develop/intro/overview.md | 37 + .../develop/intro/sdk-app-architecture.md | 97 + .../version-0.45/develop/intro/sdk-design.md | 95 + .../develop/intro/why-app-specific.md | 81 + .../integrate/architecture/PROCESS.md | 56 + .../integrate/architecture/README.md | 79 + .../architecture/adr-002-docs-structure.md | 86 + .../adr-003-dynamic-capability-store.md | 344 +++ .../adr-004-split-denomination-keys.md | 120 + .../adr-006-secret-store-replacement.md | 54 + .../adr-007-specialization-groups.md | 177 ++ .../architecture/adr-008-dCERT-group.md | 171 ++ .../architecture/adr-009-evidence-module.md | 182 ++ .../adr-010-modular-antehandler.md | 285 +++ .../adr-011-generalize-genesis-accounts.md | 170 ++ .../architecture/adr-012-state-accessors.md | 155 ++ .../integrate/architecture/adr-013-metrics.md | 157 ++ .../adr-014-proportional-slashing.md | 85 + ...dr-016-validator-consensus-key-rotation.md | 125 + .../adr-017-historical-header-module.md | 61 + .../adr-018-extendable-voting-period.md | 66 + .../adr-019-protobuf-state-encoding.md | 379 +++ .../adr-020-protobuf-transaction-encoding.md | 464 ++++ .../adr-021-protobuf-query-encoding.md | 256 ++ .../adr-022-custom-panic-handling.md | 213 ++ .../architecture/adr-023-protobuf-naming.md | 263 +++ .../architecture/adr-024-coin-metadata.md | 139 ++ ...27-deterministic-protobuf-serialization.md | 314 +++ .../adr-028-public-key-addresses.md | 329 +++ .../architecture/adr-029-fee-grant-module.md | 153 ++ .../architecture/adr-030-authz-module.md | 249 ++ .../architecture/adr-031-msg-service.md | 202 ++ .../architecture/adr-032-typed-events.md | 319 +++ .../adr-033-protobuf-inter-module-comm.md | 400 ++++ .../architecture/adr-034-account-rekeying.md | 76 + .../adr-035-rosetta-api-support.md | 211 ++ .../adr-036-arbitrary-signature.md | 132 ++ .../architecture/adr-037-gov-split-vote.md | 111 + .../architecture/adr-038-state-listening.md | 569 +++++ .../architecture/adr-039-epoched-staking.md | 122 + ...r-040-storage-and-smt-state-commitments.md | 164 ++ .../adr-041-in-place-store-migrations.md | 167 ++ .../architecture/adr-042-group-module.md | 279 +++ .../integrate/architecture/adr-template.md | 60 + .../integrate/building-modules/README.md | 23 + .../building-modules/beginblock-endblock.md | 39 + .../integrate/building-modules/errors.md | 50 + .../integrate/building-modules/genesis.md | 60 + .../integrate/building-modules/intro.md | 92 + .../integrate/building-modules/invariants.md | 88 + .../integrate/building-modules/keeper.md | 85 + .../building-modules/messages-and-queries.md | 115 + .../building-modules/module-interfaces.md | 139 ++ .../building-modules/module-manager.md | 150 ++ .../building-modules/msg-services.md | 134 ++ .../building-modules/query-services.md | 77 + .../integrate/building-modules/simulator.md | 123 + .../integrate/building-modules/structure.md | 99 + .../building-modules/transaction_flow.svg | 48 + .../integrate/building-modules/upgrade.md | 57 + .../version-0.45/integrate/ibc/README.md | 12 +- .../version-0.45/integrate/ibc/custom.md | 4 +- .../version-0.45/integrate/ibc/integration.md | 4 +- .../version-0.45/integrate/ibc/overview.md | 4 +- .../version-0.45/integrate/ibc/relayer.md | 2 +- .../integrate/ibc/upgrades/README.md | 4 +- .../integrate/ibc/upgrades/developer-guide.md | 2 +- .../user/run-node/interact-node.md | 227 ++ .../version-0.45/user/run-node/keyring.md | 132 ++ .../version-0.45/user/run-node/rosetta.md | 133 ++ .../version-0.45/user/run-node/run-node.md | 124 + .../version-0.45/user/run-node/run-testnet.md | 95 + .../version-0.45/user/run-node/txs.md | 355 +++ .../develop/advanced-concepts/00-baseapp.md | 166 +- .../advanced-concepts/01-transactions.md | 98 +- .../develop/advanced-concepts/03-context.md | 103 + .../develop/advanced-concepts/04-node.md | 77 + .../{04-store.md => 05-store.md} | 20 +- .../develop/advanced-concepts/07-encoding.md | 292 +++ .../develop/advanced-concepts/08-grpc_rest.md | 99 + .../develop/advanced-concepts/09-cli.md | 156 ++ .../develop/advanced-concepts/10-events.md | 139 ++ .../develop/advanced-concepts/11-telemetry.md | 130 + .../develop/advanced-concepts/12-ocap.md | 78 + .../advanced-concepts/13-runtx_middleware.md | 69 + .../advanced-concepts/13-simulation.md | 101 + .../advanced-concepts/14-proto-docs.md | 7 + .../develop/advanced-concepts/15-tips.md | 206 ++ .../develop/advanced-concepts/16-upgrade.md | 160 ++ .../develop/advanced-concepts/_category_.json | 5 + .../advanced-concepts/keeper_dependencies.svg | 102 + .../develop/high-level-concepts/README.md | 17 + .../{03-accounts.md => accounts.md} | 64 +- .../high-level-concepts/app-anatomy.md | 256 ++ .../develop/high-level-concepts/gas-fees.md | 85 + .../high-level-concepts/query-lifecycle.md | 138 ++ .../high-level-concepts/tx-lifecycle.md | 257 ++ .../version-0.46/develop/intro/README.md | 16 + .../version-0.46/develop/intro/overview.md | 37 + .../develop/intro/sdk-app-architecture.md | 97 + .../version-0.46/develop/intro/sdk-design.md | 97 + .../develop/intro/why-app-specific.md | 81 + .../version-0.46/integrate/CosmWasm/README.md | 13 + .../integrate/architecture/PROCESS.md | 56 + .../integrate/architecture/README.md | 87 + .../architecture/adr-002-docs-structure.md | 86 + .../adr-003-dynamic-capability-store.md | 344 +++ .../adr-004-split-denomination-keys.md | 120 + .../adr-006-secret-store-replacement.md | 54 + .../adr-007-specialization-groups.md | 177 ++ .../architecture/adr-008-dCERT-group.md | 171 ++ .../architecture/adr-009-evidence-module.md | 182 ++ .../adr-010-modular-antehandler.md | 290 +++ .../adr-011-generalize-genesis-accounts.md | 170 ++ .../architecture/adr-012-state-accessors.md | 155 ++ .../integrate/architecture/adr-013-metrics.md | 157 ++ .../adr-014-proportional-slashing.md | 85 + ...dr-016-validator-consensus-key-rotation.md | 125 + .../adr-017-historical-header-module.md | 61 + .../adr-018-extendable-voting-period.md | 66 + .../adr-019-protobuf-state-encoding.md | 379 +++ .../adr-020-protobuf-transaction-encoding.md | 464 ++++ .../adr-021-protobuf-query-encoding.md | 256 ++ .../adr-022-custom-panic-handling.md | 218 ++ .../architecture/adr-023-protobuf-naming.md | 263 +++ .../architecture/adr-024-coin-metadata.md | 139 ++ ...27-deterministic-protobuf-serialization.md | 314 +++ .../adr-028-public-key-addresses.md | 329 +++ .../architecture/adr-029-fee-grant-module.md | 153 ++ .../architecture/adr-030-authz-module.md | 259 ++ .../architecture/adr-031-msg-service.md | 202 ++ .../architecture/adr-032-typed-events.md | 319 +++ .../adr-033-protobuf-inter-module-comm.md | 400 ++++ .../architecture/adr-034-account-rekeying.md | 76 + .../adr-035-rosetta-api-support.md | 211 ++ .../adr-036-arbitrary-signature.md | 132 ++ .../architecture/adr-037-gov-split-vote.md | 111 + .../architecture/adr-038-state-listening.md | 569 +++++ .../architecture/adr-039-epoched-staking.md | 122 + ...r-040-storage-and-smt-state-commitments.md | 289 +++ .../adr-041-in-place-store-migrations.md | 167 ++ .../architecture/adr-042-group-module.md | 279 +++ .../architecture/adr-043-nft-module.md | 340 +++ .../adr-044-protobuf-updates-guidelines.md | 138 ++ .../adr-045-check-delivertx-middlewares.md | 312 +++ .../architecture/adr-046-module-params.md | 184 ++ .../adr-047-extend-upgrade-plan.md | 245 ++ .../architecture/adr-048-consensus-fees.md | 203 ++ .../architecture/adr-049-state-sync-hooks.md | 160 ++ .../adr-053-go-module-refactoring.md | 109 + .../integrate/architecture/adr-055-orm.md | 111 + .../integrate/architecture/adr-template.md | 60 + .../integrate/building-modules/README.md | 23 + .../building-modules/beginblock-endblock.md | 39 + .../integrate/building-modules/errors.md | 50 + .../integrate/building-modules/genesis.md | 60 + .../integrate/building-modules/intro.md | 92 + .../integrate/building-modules/invariants.md | 80 + .../integrate/building-modules/keeper.md | 85 + .../building-modules/messages-and-queries.md | 115 + .../building-modules/module-interfaces.md | 139 ++ .../building-modules/module-manager.md | 151 ++ .../building-modules/msg-services.md | 100 + .../building-modules/query-services.md | 77 + .../integrate/building-modules/simulator.md | 122 + .../{11-structure.md => structure.md} | 34 +- .../building-modules/transaction_flow.svg | 48 + .../integrate/building-modules/upgrade.md | 57 + .../version-0.46/integrate/ibc/README.md | 9 + .../integrate/migrations/README.md | 13 + .../integrate/migrations/pre-upgrade.md | 55 + .../integrate/modules/auth/01_concepts.md | 43 + .../integrate/modules/auth/02_state.md | 73 + .../integrate/modules/auth/03_antehandlers.md | 40 + .../integrate/modules/auth/04_keepers.md | 47 + .../integrate/modules/auth/05_vesting.md | 630 +++++ .../integrate/modules/auth/06_params.md | 15 + .../integrate/modules/auth/07_client.md | 421 ++++ .../integrate/modules/auth/README.md | 45 + .../integrate/modules/authz/01_concepts.md | 55 + .../integrate/modules/authz/02_state.md | 23 + .../integrate/modules/authz/03_messages.md | 46 + .../integrate/modules/authz/04_events.md | 7 + .../integrate/modules/authz/05_client.md | 172 ++ .../integrate/modules/authz/README.md | 30 + .../integrate/modules/bank/01_state.md | 19 + .../integrate/modules/bank/02_keepers.md | 135 ++ .../integrate/modules/bank/03_messages.md | 28 + .../integrate/modules/bank/04_events.md | 149 ++ .../integrate/modules/bank/05_params.md | 24 + .../integrate/modules/bank/06_client.md | 390 +++ .../integrate/modules/bank/README.md | 106 + .../modules/capability/01_concepts.md | 35 + .../integrate/modules/capability/02_state.md | 26 + .../integrate/modules/capability/README.md | 77 + .../integrate/modules/crisis/01_state.md | 17 + .../integrate/modules/crisis/02_messages.md | 25 + .../integrate/modules/crisis/03_events.md | 18 + .../integrate/modules/crisis/04_params.md | 11 + .../integrate/modules/crisis/05_client.md | 31 + .../integrate/modules/crisis/README.md | 26 + .../modules/distribution/01_concepts.md | 34 + .../modules/distribution/02_state.md | 65 + .../modules/distribution/03_begin_block.md | 87 + .../modules/distribution/04_messages.md | 122 + .../modules/distribution/05_hooks.md | 59 + .../modules/distribution/06_events.md | 48 + .../modules/distribution/07_params.md | 17 + .../modules/distribution/08_client.md | 469 ++++ .../integrate/modules/distribution/README.md | 106 + .../integrate/modules/evidence/01_concepts.md | 78 + .../integrate/modules/evidence/02_state.md | 19 + .../integrate/modules/evidence/03_messages.md | 55 + .../integrate/modules/evidence/04_events.md | 18 + .../integrate/modules/evidence/05_params.md | 7 + .../modules/evidence/06_begin_block.md | 154 ++ .../integrate/modules/evidence/07_client.md | 188 ++ .../integrate/modules/evidence/README.md | 40 + .../integrate/modules/feegrant/01_concepts.md | 93 + .../integrate/modules/feegrant/02_state.md | 23 + .../integrate/modules/feegrant/03_messages.md | 17 + .../integrate/modules/feegrant/04_events.md | 33 + .../integrate/modules/feegrant/05_client.md | 184 ++ .../integrate/modules/feegrant/README.md | 37 + .../integrate/modules/gov/01_concepts.md | 203 ++ .../integrate/modules/gov/02_state.md | 217 ++ .../integrate/modules/gov/03_messages.md | 183 ++ .../integrate/modules/gov/04_events.md | 65 + .../modules/gov/05_future_improvements.md | 30 + .../integrate/modules/gov/06_params.md | 28 + .../integrate/modules/gov/07_client.md | 1804 ++++++++++++++ .../integrate/modules/gov/08_metadata.md | 32 + .../integrate/modules/gov/README.md | 65 + .../integrate/modules/mint/01_concepts.md | 28 + .../integrate/modules/mint/02_state.md | 21 + .../integrate/modules/mint/03_begin_block.md | 66 + .../integrate/modules/mint/04_params.md | 16 + .../integrate/modules/mint/05_events.md | 16 + .../integrate/modules/mint/06_client.md | 224 ++ .../integrate/modules/mint/README.md | 26 + .../integrate/modules/params/01_keeper.md | 19 + .../integrate/modules/params/02_subspace.md | 38 + .../integrate/modules/params/README.md | 29 + .../integrate/modules/slashing/01_concepts.md | 57 + .../integrate/modules/slashing/02_state.md | 51 + .../integrate/modules/slashing/03_messages.md | 51 + .../modules/slashing/04_begin_block.md | 98 + .../integrate/modules/slashing/05_hooks.md | 45 + .../integrate/modules/slashing/06_events.md | 46 + .../modules/slashing/07_tombstone.md | 127 + .../integrate/modules/slashing/08_params.md | 15 + .../integrate/modules/slashing/09_client.md | 294 +++ .../integrate/modules/slashing/README.md | 49 + .../integrate/modules/staking/01_state.md | 215 ++ .../modules/staking/02_state_transitions.md | 180 ++ .../integrate/modules/staking/03_messages.md | 175 ++ .../modules/staking/04_begin_block.md | 16 + .../integrate/modules/staking/05_end_block.md | 77 + .../integrate/modules/staking/06_hooks.md | 27 + .../integrate/modules/staking/07_events.md | 90 + .../integrate/modules/staking/08_params.md | 16 + .../integrate/modules/staking/09_client.md | 2101 +++++++++++++++++ .../integrate/modules/staking/README.md | 56 + .../staking/begin_redelegation_sequence.svg | 106 + .../modules/staking/delegation_sequence.svg | 192 ++ .../modules/staking/unbond_sequence.svg | 110 + .../integrate/modules/upgrade/01_concepts.md | 104 + .../integrate/modules/upgrade/02_state.md | 20 + .../integrate/modules/upgrade/03_events.md | 8 + .../integrate/modules/upgrade/04_client.md | 459 ++++ .../integrate/modules/upgrade/README.md | 31 + .../version-0.46/integrate/rfc/README.md | 34 - .../version-0.46/user/run-node/README.md | 17 + .../user/run-node/interact-node.md | 252 ++ .../version-0.46/user/run-node/keyring.md | 136 ++ .../version-0.46/user/run-node/rosetta.md | 112 + .../version-0.46/user/run-node/run-node.md | 167 ++ .../version-0.46/user/run-node/run-testnet.md | 99 + .../version-0.46/user/run-node/txs.md | 383 +++ .../develop/advanced-concepts/00-baseapp.md | 512 ++++ .../advanced-concepts/01-transactions.md | 199 ++ .../develop/advanced-concepts/02-context.md | 102 + .../develop/advanced-concepts/03-node.md | 98 + .../develop/advanced-concepts/04-store.md | 290 +++ .../develop/advanced-concepts/05-encoding.md | 320 +++ .../develop/advanced-concepts/06-grpc_rest.md | 100 + .../develop/advanced-concepts/07-cli.md | 171 ++ .../develop/advanced-concepts/08-events.md | 162 ++ .../develop/advanced-concepts/09-telemetry.md | 128 + .../develop/advanced-concepts/10-ocap.md | 0 .../advanced-concepts/11-runtx_middleware.md | 67 + .../advanced-concepts/12-simulation.md | 101 + .../advanced-concepts/13-proto-docs.md | 7 + .../develop/advanced-concepts/14-tips.md | 214 ++ .../develop/advanced-concepts/15-upgrade.md | 162 ++ .../develop/advanced-concepts/_category_.json | 5 + .../baseapp_state-begin_block.png | Bin 0 -> 20565 bytes .../baseapp_state-checktx.png | Bin 0 -> 82308 bytes .../baseapp_state-commit.png | Bin 0 -> 47662 bytes .../baseapp_state-deliver_tx.png | Bin 0 -> 59007 bytes .../baseapp_state-initchain.png | Bin 0 -> 243455 bytes .../baseapp_state-prepareproposal.png | Bin 0 -> 274049 bytes .../baseapp_state-processproposal.png | Bin .../advanced-concepts/baseapp_state.png | Bin 0 -> 338941 bytes .../high-level-concepts/00-app-anatomy.md | 263 +++ .../high-level-concepts/01-tx-lifecycle.md | 67 +- .../high-level-concepts/02-query-lifecycle.md | 149 ++ .../high-level-concepts/03-accounts.md | 281 +++ .../high-level-concepts/04-gas-fees.md | 99 + .../high-level-concepts/_category_.json | 5 + .../develop/intro/00-what-is-sdk.md | 31 + .../develop/intro/01-why-app-specific.md | 80 + .../develop/intro/02-sdk-app-architecture.md | 94 + .../develop/intro/03-sdk-design.md | 96 + .../develop/intro/_category_.json | 5 + .../integrate/architecture/PROCESS.md | 56 + .../integrate/architecture/README.md | 89 + .../integrate/architecture/_category_.json | 5 + .../architecture/adr-002-docs-structure.md | 86 + .../adr-003-dynamic-capability-store.md | 344 +++ .../adr-004-split-denomination-keys.md | 120 + .../adr-006-secret-store-replacement.md | 54 + .../adr-007-specialization-groups.md | 177 ++ .../architecture/adr-008-dCERT-group.md | 171 ++ .../architecture/adr-009-evidence-module.md | 182 ++ .../adr-010-modular-antehandler.md | 290 +++ .../adr-011-generalize-genesis-accounts.md | 170 ++ .../architecture/adr-012-state-accessors.md | 155 ++ .../integrate/architecture/adr-013-metrics.md | 157 ++ .../adr-014-proportional-slashing.md | 85 + ...dr-016-validator-consensus-key-rotation.md | 125 + .../adr-017-historical-header-module.md | 61 + .../adr-018-extendable-voting-period.md | 66 + .../adr-019-protobuf-state-encoding.md | 379 +++ .../adr-020-protobuf-transaction-encoding.md | 464 ++++ .../adr-021-protobuf-query-encoding.md | 256 ++ .../adr-022-custom-panic-handling.md | 218 ++ .../architecture/adr-023-protobuf-naming.md | 263 +++ .../architecture/adr-024-coin-metadata.md | 139 ++ ...27-deterministic-protobuf-serialization.md | 314 +++ .../adr-028-public-key-addresses.md | 342 +++ .../architecture/adr-029-fee-grant-module.md | 153 ++ .../architecture/adr-030-authz-module.md | 258 ++ .../architecture/adr-031-msg-service.md | 202 ++ .../architecture/adr-032-typed-events.md | 319 +++ .../adr-033-protobuf-inter-module-comm.md | 400 ++++ .../architecture/adr-034-account-rekeying.md | 76 + .../adr-035-rosetta-api-support.md | 211 ++ .../adr-036-arbitrary-signature.md | 132 ++ .../architecture/adr-037-gov-split-vote.md | 111 + .../architecture/adr-038-state-listening.md | 569 +++++ .../architecture/adr-039-epoched-staking.md | 122 + ...r-040-storage-and-smt-state-commitments.md | 289 +++ .../adr-041-in-place-store-migrations.md | 167 ++ .../architecture/adr-042-group-module.md | 279 +++ .../architecture/adr-043-nft-module.md | 349 +++ .../adr-044-protobuf-updates-guidelines.md | 129 + .../adr-045-check-delivertx-middlewares.md | 312 +++ .../architecture/adr-046-module-params.md | 184 ++ .../adr-047-extend-upgrade-plan.md | 245 ++ .../architecture/adr-048-consensus-fees.md | 204 ++ .../architecture/adr-049-state-sync-hooks.md | 174 ++ .../adr-050-sign-mode-textual-annex1.md | 322 +++ .../adr-050-sign-mode-textual-annex2.md | 122 + .../architecture/adr-050-sign-mode-textual.md | 592 +++++ .../adr-053-go-module-refactoring.md | 109 + .../integrate/architecture/adr-055-orm.md | 111 + .../architecture/adr-057-app-wiring.md | 331 +++ .../adr-058-auto-generated-cli.md | 95 + .../architecture/adr-059-test-scopes.md | 253 ++ .../architecture/adr-060-abci-1.0.md | 249 ++ .../architecture/adr-061-liquid-staking.md | 82 + .../integrate/architecture/adr-template.md | 60 + .../integrate/building-apps/00-app-go.md | 14 + .../integrate/building-apps/01-app-go-v2.md | 130 + .../integrate/building-apps/02-app-mempool.md | 168 ++ .../integrate/building-apps/03-app-upgrade.md | 69 + .../integrate/building-apps/_category_.json | 5 + .../integrate/building-modules/01-intro.md | 94 + .../building-modules/01-module-manager.md | 255 ++ .../02-messages-and-queries.md | 129 + .../building-modules/03-msg-services.md | 114 + .../building-modules/04-query-services.md | 59 + .../05-beginblock-endblock.md | 45 + .../integrate/building-modules/06-keeper.md | 93 + .../building-modules/07-invariants.md | 92 + .../integrate/building-modules/08-genesis.md | 72 + .../building-modules/09-module-interfaces.md | 161 ++ .../integrate/building-modules/10-autocli.md | 157 ++ .../building-modules/11-structure.md | 95 + .../integrate/building-modules/12-errors.md | 56 + .../integrate/building-modules/13-upgrade.md | 65 + .../building-modules/14-simulator.md | 134 ++ .../building-modules/15-depinject.md | 126 + .../integrate/building-modules/16-testing.md | 142 ++ .../building-modules/_category_.json | 5 + .../integrate/migrations/01-intro.md | 15 + .../integrate/migrations/_category_.json | 5 + .../integrate/modules/_category_.json | 5 + .../version-0.47/integrate/spec/README.md | 25 + .../version-0.47/integrate/spec/SPEC-SPEC.md | 60 + .../integrate/spec/_category_.json | 5 + .../integrate/spec/_ics/README.md | 3 + .../spec/_ics/ics-030-signed-messages.md | 192 ++ .../integrate/spec/addresses/README.md | 3 + .../integrate/spec/addresses/bech32.md | 21 + .../integrate/spec/circuit-breaker/README.md | 16 + .../spec/fee_distribution/f1_fee_distr.pdf | Bin 0 -> 185175 bytes .../spec/fee_distribution/f1_fee_distr.tex | 245 ++ .../integrate/spec/reserve-pool/README.md | 4 + .../integrate/spec/store/README.md | 235 ++ .../integrate/tooling/00-protobuf.md | 113 + .../version-0.47/integrate/tooling/README.md | 11 + .../integrate/tooling/_category_.json | 5 + .../version-0.47/user/run-node/00-keyring.md | 134 ++ .../version-0.47/user/run-node/01-run-node.md | 192 ++ .../user/run-node/02-interact-node.md | 291 +++ .../version-0.47/user/run-node/03-txs.md | 387 +++ .../run-node}/05-run-testnet.md | 2 +- .../user/run-node/06-run-production.md | 266 +++ .../user/run-node/_category_.json | 5 + 457 files changed, 62385 insertions(+), 427 deletions(-) delete mode 100644 custom-version-plugin.js create mode 100644 docs/integrate/building-modules/transaction_flow.svg delete mode 100644 version_config.json create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/README.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/baseapp.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-begin_block.png create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-checktx.png create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-commit.png create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-deliver_tx.png create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-initchain.png create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state_types.png create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/cli.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/context.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/encoding.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/events.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/grpc_rest.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/keeper_dependencies.svg create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/node.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/ocap.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/runtx_middleware.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/simulation.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/store.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/telemetry.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/transaction_flow.svg create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/transactions.md create mode 100644 versioned_docs/version-0.45/develop/advanced-concepts/upgrade.md create mode 100644 versioned_docs/version-0.45/develop/high-level-concepts/README.md create mode 100644 versioned_docs/version-0.45/develop/high-level-concepts/accounts.md create mode 100644 versioned_docs/version-0.45/develop/high-level-concepts/app-anatomy.md create mode 100644 versioned_docs/version-0.45/develop/high-level-concepts/gas-fees.md create mode 100644 versioned_docs/version-0.45/develop/high-level-concepts/query-lifecycle.md create mode 100644 versioned_docs/version-0.45/develop/high-level-concepts/tx-lifecycle.md create mode 100644 versioned_docs/version-0.45/develop/intro/README.md create mode 100644 versioned_docs/version-0.45/develop/intro/overview.md create mode 100644 versioned_docs/version-0.45/develop/intro/sdk-app-architecture.md create mode 100644 versioned_docs/version-0.45/develop/intro/sdk-design.md create mode 100644 versioned_docs/version-0.45/develop/intro/why-app-specific.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/PROCESS.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/README.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-002-docs-structure.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-003-dynamic-capability-store.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-004-split-denomination-keys.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-006-secret-store-replacement.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-007-specialization-groups.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-008-dCERT-group.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-009-evidence-module.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-010-modular-antehandler.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-011-generalize-genesis-accounts.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-012-state-accessors.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-013-metrics.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-014-proportional-slashing.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-016-validator-consensus-key-rotation.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-017-historical-header-module.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-018-extendable-voting-period.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-019-protobuf-state-encoding.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-020-protobuf-transaction-encoding.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-021-protobuf-query-encoding.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-022-custom-panic-handling.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-023-protobuf-naming.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-024-coin-metadata.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-027-deterministic-protobuf-serialization.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-028-public-key-addresses.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-029-fee-grant-module.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-030-authz-module.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-031-msg-service.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-032-typed-events.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-033-protobuf-inter-module-comm.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-034-account-rekeying.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-035-rosetta-api-support.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-036-arbitrary-signature.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-037-gov-split-vote.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-038-state-listening.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-039-epoched-staking.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-040-storage-and-smt-state-commitments.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-041-in-place-store-migrations.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-042-group-module.md create mode 100644 versioned_docs/version-0.45/integrate/architecture/adr-template.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/README.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/beginblock-endblock.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/errors.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/genesis.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/intro.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/invariants.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/keeper.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/messages-and-queries.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/module-interfaces.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/module-manager.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/msg-services.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/query-services.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/simulator.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/structure.md create mode 100644 versioned_docs/version-0.45/integrate/building-modules/transaction_flow.svg create mode 100644 versioned_docs/version-0.45/integrate/building-modules/upgrade.md create mode 100644 versioned_docs/version-0.45/user/run-node/interact-node.md create mode 100644 versioned_docs/version-0.45/user/run-node/keyring.md create mode 100644 versioned_docs/version-0.45/user/run-node/rosetta.md create mode 100644 versioned_docs/version-0.45/user/run-node/run-node.md create mode 100644 versioned_docs/version-0.45/user/run-node/run-testnet.md create mode 100644 versioned_docs/version-0.45/user/run-node/txs.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/03-context.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/04-node.md rename versioned_docs/version-0.46/develop/advanced-concepts/{04-store.md => 05-store.md} (94%) create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/07-encoding.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/08-grpc_rest.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/09-cli.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/10-events.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/11-telemetry.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/12-ocap.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/13-runtx_middleware.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/13-simulation.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/14-proto-docs.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/15-tips.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/16-upgrade.md create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/_category_.json create mode 100644 versioned_docs/version-0.46/develop/advanced-concepts/keeper_dependencies.svg create mode 100644 versioned_docs/version-0.46/develop/high-level-concepts/README.md rename versioned_docs/version-0.46/develop/high-level-concepts/{03-accounts.md => accounts.md} (83%) create mode 100644 versioned_docs/version-0.46/develop/high-level-concepts/app-anatomy.md create mode 100644 versioned_docs/version-0.46/develop/high-level-concepts/gas-fees.md create mode 100644 versioned_docs/version-0.46/develop/high-level-concepts/query-lifecycle.md create mode 100644 versioned_docs/version-0.46/develop/high-level-concepts/tx-lifecycle.md create mode 100644 versioned_docs/version-0.46/develop/intro/README.md create mode 100644 versioned_docs/version-0.46/develop/intro/overview.md create mode 100644 versioned_docs/version-0.46/develop/intro/sdk-app-architecture.md create mode 100644 versioned_docs/version-0.46/develop/intro/sdk-design.md create mode 100644 versioned_docs/version-0.46/develop/intro/why-app-specific.md create mode 100644 versioned_docs/version-0.46/integrate/CosmWasm/README.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/PROCESS.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/README.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-002-docs-structure.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-003-dynamic-capability-store.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-004-split-denomination-keys.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-006-secret-store-replacement.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-007-specialization-groups.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-008-dCERT-group.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-009-evidence-module.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-010-modular-antehandler.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-011-generalize-genesis-accounts.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-012-state-accessors.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-013-metrics.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-014-proportional-slashing.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-016-validator-consensus-key-rotation.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-017-historical-header-module.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-018-extendable-voting-period.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-019-protobuf-state-encoding.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-020-protobuf-transaction-encoding.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-021-protobuf-query-encoding.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-022-custom-panic-handling.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-023-protobuf-naming.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-024-coin-metadata.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-027-deterministic-protobuf-serialization.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-028-public-key-addresses.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-029-fee-grant-module.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-030-authz-module.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-031-msg-service.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-032-typed-events.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-033-protobuf-inter-module-comm.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-034-account-rekeying.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-035-rosetta-api-support.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-036-arbitrary-signature.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-037-gov-split-vote.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-038-state-listening.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-039-epoched-staking.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-040-storage-and-smt-state-commitments.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-041-in-place-store-migrations.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-042-group-module.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-043-nft-module.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-044-protobuf-updates-guidelines.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-045-check-delivertx-middlewares.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-046-module-params.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-047-extend-upgrade-plan.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-048-consensus-fees.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-049-state-sync-hooks.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-053-go-module-refactoring.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-055-orm.md create mode 100644 versioned_docs/version-0.46/integrate/architecture/adr-template.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/README.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/beginblock-endblock.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/errors.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/genesis.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/intro.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/invariants.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/keeper.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/messages-and-queries.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/module-interfaces.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/module-manager.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/msg-services.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/query-services.md create mode 100644 versioned_docs/version-0.46/integrate/building-modules/simulator.md rename versioned_docs/version-0.46/integrate/building-modules/{11-structure.md => structure.md} (83%) create mode 100644 versioned_docs/version-0.46/integrate/building-modules/transaction_flow.svg create mode 100644 versioned_docs/version-0.46/integrate/building-modules/upgrade.md create mode 100644 versioned_docs/version-0.46/integrate/ibc/README.md create mode 100644 versioned_docs/version-0.46/integrate/migrations/README.md create mode 100644 versioned_docs/version-0.46/integrate/migrations/pre-upgrade.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/03_antehandlers.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/04_keepers.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/05_vesting.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/06_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/07_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/auth/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/authz/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/authz/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/authz/03_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/authz/04_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/authz/05_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/authz/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/bank/01_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/bank/02_keepers.md create mode 100644 versioned_docs/version-0.46/integrate/modules/bank/03_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/bank/04_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/bank/05_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/bank/06_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/bank/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/capability/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/capability/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/capability/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/crisis/01_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/crisis/02_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/crisis/03_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/crisis/04_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/crisis/05_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/crisis/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/03_begin_block.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/04_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/05_hooks.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/06_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/07_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/08_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/distribution/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/03_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/04_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/05_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/06_begin_block.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/07_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/evidence/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/feegrant/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/feegrant/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/feegrant/03_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/feegrant/04_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/feegrant/05_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/feegrant/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/03_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/04_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/05_future_improvements.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/06_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/07_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/08_metadata.md create mode 100644 versioned_docs/version-0.46/integrate/modules/gov/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/mint/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/mint/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/mint/03_begin_block.md create mode 100644 versioned_docs/version-0.46/integrate/modules/mint/04_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/mint/05_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/mint/06_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/mint/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/params/01_keeper.md create mode 100644 versioned_docs/version-0.46/integrate/modules/params/02_subspace.md create mode 100644 versioned_docs/version-0.46/integrate/modules/params/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/03_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/04_begin_block.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/05_hooks.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/06_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/07_tombstone.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/08_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/09_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/slashing/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/01_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/02_state_transitions.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/03_messages.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/04_begin_block.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/05_end_block.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/06_hooks.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/07_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/08_params.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/09_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/README.md create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/begin_redelegation_sequence.svg create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/delegation_sequence.svg create mode 100644 versioned_docs/version-0.46/integrate/modules/staking/unbond_sequence.svg create mode 100644 versioned_docs/version-0.46/integrate/modules/upgrade/01_concepts.md create mode 100644 versioned_docs/version-0.46/integrate/modules/upgrade/02_state.md create mode 100644 versioned_docs/version-0.46/integrate/modules/upgrade/03_events.md create mode 100644 versioned_docs/version-0.46/integrate/modules/upgrade/04_client.md create mode 100644 versioned_docs/version-0.46/integrate/modules/upgrade/README.md delete mode 100644 versioned_docs/version-0.46/integrate/rfc/README.md create mode 100644 versioned_docs/version-0.46/user/run-node/README.md create mode 100644 versioned_docs/version-0.46/user/run-node/interact-node.md create mode 100644 versioned_docs/version-0.46/user/run-node/keyring.md create mode 100644 versioned_docs/version-0.46/user/run-node/rosetta.md create mode 100644 versioned_docs/version-0.46/user/run-node/run-node.md create mode 100644 versioned_docs/version-0.46/user/run-node/run-testnet.md create mode 100644 versioned_docs/version-0.46/user/run-node/txs.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/00-baseapp.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/01-transactions.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/02-context.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/03-node.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/04-store.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/05-encoding.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/06-grpc_rest.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/07-cli.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/08-events.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/09-telemetry.md rename versioned_docs/{version-0.46 => version-0.47}/develop/advanced-concepts/10-ocap.md (100%) create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/11-runtx_middleware.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/12-simulation.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/13-proto-docs.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/14-tips.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/15-upgrade.md create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/_category_.json create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-begin_block.png create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-checktx.png create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-commit.png create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-deliver_tx.png create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-initchain.png create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-prepareproposal.png rename versioned_docs/{version-0.46 => version-0.47}/develop/advanced-concepts/baseapp_state-processproposal.png (100%) create mode 100644 versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state.png create mode 100644 versioned_docs/version-0.47/develop/high-level-concepts/00-app-anatomy.md rename versioned_docs/{version-0.46 => version-0.47}/develop/high-level-concepts/01-tx-lifecycle.md (71%) create mode 100644 versioned_docs/version-0.47/develop/high-level-concepts/02-query-lifecycle.md create mode 100644 versioned_docs/version-0.47/develop/high-level-concepts/03-accounts.md create mode 100644 versioned_docs/version-0.47/develop/high-level-concepts/04-gas-fees.md create mode 100644 versioned_docs/version-0.47/develop/high-level-concepts/_category_.json create mode 100644 versioned_docs/version-0.47/develop/intro/00-what-is-sdk.md create mode 100644 versioned_docs/version-0.47/develop/intro/01-why-app-specific.md create mode 100644 versioned_docs/version-0.47/develop/intro/02-sdk-app-architecture.md create mode 100644 versioned_docs/version-0.47/develop/intro/03-sdk-design.md create mode 100644 versioned_docs/version-0.47/develop/intro/_category_.json create mode 100644 versioned_docs/version-0.47/integrate/architecture/PROCESS.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/README.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/_category_.json create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-002-docs-structure.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-003-dynamic-capability-store.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-004-split-denomination-keys.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-006-secret-store-replacement.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-007-specialization-groups.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-008-dCERT-group.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-009-evidence-module.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-010-modular-antehandler.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-011-generalize-genesis-accounts.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-012-state-accessors.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-013-metrics.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-014-proportional-slashing.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-016-validator-consensus-key-rotation.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-017-historical-header-module.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-018-extendable-voting-period.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-019-protobuf-state-encoding.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-020-protobuf-transaction-encoding.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-021-protobuf-query-encoding.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-022-custom-panic-handling.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-023-protobuf-naming.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-024-coin-metadata.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-027-deterministic-protobuf-serialization.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-028-public-key-addresses.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-029-fee-grant-module.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-030-authz-module.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-031-msg-service.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-032-typed-events.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-033-protobuf-inter-module-comm.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-034-account-rekeying.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-035-rosetta-api-support.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-036-arbitrary-signature.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-037-gov-split-vote.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-038-state-listening.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-039-epoched-staking.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-040-storage-and-smt-state-commitments.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-041-in-place-store-migrations.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-042-group-module.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-043-nft-module.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-044-protobuf-updates-guidelines.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-045-check-delivertx-middlewares.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-046-module-params.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-047-extend-upgrade-plan.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-048-consensus-fees.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-049-state-sync-hooks.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex1.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex2.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-053-go-module-refactoring.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-055-orm.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-057-app-wiring.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-058-auto-generated-cli.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-059-test-scopes.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-060-abci-1.0.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-061-liquid-staking.md create mode 100644 versioned_docs/version-0.47/integrate/architecture/adr-template.md create mode 100644 versioned_docs/version-0.47/integrate/building-apps/00-app-go.md create mode 100644 versioned_docs/version-0.47/integrate/building-apps/01-app-go-v2.md create mode 100644 versioned_docs/version-0.47/integrate/building-apps/02-app-mempool.md create mode 100644 versioned_docs/version-0.47/integrate/building-apps/03-app-upgrade.md create mode 100644 versioned_docs/version-0.47/integrate/building-apps/_category_.json create mode 100644 versioned_docs/version-0.47/integrate/building-modules/01-intro.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/01-module-manager.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/02-messages-and-queries.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/03-msg-services.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/04-query-services.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/05-beginblock-endblock.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/06-keeper.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/07-invariants.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/08-genesis.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/09-module-interfaces.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/10-autocli.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/11-structure.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/12-errors.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/13-upgrade.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/14-simulator.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/15-depinject.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/16-testing.md create mode 100644 versioned_docs/version-0.47/integrate/building-modules/_category_.json create mode 100644 versioned_docs/version-0.47/integrate/migrations/01-intro.md create mode 100644 versioned_docs/version-0.47/integrate/migrations/_category_.json create mode 100644 versioned_docs/version-0.47/integrate/modules/_category_.json create mode 100644 versioned_docs/version-0.47/integrate/spec/README.md create mode 100644 versioned_docs/version-0.47/integrate/spec/SPEC-SPEC.md create mode 100644 versioned_docs/version-0.47/integrate/spec/_category_.json create mode 100644 versioned_docs/version-0.47/integrate/spec/_ics/README.md create mode 100644 versioned_docs/version-0.47/integrate/spec/_ics/ics-030-signed-messages.md create mode 100644 versioned_docs/version-0.47/integrate/spec/addresses/README.md create mode 100644 versioned_docs/version-0.47/integrate/spec/addresses/bech32.md create mode 100644 versioned_docs/version-0.47/integrate/spec/circuit-breaker/README.md create mode 100644 versioned_docs/version-0.47/integrate/spec/fee_distribution/f1_fee_distr.pdf create mode 100644 versioned_docs/version-0.47/integrate/spec/fee_distribution/f1_fee_distr.tex create mode 100644 versioned_docs/version-0.47/integrate/spec/reserve-pool/README.md create mode 100644 versioned_docs/version-0.47/integrate/spec/store/README.md create mode 100644 versioned_docs/version-0.47/integrate/tooling/00-protobuf.md create mode 100644 versioned_docs/version-0.47/integrate/tooling/README.md create mode 100644 versioned_docs/version-0.47/integrate/tooling/_category_.json create mode 100644 versioned_docs/version-0.47/user/run-node/00-keyring.md create mode 100644 versioned_docs/version-0.47/user/run-node/01-run-node.md create mode 100644 versioned_docs/version-0.47/user/run-node/02-interact-node.md create mode 100644 versioned_docs/version-0.47/user/run-node/03-txs.md rename versioned_docs/version-0.47/{validate => user/run-node}/05-run-testnet.md (92%) create mode 100644 versioned_docs/version-0.47/user/run-node/06-run-production.md create mode 100644 versioned_docs/version-0.47/user/run-node/_category_.json diff --git a/custom-version-plugin.js b/custom-version-plugin.js deleted file mode 100644 index 8c4cf997d..000000000 --- a/custom-version-plugin.js +++ /dev/null @@ -1,78 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -// Helper function to get all files recursively from a directory -function getAllFiles(dirPath, arrayOfFiles) { - arrayOfFiles = arrayOfFiles || []; - const files = fs.readdirSync(dirPath); - - files.forEach(function (file) { - const filePath = path.join(dirPath, file); - if (fs.statSync(filePath).isDirectory()) { - arrayOfFiles = getAllFiles(filePath, arrayOfFiles); - } else { - arrayOfFiles.push(filePath); - } - }); - - return arrayOfFiles; -} - -function shouldExcludeFile(version, filePath, versionConfig) { - const excludedPaths = versionConfig[version]?.excludedPaths || []; - return excludedPaths.some((excludedPath) => filePath.startsWith(excludedPath)); -} - -module.exports = function (_context, _options) { - return { - name: 'custom-version-plugin', - - async loadContent() { - // Read the versions.json file to get the list of versions - const versionsJsonPath = path.join(_context.siteDir, 'versions.json'); - const versions = JSON.parse(fs.readFileSync(versionsJsonPath, 'utf8')); - - // Read the version config file - const versionConfigPath = path.join(_context.siteDir, 'version_config.json'); - const versionConfig = JSON.parse(fs.readFileSync(versionConfigPath, 'utf8')); - - // Read all the files in the /docs folder - const docsPath = path.join(_context.siteDir, 'docs'); - const files = getAllFiles(docsPath); - - // Iterate through the list of versions - for (const version of versions) { - const versionedDocsPath = path.join(_context.siteDir, 'versioned_docs', `version-${version}`); - - // Check if the version directory exists - if (fs.existsSync(versionedDocsPath)) { - // Iterate through the list of files in the /docs folder - for (const file of files) { - const relativePath = path.relative(docsPath, file); - const customFilePath = path.join(versionedDocsPath, relativePath); - - // Check if the file exists in the version directory - if (!fs.existsSync(customFilePath) && !shouldExcludeFile(version, relativePath, versionConfig)) { - // If the file doesn't exist and it's not excluded, copy it from the /docs folder - const customFileDir = path.dirname(customFilePath); - fs.mkdirSync(customFileDir, { recursive: true }); - fs.copyFileSync(file, customFilePath); - console.log(`Copied file from /docs to version-${version}:`, relativePath); - } - } - - // After copying all files, iterate over the versioned directory to remove excluded files - const versionedFiles = getAllFiles(versionedDocsPath); - for (const file of versionedFiles) { - const relativePath = path.relative(versionedDocsPath, file); - - if (shouldExcludeFile(version, relativePath, versionConfig)) { - fs.unlinkSync(file); - console.log(`Removed excluded file from version-${version}:`, relativePath); - } - } - } - } - }, - }; -}; diff --git a/docs/integrate/_category_.json b/docs/integrate/_category_.json index 47b369a05..b860342f4 100644 --- a/docs/integrate/_category_.json +++ b/docs/integrate/_category_.json @@ -1,5 +1,5 @@ { "label": "Integrate", - "position": 1, + "position": 0, "link": null } \ No newline at end of file diff --git a/docs/integrate/building-modules/transaction_flow.svg b/docs/integrate/building-modules/transaction_flow.svg new file mode 100644 index 000000000..1ae962de3 --- /dev/null +++ b/docs/integrate/building-modules/transaction_flow.svg @@ -0,0 +1,48 @@ +UserUserbaseAppbaseApprouterrouterhandlerhandlermsgServermsgServerkeeperkeeperContext.EventManagerContext.EventManagerTransaction Type<Tx>Route(ctx, msgRoute)handlerMsg<Tx>(Context, Msg(...))<Tx>(Context, Msg)alt[addresses invalid, denominations wrong, etc.]errorperform action, update contextresults, error codeEmit relevant eventsmaybe wrap results in more structureresult, error coderesults, error code \ No newline at end of file diff --git a/docs/integrate/libraries/02-collections.md b/docs/integrate/libraries/02-collections.md index 7f8278233..fc74594ec 100644 --- a/docs/integrate/libraries/02-collections.md +++ b/docs/integrate/libraries/02-collections.md @@ -533,7 +533,7 @@ func (k Keeper) GetAllAccounts(ctx sdk.Context) ([]authtypes.BaseAccount, error) } func (k Keeper) IterateAccountsBetween(ctx sdk.Context, start, end uint64) ([]authtypes.BaseAccount, error) { - // The collections.Range API offers a lot of capabilities + // The collections.Range API offers a lot of capability // like defining where the iteration starts or ends. rng := new(collections.Range[uint64]). StartInclusive(start). diff --git a/docusaurus.config.js b/docusaurus.config.js index 0fa2e5272..d1dd203e2 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -3,7 +3,6 @@ const lightCodeTheme = require("prism-react-renderer/themes/github"); const darkCodeTheme = require("prism-react-renderer/themes/dracula"); -const customVersionPlugin = require('./custom-version-plugin'); // const lastVersion = "v0.47"; const lastVersion = "current"; @@ -41,7 +40,6 @@ const config = { docs: { sidebarPath: require.resolve("./sidebars.js"), routeBasePath: "/", - lastVersion: lastVersion, }, theme: { customCss: require.resolve("./src/css/custom.css"), @@ -79,11 +77,6 @@ const config = { position: "left", label: "Integrate", }, - // { - // to: "/", - // position: "left", - // label: "Validate", - // }, { to: "/user/run-node/keyring", position: "left", @@ -219,7 +212,6 @@ const config = { }, }; }, - customVersionPlugin, [ "@docusaurus/plugin-google-analytics", { diff --git a/version_config.json b/version_config.json deleted file mode 100644 index 5c9fa3b7c..000000000 --- a/version_config.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "0.45": { - "excludedPaths": ["integrate/modules/slashing", "integrate/modules/nft", "integrate/building-modules/15-depinject.md", "integrate/modules/genutil", - "integrate/modules/consensus", "integrate/modules/circuit", "integrate/building-apps","integrate/building-modules/autocli", "integrate/building-modules/depinject", - "integrate/building-modules/testing", "integrate/building-apps", "integrate/architecture/rfc", "integrate/specs", "integrate/architecture/adr-041-in-place-store-migrations", "integrate/architecture/adr-042-group-module", - "integrate/architecture/adr-043-nft-module", "integrate/architecture/adr-044-protobuf-updates-guidelines", "integrate/architecture/adr-045-check-delivertx-middlewares", - "integrate/architecture/adr-046-module-params", "integrate/architecture/adr-046-module-params", "integrate/architecture/adr-047-extend-upgrade-plan", - "integrate/architecture/adr-048-consensus-fees", "integrate/architecture/adr-049-state-sync-hooks", "integrate/architecture/adr-050-sign-mode-textual", - "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/architecture/adr-053-go-module-refactoring","integrate/architecture/adr-054-semver-compatible-modules", - "integrate/architecture/adr-055-orm", "integrate/architecture/adr-057-app-wiring", "integrate/architecture/adr-058-auto-generated-cli", "integrate/architecture/adr-059-test-scopes", - "integrate/architecture/adr-060-abci-1.0", "integrate/architecture/adr-061-liquid-staking", "integrate/architecture/adr-062-collections-state-layer", - "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-063-core-module-api", "integrate/architecture/adr-064-abci-2.0", - "integrate/architecture/adr-065-store-v2", "integrate/architecture/README"] - }, - "0.46": { - "excludedPaths": ["integrate/modules/genutil", "integrate/building-modules/15-depinject.md","integrate/modules/consensus", "integrate/modules/circuit", "integrate/architecture/rfc", - "integrate/specs", "integrate/building-apps", "integrate/building-modules/depinject", "integrate/architecture/adr-007-specialization-groups", - "integrate/architecture/adr-008-dCERT-group", "integrate/architecture/adr-014-proportional-slashing", - "integrate/architecture/adr-034-account-keying", "integrate/architecture/adr-041-in-place-store-migrations", "integrate/architecture/adr-042-group-module", - "integrate/architecture/adr-043-nft-module", "integrate/architecture/adr-044-protobuf-updates-guidelines", "integrate/architecture/adr-045-check-delivertx-middlewares", - "integrate/architecture/adr-048-consensus-fees", "integrate/architecture/adr-049-state-sync-hooks", "integrate/architecture/adr-050-sign-mode-textual", - "integrate/architecture/adr-050-sign-mode-textual-annex1", "integrate/architecture/adr-050-sign-mode-textual-annex2", "integrate/architecture/adr-054-semver-compatible-modules", - "integrate/architecture/adr-055-orm", "integrate/architecture/adr-057-app-wiring", "integrate/architecture/adr-058-auto-generated-cli", "integrate/architecture/adr-059-test-scopes", - "integrate/architecture/adr-060-abci-1.0", "integrate/architecture/adr-061-liquid-staking", "integrate/architecture/adr-062-collections-state-layer", - "integrate/architecture/adr-062-collections-state-layer", "integrate/architecture/adr-063-core-module-api", "integrate/architecture/adr-064-abci-2.0", - "integrate/architecture/adr-065-store-v2", "integrate/architecture/README"] - }, - "0.47": { - "excludedPaths": [] - } -} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/README.md b/versioned_docs/version-0.45/develop/advanced-concepts/README.md new file mode 100644 index 000000000..a6853b418 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/README.md @@ -0,0 +1,28 @@ + + +# Core Concepts + +This repository contains reference documentation on the core concepts of the Cosmos SDK. + +1. [`BaseApp`](./baseapp.md) +2. [Transaction](./transactions.md) +3. [Context](./context.md) +4. [Node Client](./node.md) +5. [Store](./store.md) +6. [Encoding](./encoding.md) +7. [gRPC, REST and Tendermint Endpoints](./grpc_rest.md) +8. [Command-Line Interface](./cli.md) +9. [Events](./events.md) +10. [Telemetry](./telemetry.md) +11. [Object-Capabilities](./ocap.md) +12. [RunTx recovery middleware](./runtx_middleware.md) +13. [Simulation](./simulation.md) +14. [Protobuf documentation](./proto-docs.md) +15. [In-Place Store Migrations](./upgrade.md) + +After reading about the core concepts, check the [IBC documentation](../ibc/README.md) to learn more +about the IBC core concepts and how to integrate IBC in your application. diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/baseapp.md b/versioned_docs/version-0.45/develop/advanced-concepts/baseapp.md new file mode 100644 index 000000000..c3da524e3 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/baseapp.md @@ -0,0 +1,399 @@ + + +# BaseApp + +This document describes `BaseApp`, the abstraction that implements the core functionalities of an SDK application. {synopsis} + +## Pre-requisite Readings + +- [Anatomy of an SDK application](../basics/app-anatomy.md) {prereq} +- [Lifecycle of an SDK transaction](../basics/tx-lifecycle.md) {prereq} + +## Introduction + +`BaseApp` is a base type that implements the core of an SDK application, namely: + +- The [Application Blockchain Interface](#abci), for the state-machine to communicate with the underlying consensus engine (e.g. Tendermint). +- [Service Routers](#service-routers), to route messages and queries to the appropriate module. +- Different [states](#states), as the state-machine can have different volatile states updated based on the ABCI message received. + +The goal of `BaseApp` is to provide the fundamental layer of an SDK application +that developers can easily extend to build their own custom application. Usually, +developers will create a custom type for their application, like so: + +```go +type App struct { + // reference to a BaseApp + *baseapp.BaseApp + + // list of application store keys + + // list of application keepers + + // module manager +} +``` + +Extending the application with `BaseApp` gives the former access to all of `BaseApp`'s methods. +This allows developers to compose their custom application with the modules they want, while not +having to concern themselves with the hard work of implementing the ABCI, the service routers and state +management logic. + +## Type Definition + +The `BaseApp` type holds many important parameters for any Cosmos SDK based application. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/baseapp/baseapp.go#L46-L131 + +Let us go through the most important components. + +> **Note**: Not all parameters are described, only the most important ones. Refer to the +> type definition for the full list. + +First, the important parameters that are initialized during the bootstrapping of the application: + +- [`CommitMultiStore`](./store.md#commitmultistore): This is the main store of the application, + which holds the canonical state that is committed at the [end of each block](#commit). This store + is **not** cached, meaning it is not used to update the application's volatile (un-committed) states. + The `CommitMultiStore` is a multi-store, meaning a store of stores. Each module of the application + uses one or multiple `KVStores` in the multi-store to persist their subset of the state. +- Database: The `db` is used by the `CommitMultiStore` to handle data persistence. +- [`Msg` Service Router](#msg-service-router): The `msgServiceRouter` facilitates the routing of `sdk.Msg` requests to the appropriate + module `Msg` service for processing. Here a `sdk.Msg` refers to the transaction component that needs to be + processed by a service in order to update the application state, and not to ABCI message which implements + the interface between the application and the underlying consensus engine. +- [gRPC Query Router](#grpc-query-router): The `grpcQueryRouter` facilitates the routing of gRPC queries to the + appropriate module for it to be processed. These queries are not ABCI messages themselves, but they + are relayed to the relevant module's gRPC `Query` service. +- [`TxDecoder`](https://godoc.org/github.com/cosmos/cosmos-sdk/types#TxDecoder): It is used to decode + raw transaction bytes relayed by the underlying Tendermint engine. +- [`ParamStore`](#paramstore): The parameter store used to get and set application consensus parameters. +- [`AnteHandler`](#antehandler): This handler is used to handle signature verification, fee payment, + and other pre-message execution checks when a transaction is received. It's executed during + [`CheckTx/RecheckTx`](#checktx) and [`DeliverTx`](#delivertx). +- [`InitChainer`](../basics/app-anatomy.md#initchainer), + [`BeginBlocker` and `EndBlocker`](../basics/app-anatomy.md#beginblocker-and-endblocker): These are + the functions executed when the application receives the `InitChain`, `BeginBlock` and `EndBlock` + ABCI messages from the underlying Tendermint engine. + +Then, parameters used to define [volatile states](#volatile-states) (i.e. cached states): + +- `checkState`: This state is updated during [`CheckTx`](#checktx), and reset on [`Commit`](#commit). +- `deliverState`: This state is updated during [`DeliverTx`](#delivertx), and set to `nil` on + [`Commit`](#commit) and gets re-initialized on BeginBlock. + +Finally, a few more important parameterd: + +- `voteInfos`: This parameter carries the list of validators whose precommit is missing, either + because they did not vote or because the proposer did not include their vote. This information is + carried by the [Context](#context) and can be used by the application for various things like + punishing absent validators. +- `minGasPrices`: This parameter defines the minimum gas prices accepted by the node. This is a + **local** parameter, meaning each full-node can set a different `minGasPrices`. It is used in the + `AnteHandler` during [`CheckTx`](#checktx), mainly as a spam protection mechanism. The transaction + enters the [mempool](https://tendermint.com/docs/tendermint-core/mempool.html#transaction-ordering) + only if the gas prices of the transaction are greater than one of the minimum gas price in + `minGasPrices` (e.g. if `minGasPrices == 1uatom,1photon`, the `gas-price` of the transaction must be + greater than `1uatom` OR `1photon`). +- `appVersion`: Version of the application. It is set in the + [application's constructor function](../basics/app-anatomy.md#constructor-function). + +## Constructor + +```go +func NewBaseApp( + name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp), +) *BaseApp { + + // ... +} +``` + +The `BaseApp` constructor function is pretty straightforward. The only thing worth noting is the +possibility to provide additional [`options`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/baseapp/options.go) +to the `BaseApp`, which will execute them in order. The `options` are generally `setter` functions +for important parameters, like `SetPruning()` to set pruning options or `SetMinGasPrices()` to set +the node's `min-gas-prices`. + +Naturally, developers can add additional `options` based on their application's needs. + +## State Updates + +The `BaseApp` maintains two primary volatile states and a root or main state. The main state +is the canonical state of the application and the volatile states, `checkState` and `deliverState`, +are used to handle state transitions in-between the main state made during [`Commit`](#commit). + +Internally, there is only a single `CommitMultiStore` which we refer to as the main or root state. +From this root state, we derive two volatile states by using a mechanism called _store branching_ (performed by `CacheWrap` function). +The types can be illustrated as follows: + +![Types](./baseapp_state_types.png) + +### InitChain State Updates + +During `InitChain`, the two volatile states, `checkState` and `deliverState` are set by branching +the root `CommitMultiStore`. Any subsequent reads and writes happen on branched versions of the `CommitMultiStore`. +To avoid unnecessary roundtrip to the main state, all reads to the branched store are cached. + +![InitChain](./baseapp_state-initchain.png) + +### CheckTx State Updates + +During `CheckTx`, the `checkState`, which is based off of the last committed state from the root +store, is used for any reads and writes. Here we only execute the `AnteHandler` and verify a service router +exists for every message in the transaction. Note, when we execute the `AnteHandler`, we branch +the already branched `checkState`. This has the side effect that if the `AnteHandler` fails, +the state transitions won't be reflected in the `checkState` -- i.e. `checkState` is only updated on +success. + +![CheckTx](./baseapp_state-checktx.png) + +### BeginBlock State Updates + +During `BeginBlock`, the `deliverState` is set for use in subsequent `DeliverTx` ABCI messages. The +`deliverState` is based off of the last committed state from the root store and is branched. +Note, the `deliverState` is set to `nil` on [`Commit`](#commit). + +![BeginBlock](./baseapp_state-begin_block.png) + +### DeliverTx State Updates + +The state flow for `DeliverTx` is nearly identical to `CheckTx` except state transitions occur on +the `deliverState` and messages in a transaction are executed. Similarly to `CheckTx`, state transitions +occur on a doubly branched state -- `deliverState`. Successful message execution results in +writes being committed to `deliverState`. Note, if message execution fails, state transitions from +the AnteHandler are persisted. + +![DeliverTx](./baseapp_state-deliver_tx.png) + +### Commit State Updates + +During `Commit` all the state transitions that occurred in the `deliverState` are finally written to +the root `CommitMultiStore` which in turn is committed to disk and results in a new application +root hash. These state transitions are now considered final. Finally, the `checkState` is set to the +newly committed state and `deliverState` is set to `nil` to be reset on `BeginBlock`. + +![Commit](./baseapp_state-commit.png) + +## ParamStore + +During `InitChain`, the `RequestInitChain` provides `ConsensusParams` which contains parameters +related to block execution such as maximum gas and size in addition to evidence parameters. If these +parameters are non-nil, they are set in the BaseApp's `ParamStore`. Behind the scenes, the `ParamStore` +is actually managed by an `x/params` module `Subspace`. This allows the parameters to be tweaked via +on-chain governance. + +## Service Routers + +When messages and queries are received by the application, they must be routed to the appropriate module in order to be processed. Routing is done via `BaseApp`, which holds a `msgServiceRouter` for messages, and a `grpcQueryRouter` for queries. + +### `Msg` Service Router + +[`sdk.Msg`s](#../building-modules/messages-and-queries.md#messages) need to be routed after they are extracted from transactions, which are sent from the underlying Tendermint engine via the [`CheckTx`](#checktx) and [`DeliverTx`](#delivertx) ABCI messages. To do so, `BaseApp` holds a `msgServiceRouter` which maps fully-qualified service methods (`string`, defined in each module's Protobuf `Msg` service) to the appropriate module's `MsgServer` implementation. + +The [default `msgServiceRouter` included in `BaseApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/baseapp/msg_service_router.go) is stateless. However, some applications may want to make use of more stateful routing mechanisms such as allowing governance to disable certain routes or point them to new modules for upgrade purposes. For this reason, the `sdk.Context` is also passed into each [route handler inside `msgServiceRouter`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/baseapp/msg_service_router.go#L31-L32). For a stateless router that doesn't want to make use of this, you can just ignore the `ctx`. + +The application's `msgServiceRouter` is initialized with all the routes using the application's [module manager](../building-modules/module-manager.md#manager) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../basics/app-anatomy.md#app-constructor). + +### gRPC Query Router + +Similar to `sdk.Msg`s, [`queries`](../building-modules/messages-and-queries.md#queries) need to be routed to the appropriate module's [`Query` service](../building-modules/query-services.md). To do so, `BaseApp` holds a `grpcQueryRouter`, which maps modules' fully-qualified service methods (`string`, defined in their Protobuf `Query` gRPC) to their `QueryServer` implementation. The `grpcQueryRouter` is called during the initial stages of query processing, which can be either by directly sending a gRPC query to the gRPC endpoint, or via the [`Query` ABCI message](#query) on the Tendermint RPC endpoint. + +Just like the `msgServiceRouter`, the `grpcQueryRouter` is initialized with all the query routes using the application's [module manager](../building-modules/module-manager.md) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../basics/app-anatomy.md#app-constructor). + +## Main ABCI Messages + +The [Application-Blockchain Interface](https://tendermint.com/docs/spec/abci/) (ABCI) is a generic interface that connects a state-machine with a consensus engine to form a functional full-node. It can be wrapped in any language, and needs to be implemented by each application-specific blockchain built on top of an ABCI-compatible consensus engine like Tendermint. + +The consensus engine handles two main tasks: + +- The networking logic, which mainly consists in gossiping block parts, transactions and consensus votes. +- The consensus logic, which results in the deterministic ordering of transactions in the form of blocks. + +It is **not** the role of the consensus engine to define the state or the validity of transactions. Generally, transactions are handled by the consensus engine in the form of `[]bytes`, and relayed to the application via the ABCI to be decoded and processed. At keys moments in the networking and consensus processes (e.g. beginning of a block, commit of a block, reception of an unconfirmed transaction, ...), the consensus engine emits ABCI messages for the state-machine to act on. + +Developers building on top of the Cosmos SDK need not implement the ABCI themselves, as `BaseApp` comes with a built-in implementation of the interface. Let us go through the main ABCI messages that `BaseApp` implements: [`CheckTx`](#checktx) and [`DeliverTx`](#delivertx) + +### CheckTx + +`CheckTx` is sent by the underlying consensus engine when a new unconfirmed (i.e. not yet included in a valid block) +transaction is received by a full-node. The role of `CheckTx` is to guard the full-node's mempool +(where unconfirmed transactions are stored until they are included in a block) from spam transactions. +Unconfirmed transactions are relayed to peers only if they pass `CheckTx`. + +`CheckTx()` can perform both _stateful_ and _stateless_ checks, but developers should strive to +make the checks **lightweight** because gas fees are not charged for the resources (CPU, data load...) used during the `CheckTx`. + +In the Cosmos SDK, after [decoding transactions](./encoding.md), `CheckTx()` is implemented +to do the following checks: + +1. Extract the `sdk.Msg`s from the transaction. +2. Perform _stateless_ checks by calling `ValidateBasic()` on each of the `sdk.Msg`s. This is done + first, as _stateless_ checks are less computationally expensive than _stateful_ checks. If + `ValidateBasic()` fail, `CheckTx` returns before running _stateful_ checks, which saves resources. +3. Perform non-module related _stateful_ checks on the [account](../basics/accounts.md). This step is mainly about checking + that the `sdk.Msg` signatures are valid, that enough fees are provided and that the sending account + has enough funds to pay for said fees. Note that no precise [`gas`](../basics/gas-fees.md) counting occurs here, + as `sdk.Msg`s are not processed. Usually, the [`AnteHandler`](../basics/gas-fees.md#antehandler) will check that the `gas` provided + with the transaction is superior to a minimum reference gas amount based on the raw transaction size, + in order to avoid spam with transactions that provide 0 gas. + +`CheckTx` does **not** process `sdk.Msg`s - they only need to be processed when the canonical state need to be updated, which happens during `DeliverTx`. + +Steps 2. and 3. are performed by the [`AnteHandler`](../basics/gas-fees.md#antehandler) in the [`RunTx()`](#runtx-antehandler-and-runmsgs) +function, which `CheckTx()` calls with the `runTxModeCheck` mode. During each step of `CheckTx()`, a +special [volatile state](#volatile-states) called `checkState` is updated. This state is used to keep +track of the temporary changes triggered by the `CheckTx()` calls of each transaction without modifying +the [main canonical state](#main-state) . For example, when a transaction goes through `CheckTx()`, the +transaction's fees are deducted from the sender's account in `checkState`. If a second transaction is +received from the same account before the first is processed, and the account has consumed all its +funds in `checkState` during the first transaction, the second transaction will fail `CheckTx`() and +be rejected. In any case, the sender's account will not actually pay the fees until the transaction +is actually included in a block, because `checkState` never gets committed to the main state. The +`checkState` is reset to the latest state of the main state each time a blocks gets [committed](#commit). + +`CheckTx` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://tendermint.com/docs/spec/abci/abci.html#messages). +The response contains: + +- `Code (uint32)`: Response Code. `0` if successful. +- `Data ([]byte)`: Result bytes, if any. +- `Log (string):` The output of the application's logger. May be non-deterministic. +- `Info (string):` Additional information. May be non-deterministic. +- `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +- `GasUsed (int64)`: Amount of gas consumed by transaction. During `CheckTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction. Next is an example: + +++ https://github.com/cosmos/cosmos-sdk/blob/7d7821b9af132b0f6131640195326aa02b6751db/x/auth/ante/basic.go#L104-L105 +- `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](./events.md) for more. +- `Codespace (string)`: Namespace for the Code. + +#### RecheckTx + +After `Commit`, `CheckTx` is run again on all transactions that remain in the node's local mempool +excluding the transactions that are included in the block. To prevent the mempool from rechecking all transactions +every time a block is committed, the configuration option `mempool.recheck=false` can be set. As of +Tendermint v0.32.1, an additional `Type` parameter is made available to the `CheckTx` function that +indicates whether an incoming transaction is new (`CheckTxType_New`), or a recheck (`CheckTxType_Recheck`). +This allows certain checks like signature verification can be skipped during `CheckTxType_Recheck`. + +### DeliverTx + +When the underlying consensus engine receives a block proposal, each transaction in the block needs to be processed by the application. To that end, the underlying consensus engine sends a `DeliverTx` message to the application for each transaction in a sequential order. + +Before the first transaction of a given block is processed, a [volatile state](#volatile-states) called `deliverState` is intialized during [`BeginBlock`](#beginblock). This state is updated each time a transaction is processed via `DeliverTx`, and committed to the [main state](#main-state) when the block is [committed](#commit), after what is is set to `nil`. + +`DeliverTx` performs the **exact same steps as `CheckTx`**, with a little caveat at step 3 and the addition of a fifth step: + +1. The `AnteHandler` does **not** check that the transaction's `gas-prices` is sufficient. That is because the `min-gas-prices` value `gas-prices` is checked against is local to the node, and therefore what is enough for one full-node might not be for another. This means that the proposer can potentially include transactions for free, although they are not incentivised to do so, as they earn a bonus on the total fee of the block they propose. +2. For each `sdk.Msg` in the transaction, route to the appropriate module's Protobuf [`Msg` service](../building-modules/msg-services.md). Additional _stateful_ checks are performed, and the branched multistore held in `deliverState`'s `context` is updated by the module's `keeper`. If the `Msg` service returns successfully, the branched multistore held in `context` is written to `deliverState` `CacheMultiStore`. + +During the additional fifth step outlined in (2), each read/write to the store increases the value of `GasConsumed`. You can find the default cost of each operation: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/store/types/gas.go#L164-L175 + +At any point, if `GasConsumed > GasWanted`, the function returns with `Code != 0` and `DeliverTx` fails. + +`DeliverTx` returns a response to the underlying consensus engine of type [`abci.ResponseDeliverTx`](https://tendermint.com/docs/spec/abci/abci.html#delivertx). The response contains: + +- `Code (uint32)`: Response Code. `0` if successful. +- `Data ([]byte)`: Result bytes, if any. +- `Log (string):` The output of the application's logger. May be non-deterministic. +- `Info (string):` Additional information. May be non-deterministic. +- `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +- `GasUsed (int64)`: Amount of gas consumed by transaction. During `DeliverTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction, and by adding gas each time a read/write to the store occurs. +- `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](./events.md) for more. +- `Codespace (string)`: Namespace for the Code. + +## RunTx, AnteHandler and RunMsgs + +### RunTx + +`RunTx` is called from `CheckTx`/`DeliverTx` to handle the transaction, with `runTxModeCheck` or `runTxModeDeliver` as parameter to differentiate between the two modes of execution. Note that when `RunTx` receives a transaction, it has already been decoded. + +The first thing `RunTx` does upon being called is to retrieve the `context`'s `CacheMultiStore` by calling the `getContextForTx()` function with the appropriate mode (either `runTxModeCheck` or `runTxModeDeliver`). This `CacheMultiStore` is a branch of the main store, with cache functionality (for query requests), instantiated during `BeginBlock` for `DeliverTx` and during the `Commit` of the previous block for `CheckTx`. After that, two `defer func()` are called for [`gas`](../basics/gas-fees.md) management. They are executed when `runTx` returns and make sure `gas` is actually consumed, and will throw errors, if any. + +After that, `RunTx()` calls `ValidateBasic()` on each `sdk.Msg`in the `Tx`, which runs preliminary _stateless_ validity checks. If any `sdk.Msg` fails to pass `ValidateBasic()`, `RunTx()` returns with an error. + +Then, the [`anteHandler`](#antehandler) of the application is run (if it exists). In preparation of this step, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/baseapp/baseapp.go#L623-L630 + +This allows `RunTx` not to commit the changes made to the state during the execution of `anteHandler` if it ends up failing. It also prevents the module implementing the `anteHandler` from writing to state, which is an important part of the [object-capabilities](./ocap.md) of the Cosmos SDK. + +Finally, the [`RunMsgs()`](#runmsgs) function is called to process the `sdk.Msg`s in the `Tx`. In preparation of this step, just like with the `anteHandler`, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + +### AnteHandler + +The `AnteHandler` is a special handler that implements the `AnteHandler` interface and is used to authenticate the transaction before the transaction's internal messages are processed. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/types/handler.go#L6-L8 + +The `AnteHandler` is theoretically optional, but still a very important component of public blockchain networks. It serves 3 primary purposes: + +- Be a primary line of defense against spam and second line of defense (the first one being the mempool) against transaction replay with fees deduction and [`sequence`](./transactions.md#transaction-generation) checking. +- Perform preliminary _stateful_ validity checks like ensuring signatures are valid or that the sender has enough funds to pay for fees. +- Play a role in the incentivisation of stakeholders via the collection of transaction fees. + +`BaseApp` holds an `anteHandler` as parameter that is initialized in the [application's constructor](../basics/app-anatomy.md#application-constructor). The most widely used `anteHandler` is the [`auth` module](https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/x/auth/ante/ante.go). + +Click [here](../basics/gas-fees.md#antehandler) for more on the `anteHandler`. + +### RunMsgs + +`RunMsgs` is called from `RunTx` with `runTxModeCheck` as parameter to check the existence of a route for each message the transaction, and with `runTxModeDeliver` to actually process the `sdk.Msg`s. + +First, it retrieves the `sdk.Msg`'s fully-qualified type name, by checking the `type_url` of the Protobuf `Any` representing the `sdk.Msg`. Then, using the application's [`msgServiceRouter`](#msg-service-router), it checks for the existence of `Msg` service method related to that `type_url`. At this point, if `mode == runTxModeCheck`, `RunMsgs` returns. Otherwise, if `mode == runTxModeDeliver`, the [`Msg` service](../building-modules/msg-services.md) RPC is executed, before `RunMsgs` returns. + +## Other ABCI Messages + +### InitChain + +The [`InitChain` ABCI message](https://tendermint.com/docs/app-dev/abci-spec.html#initchain) is sent from the underlying Tendermint engine when the chain is first started. It is mainly used to **initialize** parameters and state like: + +- [Consensus Parameters](https://tendermint.com/docs/spec/abci/apps.html#consensus-parameters) via `setConsensusParams`. +- [`checkState` and `deliverState`](#volatile-states) via `setCheckState` and `setDeliverState`. +- The [block gas meter](../basics/gas-fees.md#block-gas-meter), with infinite gas to process genesis transactions. + +Finally, the `InitChain(req abci.RequestInitChain)` method of `BaseApp` calls the [`initChainer()`](../basics/app-anatomy.md#initchainer) of the application in order to initialize the main state of the application from the `genesis file` and, if defined, call the [`InitGenesis`](../building-modules/genesis.md#initgenesis) function of each of the application's modules. + +### BeginBlock + +The [`BeginBlock` ABCI message](#https://tendermint.com/docs/app-dev/abci-spec.html#beginblock) is sent from the underlying Tendermint engine when a block proposal created by the correct proposer is received, before [`DeliverTx`](#delivertx) is run for each transaction in the block. It allows developers to have logic be executed at the beginning of each block. In the Cosmos SDK, the `BeginBlock(req abci.RequestBeginBlock)` method does the following: + +- Initialize [`deliverState`](#volatile-states) with the latest header using the `req abci.RequestBeginBlock` passed as parameter via the `setDeliverState` function. + +++ https://github.com/cosmos/cosmos-sdk/blob/7d7821b9af132b0f6131640195326aa02b6751db/baseapp/baseapp.go#L387-L397 + This function also resets the [main gas meter](../basics/gas-fees.md#main-gas-meter). +- Initialize the [block gas meter](../basics/gas-fees.md#block-gas-meter) with the `maxGas` limit. The `gas` consumed within the block cannot go above `maxGas`. This parameter is defined in the application's consensus parameters. +- Run the application's [`beginBlocker()`](../basics/app-anatomy.md#beginblocker-and-endblock), which mainly runs the [`BeginBlocker()`](../building-modules/beginblock-endblock.md#beginblock) method of each of the application's modules. +- Set the [`VoteInfos`](https://tendermint.com/docs/app-dev/abci-spec.html#voteinfo) of the application, i.e. the list of validators whose _precommit_ for the previous block was included by the proposer of the current block. This information is carried into the [`Context`](./context.md) so that it can be used during `DeliverTx` and `EndBlock`. + +### EndBlock + +The [`EndBlock` ABCI message](#https://tendermint.com/docs/app-dev/abci-spec.html#endblock) is sent from the underlying Tendermint engine after [`DeliverTx`](#delivertx) as been run for each transaction in the block. It allows developers to have logic be executed at the end of each block. In the Cosmos SDK, the bulk `EndBlock(req abci.RequestEndBlock)` method is to run the application's [`EndBlocker()`](../basics/app-anatomy.md#beginblocker-and-endblock), which mainly runs the [`EndBlocker()`](../building-modules/beginblock-endblock.md#beginblock) method of each of the application's modules. + +### Commit + +The [`Commit` ABCI message](https://tendermint.com/docs/app-dev/abci-spec.html#commit) is sent from the underlying Tendermint engine after the full-node has received _precommits_ from 2/3+ of validators (weighted by voting power). On the `BaseApp` end, the `Commit(res abci.ResponseCommit)` function is implemented to commit all the valid state transitions that occured during `BeginBlock`, `DeliverTx` and `EndBlock` and to reset state for the next block. + +To commit state-transitions, the `Commit` function calls the `Write()` function on `deliverState.ms`, where `deliverState.ms` is a branched multistore of the main store `app.cms`. Then, the `Commit` function sets `checkState` to the latest header (obtbained from `deliverState.ctx.BlockHeader`) and `deliverState` to `nil`. + +Finally, `Commit` returns the hash of the commitment of `app.cms` back to the underlying consensus engine. This hash is used as a reference in the header of the next block. + +### Info + +The [`Info` ABCI message](https://tendermint.com/docs/app-dev/abci-spec.html#info) is a simple query from the underlying consensus engine, notably used to sync the latter with the application during a handshake that happens on startup. When called, the `Info(res abci.ResponseInfo)` function from `BaseApp` will return the application's name, version and the hash of the last commit of `app.cms`. + +### Query + +The [`Query` ABCI message](https://tendermint.com/docs/app-dev/abci-spec.html#query) is used to serve queries received from the underlying consensus engine, including queries received via RPC like Tendermint RPC. It used to be the main entrypoint to build interfaces with the application, but with the introduction of [gRPC queries](../building-modules/query-services.md) in Cosmos SDK v0.40, its usage is more limited. The application must respect a few rules when implementing the `Query` method, which are outlined [here](https://tendermint.com/docs/app-dev/abci-spec.html#query). + +Each Tendermint `query` comes with a `path`, which is a `string` which denotes what to query. If the `path` matches a gRPC fully-qualified service method, then `BaseApp` will defer the query to the `grpcQueryRouter` and let it handle it like explained [above](#grpc-query-router). Otherwise, the `path` represents a query that is not (yet) handled by the gRPC router. `BaseApp` splits the `path` string with the `/` delimiter. By convention, the first element of the splitted string (`splitted[0]`) contains the category of `query` (`app`, `p2p`, `store` or `custom` ). The `BaseApp` implementation of the `Query(req abci.RequestQuery)` method is a simple dispatcher serving these 4 main categories of queries: + +- Application-related queries like querying the application's version, which are served via the `handleQueryApp` method. +- Direct queries to the multistore, which are served by the `handlerQueryStore` method. These direct queries are different from custom queries which go through `app.queryRouter`, and are mainly used by third-party service provider like block explorers. +- P2P queries, which are served via the `handleQueryP2P` method. These queries return either `app.addrPeerFilter` or `app.ipPeerFilter` that contain the list of peers filtered by address or IP respectively. These lists are first initialized via `options` in `BaseApp`'s [constructor](#constructor). +- Custom queries, which encompass legacy queries (before the introduction of gRPC queries), are served via the `handleQueryCustom` method. The `handleQueryCustom` branches the multistore before using the `queryRoute` obtained from `app.queryRouter` to map the query to the appropriate module's [legacy `querier`](../building-modules/query-services.md#legacy-queriers). + +## Next {hide} + +Learn more about [transactions](./transactions.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-begin_block.png b/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-begin_block.png new file mode 100644 index 0000000000000000000000000000000000000000..745d4a5a971292bb0346c35893b42ebfbcdc206e GIT binary patch literal 20565 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 HU84U7#M|-t literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-checktx.png b/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-checktx.png new file mode 100644 index 0000000000000000000000000000000000000000..38b217acdd04fb2430a2332946864de04474ae5a GIT binary patch literal 82308 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 N1zA-Y;BI{L{{e+~Yq9_U literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-deliver_tx.png b/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-deliver_tx.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a54b4ec34bbe282ed6eff81369428d02dec095 GIT binary patch literal 59007 zcmeFZbyU>f_b;sE00J|lbcujcN_P$2pfI!uf=Eg?0z)?_2oj1Qpma#rAP7vz}ltaaD(*S*Vs)R{T&eRiF_U;B055n39Gg!t6>*REY7R91rPT)T$J zdF|TuFbEF#ADwR_sn@PCUQ>q4Jn%H#$iRL1Kz=BcAi?fhJ7ktE`zCMpV?DKeI85rE zDl~$G3_BuGh721H<$Zfo=4B}(ek5dxQ{lmv@No8 z)FqYAmMHtPG?O?LqN)>bQw|M}kdC95xP7tTFXbj^H&%M)f3{iu?%9uztSYbWR8{;W z!B~Yqnyz!BX}UaJkCD1McZncjRVm~!sXHiqCl@BDzMN?&<^zM8cbQJA?h8Z0OMkoY z!x87L2KAQQ7~qHXzK3f+;;NnwWRFRnZRpySG#-63ev)hO7KW&G&b>I_?>D-wkzP}4 zT7AT3lGXKgQp>6W_{%iJ(Zmed&X8WEYQ_A$%68P?Y^#2IoXhAl zr*4DiZqEZ9!w{mt7#g7o^v+GIp8YsSiw4QSAQ3JF5@C(-lN9Ddq2{}|UNDLPrxEVd zkd|aFBb6I8f*ZYU#8T(4UHTm|9cLXM#y2R+GE;H|5dc!gKxQX*I~((a)pGbP_+0Iq<@J|1*v>GFuwr|-n%hY zW>MSoUCGdr0E0y__S|Q6FxPDhtQj(%U2&i$0mLr&`rvLT?RD_z8|D%3WN`~ZHH{8H{Cc3bS9$CLf@ z_=B|{wsR-TSplcJUm3Fg`uWcckC`$`Q_s0yGQl_*83HP*120(^QHjnpp?Uyg=@ks;=Bxf@F3Fc#2!anyYyBu9RPvDEj(nMT6de82eqKXdD{`I^r03vMTZkVe=Pmp0al05vJ@|dT9pj_IC@T7`fZJ zJ-nPQmV?tMpFNjImjdcPvB;s4ZINSqh|IO_&lG(8C4BQmF1OWKsk!@J7uz!4Z-#(# z^I6~h7&@1pdw~KyCC!)5M$G~w1W0S|6VZtdPkgqw72EC+`?#oRe#qUkpA~RfYvOnK z<7nxPX&55cC5tpSg4Y5r!{Q`7cDKhw3D$=>Vw4bQ#8uz?BKhb+9 z8?qS4{)Lp8Gvu0PoG2C?;R?NfJusz*lf2z`y>}yG&xGFY4l41|f(e!AA6+H4#29}E z6_ivDLf7bxp#2T&UnuJy~AJ{yh4Gu=Z8CUvd_0ycwRX8h0W@9J@SZef1;IjpN$ zHKZZd>wUas@3UEz!evnYg<8<=DKPhEjSNxp6=^cPZIpPNMwZ`EYKH5eGDU44*s#66 ziQB8j-3}VBiN|fBgnCWBUhiXbKuE`yHk__~YEsOABk)}h4z#c^TF;_b_920bFvg<0 z;}x`Y=H~i3ZQ-Sbq~^*qkS<9eJm=%ItX@b?V(D<9!BCpe)fM~wRoz#2^#vVVM9+8H zfMuVIH2QeFxn~g?rM5F`J6bGI{Gh|DX)ct8c8*HQzk!gNzq4`f>S)q&v*~QhMT!Se z+7f=P(71MRCg93X=y*s|s_Jlk)F?~RukiUoM=ax#bWN zo>JMGdCrAwB_P~qfi${%RY2!>(FTo5}UOs-TD_cJT@oX#NIdlo{!>IK{b0!+6yTcV@P8U`d6K8<*5<`#zXi?-*8!?*%^C3n$(~ zvHkRYyY{_bf+quEn|1DVg?23j>hcI3xAQ6uL3C83Cf%~}2P}4ew)PEt<=7f6$#Thl z{y>>k^!LwToAYJ*xfrRws+7co)Af@2@aug%SV39O_aZ8J;{*^%Sp{t`rlhYqy)Jko zve(ICVtI|Z?AebyEFlq3H5VDZ<;YgXEaIw~FHgJcTvzAQ*GGzs9EFITk)#Y4K8}OH zt2bzUAu6f&pBQUP=0x%f=@e^7UAP)Gc$TTM%1NdBq@M`bjx4Sb+C+sBFGhvqEC$M~ z8H0+%WD(WIb^lfD3VuJdELGgAJjz#^TOpQqb@4jOl26Tj9+H4XR_Cg(^gcC^Q3LCY zDmg<2PZDjPU$69yha;>zqNx^`xqWe%yjR|ZrC-diKFn2_<2fcV?+R_!S^c4nWNrNY z%q;+|;B-f;E3*VDR*UZ}oLgMxF)SNR%9@5Tq|XfB*p`&0v1P3(eH$!kstjFDcZiZa zpGtVmNDND6G*T?bCJcN4qe%Cr)f$W!be!2>z7r>PS>y6JqO|9YP=DiG9DUBiUA9mkNT4}+QMw~yV|Y9p&>VH2H#~dFd%Z}E z>@cagecP*#22=>6L|?GNvK|z#KnQ(EGt8wkGriXerYbp^sp2Cis%#zeh>66TgG;4z zn7a_-zKq)NC*gZ|CCsHp?SG4V_k_VE5iwe=OA^|rCNgWX8^f4>TM>a`2bZX7FHrFr`H;- zD=HBWM-CU3tX7tDu!9-+fFyZ^9d5~wE)+Zp)Z+1GT3jl~V0bgX_d{pvQ}0Zehi=60 z$*bsOBSR_+X8q54k7fe`^tB{y25&9DNHUba)j<=FA5N}KosE}M@cj8T0hR>JAb1_s zo@_C57hz8HGNWW>60tes^cpBgJz{-tU5~oWnK=WOouAXqhT|zd$lrW-6ynO8t?MxWJ;(`*0$5v({G zZJyY0m+oq)N~3fpsA&hVg4U^zhg zCd`vlWt{AF^SF%4jKU!V`b<8nPkxfbl}bYwR^=@}l*%DJmCdiJx)gyR>w5BrGd%NA6L<@fk^mNtlV%`T#)1XMrECD zUOnX;#lkgpDxcB0Sv|XTuxVq#clD+;xJM2~0+mSA z_ms?Y8WILrnRVgzj3GI%Wxh8^a&D-r6a1FbSQwWe4>LuwlCxVKQ!{gp+h3^-fPW&B z|7SHM=3`8ywR1hrF_oVok&nEoQRWc;!~+=rR7$$-a=CZaTlNVVwY2@t}vDTdEL4utpTVyU{^ zK^wKyFY4S|6}gJr$s9(S1lRGS5)F60@k7fc@L!ThfrQNE8f$W7)pm3*R&Vv{b@GqE{Gmu5Tns*4&y zkuf<+&PzwJm5Xs#BD_tf2`5jCe{^+!S@`w20m zwI5TBI*G(KN-e7+MY62oe-g|Q}QnS zzMTuIIYE~tH4hi+_s+k*xvv%E)!mJI?`XW>z4Bll6u*fUuYN=UdsUr8DV*>^le1+$ z{H!nbv#)z4d6*rh&##d^RgwDLSx>xi4$_3_#UhbY4)@$>#aJIkY1s;%8P0Ei-2X zLfK_cmNC9B=o#Yv*>{|bQY6{MOH*;E&W&52p`8dUd|AXw{quHmec?pZ8~1GP9QF+N z37e5>M>C(()x6DA>&)kbOwV;}^ukGFFx4>?>$>HrJ-apK;LKRUyTQ1`?u0j)c!XQd zHY(!KsEYe{8C;RP6n2bW>eRMLKWh0ze0d9%y56C88O3W*dP`;rS62nFW6oYgcHy{KF zJV&w=nGsK-0FGoQ6em)4@M!xybQH0NZUfcj_S5ua)ok8&(L$JAT5!cdb^R2SYu%Jr z=SP(0UBpa&nGEPom?@`U7le`OHzqe8;a<-8+2zWopX5WNlbPZ<&F6|l5->!E`6Pe; z#5{IXx|T7+#0Di{#uqLG;E{W*Sb;WN-KnoY-k|E)E8CWE7gc27FtbiXxVW@)IQwvs z(WqO%GF3Qc&aajCai29MPris;xz^>~m4IPp(+OX}&77irjy6_ly=gr^qy~7Y&zwNaN!XeN4q0|{LtLJPRvDud29n_iCCFspT(dWMjj3E z*BuquRbn#@a>NqDMRc|S;b#6U^ycQh_bfVu$4mK;iG9aoMB+*;mKy%Qm#dp0s{WAG z{c|WJC-^=1yA{FlGBc-5Sr$aq@X?QKS;m`?TdIg~Y!h3K{MgjmVoVqjYQxOSih*m!-6Jig3U@l^Jd zDz=W&yj4b#zLWe*2s?o`-C(0qNpQ=r>e#%mj?EWVJ{x6WlZmc;nZb}U91b^l@mLg@ zC`6Uhs5Dt9&b8F@j8r~o>X*PgjAAV~9HH$YVf>G`#dyP~y^J2*|g6 zVQ2s@2iqB-U@aekr|?3Ru+86vBA?>GFd;33LQ_ApxrP(9l4R+y<(I+!K1DTfn$!); zYbZ4{+eawjYlsW*2zN609VA4-e~#%G$x7fH!r(Giy=lK@hMPgl#l0DwuQXb0Lic(Y zK3t&tRUQ$~R9>1{oAVNu`XV0Mbpk+3<6iu;2GBmnO2a=0!g?7aFgOGloQR)mh^?kGhZOu!7WF#vL#|)l zDIVI`4zWR%&{u(sT0=oDnkpo>mO%`7#0nxU(V!m?xK7s1ac7??jCLME)OUY?Jo1Ez z9?p{=VlG)=3&mi*3un&1VpNZwAjfHLTRnc}$cP#LUI~Q~A8b%!3I1+3(=fi;VhZ;N zCy`+UP=U4WNa1tKhZ>u7lA~{ZDY1Q8dR$a%$sSzcQMAdt2 zZ%KB%uL@v+Wz!S230iH6!Kwyts>tvAMq#pkIA0=B0gjsfinj^^t}Zo%wsClQ z!-m_-v2&vR*>e`}5o1u;22ktB+J(1x+IS2se~l`Zr<|5cW@h0m+fl;0I&WhAE2r+G zfp;n7f!8-Q+ANaOC#5yuXXpfSMGFsBTH1J{)#v@s+b+#Y^NF11%J8RaDoSp9r_Rvc zop20+o5JTg_%OoV4q&!vx9S{!`Af-?i*RS?_}fgJJ?TcIqG0|2<2RimLxIubwohl_ zrg65fYxPnkB)lv(yG~c2)B4C--;Q1zFNrLOLswy&aX8F#6TnN8T*OVCZJpf|3Hv$) zip+K1E+p+zGil76U2ltO%K)%HP`mR7-j?P@B~l=&@}WEAfv>Feo=?WEGlzHY=oJ|j zvDvdnvy>FC=DdKJuq(NA@;*)|x*t_)`RSK#UNuB@t#nugj~QUhj9Ojl0Ei;u>7~F} zRrtxuH|ZVcFxTPD=ac>Llb(8;3Zf<a9B6r}xec4TgMWTXXoVDlYU#(76lbT$eGuRCIbe!lK&gjHZ2hY6 zku@BgXF<|7hQ?Sr7r3IVTAzqjRUX~gU`$|Y+M3gLo-eFXj^kI^Q)re~k zAH_8ki9y>u>=jdH;GlLJ^8&&3X7r?kV6|sj5y|RePlM=1M?0vZD_iQ^v|-8oK{PLN zF=Y`otkG-k4tU+HcT!al?C`ue0-MLIDlfx*@JTXK`YgT>S{^)z_#w>aJlpWhZIHw4 z<_Lv3Uhu0RE^v~RZYCuRf_lEa5Xctz5Xl--iet6<0-C(vyAk5~*3uC91mLd4ju3r3 zmtehygp~$Y`rFj%f&kt%c~0x~%K0GEn65|NI)dL>Ew4ew*a*oQu7{VR#>_cauCJhU z7if(y5+rLqATEmfHCo)gFD!+~5PwcmHVs!l-J1sv@61^)WHUYI@x*q&keUp20_zw6 z+};jAGw$cRU+d}b1MsGB-GoG>1R%e~VfchppoQ`s{W-9nM1sdCq5Jf=lAOHvS1<(X zA(A-IGAerFYThR~ZASTsb)Fy*8Asx{GPHtSM+Xq$UI6yYn(hLSQvFV;_)jG|| zzQ+{Trlb}Hfc56q;5GmLSN)woa#bnCj;CBQe8sze^zr*ghkX5&V%CHS%Z^j!r{}M| zu?{uI`}8Y_1-P7(U4lR&IFj0jWmq_Ks>rO!j!sY;jcpYwc&Z%ffktXbR=?YG6ui`W zvMMXT0!gK;`)Eh6a=rGKiUWU*TW8sWVn$H3UJlFD|K!Q&quptbSvMPt8S%QBq5MQs zPSTN|sMn>^C zyBuE=0LhM2SZj_tId>(p3i_QMOnJqL?}ejhOMgmA5{362KHH6>35;o)l83{(INCv$ z1214C9eh)XIM3hNEPzoCJ!u?YpD>I5W$zoINdTUalM+K7+zf-L-YlZvOa;x_leofo z1(0d2h^WoSodI+~uB2UOhg*dA0iqhHMwJ!@T-N#{0J9Z|KB&L30vKw|`ZeOY7mv^w zys6hO^1DW#3%Lv{J3&Du3@WhZt0vV}RBPUNwou&d=y-gH^sjHPOym?GIP0TDMnd{{ zN-`OuZnWdAt$7?QSYZMsb!&GNwZ6UNSjeV}p%!p%4)c}1Pr+llL2bm$mOy3sc9qp+ zeN~CL%nQIBwC@;AVpjUW$+p!w^pZoD*6W?jZQB@Hk--F_r62j)ZN04aoD}pc3xo%e zVYo5kZNhK_>S@)ZE>08)r;lX_KRSM0enJTPq-8oj)9y-N*prxZgtNBoM?+Lk?c_bY zbxJ|gXD|X4`z7xU0`V1KeXmS^mW|iA}SQ zl{29Zw#$?e^_1X{t87Plwi8ASuz`b&hefn@SQx*^JhfI07alRBp;XvVItVNaNuIwF z7?|WJIANAn0)eBYzr6F@o#%Fz<-&EGC^%!p57gB}g2~paVt31#1~2Y3SvYbc8GWMT zA4KFsR~el#$`~V^e+J^#<%bKIdatrlwlk8HgNli!+V^=dON&cnzE#XOA+=U;4fr2mura72)O zR`g2^v}2K*D-)oT6HI9Q1XoOd z#gnXnhH1n4?b?)>)HC;D`V)KpIv?COVqQ8uHf?#m)xmKeVIC3vGk$GWQl~FW+$=O{ z#@3u^MAjdsI4AXhN(iTDaoGV3KYs-BDosajJPC3!{rG_6cpP*nOW9oTha)9sj#J6< zfs!oF^jXjSc-?qsmdkRo{c*~rsUI$8o@dH>4}KfFn-EAu*2Z%8DyDFwzaL7SW|rum z+}TMG*SWlpVoC4|;s-~z(g-AvlbI85Y;$tEsVs{6$ArUDLEdorRy9%O)%o%Zas8j; zdPO|d)|vhTroOu(XHS0hkL=YE;ccWHzx2PTpQsqhj22lfQ*_w~U&D4$z~@3>5P(ML zn$Dgsh9*KOrRHEzHN)z?VjM`m@4AIeNk=(|V?t+nQ1{>ddgAW&)j@A_Wr4P=rfe?N z9p07hHk|*-XVB1iU?}^0J)yq6_i7xtpd8Rj#_JMRevzQCTsES@AOBq>4AWLAbITVldhdzz7= zs{J%$3#ov!7!xlG;=2YPEB*G4Yz05siW%)s-l<>fpw~N2(@Wmp5%zJ?B4!aC2pHr) zJKERW*o6h#AM88UKHzoqJzrw>aoOUuow0~7GN>B7eXwm+(wDiUq!Bi$IC(wnLA6=R z)zcw{hS86DQWNq|5iZ{sMD#vPagS7=upV8cWEr(B*-um74LF~nr=1#_@nrhCW;Qv& zy*}3a?IoA>dxyqW4bhU~4Abq$ikVxR<6W^O4<|EIdG8#be5yP6tl_3vmAQ~vdPTo? zC4iM#*j!=^({Ea)_h|w4LaMI>*gEiAErb$|)V5N&51Eh_K0ACrb)TW>bBmQmLqDjB zN;dV(iG3DA435@Zh6*p2&U*@7Iw(?evGqIHOWY6VnKThDYcklLRtKRLALK~y%GsotVawa(+gY8VY zLU@GEy-|a*$F=I2d*Kg1xz`ZZzb|2tuHV#~ncnsvC#RfW_QzPBkC;M>R7+wqk;po`ioH8%?8zy zGTn7!OOM&%Z+$ktAsOR4I`t)*lqvY+Jc;wU7IgloE_da1jia@V)uTm;>d7&$?Xl*7 zt0(sT5;GdYXBhR_Lq$jDNu--$CC!yhqwas(M^Y=<6EVcrmyyn6vrN{R-87^sT4h2$e)?|N9_iv#7ShB`YikI`?#} zA%o6$vFx*Xn|ByYJ7M~0Y$!MC7c0Z-%2lbUXPGYVSe~p5&!Lhs>`bZ0CIT)$JEWLC zV#_r8%H2?2TP0jn$HJax{Jmvs!!_fF_%g;PH*M1Dl4IZgUCoJrPjtzpjc^1>s0wL_ zbRaN32h`463CUW^2UQkj#G837=9nz8`$bOBe=2FD_(DMMqpMAQfs3Zm&NuNlPFL)2 zE;qW5j->*Y6%Z6$X^zc>#^zt?T^gocU2OLu(Dmr1VBkOsgcU@cD+w}_Vot=`jaP=nNQocX|0zt zb=gGPhxkF`!qq}ixT0 ztsbvdm8_c4H(P{sv$UNWo<#c8KP9l(T_>=2jU#gJPZzR#FnYv29d$~wCK?_;+_-f5 z8bf#c{?EGGf>twP+-cWlE)386`w9ah=-khhW0j(PR{bXZ`Xg}y*G3jGs;_1P3d>sU zi_2jm1e;YNd>aFEn05#0LdNPnj(3xd_H~J?cX&REM_`tZZSIi`w+e=xV=-S!Wm!*8rY z^f>yi4L^vAwE4{C99cN=`Zb;Aefh-LT5C@r@7oZv1KbOb z5HBtxfwHCE34>R6aP1Wl{w7s}3E`?dVzZ~mjor_N^H-Hrf^n`Y0M*dF>i+IX?cPUk zL6_6Jv6Y@I6y|dkJk94*o2@l91HVS<-4d;#&|SvUs98PJLr05j3VOq4UFoiNBoNEM-$EEFt61I+m)Ny z_h!V`%+`eLGj<}Bbdjuc7o@2-Z=+CGm|?^W4i{&~{SS)(-w4piARbA2<-s>XI~AfM zB(DI(PjePa#n*9Yw2N~qa_b22kaE}G%kKIW!o2D!M{f`9|H^+K>nwkKp!_b20Q+L< zmI5*5_7blH#(U*OFi4#{zrHPkzhB`721kFxD;Nl1+zM+cTTM;Bo`k?Cp7C9I!>pO= z$=$D64VdP&M`?P34(E_##qDo*4H1nvdA}4avZKymJl+|d?3&^zlndFC+{X_ZsmtLH zv=qQJRYtpr{TIj%w5JIIoLlP_R&oujNk!(Vq7FzH}>y+T+7c)eMi4-)fpAL7fM`>v&BrJ z^1XH)+UI+>GBOOuo>x7qui9hgJf50p{ZYx8ep1=%^*H-5z%uQw(`s z)5CkPl<^8{Hs3eNdG(5jnu!|Y+Ak%C{zv21n`@s++$9WG-po(WxBut_B$%bF-+~tsLR_LCUa(m zCCg&mJlp*aO^&4#n|K#SPhFYqCQIjAFCi$7~jVWsj^^t%r z-=i8(m1yegV{ojxZ?nX{pte<>L}%lpIjce|%D2 zzd@Z+3dQ@T+62cV2>CsH?cIWn8%=F^{|iOy8VJQ+hNmf=SVikd6E!FmE8fs#*$UmD zs*?M{R^pfeShi1HU+=NZ@0_lm^zCrfXp z$y)&>yJFh8o2z&h??NvW%vsZV21w>)jr;U^zbx@h|6;S|CNxb)VZVEK;j7p< z69<&U`y->2H_SdTeFG$R2R|hOBGJ+6p~XQTBCncEDv9sJga3tZ=tB#JgdyiCu&iv;`O z-?Z!Qs#5hogK&;k^BBfo>5oL9)F-J6^0_g44(HvK~2qV*p4v-=yXwOdroJi$h0wI*3f zTNVrzN&O|unSN)vB7!@o-7f7P;;&xruRBs=N2uYk7*;rJHjfm{tQNCpuJlA{N+sWA zOL!?0_iIcN1W6sgX!qsl=crFq1{G`i>srfXw&OnGbZ&c8wf(cZJyBa2f!rRNrI^IC z-kP=oc|`XXsiq43()M}02xYswYVnBQXV8--p`tTf)^C6O z>&V7PQGsIT_-Q(IZI#$bhQPK9n*Q-EfWA+hNRp6x;jnEtO?1yOn+U*jLZ+7A1)2ar z{%7`|wOzk0Y0(#iO|X&f(sxg^Z{d7svCLz8rmw*IJ2}1c_qQ^bqal}hS^mxm>8X6y zqK~z5Rmjm`O4OdGjcI(0|HWyofD&CWyW7^(cu^S9xmpecCF@Pus2A@toUaWA+Ib@7 zGAcLyj2U$SO{-|yebV0j8%JKvMfgYFaC~`5Ts%1`X5LOg%T6eOv<@OVlHq>&4G z*eJb|kZPxa;5v*t{T6Qc%*g!Cwsnr`}r1!mekRh#U_~1mUElb2@hU30PNh@PbY7S zks@fGz(70!cTLNWZ0Ow2LfISP&eEog^xF;lv8pG`Pog^e*s^@*J0aSXgH>oIuaGr> zf!zVGa3V)J$vDg>t`y1<_??%L^IYw#cU);aiC%@3`X5%LOLu2l8sJ5X>c|CfD3J#% z5idrNiEP(yH=Xt6#>fD)b=+H90T5J;B?uR>=7YE5DYEbF9t1%{?88fuy^mXy^pUI~ zf^#aGIxUQ3x!LKFmYh<0tPE*pd4#aphwkjOMn^WA6M-0R`H8 zzQiQKsNL-_@tFRl)2?&~D35ucS;R~UyQgYh?7=k^=YAhJ#-3b;$^oLr>76RM1y?vB z9Cr^Tm8+Wa831eJfRaI#RH~LKJ`T%LLg@e!pm8F`I7qEj6j1hU3VtOD7*pg91DbI6 zd8wB*k+g`xG7^CH#haJA&z><4jWfH+@pPJug+f%vI4Q)v05EQy6rBRP9j@C%wC1am z9_vLqU9tB4*lUiu;O1#IATXETOuc{Yhu;iyOkBBYR+Lkp;VXMgFfg_cOZKV;Ou_7BXcc@mK;fR{X4K%URg&8j@ z#gI~!hgsa5hMCj60xR8GjVc| zOGo9B14v-Fb$yy7ltt>vH!^+rq&k2lo0#BWuMNM8ufwiwS!H_|h2fLQ za$n}T_&@^SIMuoqAduK!vs~{f;bN_Vize0JT27rr!Ta68AvEm2Cd=LsCM;c;&$bKn zuoQ6eD`h&yYB;Y{XwNf&wv)_RN3M<9bQn27;jeJHUeY`RqZ?7Y-HDSxw=JU6_))KD z?ckG9bur65czR9#i^u0mD2&y}Jj(XpaL4>I<)x9zVFQtqS8zn)S2az$IKW2GK>o!> z*n10Ho890+6aWs$_bxZUSUQg|Aj_xgiyGX*04rK#B%;Vm4-NsEOPurLL2%_ zwV@wOMV6R(fHNmtXftw536C`S`5fP<;&EB(d470rctA@Z)yzZzw^3qXIhENYz`Fie z`oU6m6n8n``j1Lz21>ew`%AxMR5yodH8M)xxHC3D?%Mr+U4GM`dpC2C|79WMupt6_Yl41TE*dp`E zWep1EhuBu_jg((Td7w!X7`15T z445sj6b2fI-azJpP4NKAM?HlAIkhaK8sz(H7r?68$0ek8)p)&_T-XYJ%!)Yb#J52Y zVXe@bL61@pm=&%!A>Dv0=sWow+@?TZog(YJa>VU;O>)Z#q6SL+ZczPwUk3B7n>U5$ zZfQM*LKYb$r%5Q%_H`L$K&y&nBOGzQ&n(A5VKQylin* zhhaR20Rf-N18&rDWlyLSRM(?R1;7)FSUG%}ZWWpx~bi4mp4IJW1bL}Z0#Fj+#sd#T`XF)X`p&-iHp zKA7XPshTpSsJI&2Pm8eE_n&;L;{lgXj+o>^r;^Wyyk#N(CCZ#dUjGrMy>%s}Y691I z7nCWDPCfU&4u9Bv7Yc;5U;9xuUU7H z0Ha{EiG+5NVS$O2M73-PzI8RY*XRjwqxKAX+gGqwoWNGV^*LtQ=+e?sawAmNb6;4K4@Sg2}3fQ^+ezs+g8Y z^1B;gmik#a>9#%kqS2)L#@KUNg}a=;d=;gU?H-*~fQxI`2i7)x)H@;niiCoB=onn4 z8w8VDBY*>4O*aBcXFEtv&%lMz8wofh0@08{lll>G^U+EQESOyWq`R2o;m6?~aLdkw zM#1Ek%MM_D;5EhE*N_FC`uYLdC#*KJMKziD{lFy~l@xaEd0{@WI`p;EP%Z2TT5hal z%DZ|S@7>l%8l|4kf2o=yF&PXc1c|!TfD>~O1WFX_*P{>EBZVdpmN{(IdD=r>K%p3| zXqJhmV3%hEIw~IjZJmcIh>47|7(x&MCf!B_;G{`;}YDAoR?ZkZFsMP zx<6hwsE*bF^gj4p)`~X*aB>+LQQ7YkRIpq#bs|2D{E-6^D2t9T_TLAkP{<7oXI@N; z$Y>~hnS-T=o%PS-Qv-p9t;VzsA=gD-i((eQr8&$C;JUVWX#FCk-=UFNGGA{51Pce~ zy5+TO(0@b+Uq-UNdisouNy`;2Io;8O!C!^}ODnMe&D&t+u$5i0hW1W zS-}3sG6djr^RkzVWEfsxXW68Q|7S_gyYV|QHN)P@ueWekFhQy7r*)`*GYb)BPoaM3 zLa=|ZE4}Mw)JnQfKvdAKzK+gcT9+OH)FqM|LwC)@Z@NP&$h=wTt=5&@(Wd(2GmP9o zsiL&9jC{auT{py32>$aCK7e59@R;JM&}U^RU2e#~P6n3jp*My%SCT z{dss4@GoAXFdbBoc^I!M6N==&2n>!~Yp{keScA&pQ32aO`!Iq5f}Rlgyu5@qfgD1lEB4VJ$dyj^Ft6ai7+I`53JBBI~-y zo9jYakS{}2_<;$xz-aOBwd2JxKzPO(h-PZ3AVjr#iv{En<=r!bdJqngWV3&`0RNZ* z#9N}khvaN3G(S0%2C?>6%)Eeh>Vcpv|FJhHHiR|25MaUe8(jAP zsK$~ID9*s*8AsY2+68I?b2Ic(FY*4yJE_$F;!iO=@2 z6%Ur0RRpOWP*spUgYrL?mxho*fy3cLjPdD>Y^`W|H_Z5ax_bKVRSa6`4fd$yKJw#A zFhR?o(wJNHkNkz`f?`F@?^EjGq=J?>$B6yebbL0cs#qBMHc33S#^XPy&7UAaXB(YL zHslJv_A4b6$%)H=O5SuE64>x{A*;bZ%7O$U(agx3A1l?Oqs!Ur0I*bH1z2^3_o~SL zIe_BPa*#DPHnI~SD(@h+nD<@O#UQK|w2hLC8Gf7)jN znLC67zFyhxt-61o31tZUE}RHW?#C5K;gSn&F_&Pt52G-PzKxnE=$U~3yW$QFND0lb z{_+br!k4cG66L66%kqym$+l<$)11S_2*7Q}-CjW6Xp$+4`76z!k6$TtQYYQyoKi)$ z3xT8eH%^t{UuO>5Abk^+(qM8QgRva8yz&#+iXor842k;NWB5K7kzog7cYPR7@!BJCl0Zqvt2`_Wa z{A>vOMW!kIe%G?xGiN|w8`C2C@ZT;pSE~Co7raBF*VUQVFIe=hppFVc@3p~S(xcF| zi|_`SA%{G0qm2JuH*(Xn%XwK^$XoG}41FFTF+u8Z8sn(c0q=~k68&3$u9@Yi9&j9^ zYcF(dhBD9lt^(ds@n&`L(J2mkiT#)4R>_Iz!z$1T91$c$Vj+4e;MZzwxI;qu6^~hR zkxxQWb92y!Vx$Eb1lgwX?iF~agwPN$)c;--0aK{pb>s7?Dx+OQS{Mo;H^;-xNxV-T z_@m7Txs)C<<_+!y3YuP%9|aAY_N~M}QW(MFS*UJwcZ)#&Ju)f9$K5i6tVxw`p^e&U zh)&by-XgfIrE;%xzf<8?90sw~gG2p)@ePpCDh_Ye|LcrUN_6!>^xsthSR}Ob z26)E(wpf_~S?$@k2wCU93(W{{nnOGP77cya|9=v#Pj|BNm_ej6>s1Z!;wm%=mn%aK+ zQ7;@gJ}&U9#=*~id0xz5m4vm>df`-XCzaNy+CSKSs$qPlUc%?%kjGlWHfFgw?@Hfl zbW~;n#3z&&>p)TX5l(`z?AsUMA&Z#C8XA36pv$JJm@A%)Eex2=!9bxR|T<6v{`7hu9y1B(|`FxuK+mrZT-+4k+c@5Nbn+AZ-qhG(RGy9&y=Jj zmql=oZ`&TcUZlvnPtqX@qH0&_E_Nym_){iZVYw>Fl~R<=W;IDvdwDLP+i;MH-~lV$ zMmzV7yLVVQ|ELwLMVidFHd@jg&%w;O8yJZ`HOtA_V9C5!1}`^2Jb+j3fWoab=il0< zz0?%!XBWH^BS2`61(w_pS4;Us+Z7OOdIF%VXy-` z0X6liz^Hl)q>l&&`)tk&g_zHhbd%O@n~`C!!T)8^_5KOt90Cx=u1s&H>Hysuu>EIX z;NSMI?ZE3i^3v1O9fcfcj4uFUcFIS6M;@_vc?w>R)M|LVVR1~j;RqV)&eQEQi0TN# z_3P+}x`tNY3)rn7sM2+?n@Q<(@Y_Dx4(+Ykh0Uw0dYE1!uQHp{DkBH92zFNAP77dID?`j z@GIsa;8&Pf%&$3+5CRC;fFVX$wDWvI)~@S$$z`yW8wm9{Vd|)a!AUg4FxhmdUJgq` z25^0qWZ>CtR8-3j01>kupgToa97XQ+pPR=X*FFK?uKJR9QdtML{C1CMFTU4D(MF;Ifq< z2j*{yB0i?Fw+Wki^be^W7#lI@+4z76Y!@a3(Q}jT+#W z!2VKCu>vPlnZ_(&gR6iqaW)ZvJI377_C3|UBI2M&v7?g(uU)BrtUVMm&T2@G>h0}a zZ33>mN zJKnEt1Zvb^ZucJEm(@?cJ9xn*54y!z^t44#|D7lhWt4fXOBT@R_bmu8ClPUn?;Y#%tccnMwbxn z%WHSv>VfD#d!ql!jW&Uqrvq6!-1RBq+cCihDjt<$cd#rGNvjjjLfrpp~aqN{) zb%u06lUjmIq)iZ)Q~|7zV?dGpbn26LE!YLXFaN9w7yXcbdS^CM81=^IET+cgoOC@< zOKE-lAtA3?WC9h_+b1=`gPB>QGu6Mw!dsXtFS^SP#Fgs zvg==6LqI&!*j3S^r!!tk^RTx0Bf6UdK^f{um*(T8+kNR`N*^q1U0|Yb5KI<2;2B@x zmGs$}4OVa-zvHy>HP6)_1d9;2tN(BRtdmPlnf&5X5^xzhBWhk*cn)}ztDkHKMtLK0LJ}vxl$3Hi3Ht4He4^?} z4~P}AJ^Bh12Ts8KmI$yuVe`3k@rwPyk-`VouRYP=glN++=f4@1g}+4q?}5d#mhCxW zt`n9c|6fb?H?+k_qRAep?pr@jH~A|?X@D-{)=)5TKAcGnKX0T1>v()FT{3pdwdv12 zb}3sdHJ9?})hV!Io|2V^rO-z{Or}c*$LF(n{N&dWmuJ(H*KPuE^tnx+Bttqd&1Rdv zF)LzrY257^Ms+-p{;#J@(U=`n+CKB|jJ>*?$SSiWN0)A&WHe(1b_d#tXXc2n*oenQ zaZF+xAbGDA5VQ?`={|hI*hfy(U(_e+-0Z|nS4SG|z8`&yB455Q+K>I6Zt3D%4qm5{ z(jh~|p=|I5Y4RY5^{Fo-&fWpHm6A190I?x!2_e3ExoAH$pY%YdIo-A zE9d-hV(8kvvO3OU4PN-wM77?L_m+-LN*}BA^XJK58(>Myld|39aK+p2@aFfUYxg_rQ^Jz|y z#UxR>0roO|?B2UBItYDgmwdq~FVkX<56C4qlKx93 z(3XyDA#$mzw4$h0a5dY2hWPmJ-^J1A8`4o8|KUoDF)hIGvvC<$P<{zl8GZ#t zN-j(!MT6(DWp+{Buy#Ik-p@ zho9@%J`aGO6>@|sO#8G0<$k9*3@#E?qfSXWFa}Se_bb)ET!_FLG`x^Iu)qtw*X9mh zp1|**ins=Nb(0u3kaA}350c(CV}!EtARVB$eASG|>1QQK5bU}!cOYLZSne{_uw}6a zOvz(nwUf4&4mgcsuyeXbtkTL{=B)vHI>xi?&YKk8bviu`)W*bnYo*sRjwbK>Nl1vS z?RqH%!I@;;|7g2mUEB$T!kAfhO$fcw(Ui`xP<&smwpLmIbkkukEKp8^Ew7~PHu`0T zK1Ol*^^`M5?t=Y+eYsk4S&ho?L~H>timt%&Z3)l?g}sU+uq#MzKpjND`Ak9XFn%Gg zf;n`vT$@pNlQf?pB2e}f%G77a2wTdbGJb+<-`hcbRjW=Po%WHI2)s~mvr(?oHO z*dGKB>b}%Vf!MX$&N$|Y zOgX2Gx9{FdPuDRqMfqsk0>2XYug{k;VC7m-H1AuTzZV;GW)wL705O%RjEB>z;0=2F z;!B8;=$;vuf9N+*CjfHD%ZNhAReE{vGRckqPhqM_-w~YYajL9}2S`mrf+)=m;Mu6pIs_CB%v9CTix(Qbhic+9kWKO0Y<4h}`#!Q zyb>~}{TctQ`jWUip)$m=Mn)iJN(6K`zwFkQoi}UK z!>y{bjn+(?;PdLsAc)>b1`{l~<`*AuWmX>4fk~f0Wie%WGQjeFpu zD6Q>f5=tgTUmq^`u}ZD3-!lDkBpIiop4GTni3w+|f+Ap92O_ChE3FGJPxhEMzf_JU z7Y4OK4BzCL(stwb^Vbg^Lbs5At7xkkR(fVX=`C)8lnf8Aqo=(fnvhMyV-R-h~B zJc^YRb_eYiHS!SiKpXY+GVe`^d-O6s!fTXArh|GI_v^UJ1f&+qkIV-YY+t50Ietcd zc9du)8fBRH%DxF=l!mHBy%r}me}Koo)@%e$%!GG08w1S_yZidHvOYF--YCkoFapPR z03C$!vX&<0eLe(CT8hFpy@A<)0+N{}m@vUUdZ)3+2ZvH{IG^x9-HzwuBsjkDylvZ7 zZqw8zCL;?YLiui1|C$_!lHn|Rv_U*TQF-vZbeQD;g?NqG1^x^F!tFuQX*?w<5H%7lTHFd9cpj06&~7#zMD{(xua%!rk1l>KxWZP*)0qZrcjrG?IsJDR8N z4CL%=op>MCgMda(jRj2RM%OScY>B#O3bBl{18QaO)jLV;Kunb2GMDfd2hMkzBhmMD zFdP5N#DD=ZKHTz4o1n3BBQ~Cf**mEl$fIyMl#B~)Phd;16rg5X-fcv3*u0V-hr4))@ZPf0TSJPT9L=gdY`Jn7 z_cC?FIQcDJrk|Ba$Yp!czvT;sJ;6Vpla7g;K>XdeKrr++34V6nkX%$ba;#bNA><2) zT@e=nX>Y5b!BS?@E&$NOw`&)@fZgOku_D|HF{-{=HU+xW%N`3je{9k15|b`9C=&>1 z7`kjGKpj#UPOCbKSW!Gzw9-bQ--65-=e388bgb3Aadg+Hw(#1;>Rhb1;LrVJ&0Iz{!7Aag%58`7LsB@wMq%P6Per2uIT8+!G7();EG4u zR4vI0ONz@YHy8%BmBb4w600Ol#&}B^M;9<9S(Dupf z6QN}54~2RN{)m3VlGqY-DemA@1{tKa=d))J`@__&R)WZ(Nk5DHV%0=``F@1O$+UhdDR>IVDg-`BL)nIBVL`k&IJE;Sy;NVGeMirvPw z_Ap9tn0#oCIKd*Z5ehAe{!|>!u|+C+(kEAT1xGQY$5f7K!jQo~4?xJ}ln2g^Lvs4c z{>TJo3uZuL!u^s&n}#F6EHk<#$?UhacngQb9-WvgICF+x!p-M<*bC!ofBI4nnJ$+r z`030?YxPb1S*ZX%_hk>=5td{#CZo?Q(TuJOyaI(mq3kSBH_e+HWECBGgF{>aTp9G8 zL(>ypIK5}avI6efDfH1g2gkcXkykXz^h5VZ7q7C@k;DkX9}X;Q%RQF8!B148REbyn zj9H@7i+*)f#yl0>6(%bI;pP`;nB^X3Hb6$7smt<8{(9hFeyWgMq`ld>KbjfM8@^3! zA0>DB6u46~u!B`}BB&%TefzQ*Ev5?2RiEkEemd5;kD?#~gxkO4H0XDAFlxOYwh3#a z$NeK=uCHR{5au@^pc5XJNlQ)r?z6u%@LBfRDB6_Z_tB=*C6r6Es0)Kz4ruxr)w)d8 zV9t6vyE6nhOL(v(Q7l3)YiG21&{VuI?K?b@+KN2X+DbG)P_r2wqsLPk70oZbxVwN} z2%x*m`#aKuc_hYT1^w9P)6FJI6Om-#X!E3oQcA>zCiIZ*@;YC$nAR6ke1MJk!{fQK zpp!DsdAKrv0fb|_yhU&zztdrpcOG9fd!e5?@12Y#xnaA?95^6%qH$JA9>!?)A#A_z z3QMkwhX1BS{d3 zhRbR~WJLUviNjB5Irbm7rIa@1li%WBHCPPT&*Ixm%)A=S=pOd_GNWwGHb3}gpCEta zxab<1C$W$w#V^tt|4uI(_FZ-%@bmm;&i$v38W-IFPJ;dz-hXb^HXQCGUv6QKeYDh{ z5m@_d%-tUJDq7#Z0UP)0W+tVzYi*TR8TPi`@Xb0a(1Ibj})_hYF`HbzcKRAX9cu1$O4i=7e4%0>{>>108IQ_ugDl@qgVfjhFldqf> z;bzNFK{j}8U!OAn0XE+UtPXWeULnQ0f5$_?IBQ-59A6KU7eA~k7*j0%X+zqZ2~U>* zXEFQGZqcK4PT3K=EWD%V8cj*u`>A43=>v}8AZ$mMCK1|s-BFvE7O@D`^BGN)6Bk$&#Kj|2DKsV&@c_(p)|8Wfm(osU zlp0jH-hHBS9TRiK)NGs0ZOPP9+k%zs>BuI${y35P4_ zAM>V!hI4=U*45hmL4w7#g@9Ficn15J&5Z{ zc8qzbzE|p+M?+8q&10(~SIVG#GRuqZh!)SVbH=LJX4!hKAs z*ED$86f3ox(3wqX{Q7JndXv*q1j_IJPYa+!Od`akqmnRszO|x%cN_0P3yo1CxavFN5y>T_e ztV=an1OXV#Y)k$M=)$44}xe&Z5RL#r*ImxUO>JJX$mmf2TyF*~?pWWvL|E0c$k zQ|n`7-BOkM$|K`FSUY{cdzD#RF+J2>L}j1rtA*?HcrS)*sPnL{bjf_f=m*<54-#PjU}@vH z?Q>E^>j{U31L<4AACo&DdY1RvxT84hzs|7t(70(HKKAAFbPRgC@q3fgRmEfWx!r61 zvW0W5CjEB@OZ2EBCbAUb`b8y8Mv6w2wv?BuyN3pcR$Z?@q~Y)In*a4oqrc}vRTW4w z1Nj0}hKbWpO0pW{08aQ;G7LbNy6>)L^=FtMV`;|v$1@s8VGwN@S+lq+CbCcLpo5L? zlT0?>kJYl>_e`DFJ%~tCg;`9;Kh=o`RhOyd?7yR#tm8l_?h2W`9>1PDU<+C1mu6qLI8A!PI1xJ#96}W$^0`?J!^v$QsMxFmd56T9IEU~;d)U$knRxu#~bDYIY!ar-NZ?2 z0FPGaAO#FWQF(P28&yNoEcei`-%O}pV$qY5a7bJ*(n;t)AOsHJeh+c1I*4CqYLf&_eYYvmiQ@7_3{=_&tp3DZEBE6nI1 zBR?C&j{IQydZEeV2`R+k`$5Ze1Umho`(Vxk-`Ys|sn(jd*f>y9$1?rHZ)S^NBQ69E znxdO|<6eiL#S1=t@%P#TQM5mG51Gkdb27YmNg94YFt_%=uLtcZ5z+H)G1SR_RmN;o z<0ix5uHQ_DrNrfxV=%1usTXoF1$VELMeI%%x@As zB^eK|56i?*Fyb`7Gvkn^xgB{6H zyL9>pR0hb?j{$AGkLY)G5MwACSA0Jwmw}1nS!~McPC}I~ky7UJoT8bsQGu?X*w>ZB zX4nBTB=>7>B0@I%9oX2`xlAys`C?@TIW!G6-(zqWFlD25<$MC!SbcIgm`tqneKu3Q|T#B_SnE>G`1+G+q;^+iEvR}<%MCV4x)CVxer0?H} z_QId9T;?V@@}awS$+X^+BxFa?^pHjV=SeemrE}f6$JIX;6~v~^^_YnzhW-Ay?nLO| z@0BPTkA~%9;l+rSPz+opdXQH^J7i)Q|2c~N*Yci!!@KXL$(WAgwrN?%!r+@4henH* ziGg@adzo7&*zEWXFvQ1tGmRS|xQapE0fCCwj@&T+cYyn8YOE=*WvBix)lf!sVqFg=Q$8gZ;*QtREU_(8F6B|HmnTzT3V2hp{qQ7vOPKq^v>#t9~Q z_(iSQQ7$eRuGtUL*$dMtsW;kXY4ub(az6`KuGrA9$Wch#hDmVS_8N4b_7EUC90E%I zHt+4vcgAs&N5c04i;o5Tv=kSz)SA1Y$3DxG6H(jBj?l0U-(`OWTJAynG7RI;dq83z z+c@{(24+k74FYs|1RNiOl6F6iSz@{wz_K|f@XxLjmr@Q--Div*ZJHht!VuRrYLN2yR{NJ0GV8}?zr3(q(K@FQLsUO=|mns>-HUlDm!#f(DPgdMij*@gBGQ=bk^q#o{{58us!A~}@0mK4by1qY34Wj({9RPOBmZN2x zwKtMdQyKO-G$oZ!cdVlwX*2Kn?fbYv0g8wG&Mq5v(EKmpW-B|)4d4U~`isC{y!Nbf z=fN}Rw>a+$o~4RGgnhdHB=CJrvD$O@uy({T6YcKszP-B6(OLBlB(+_50~Pn|D6A}n zF%#eaN@~GQ#%TtRY9~RF@X~?wX?hI@WHfg0NP!f*I=zZsmI@E>o+o1?go!(d3A=fwX!c0I9oUCH^bt|cR-Fws=5d== z#yy+%(xaVD>8>Pyqn3ny{He2w2rH2J)pxm*5Bbe6w>FCC+cjE+MEopHFGnJ=qtdJL zRHJ2&y#hjc*v5nl*Z0@h;f43&_+ZGG(a<|p$mOI4ShLJ1nVw3v3O-ALcB130%3Pyf zPzlct)O(vmyYNB3(^zE@UknwkP!RX_S*Ox+Vc2dy5iC{}d_7oBz=wso_PA8!Oq7oo z$QR%KxQ^k4auHJ)Bf$&xKNyLn&mHksg+K|=E@qiSaUInv-pJdjj$Ut#YYk4w%A& zSXLTwdje}8JNAsh@b}+N{S#Q}C}3JEQK`D)jC4$9%|8Cd*BDJ`U6TzgWBJjA1XvBAa+&g`e}(Ol2U9f363RqIQ?&l=mE7D;y=^0KATf zN>*4)rpeKh2Z#_qDzvb(N-GE}kj@321|XE{F)umSlf&tb+Ze12n2QioZ6h1={LhgH z6KWTd#%#Rs%e$}YF+t0X%l?C|OXu0%n1yvW z4lxrbRq*lonQSqdwU| z8jI(lt(5FJ(J%fJMoT}XZ$qV51U?1^)tq)?-{rm-)) zN8D*wj|x<7r$#Ik$l7>~J?cs!K=C>dr-T@>EJnIzjr|;ULRDE6k3Qwt zQcV)JP5!H=9P3HDfRSvKqY6Wv=6#fA8i7Y&ak1;j%$3cb9AEOFYyh0vZ6tCdW4D^N zZtX7&3RRk<4lHjsK=Sx8DM;#|qIl9pZg=4%%5;Tipik#RA>$_70sIL(4q>AV!DH*g zT1cK{Xu|=HZ?N)pp!$;|PnrsMWUbg>$>*am8Qar2-IeXeg~P|}_E{L?NvPD*#_m~~ zP~M721=Jh|>i4eqg}(IMmlR0v5`9?k^DjEY{sY@QJ+CAJ6fqr@$Jg~PqD$%1`~Qhi z{(!8}GYRwadE-17m=e2XWUgIXJAL)))owEJYx;Ek@y-4ZavTs!!^XQedITdXP1NPK z?g+0;Z<&v@wUsLq9M&!63PTm+MakkP?xlGLOl7%<%CAh_r;4k}Il>`BZe^M}kk{yu zm*gon0j627hBW1hRLfn8INCs*#^OjDA+OsYt&|3;GX9yqu(mK#co2F2v2Z<9A}r2y z9&%Q+3#Z`glcQki6TmDuXi?D)JtV0dsF!C%I9k(&HEiyiyp%j7B>5%Z(+y-F1J_&Q zsca?>3+|-wJ|`vTb-6-scowx8^}-gs&ZK&5=>mAZg0w2SlCWxOThe5{uha9S20OL1 z9n49}AyQdPh(Sv2?qAoV-SCR)USckFHe*9EouOxAq+Ph$AK=a(1GiQ3#>k4qR%m$>QAn=M@4rvBOZ z$dJ$8oJ^+|3z=jwJDwMcITz>!%%Bi66+dh?*yzUj+`@JsPgno_+ifYwpC5&?@lN$Q zTp8u_humgi^efg?0!jO~ zM2S*bHl;*D>*;jOTiHT~6H*Lr)l77;)V0p(ZQt=jzijJ_iTv^$V~li6;;lZB7CtPr zrO~#7+heha+fY8f#W3H$Y|oHnGq)$OEL_=chgw{4-ZJ)I?5?)UX$sYHewv?o#uRLJ6M~#k-iX}smtgFC+pFThM zU`=jxBK2j3q405W0?{rf6zNpx z?~uoJFYrd$ZGz8Q*|;im>Uh5`<=h`?LNAOWFPSnkze=FPBLvIE3J7hzeJ^50w_}6^ z%#7PE$kFic=>oye`;h!A#$_V z{ddjW15GBuuzyWeZ1tS&V?zioIRPANqO^4OK5KBs_sImO^`g-q-v*a^a&_nl%_tUJ z7&ex&T1ENxOCo5;y7lquSG^~Mr43G2AIh7t-{!{pNr7WPR?Y1o=|2c_<;26MdxjVr2#8z(BnP?u^95%*PN|uHA__0DCtZ&ak+rf zUX8xTYr(g!W|cXE)Nv{8kOtWw+~oK8R*805fc8j1?g5Vk)Yt9L=h||BxTq9w>crvZ zgmI0ESzu~{AJ8Utt+hKQ$pmlT)SdQJZ~|{RY0>O~X&XHU4zmaEbrk01&8vy-kB*OT zx_<3i>`*lVtcUz=UKPk9aa$ODXj|uiSl>TTiasaQwlJk=+*L7T{$m7?lJz4@EOZip!3G7Fjx=4X)bk*2(t{&}gdM-60 zYf&U&76OGgHb=@|zu`)7kEo1;Gxpg{0&YO?=dLgwf(TIu2I)58=pS6XD)`sCEI4)t zm-*fV;+ol>Uu6^A(}lq*9xJ!p#pq8}s-%4w3 z#i;*p5)-3mc2RE8K0emtN-e@ zt(de)^NWkSJmiO8=W_yk7u^roQ3hHF&Y1WPNEJ;_ME)v(n_2K`FL6GIkxZLFqe4Su zs?M$8jq3I~rYEvWQ+_dOo0U6)olqLgyUOz^`krZ9&R)aqX?m;2O$F5YGbRhR-+@|V zfveqEDey8;nNdDXhA|+`=&9O{Tx~Oy)+Nl;!mT_{ILCQP#(enh?yjz> zp0Ae-m*FZftHZ%8HQAwDcsTPLtBSC{?XO{}!h1<#Z1(ZntVCz{kLao)YI$T8O=dMd zw?BU}tQ`bPxa_p*klW5bt4R`;He+FoNX^fEPHC>~lIDk2pX;2W@`f`y7|~38d}25G zf(LUsSMguLl?8bnI>V7K&BrNZn!jne5BqBXK*2&u@nSYB0+Hopuz9BGFs66NMUn+e zOR`FHxYnRGjAZ}$YwAEt#8GX9GPIK-%zem@H>fU3BVTcUWPmyXhaqOFOE@04IbkM^bTC;SCXi( zF)~SqAaPP3H9SXh{E#sYx}GiPbdRFVR?K92o7TRkdHqMs+_Pb3&0Y(HOkM4xLJ?Fi z13AlP12sWc-XrPI#b>BCln<9yg@HbIUC0>LbeakUtsS&ZI`9eY9#( ze{)OcmWRY-?s362F1oa0!iY`Ba1$7pWYdmgD&JwY#GHaN4dJ@gnpg#XDrO-YpMo3o z;p#szpJ*VIGX=ADzt!{XIBRN1Sn^iP+oVBuR6(?@d0sg%i$gEvzr8?U?4lapI5&cg z2s!5QA$BYHVP~#!OsZrx^p{ODx-vchdgUOrJ5gisF=`FHQRn(t-c zvz^XfMB?|o$l;-eCNcNHzeRz; zs5C-8$f?a%`Pp~hVJ=HuH5yEFYCe2s~qdFV54yRht1_|b(Y$z&^P+sIvKa$Pr&1_`7=I_&n^Pv}D>Wlz zP#V2+_tGuV7bRn_Q7)eKowbJLQ&-Z|(}K2#j=@x^d4G1QL>*qa&hG|DNMmj5?>8c4 zgY~b-W`d0(%l4wAX;Hf_pw*YEM7+i*!wn}V?WA(ei>P3~KVBJKZtB(|*N*A14Rv>w z>Kx)$;I;ADmw~I8M2wLB(?Yg%UaRPLvg6_rO~)gRQZd%TMZ&Q^-sk0U9WQfOb zXZ5n;+~0%2q<7VXP!;y{zhCbYq+doOR1j-C_!~t?qj5>H-E5n`vGs5W{*rjmyCvJ` zkeV=2iH$mioVPPJ@@KsFuqs)`oIfP5+`BEvE&{vp13ZMWr%%dxr?;a$ZEmbHe~@UK z-#!o3wrFef!;j9J>4p33HoHwr52xYniL1+eb*y&%G?v=LMF@^$zA5$vRVTv+}j<`s7St@Vi;|$ z?vB^Gx|Z=BbjOC?6?{h?r(jyy$E|QK>_V(*XP}OVdi+A%`b3T3Vo(a#SDK2S)g%&p z5+7wd0fu`lS~@x2La6OWDD-h;^x-JvW3Q{8r{fi?un2<;0l2WUaDN>hWvuz8bG~&z zsZTAwK1L$s{ADo9nHu7AWM+vc578V{!LesVlyhTh|Z!%WPKa93Ho(K8?4zXXk&4mK6& z2Jyx>ZpdO+z*w5d6*P@LI_cg%n5EjJX3`cW5E0m(67^2lk;GfdCZlsWB{WC$f9kPP zrJHEVO4z-LW2lAWue6ogykiW3}o%h~!`PnM_v_=tomBZ=X4E)*#&N6T5G#%FBDD+PPgmtdIXatlEe4>EW;x8*S3K9$}lWj%j$b zWjx{FfaHL~bX!WBvzo?I%@z?86XV_B96Mh869?byZPVf2zKFK?y*RVQDcpOzX>rs= zb`|R@{BYQ~4g>bvdnw74h26&1HwaGFzqI2JIr{Gd$13U0!ysy-IHrW&DG` z<2Ge{hy8n2Km|notu~$PRAxDQ4AUY&V$U+a7BJWlVcyRZaJFC_IeXpudhbYQ^LM;< z)k+e)q;@U{Q_zm~QFK0OpEpavfrv*qZW=ema zn=Ut0YJ?n_&E(TF*4Iah!?G6U=W7s5rP$8jF5rdxuQnj=ZPS!%5P_vEb32J_z)0MB zg;5m~(Us3DBcxaQX|O4s#-a*k!nrlarySml(pSbdbj*Ek=zrQs>z%Rc3Ac?`Q*$G^ zu*mJ^JEg;%!l<6iZGOm98q%P81`q#GJsP|7dV)Y75O^V`@}NX$Km%e5&L1AvAo#!QP<4Hc+kZl3=>AQ zzn9>f6TFOh7%3M|nD!)#vZOpV;UC0DQ+sS#7!R#XBtz zj|0mG^Pmu_S2ILf5f)8_86aQ9$==kt2tBV0ue+5yZ|^`J=TZXVfQ1R?VngWD(Nl;Q zN-#QoL&LsmkY6+pJUY``L{|jh;x{AyXK6o&rhDrw-e@Rp`N#kZ`!@&%^biu2Cgfj! zLKOIfuVXTv71MNLPNYX&WJ`ZsO_>;YW@+5G%`aRZCh zP!eU*N+;?(lcbCso+%QK-r6tio$dVYf6u< zj%4NMrJ9_heS2NL?{uLX=3_uEW-o1;T>bn`uYGX7e(^qL&1!K`H**!t6v<%IG?_G@ zdbkVeIFSK3z!}tPt3T)^U537gdaLm;B30vgnSCL<;6Tmm^l$qc4$mC99V4p`R9|OY z7$T*^A3V(QY{2fy1%G^e7A(kI6dlBcQUvy%GAj=c*<-{Mj_l-?qS;W)7mReSlOyZb zqSRFtkG(srCvbyI?Sp+0v-QZe%BRzlEf?vO-@k>~quvO?TuVqz3&FSh74gidh9-tR zMcqxgQZ%`10=^?YTgdd;fJKgVbI;A}}1F2b=Y$5}hatv!>Nt?Yv*>^Ef zeRYL`f>oTWud?ctc6SB^)9J?k`*ulg)NO>{cJ2@Hi`BDy0I)@5X_DY;3+0#AUgnu& zpEv4QRfeAQ{yxX7btUz&?Q!&jP4v~{b*tDAN@99?dKWbS{zZX5b^1le+mX2%Uq^gH z4E}_OB(%z2d~+J{NiPXvl*!|O#U~L~2miY$Zm|NQ@#lN()Z(24BIs^vaZf@0tXR=L zz-8K>{oO4Vp4ypfHx9fy4u&ZkbCS7Kn{u#*YkD*0b&RWv(YmxpQL(~+*Fxs%`;5yd zrQ#aWK2pQx+IN(FN5EsT2x9K!|L_Vc>N_*Q;ZNw8TngVvd;^1q`1t!3ig?LRm_0{n=k6QmRMi!=1%88cUD60oL z*Cn^KMqn;sv*P7AC|W7};2A=YPV%%&7EEbk^jKu=`pw;WR_dv-X1Vs_mQPCLSy>MI zzk|W$^1uH8%lEG}UL`MyFGBB)Liq3Su$aQmVp0f;jGB$oZIvqB!;l6JMr*7OcwbE% zhO(W_M5}~wa)WscH%EF#e+g((e5e&`I>jQf1H7dLb)f;T`JnvvYDgTlwO91UGY zv^E)+eUK}77q@BCufF$j>#dn{%4#^iHP(t>2fq=qPtCd`BG2B;X>sqc$UaU&6#SUY zOAQn^j^p}_ufqC`edeqj8nE1BajGQ{djdjoa`Hr79i7h3uC5D9l7Vw&uxZ#9{r8#< z@PP8Ov*DhbWg@-yU8l*iTNlC!(VEe)khZwC2zTPpyl9?2iB1Aj`8R6`w(ZVpKR><^ zA5;Y17Rf$FwSs1%SUHlTI@aRh6W}WOonj;|Wyq~frt^KQbS=RwVZQy9u#a%nqrNnQ zRQxT;l(4uY`e<4(v%v*o8g|1}jBEV{Se(>zVcK~Q^A7UT#)B9MwY_ZCB>;w6*#lg6 zQn6ewW-5FnxniAxIw2lLHqGc%c!g(#v#W$n#i>M+f00~sA8@qn^I?^VaW6l3-ipHx znNpea#Uh3@PyPk~TYy7TPiv4VHsyn5_0vZbn#JC#*NP@|t(ibYG}oo-_9=lrZa&Uz zp#I@GRC18oKCa1oVN7EgKR8IRS&aibu2EpYFW7CsxIE!JEk7+FX)k|8zOqyLFZ3Nt}y`Y?X;P>))nUrJQk9;{2^RdZzR6 zG6)tz$d$Nk7^~6M)#ddiSO4;)D*2zyxf{xqCIP2;t>7w8LArYd$;bnrd{*$IfH6=1 zc3vjCeHt5tJXWHQt&iPBNcfsW(?N=9iZ7SWZ(xs6K#on^XB6!E-Nm_16MKC~x~3|x zP~$Q1&zTi$@RAuKhKe7d3_y{-XWDuW^1GSfgisoYF3{mT0y~3l{cyyNa*>Cd`5LH8BGm9D8jk3(RdZzKgCW?nlQneSQN$Wu{kGW%C~p2`u}wz5Y1j4$_F&rr^1TWWaHuo$+OCZHl!P{F-pD za3Fvvq$uLzm+=do-QDb8C}S1lEv?F~Ph-@Pw;J5?D&i+B6tE=B@-BfD9N+5Xy2HXN zm#9L#8rr_n3b40nN`BsqqTg~ozt>x}XRebXS8!!0Q|^m!Ro$=I2OZasC*>!f-eSp; zMp#edCI4EG#a0TyJCHuXO;3MbD`2!NN;w|2(dV`&Z3~-^w_S5kMZ3ud*M+{2DTcI# zg{@DG>M@#6+nyrqT{4^O{IY~G(a2cW2Jkr}qaL;&9lzN?|uBcW7WguZYZbJv*Ap~+A zkxTk`1+XNm1T6Q+a@X3z&pobjWdF{Q44lT*VHTHWNbBF9C z5jlBf4^`%hIggmqj3yiFM7n=*4TtZw8NX9NwTe9f2DL8tuu2uzX=Tip_`6*WHI=bE zF4sG<9}@6-MZRJJ&p{`x!YAP`5hI(`2jJ#@$OvN;ur&haZ~HU>mv+<43Rwg>mfxM-Q<~_08bF96S<*uI@v^BkzQVBY?MEf z{fI+L*d)x=4-(f&^im*r-}1iJrLji}QOklyA&H}h#y;A? zH7F)r-MqSWfp|wNWZ0ct3!!P=rN$kR%tAh|Sa)8n&RP+SP;Qv5F*3*YzNmKsPGKLlT6~0jqXNMzKv$>SG7OC0MwEvXgyE+p zAH1`Xf}nIb{gAlL_5Vu;dICVME6K~(I15I(slEqi$1AWOks4aJxr?JfXF3;)t&F%! zDBT+0I0%!RIhh#kU5^+UO&O78qOx!@<+ypH03v&GX?3q_j52JoOjyV|856;Xo?4f> z+hKLkc5SBvg`GHF^JeX3xpWvJ+?Fezku@5rj~) z_*z;ZqamZoyggdM&RF&}EA`&IF>*MQ_Uswo^p#pMo4UD%PG9sES%vUH2`W!ZK04LA zy)9~;lRrw4*^0(AzZKfaMYz(z03+o^&EV?nR;zr_q!qKrnKQ@Al|G5CzZc+RyF53A z|904o24Wct7M0lV5%~}D$V`j-FuC@Gvjez=vf~w&TE4utb7G)=Sy}0J$bxR<&(y%Y zU6)GL_3JBv4-nlrIdRSn|HKHAlr8J1&gT7qEr+as2u5+WTmRAJ#Skn3AvnNYQvMIL zQnW-4e~JL~6nZwqH073`bNhhfOmpB8#>(JUalNyN=qc?`?peMvq8roK886YNDlQ=F z@_wozo`+f7P}Zsz_r^Da+5AaQXf??@3MYQc7caWUhGtHh+&okl&SlcHc0w6>6JP%+ ztf5)v%H^MsLo5qC3AuZHYNP)3@o?LKKNnnLwp+E>Q+%>#UVt2hg zH*eaTa-r&~St~7v-od|Gm$*VVg+VJ-h9cxF^OFp!X z?;P}+1RZR)R=#S&B&Ft1{Y2%q=*WPpUcd`1DC^dm3_$H3nHN5(B6#-WH(^240Kj)8 zu$}n!E1QZ<0c;hy$p9z0vu9l_mp$KDXcPcf<@Vsq?0A25JXLAxczoEtK33lD9AP)Q z3qm*V3p_thjeVS-wx(uXZoF2CD$#J;rV%;6QckeKYfkp&CFmi7hr+v&lJEh+!NF6< zn`29rKmyqEGj(+vv#~=&B@V%ocuYE%VyLi?v`XeJ|B!22i-)=Rl*)LsREwgslL0?H zB(L!+9xT5Mo>wcAI6f}L$cDx7wO1D(ONS~b44R24*q@9p!_KdO7(&|MiKaMXMyhQb zlZJd^S=ye>V$YS0m~L^XjY+{9hSzvHUy(zE z#i(?}STasZbS9aP47S{}$H!DwS6BA|K#C<~8Yp-L0!xE?#MCx5n+!gZi)GJK`?YyH zx~~zk$B(2hfMM8ZyQYOei6}f^*ol%rL#aojOi%E2cfv%&yjr4xV5?3E#F!ePY7X5Z z*P^&Xicc=pdXqkcyVin=pba@Sv0~cu1=IK=SzP`^u~Mm*HinCMOfFB+Q>Pz$DUl?t zD;m!~ICo|<69GZW=}pgsRNi?Qo6L@)N|JfAucgCabQubq4xp#Lwhy`H8I^f&gPi2{ zRNc>sD+SjcHRc>t_Y0gx<%S|pqRAE=zr3j%7R_0_0#lTbYrh=1Kv|o82rvZ#wzjrL zBoGzB{OJJm2WimCTzz+tIFlx%;zPBFX)ij6S7TO#m>ec#^A?dqD2rMpvE^AT^Rb+w zVvF%>RY2$;ogj~amSmHiH;RZrdULvM`aV-laSd2d^F&fxg&6vrX}v~|Hwl=qqsHL0 z(oTPdhSIb9?MiapYZfr|E$o^rIjKlp_*(FN6%lPpF}-Gs3_ET4Yo+7TKVeVsRhiBfjs{FGXT7*?B!(ZuR?%Jjf&u`*IQoIUNK;b{sfJ^p5S3szyy?Epd_5T(EsTZ;RPW&n`7oU%3W$~> z_@NbHSnoLdc4W!%%>KIBWnMN3j$zU1x+hzD_)Q}rbG!Ic>17sOoor@Yb&gEVRMvXA zGk!agihs=s)BDh-!!uo}T0pt!_Jl4HE+bRwMwr{o9N?&uw|1tnL&Qx?O#T2^8^%n- zJCG>s1n8WXYLkPXCzE*uq*0A$YOPb%zo~nxJFATsUB;NSfMR{V(lM{r99x`>ci9=cuQ;6{lnqd zw9%^(#|T&AR+56NUU(fqhvL)S5d(xto#|3IN@J^7ot%QE_W?@&w%*P*^3|vwB z>h6Z{iEkhw5Sr-iE4s50*7dXm(3MR} zqVOEnTmJgaIrW_A?Aw7fdSPJx0$#wxW4bv%F(IKXIx0%&wThtEC$OE{TV86e3crPh$eK$YnWWytnA5X|o$Pwl;6l7+rjBWi4AQ~w-HOeu}GP7?L3zMHAw z#r0nvdjQZ81qRMiRhf|mClmSew3vUUiwH0SB>9qb+XYt0 zy`>`X@F8R^#H7}61O&(>3moT|Avr$Ahtt-`garvAYgZv?gd|--jtYi;H}KmPyPKKR z7eH_%W{vp6ak6`OF%pdhMLNEd@^^)ZD8C*lCnob3(oM7n7QDOkv+);BkyLt1QcNEMXuO#svJkId{9?4vIQCJh564>3uIJMKOvO-0P7I zC7o;l8dqt)SUQUs=Mk+|Q)O9KWF|l8LoQzG-(QV<0NXKfs0yVf{3sQOabz^)1VPEm zhR+lv(bo|Hq>h~F9?NBmU+oJfDb3aKx=Y0S(R~6y79;NtiMo?LlF54uyw4kbWOO=c zx@?QJa!XCZ%!B6~=1MYfBk2ay>7P$lb=YzQBUuNMKU+`JeTQdvNNUGQI7s-agXIhh z!Op7{1#OTgGMC39n2SnmURz2o4gn{S`yDB}1XCdv3!Ww8OeGft8mtz1wYci95mVdI z><|?*glQ^aLj{V5_r?-|WRj?$wy3v2B?@Y=x|v$z)THOu^V8Ej83-5&AtoPr1MY$* zX4>K;56>!PqcKucgtHE8Mr%Eql`Ai>MC|5lr6M-GHaA@#9E9j*{1bBplO20aV=Jjv zzHC_MfU~nTy~k6p4Pip2xlC5eHE)ys&OZa9Yr+{tprCmofD+{vh&UNkg-M+&K~zFN zwAAP@7&qxrM@On*jEgA1wY*>+YpWEOwG=_U8R0645uX9B%hLJw}*6)N%D8V*JGoOz?`^;jGnBkD~4k&SMDu6rFmup zmY##n20h+nclRsY*H7~NZK$4&IjoIgaE*x*Y)J*7e<0mchEicMEk~~mUv^(WaiO%q zp|!a`O;9=jKyFM~V3N$5t&_zcA;4uBCv^SE`h+~RBF#uz+&BE$5%2tb5N(d}ey2#Z zASRgrl~Io;H3{Dk@vHE&=~{`c@XaG>XbT$zn$>_&&pj6ulYrW3ivD3k@R~EM)@FLn z!z5&D4KyErV5%uI;9wXdWim404Bm0Tld8>C8OjwN8_-ep)eafW`fsgj9QD_b9?E#} zfpuY=)J}m+)lnn|4k!i0q6lFDMEcv*kmZ<=9??T(A_4pR(HPvNno%AHNofBxlHUBg zN4qS+-Mwc7^omcif(LL2VBLc~9`pubXwOD_fZ_NEF&#npNu+dWsLOZ2ix~*+Df@lK zF@f%i&IIIQ1RQ@GSYY}2K!&lmINcfA^3x41CN6kAL`7L|^!tJ&LO|G;Hg*N5 z_aUMJJ%1?^tieqJQEdV+32pQgG9zEscQAdujlIF0Oa*dTq=C-_E4V<;WA(aw6Mo!D zD#|g6yN6BG>GP8n*HE}I_l7Uaz*KU6?=y7uJlG^O0~;POUF~}-sG@%lrind6q9;c9 zh}YgAkNskpjpyl3f50A-HIsM4d+gl~C%$E(Mh7pc=Z3)u=9q4eu01FrA8R=oxez8r zFjDDP8NzW*M3_ELx}Xdpr9dWSN}dn05j=ra!eeuXWG)X7X&W;V1RTcawF-<3?~HXpwJKrJ~FOocP842e&y5O2CIjUx4!tI)tA4A=vTelKo%U(P7%gzehd}qryssw}SEXlR;NE`USgCS6R12 zTR~kQRVONpqpM5sDJ}ow!DdgSQdl6h8N2JgxNIt$W7R!Sc*1sQXAb;P>eY z0oiA>-HI3Xi}Pl!lH0O*HSmKB*dGoc0Vhl=-3&9Eaw$*JYi9bl>`@An`+5)m^7!pK zj{a!#C!eW!mx+svJ<~yzy=+(6Z4%~aqrX_7}F*~&e8;`U~&TIHruTT`-DV{x!i+w=CTNK6IxLdbOpPTb^@ekbED~BHw zqT!Gw#C2qgUfntukp7DWz}`Gh?cHbZMjm<++2UsI+UqZn%QR!TXEVHB=O_|Mw#F0c zR_K)^F2t{mV%KXMgYO$!6^+w7HvhsdCqBbtTz50%h?;HQrg~!{Tek8Q_J!Rr#wgQ1 z)AvQ6%&|(*4HMPr>WNQtE&;r-9#YHsiVk9vEdoM&oxAQ zjo{xdoa~O)8z)A2#OhH9J7#T9QWCiYgcfhM?1k%hompeseL97XYfGjP1Ya z!pXiNU@A(kfJYse=<6H_*VQBCSlNr=4R9{ED-J`FHOZ33R)d$s2QxOWiHGG4lnUVB zA$8kgk}Ti@e9)36Kz%;MY-jC5^+zx4^oo{Jyau0mlGFx5+em+qY$yl;sfHS?@f=pT zqQ_hRtZ@k>hA~!;-DDY{C^EP)3{!$eY><9iWrcg(b-*R7b$Wzkav+yb5NUxUQBG|2 z0B_agL^jp|4;ugE?Q>5sRL^IX^cB>wsZ>Hu0$&`u$K|5pbR}ZnydsO|;dMZcBIWzc zY>bjosv#kT4O(7=O902oGk)(tsSeP%e^1k2fEs=R!z=8$01`GJCO38*E!*~l0fDPW zur*5C({ci}cOz~a)lGE#j|N>_o%6OvqQwl~2O3;05NvTnG%Sw3RM7Eie&DF#4QL6; z<3rgll%I&xu4ay?x1BrBDXXJ;|9+-|N%WBefm@;S)>=1+q15AS(~1^6o^3S9!YmVl zW+^~xo-1D71p-`xuNMI%qG(Uq(?A!-0X^Zy3=TQ%;1em&%5ZKsQ_BBoQ9(lIuVmVO ze_cHAR;I~NgYNZI@Qb0_%%qlyg}gR&1QDKb?x+i3^k@dOQNPGwS)~_IsScW&F}^0p z=#qZ>zCK1W7udU@tK){A_VJk#)aq7bU%of%$^VG4oiq@t4Sf7yp9JkTCw=d+!v(sI zZzylpYt0V_7k!YFu3L9mk`kMD<{^MkJaF!GyuVTExOa)tct3mm5O3aBCQ@ZS=h_Hc zMO)utReado%<(xZCA&ZQrZaZ6nU%Qnwn0$mVdeogdu;yj`(n$m5B8g*J${!(j~*D$ zGW=Ot5sU5DEfz~s7Q3ZGINnUOE@x-0pDJO$I?ifziGY0xmPUyJ80!Z_0f*bPSJLYV zEmy~d4=YcE^MdK0P=)@&n%EIfFZ@e)rdVNwb*hTszB8;QjKeKHLa^iaA@O5EB#jb@ zj&5}@38A-Yp2WO%Yl;6mK(LhYJ@7BY9sk!*tioH%4*=9@^M2Ifr1sy|LF zw@TA8*sjw9vo)J#eIwxmk?2A`vBbgo$`~tt|2h}SF7Z?r)`=sv>m=(mx+y z1V6oPeQo@^FUPxW6saKCC;uG{eD|b|gxx6mZZ2kRL8-_Ld^7;vap1wadFOpUlXbvdy#J)q6^%v%Ccu=3I z^GWq?wury2b8B}dePIxKaX@FTn3{x8-p-8aOiZ<2)}Ys>)5Lf{vM63OsDnDktO-+QOig?#A>jJFwD+~ z5u%Dkz8K^SdHBYq-t20dANTstJd9CqP7{pMg+QR$Xn9wVD$_^_lx-a{ zBt`L@kqv+la!gOy&Y7k}{mJF5dXksk4=Nu#V=@r?#|QZhk7Z)9vNY#U=TE#Qn~31| zBlO-!JM*N{1!4&aAUTre62yE1#{dl=B85Z9GtL4y(xO3TD zQ}2%Ck!+T|7vk2CcQR+X*?V)<;6NGeOs_x$?`K<@ka z`q-_|G)KMaEWc0zT6G4G@|0GG;37VtkY3Ofiu{VMmD%sbCGAKI5x?#wCm|#)VJj5X zm|5ctQP6j_0DWs*K6~ruy%<(7tFfT#Y51w#TSMR3(^~Yb9IE8^6WrFO?Y$zCGK+@i zq0SUX(G%A9Mu>F_542vcw=}AC@2FnC@nL9m+KjiWtXEjFIw^GDu6mlqSlS8py%4q0 zYr#lBKu0}fI@Y}IjSMso0hY>dUl&rWlW+%`1h1k=biOw(uADopd?F5IP|19EU$1pY z&B4^%peO;Mf@f+~!3l7T(ZwbR1JGI0D%0Xp9?^C}=9+CfNOy%d5G4HaUN~kcJuU~x z(vyA;)+LA(HIy=*)(uhTeCS2+o9jVwFR*V|`3ZzQ`IU#62ljjux zL6CgzZ_`QTJp6sL=ygck^80ae-L!y{^;n4)nV}SWXXY8GYmQ`6TgO!9R34O+!R1sh zLYImoh`PAlZy5V9a+rOy_X+ zen9_1jOF3RH7ed^#F__|aagag$tVk2gn-ewL*eIF6?pX1G{|gmb$#PTb;i+O8-A$J?ej zXIjn(b#AVQ@jOnEVls@|+SevYVUxZ4!zaJo=4r~6NaI;TPcvQuA^X3#PU|<6ekt~R z_Q|PVpQnnQQzqr%W+z&1LS7V9S!ZmFFQ4<&ljY4%bS3N@6aeGjyp@fZ3;|@+GGuth z)r;M`Az@AAp%(rWxv8(AgFs+r#N%+O(G+zxfjrp!uv}<;1fjZ6^9q&QT8`3VCxqYZ zjFe;OhfgR8J(5PnUJvoc&4W*aitqis?$u4VgNMW3YmI7S)9n}D39z9YLkfGxFlxvz z%wENtfc%l`=leHOP4g~^WVdSo$D3B#vETCQyI`$M6lS$j$tG>hv4a zIPVDqDp&i^<>GzjlD!I?@n-j1|3FcIt$?``+Y8zn!a82Y2oaAI$%z4Xf!;2E);aT3 z{S+n9y=uO2GJ4YDx+_v)m+$fTI7omH0%fC8cU2ztIT_)jm&pLWN_FLP=OLC}$;IT0CK($4?xyf3CbyEr9h5wn}4^xVMDE?QW0k67y6r`|ld#}QlF^2OQ6^ZcLh8YvX?I8hl3VidtD)BtFJ{0WNH;0mG{3`kd<)6Vh}No4f{%8 zyV|lTlT5}}6)KQ8n$NlE)(y1odyy(p*_Gh7+!{l-Ke4X=x;Mq(GFIWVo~o+Uw7<-~ z^?-4t3*Vx6JS1|AWMZWg#Ozug1X~{cR)A_C2p||&ZgZj-be9I|j-lW(5M4a8ck=j# zMWF4rtz6%~cy}`*d9pc_s-)Lc?*WYzd+_+F-{pFDn(thqt2NsCm&U`a-@UPB0-rn2 z63OGGaVZMk!qJ)q@y$EZlRH^^#=$gpO!Z7_Rzmct>-Tz zd@ixmMJrOh>sM%r+s$e-g&pRxG6S3plJmnb6>}`k%r6xqG|p#Pj-k%V!~!>3%my0@ zL7U}bw#oOH-GeZEO2tk|OOuVjUtP%+r~9A}fsD0+2ca=KqQ#1E7(ceSJj0~_C0ddS zo@0_Wp0f!@2^@yRN??zLXV+)AbCB7B|6uAumHl)Gt<3Otly(s=mB~c5V*F=+7cY<{ z&mkcAO4dMf1R3O-#4KTJkX`u#%fdh_kJ#FJhwJp?`rTy0k3&PflnRJZ>2g<48WA$` z(r-#Mv~3Udb800%(IAKL^^U^l$3Rr}Fl|YUfHfS4ix~q(kDO!#`xg2JJN(9FVV#HVH;!&|eHdI+>;>~| z%CN?xXXwnvx9>6DrdJw#;vN=`9r}Zm<4bQpOu@Q(D@|xcHIvvU- zAO`x!%(?UH{EVbN^;#x>lpWL1Am1oK7u-zR{lTW=VhAA$yoK{-m|37@mbyUZl3zm? zEr%)zb7G2*k?)dsg?B`WL6w@P@+Y=f-WDASzYPx$k8vieOL3vbwsZ1h%?z(XhdK7+ zKi9R6>XoY+wJJUl<@)l7V?GNFG32ukVYfcV1hL z!`?e6#4ju>lUk};Zm&NVrkfU2~i7>B^Rr;U%GcRL9J<&eS&~XV^nRA-SGU1iYOB;NtV)Q!fZwI zYMp@sAxGTH?i7WL(GG5%tQbvVs^Hwk+IXdv)-Gtt2`XR{C&FwWA0Vi9PEF7qVMKp~ z?~JJ<{`{OmGGsoEe783Q?yyE!;Fp9Bqw$kUZY(mhKFNS&lzI-m5hw==3YBUDFEtVu z@g%qDLT&|1C50SCrD%7kk@+&QUVdDq_ti1OIl>T}DNgYk5bwdUI0CNcbxS_fy`g87 z&yh)vai+Smxx}n*0ZsR|sceN{Lshio)#!kJ9NBA^QmM;WZErzt5G~y5I zG|wfatLYF;P@Z->hU}RS-tLYc-s8!-j)6+B6pP>JQE&+1^(aBs`siDJu(jS_#NzQ& zm~E~;u$&#FZZe`Lyyd^MZu>#=B;MU)kh78c+IX8{i97vLoaoE2KHVYYlSL8&o-dv& zqw$sFx}rv7S2`7BRT`YxXB!fJWsbR#3W%mxU^%VPJx{6dZZm1C*}5!n=-K(bZfq*} zUE_$w%Ei7$&p?Dh3M9WV$Ad{ToeXXw#r1qIt(v`$d-#t}hY`L|mRXIVd(E5a|Im-& z-5kwg)k05yh8{Qb*3X@Qzw*~z6AAjjD?Z~%#opDfG%ItFq0uRUZe&GQ$rbAZJOYBl z=U9aI0>@!-89bE1^i=H`-Y6;AUGXYtiU2Y)28A{`CmodPDn>NUm>O^Y-YYXJ4hO)+ z_gvpkfEYMakwe4Gk&k!BOhJscgL*5%QGKel8 zD7PAkkQZ=y8C5HwTI$|@a^@UAj6 zvrN0(Q+r^7&_J01qB6w_B!nhWdua^1i%NuYRDo_fVhK@qQ*@^Ao5f5q`Lb`nrlD>h zes|HVjdiWkX@JZ%1mfxgbdNvf#n>2^7lkV(!3!NRle;$DrvNi1d3y}xK2CjPb5 zU|c8-^;At~BqU(7C?RWzysL9+K6Ur}qO`lT(A_`Ldf_YBU|+5WJ=K`G8{*Tcbq}z) zzQt{9m-Pdu3)$mL6||v{RK53bJ12w?rgobdIv&I`?lN=UgUH0bjEUs!LmRoe3UMe! zRGV~fTOG?5LCVsqz4Ki$-BG;uxY^m}(<|L=PYp_PSzzK*2S}N%HlG%TqYK9(E1&;t zVXezw)-C2BOa}$27Yg5bPP9Fb*7zvup%B`|HKQ}CHM|E6YhWG13qxL?u?ms#U`Xb4 zplc)Pyu!k_L`SQd-m~v;47>7Fpd0OVdT(9GnX(BP z(x&m|o|E6dwrg!}Md9pQ`0n{5OzCz|YQ#i|Fv)3^>%&DAyKyHSMEj_(3(k1vxO2Da zupT5yO%{o$->Rj{CbS9nNg^7HX! z+jP(EnEGh6jKm5mQvRO}`By)F_U;JClhS?c@J&F2b_H6KKfP-B8&c&JheL1?j3BlG z?5bwx6IR}L#GvT>V0zihrpJVnLZfA$WZD-y-bq&hS_pv&wx&+9M+SFO0E~_H;Ehf+njY36Kra^9dofF=V^z7E(g>< zvjv|##q+WI+gRJjHqb=l!GW=h6ZwMOXyS9{Y*%SJJ*VK4$T(==NPlP{f{8*&;z%?B z4qRv@7O;^K@Y$QLYytt0+`4YDd<%1=oYBR8y(Zy&=F4+(^D2jx@gB?hb6lZ#&I_wV zTkG>7#loq$h-39ty&~v+#up@emlhcL0VpZ zNy+*fDaYGt)lrU2To3)s0ZQp&Yy(mM)@BK`m2e3Xx!vX)V7W@!-O(TI>)h6t)ha7W zydR!5o)A3D>{KOI47*=AF+(qHoQjTb`|qoq&xr{`SZa3^vRkgujXi)US(W|RfuDZY zq8^KNDtiJ2u7&)e*RK4O`WVTZlGsH9hSxW4JV*4K2GDN!&D2uo)``}yg-VnYuNQsS zLtrrsPk=CVoJb1AEIvLf>1S@!v((-y?p!U}nKtvpE1h_g9`n;;d(tkcLD*bI%?p$# z?+pEJ+ra&b4D@XrjVJKs?)D8hDPfep4dR`F2oGfZc6tYDcUj*Y5ip-Z+PgR77z9fp znhjAB8Wq0Fy|1Dp>pE!t5s(P$sz+ZA-R6r%f!y`aYRj?Tez!-mo#9lF4g?7aLB?mv zwoFG694egK;Z~Y1v3}kSEmf!cFwue?+r@9$&~e;{js<2DsDWO~F#KS?GkER18)c1^ z8}bwoBK&eAh$)96eC`M0Un_CGr1O6wylO{9kLPf^AA84;Pc+llUltOwc0YP&{v-0r z@ve3~akmZ{g-%y;O#VRN<5gpeR?VOYtq8=rRJ9qI#pLg|y>RBN)yLWRm|DfZl(jc5 zJsv;}GB4O;nFFPEq*h^JqQBIsRLxk5y=4`zcBdV#B06qbJZ??;PmG>8R5}QITd*0q z-iBrL4c5f_NY0X@>i~kqbyPoC>)L;Et*qTIm#1le!%C^~9kBqZ1;*bwNSJcjEgpp( zIz`RN1+@%@Vq)G#?U};9N~k$*ZLlFj@wBLpTT;7r#p8`JdlTsFqK105ZvC$Y*A*El zbp?`1d~5n1{rzoajY;+f;Xr9_m1%cNTwTM7#K2_?H1cAU7yrq}LD9l|Df9x0IR<+_4r z|XlUT^#nM*| z;T!{WhcThsO?4hVr(h|71@!G&wJ-!?5faQd*I3m!eseAwd7c`#mXv<-_LzzwB|%f}|- zx0^o#W;9dj0uHNT*s@T^)6t#PKtNR{poefczcgiwsd4=q+j`vNb=W^zDkisWUB*k? z-J*ZvZ5-%g0n%Y~egW0dH`55xL5JMfqrlifHkxRqNV7;oDeEP5a*y!1!BhQmPzW{S zg2RK}0Z);X^X=b#6Lg>w+2gc>E&AzGnT ztc~z2BlHsNn_M9B`yB9Q9CH$YynF)AeX9V0&g&nU?wtj8&*^SEdgw=R}$WCy*DDxF`IuSs@7e0WEK?~S>&CLMILobyX2K`6q`ztIs z_-Wvpc%TMUQQpUr3!N((D!M5`pGP8F;T^G3u8YLsq#(c4YML;6#IkQ1gVO9j1#%}6 z_^YrqUSO{uc|Nn5z=?Puq1Oo@gfnfpD^cRE{NGFuU6M zYa8dm^7krOV=#$U1t80>H}g^8$uxMS)2rjc2^*pWTga9RGT*M zE0z6)=6YxCk)kygIMAqN%m6fwmcL(t9gYk>yWVA(WC*Gcumt@Q0*W5@CLnvsxbQh; zl4He9nyz+7lkpX7{qpiMEUBU)MDJ!D@1O2h0otI!n>$)Nr!-g}gXvqXC+`1w+~AjR zfHpnfZbJzGiq=0KY5qsUSOj=t0Jv6x-9MZztxXT{oS{DX}V7{$^v?wS0Z1l{Nk-BtSEk?COj zhaP`J`ic$W+0lgou3o7#4M+rX1IrcB!SR6J)y2L`@+eU-f&D=ds-YhSh#gB7$z!D8 z(s(b1#jSCMBE4oXxY}wkrJ3N2{lR<1IZcPp_4jcu34h5G zT?I7cF+uPe+cOdlXMU>j+RRf+eY1{64u7C?A}F0$%ltS*U{S&aY?>+*_bfiIM?^&H zrDfki2$G#A{1#xddjK}OTuMhK zSs5%L|8$fZ{4IDhrB!8LJ*p;h*Db6am8dExG>HLKG+nb2=$oQ{KNKbm1{&5P@&~_B zTpT3|Ev~Bth%pMLCnY&s1F1||<2F2e!+$?E{2e^arwTGL2MyuFJJq(iI$cL;Y59oH zn~Hm-$*@2tH1lh<+op?Ln_J_r6Qu?Qj+>*&2S@ky=3%!Ef5VeFTq5vT9ql4F<8Sg~ z=IB%p^c;WJnvat`{LJwi*j##`;bl!tZt-yZN`xlJ|Ii|9*H~tAEHK=u#TFmjRHOOqKS#_uq z*H5wj2+iF6Yp+HftcQE5+Tg9&S>Wx_=PF=;1XPBWTbjk0Ts+ZE|)FY5XAp7|Z) zUdV4+)DJBAYQwXwU{GjU*88)Ps?SDhHsLuMj;Cr7f<(k{i7l!k9hG9+ZR{~ckx z03%wg_~7;FqeREGANgh%lt}BPmK4b>>l{1{rnc`UoW9>WEUR95u23;UsSHCeOpk;} z3r@CD&2_twr9#K&D9CRjg_}RrCNUelYV-8)#}h3UKgN3Ym9hWlW(slC&j$mFI0g_{ z4N)`}Ep|j{7>I`Q# z>}wnCY)f``T8Mpp3hjItbYo(6It|enX?2>5cY9t|uCiL&u7>(W(7FcVdeCWRzg4|p z3#$ABVPhA3Wri>2o4?PC4MRgA#+BNM*ja}utO|N&*QGOmTT2!yq!DYZnZyn*7qC)l zdAt-(+Qv}W4WX8k!&}U8{QYuElNhkng_~&ljo*Yf3bob>^lO2mBZ*hbSf_wb#;%|M`(r4_fjJ`+G*Y9)fTZD z-pIOf3KZ6z8?}5?fCdIQ{@nnu{UJa{L+tD6@gZr^abfu9i1E+*fQ$%-4Qyf|cjDJ7 z9#VBJqMD=3dOtZvh5Y6?=t<7wzqn~8KUcO(zG%NyM;trtU;RZ6%Wj$)!kqIhk5vp!PmBN3YWb=1>uHdQ4e&=H4)B_@C%Z}+CMj~fRIS^ewKjp4=n@?mja-i=v5)NZ!=#I2 z{+Nxm{dk}z;V8d+^@YuVvH0snT&d6)R!VI4p>24N-dLE0vMGfv&F(|JR+CsOQ^;AN zXNbmechFhE?4MM{h^R4D253W&geXPM=_hL8D4E`&7<@%W-C_&jEB`$q_gAyeeSSgT zS)6-yV6k$3=51*FthDn->0a1V_)jg;+A^y#3gTdA1}!r)GYj~`?9Q|EKby)wD>4=Y zp5|i(9X-8#1~o^T|2h5IO9ov9@2AhHiUgJVC%&%s8lxT-`p!= z)2a7jqurzE`_pnCP-wSA>a^*%U!LP%x&AUTZC!RUYphk!iJ%l+!is4{x=(UcM*LC{ zEuQ(Mtx0AveNtqmYtk1@- z#q(l%O?>61;Zqru-fS3@UXyV(+z(JUZQt9{iCy7=IF1kEd}G0*I8N5|C&HCdMWrG{ zVTLG*oNA-9g2EJI4S<+#pd%FZvFzW?g$ZsZM!XxF;0fhjmu}VGUHSTg)k0z^(rApo zJ8UeY@788+wDtJFG9y}XDuLIKBH3FRp8?n1rQ%I0i(KXk(X9#C<g$_^4{;B76|WcXw{+9%+)LvRZ>B=~%~SQL zv~)34KN?fN^V@5wUoTEYq%(~`dppy6hY|3y{)2?+LZyKJJ_crtlFL5v!1t6zLU|NL zPi(Z(`-kpgrP!DlAJH1R*H-_#4}%|6KLM1*xbldeX?c-3$X14JRpx^}%_PDFW8iSH zo|Z=Fh>jfu(jfdNk}}oC_GppF@Kpy+%A3&oL=xNHwA_bLW&1=^MwL%bEE;*A}xLd zXSd?Gk!uGL3e_8M^yc6-px>>WB>wlw0@TE*Xi$cx#P*V`bGuxi$89@ecwbrMCHb>$AI(_a+dhB5K!(4z-FKf9Y^PS_zg&~%q7{WPmT%B(3KItB^^qD-PP zh&3@O_>?}hzhaeBHW6zQ(sWq{O6U&<{H;)`uFj}?HCCcAj8zmreAxEfNOmji3w}fI zU_#hfWMY+A6qS|~{8dQargV@Qd8kcFwotOV^LVc92Lr?U`Of-lECQ3a;aNp4cgbJc zQ0??4w5?n%wLCoBoAJ0H-91Us2c~9rIuD3C=bgP~f({b2;@Nwq<*^>GA`RR>${z_k z9_TWpKiN($XV+JHUq?>Mug%2vY)+PR>P7a`KE}BhoWws&npL@uxJrH_-U{vZC_yV& z9#_UfpxKF@^o&2OZ!P^3h(jWN{rZ*hjQ{(`g8yFq6@T%!!Rz|iMTvjVB4T4xiI23Z zJwM^CnTB+jNBX;3>Izh~zG$xgbk#q}5y145X*E2=KiYtD*jLi7%sYhmnRTe`NmyO{ z4e317kk~X6xeSDJk~kw`FT&CwaliRuDA3pzcDhYR{NlGMD(|ceU!{uj*aTl^mm~%r zx2?pNG+N_@hlFRhxRbv0S$!>;w<5uxb#i!g20j=!uZ0$`|NUj!d%aduk?EuTbZtY1 z#A5Qp@>sr%itbp*i&3^45la&n8`GA?Ac_=3Ue-^sG9x~U*DAhJp)NLbce8vi;3Hu0 zb@727+m|05j}SKLOtsOCr9RbAZvg-dG+dfEAv30G! zX9HTm@;r!r%{#lrufsZdf>fX-WOW~CmJHqPjG5!a>`}2%!u!_0t99No_-D#23oOma z*e12BX7RDBFOGdhK-)$Z^yM}Yb2q)@MTKWcZb zYzb4YOiw+5(ap}(>c~zwN9au%%%cN4({VGBTbgO1M!alc#CufqQQ!r7ergD`EqXwy zs$FkQs|v|4OY7e=88QMqO?E|a7sEI7PFawQ_{*g_77cWLLctTN0^iAVt^b}d^O4@3 z*;wB6{l%l$dXsGT+L4lqg2G!uLc)3`=R(baf7cMOIzk^q8G`Ybs&bFvZ$TZc4iQj$ zU}I*sG6exhdX4++|G9YeQTy#kmWul+`1$DuM7_t>fckc6`%dAj#{b4t|C1a8pCzO= zC0I=kVz`+$1eM~!*2>DtC@EQ*=|IO*VQ1Oq{kZg=*I)@+Sd7!h z|M~N1%p<2i?x_pbf9J0Lcw`t;7fqO7@^rByOmzG6y#$p*wVVbx>92TGX_p)5=c;7A z>;sU!w>1F6?A7JL#?t&xjQP(pWG3<$EmD|fQTso38dcg1rzVL1NU^Utf%!+XO`5@1 z&HqM$^A#8-BD=SAQ6+%V@Ai1w%K@1 zuN~oma4|9>Dk>x1R&uNR|15$jkKa6G8>N?*ToF9AI46)S9YwGX)ZJ$y{w5d{{-0T( z1_DY&roF(yWfIWIWqE_=AHfa@n}Qh4wBfTnM!)}ajG9D-52+~8yQrMk*_CM*cOepf zZPEQ^1TU_DcM@Wp9>@uy01|)%b9BJM!4Eh%Fvq+>iM`Wc1_AqH&I~U=O@@joczxcn zcKtE}m%G6dY5Vut%EK}MrzgeAy&C|61~unDa$bPATG`aZ!~g@+N=xDYJij@7pd{1) zn#7cK{V@RunR=>Wr;kD#8;1Epd63mc;E?>N7q@(K& zmoo*u(AugV@$btKkm)b}6FKU4SHjp^Xj45Q1fnl14ERornO~?%Bv2Hw#8o!&hEmvy z3CPLsbY4>aKKO4?bCDY)K^OM)R*-@GFl;PG7170>!-vu~3zFMg(J;%pPe%h{?KL7G z*f#gBjo)6BARKuxMG^{@>k9aNE+4gScNyDc?HFFF#TE2joxP!fO0bA1CEu0JO?X zegNpXVvM^d?=2u@>HpjP;dGDR3(3usfws-H8K!ujCc;MX=@}nH*<4r&Q!@q$G5YVz zZ?4}ks~5y2HNrBTW8Jp4P_AzKS{=3Tg*EO5qm*QLE$6CsbN8mbUMUcY=qlig2#p-^ z-~MgZQxj-UI;S3z%{Z6)b%M(9u=n>D?(yWNklF8#&ornE?HbRI(O~BasS0f^jlVM) ziO7>G;Gda4IDw9$0n3e7^&8axnyLm*gAx!<4|$#9L#zMA&*;2K;!ncyM(F;=u0?%P zJYmxk1H$q8z+XWD$Grm0ohIl@-V!R2!?L6U2P(8TZhB_fH|8pe%pU41FfNrGm4vrG zIIy6@^Zo`t{zeipi+){=W)m)t7J2jZYRAMq5$9oVpVP}FjfU+L?!AEbLrYyzr_lLLiNOcT=metz$|?mjaQMX+T1)32{)<_1*X(e=W5``_~{%b&saTr$bK0| zA=tR>gW`c`{ly*Q$(0(LEcct%rDB0!+G8pTqz-)UJbU;NBp!T59#-X#c= zXh(!0wVl=%yE`y`B2q~Sf06KmrFt*-pPt!{l9%ll;oO6g&p`m6Jgi|XPDu);`UT#;oHGkab1}kD$l5G6urn(p z@P2D?&-U1&bJCn=k=2$!HD<&%sbYWyqkGwW_Q_#D(E(2p+ex@(NY-ZMe}X%YXpq zE0c_1nN3M?TzY0uKyrJ11>sswvLx<-dVLlueGa~lWf~ZmyZG|fb1E1B9}Cs|&g(xv z1Gk&}A`sIAz7wPuSjFwzr}X$kwrsTQ<9L?n=xCNxjMDte1rkF1_dzWpY+x{_??(vR zd970d+CQ@VFIo0#8EUH-!G*t5jg9(Cwl&I{=P#{{N+{=!X;n_r@Xotc>C^qHDuzNl z^4>I_Fr!NXR)}lt65sK)rL-GLywX%q{#qU6&E-dQAVz+mAv0UnHssQex21nistwJs zo?K`gXWEsW?ni~p4+P%a9v>D7{;|+pc}Bghxb0EJrItJ&nZ&~_PeJCQ+v8ul#6^}e zf<|g9AN1=3o8=uZ z+j5MLhG3m8^l^^zS#7hvcist*GO0JMpO>0P8~OKkwCBw>SuD#|mo#$syw~IK2sKgX zSR(3pKCIDHyRNYtn9St%L|WarK-$5}s^r82ReS9@IV??7S{7Yk+mxoLtnJOCY@5~L z;JqATR(5q}OS(OOu4|rlkv6ue5{3?Cg6`?-(9wh0U_eux3VY82bqF^+_*v>Vu-qTN ze|~aJ*Y-w}R@oOes+XY95oHjp#;uq}1B*qd#0(hBD01Vu4Gmn<})l zb0A~#!Q)~3vNc^LUT=$vpxl7}vc(3=egNv1F5fHnDB)e-hPM$46$<&*Rr4vTfi3Zw zXVzzIs!;7a!EtSes3$`ma<^yCxq7Ca!1ik%2uQ6ov7hF*iCwa|&owA+Lm9!P72+*%Xc%Hh}gKM3VlEZ{Gs z?ELwf|BTokV{XNOxmN7#lsP}m6xAAqRQU^4Uxo*~JZqwJHvbHDzwd$S%h9va zr)nq~lW5;%Dn!vCBb`JNSyLE#@NGxxcAaVll8=nK-pJvC?97$P@e=;m@ zVWPRA1?C}b+;Dv3pUK#DMnCRBDytCKvT=i7{Vr=e=Emn6@M9>V zT1$nsLtYcVifkgjGiO=coQa?E_7JrtP@ZjEPQHGb_6eRTIXAYo{E(p)e}PxxbScU@ z^qq!jq~nM-^TW~G1S1bhG*^k|&Qn$$Gh(eJH3293##F@y*!Nz+wtuq9FD{+%&+9Fd zY8m@@)tXXgwVzqyv4b|LeFb6B%K;I3aN`0fwPVBD@gDbgvz5!B1V?|8b@PzJ`NR;( zf##HindW@2_|(-Zd-qbxX43=T6ZyEHTK62%0P)8mzI&SStrunM+-x)Pc4|{dJI`n4 zgUzu}_kGh}qhVhWjQxDr6DGA(3b$rsj<{=sYj}+Q%nlXrXOlW!K&}Nsam-ZIZP*qDB>Ahx+c!@yABjxf}6y z)o-ljJ^Twj@0t*|%Td)^ZXRjM-S^geC>B(au+uQ=2WNFTHTV5%d4jBQUYFLh-o0N+ zkMkRj^ZCNO7to4}%zrpxah*opsMz>eEn+#Jvne82nc8TDeh{Je=~IA*XmeY_pkXa$ zsNgI5p!}2vdiy0pGk`opii&CbFqQBy$71?Gvh&JR4-bEM<=3)$&X(dUwahD5@w+e) z(xJ;zQWS&AXFf|dw9m?4lV2Qq4AL8JCf%5Sn3a;!-&Oe(>4%A7sTxd;v$luG#%Ia-wY%J$YFVCA_ zRl&cWa*E!dFc_1&d;Ihm*%0g&0lcE02$a{KZ6@v>XZ1BOBQ(XWJ+npYQNvAz&qm22 znP;MOxqzKj7Mp-4bxP=ChLiub#>me`M-MWl6N!>uKEq%BoYFh4)L}A07{OBRmTDg* zlO)j_MVS2XszsMC-}acfz3$#E{uX9k{8#!d!*#g@4th|GnaE@BV;56|0JsaV|#t?Sw7p1c6WlL^WsPCdK>GM=An3K*T3xW9w#ar}t;-2smt9RhA2q;rH?#?oQ( zrxOgky_YK@A|f31^17$IMhD-LauIZg9*9Saq`j z%X)>a0i%Hv_k;DbMG`v%j=Jz9KMbi%2Q|G;qQkfh@;bY@6-H|3M28fauNC6>j%mC? z4`R6#31hO{ZkX&Zd1}~1p!hJzhdkgq;y~;PEQJ|5wCmXlYY^7rV9e(eoal>W3ZPNV zcV+$VyWa6S#U~7`fssh9*U6_mol+Vpf{VZ5n)_X5!fvsNrOMdiaJX(=(q2kq`f|xX z&VNR>a4_CMM(O8?V_ozl%%W6}i_+$E{N+OEKYnPjgCCzo@HSQt5GdV7$Vu!`2f}(F zj8G#yNafin3_qC5-rUzdsN(5Hg;$uBY{m!CBgH+t2Pm%6?Ga5>kDn1k4j2uBw(@+Y z-AYEE_4S=T``ir{sh-x0RHsfpTZ@AcjOX| zrU9`2qXzaDMY(x1;^U1Cm9-8t-S?H$NNSDOY>$0?2KcI#rA~ElrLTu@HToWK#p$Oy zJ3B+A*0Vpb9Z~%1F^I$jz14-iylcmw7<6*JYhzz4ilihfDq3hB8cN;PD9jBzw%G$l zok1iignGxqK%l5!zBM9%MZ;&A!_#1jAI=^d?E!(Y66$rQN(CV7Owjl#=zHj56yPC2 zfMz&yY_02;hj=Y2UJg@v0-KSM5t?ZD^2!R_Xt>YU={FmU&*(71uw*^>zVQ8Q4B0mW z*rKg-V^HkJ=_9tseSqOvKlk_8E@B)8ikVWX*_0e4PzJ-*glZy>2-`7z)G%2qo};66 zM$8N8YrhR?t#k!6dG3j<0yXLwr3au=aoLwJ9001hy;eu82aYr;MIUL~exWgSGJLk-M+mxpwiVjz_i@vJwA zCGlrtgwHa^y@h%jEAcL;{w00i_(*=)EiBJ%kwt4aPqAU@zzcmvf*u|obw%)rJj@XX zmKm^WFgALTPfBpy5%Vjj0Bhc4Hhfs;xsQ5<4TU*mxO~(7E97qF5FKzC>6z-5Y9k;2 E2iU8KRR910 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-initchain.png b/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state-initchain.png new file mode 100644 index 0000000000000000000000000000000000000000..d03e88ef2ae0745aaedc52cf72863080388d7e9c GIT binary patch literal 32800 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 R0ton{s-*d-Lcucl{{yUICl~+# literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state_types.png b/versioned_docs/version-0.45/develop/advanced-concepts/baseapp_state_types.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f91a6093e0099f409101276833e80bdc223f78 GIT binary patch literal 133747 zcmeFZXH-<(vNoy+(ue{L2qLi?BuG*~auS;)IZ8&d>Zy9F2vL-mymjO5jVo8K+>(|; zDPOsA4FUdTz^;Sen0*@!ymE!+iZtr6s+-<=3QoP+;OQkb86gK9huP6xPSn!%M5NMj zEP+=hmjZ{nso2xIOeUeI_o_>ZWO2tbL5xOkP=p_UT<+^NUDnP_+4nY_PCE7ppC+Gb z7RSeL)_81H4xehCPA-?HniW5FH(MZP^gK{FtYRi4w&$6n%aT z)w$A29r;-02PT~0D)eF$!OX5~`c5bIEvjKi1y10*k0TZE0u}rU2E9b_U{V1KS8DT! zufl_GT@8sIO%S^U|NBJ+Oz@?+%AsfAODGIN#9g9)o*aD*yyJUSbYC1i^NA>ujyqfN z33xtueIo*6>>69|tATeh1QCBm0<#Fd3Vwg*&SN=n-AQ&;T+AUz?{?UqIlM6gqb-h| ztk!`Up@Q50PV5zI;ngdY6kdA%Q}Fmvf@oMs1k(?KKa29+MTsJ_1U0q2ZeN8<(Gh3` zaJe7LC7sVJAQ>@`(XTNh#|;ELR*y1`CLFw)+J?C-G?-ukUNdxJPp>|!0?Q`8>H8g- zwK|&1UF+QCw^GfI#8?aw?K+j1h~4WAwvOLFC)6JNWbl!O;J_;m#)PFag~UKAJ^=E# z(f(#N7?wp(FwFGr_LGokotS40V}Eb^dfiJ%1rtT14@ora;}3aw=POZ-97g~99JOjl zI$F~=Pln7c_kYyGkSO|^KKpw`QQ7-(u>VP zfgo_feV(On#+fk42w-c(CW_(`RZjzq0~B~V!bL|9<&boyK`M?w`pA1Ua6%>tMWB$7pw|!S;zC3EJ<>Br3K08_S zso2a~TGpx)t{Q8<%`7pni?5exGLq&~w4vBgd+Ys0tlDISGTnY&Y}q|9(fboxts-C< zg86er$rnc&r`9XV0_9$k6VLr`g?cd(k!RX&7-5g(8db{kmRj9S&*A;E9)eqUfNt!{ z0u2lrzO-C?T367Y>!Q53SFm%>+PX*IXKcpj(z;k7$-49w%><5~1HRuS1ta-4zNLcw`m}C|cZdp!wo86mySkZQT%k|Gj@COAQp|v9 zmb+K#y03m6E?M+huej7v9mw22<@&2x1F!OAfM{<-LZX#h6_=Xlw%%CS>t(l?#n<;T zp21iPLh^@ru)}@^LdR^yTk$>xr$}d{*6x&g{s$ z=8vKTdQ+q%nLfHsaURV5*N(c-_Tn%;8vn4tIr#$fec%^{K@ok@X{@f_`yQ?ZSBl*bJ}k%3rZ^ zJ%@}6CuBUdX2PP4?sAv4TeCehWx3R<{FdrrTp{Ok_ONa**Q{VwUSPuL+Ga(^X6;}t zKE*mkxa4N_RLHe~?01*DVU>KlcBif#@-E*?D|NZ%-!dtT3l-OID(7#$m>HgSJ7Kc) zS=&I{Olgt#*Tts{uOjOfvb94^6>FA1Oq`51*mk3rJHktMo?uUu#GBPrGG&G9+P9k@ zY%Hf~$H|P3A@*0t8b*GXi99PPL9q9h%*3BtP_7NxJ4sV#dR?n?E~S;X`ALy_i)Zpd z&;o9iv_VRS4m=u$BbmD8*G2xwX>0rIa#abt$k}JAjhVh8iiZQ-xf=a8=0gJwmW8&} z{i~O!R%Xpo!WCnFxRZY6y z?oST!su~i%hE+{2w3s~ELf6W@53)=ziiP#xfjon6G%#mkexbV@sLr<$3RT6ziKkH( zuH%mE zH%wK(NH1_)Pl7faD|XpWluOnabx!jN-89+g_%!C2{28I_;5^vw@`EX7d`!1?9ABTc z1kc%0d+U_iNvs9;Mp0#JR8&T?HQ(Q_22HF%P*xy8#MR{!Y(Wz*$JzB7Mg zs_yB}R<;z`d;Azc?S5%hc*}(b1km;g`1J6Z)ey@}FB_4kY)*?P(=gE%*R_+-ie30r z*ncTAIk;dhU(Z(%F2$nuF}7{uo${h4nA+Yd(I*n)`VHi))uq=^C>D6bW)D~Sen|Kc z>_xTuYF^1!5^&<709w4H2j1w(T8FF)CcAfkhLV^A{W!D-}a6o1@iWXScc(eL8 z__Zp&sd!aES)sGgid)_4w9=aRqaZ!|#M9&NC;NrVO-bWI<$C2k_n)~$ebAqDJT93f zM8Ko!fRAnKxt}Kw9L>vsPHlEUTU+7N@SbGe=BZ9&(Kz%*C`zhN>9B5}Cd*h^s%vsB z-G8I&()-0sZ<5)Wuu=fca}C^W$^2zRM%p zQ;SU-FIh6Xxa7qZYqWm&z!#jq5E3T!WB+WY5iG8*KJ(p)=m)ksU*&>J7z}UY0`+F$C0_ zvxj>kC&l|O+(K`qUX*R1w;CVP=~w@?^T2iS?#g&;yil0(Y0|YD8e+Rg^mtclW@4k< zb*40_Bce)aMAuTMbyK5QnznE*~phFqm&5KyO79s#|FMqmAYB*xK? z0$)`V_zQceXk(x-;i^!hCg#Bc97;vAU(^e)aiZM(Z8L zO=aX-$!5S(e#OgG8M#o|qhX-a()Yl5Zma92xGs2>N34R$kwoP|YXCwXaeigG$X$GTz4rCqC_W9#not)659 zUF=B{84@<9t)2a-@Jb1UV zl8BX&k^NUQDI@a^E*Qq7OdO zkemqfeaYLbj!RRXUGr;6_{vNKW`*L zbR-XVZnP{;xJ|Tu6%R8u3T}L!L=3^=D`XmkBX^R(CTJ=cv79Yd~lqe5H|>`30IIHrxiIid7m@mx4xfm{nmZ z>;*WMGt1l`4Fh?i>Np?`ilx`kWdjmW1cz*QGP%p={0pmAaeWWB{DXpvHFi?x?c<5{ z)2L6gXZWTv{(+W0+9&1OuWA>$)drBWBd)(G_FrvOET?Yry{($g{-lS3mFKnUznl`6 zSHC!Zt(J@SSLPqc&~YJs?Hu~8sQq^;9XytbU77mXMQO{_n{qL zE1lnwj*SE{QXi+^VyH@8nfk{9* zvWr#Z%U_S~+8zdmiA+6lIFn9npygwjkvt8wN+JC0)xf8w}glqWU+hs<3A(B-a2v528Os1L{DEy zWpY!H(O02BgLd`!CEgH06CH3EZ192*qON)J>4llFS$K08-sIbCy7)g?b9W zx$6#K5Z+lyoE8Xi;82L8Dt(=YnK1UM z;M84#zp=|`qWmpF5J*OgzJNRYb}SwxmGOxvF<>Q{&9m{&K?bwy!sTM3Z*A_`dc; zQqGT_@jXs2yU8Z~-+HDNv%AhdP@t6M8G*a6j){8ih4Dcg#`(6ZsOjlhnJfr1xb1R2 z>f75x`Cxr2~xp8&e?*%MN)VQ>KvU z1hOpA_e5Z$)Lie0If(1+oBIC^9Laz0%Yx;2B7m#rl#vc->!!gPNCrAmRLlI|#-a(D z_n#pb;`P1lwXZ!Z(CFu$@!U&L3Mu0AIoo+%s8dt+lQ+OQG=sLmTaFNMIbZ6uqI}r; zPTR(u+`2-kNS08#VeuTq)gi_SxrE^134|cHPc+CNLCCygDSgMPJ)YMR($I(p|=kfqBDjTf+OM^ z_4~uxg|1uE2hG^jqu^iiKp{b<5NBdgh#K(zb5#bGx#wdeQ7%L|Xg@JE)z zqZ?H-HY0i-*8Pq}^}A2&E>700%X_%Xw;E52el;fCN>uELf#C!)Es87E$8R+prlz>B z=Azwp<}zGllel~CKC)2FYmcH77>+pXVyk2MeeOOZmU;i6<vX<6sfm&n`SgvGS=SzS#hxVawLG5TX>(516!)*Rb&_rd(&H_S3u{3`;~& zZBWRxubm&x=&vSj$X+)G5|88OsNvCt6Yig;_8i7?NlmA*qDNaI#-4vjo3O4*(Y0&F zl1EjU54PiMIrj2(H24T?RH*b<3vSi#O*Xy0MQ*w=URiEG-#*4%TtC-76~Qz8YnnA9 zMBBRZtxSU~H(LX&|McD07u>jiY(=}KD@epG@c7mfA$Y?Sg!bRaC31Y>OFQc>*ardY zPl}#gm7H;Wk+bL46KH37n#kpA_<}!8dyg|c2BaDImSe~yC?qg(nMBELsts6J66MSo zO8t3RUsHR#mBOR)iyOy7ZX~d4lzf&K*x=%MQnyxAS4*ZsL5_s+3fXxc&AzryvPPE< zDu_&pb8}C-%`1-dZ#nh}jeyHr&!`QrDEYMpT=^Uclc#uS6*y&nEe#0ItJn8Qdj08U z-R2?6>8uZSz5RM0IoFG58KuXb2;-x}+s||i6hzJ|h_HjPCbfYW~1 zWOMeNgaVbpO{(h@qwCo7Xc(*y+5E(Zz$sjAz~WB)WQQ3lErSKvbjAtd0%l$K9G~QV zquE}=ZzUmmtVrRLUs?3e*J*eYFlp|$xQ;}LT)c=9KKT?jm-2Ec(ME8f_hf&q?xBPh z=@x@|Sk}vjX!ye{t!c0%>5j!nfz3~cg*Wy5{+NY-pA5Yag3FG(IlIwM@a)T9qEHDT z3~AIIF~mp`l95kJt%Z)Cm6oEo%1_Qb7h)u9$ILgIHNTWDjaR?1;ui?abL4( z`W~iwY_23HUBl!3tm~IfYZ8*EhS@!$@3Voz#v_gtyku|}3kV>lM`7kF8x$GI!Cvm@ z$T-ab<#UZ;M!~FUcAL#uM(^?Of+RGV*bTUt(1kY=(f#Wr&5I6mr)~W~h9B|m@le|3 z!Cp72Ub6W>v4z(j!2tw;v%(q(HUcVEtqQvl#8Uz@lr3AsZ{?0~C-!!P7qy_9of77C z`~B0crU^>dN%%@M?i#W9_$N`5l~96qn>Sk?+%qzlUV&0eDNog?+RO0mRNtO)Uj1QjO=IZ0A(hrTi?s0LT>K)h81O*i1$72Jqu7faQmV&r zF)fl6jqS^|;-+L?@zLJ*kGcxwntkVm2U<14<^mtcz96?Y_8gF4U;kQ;?VL*82bcT3X@`G*jPpPwHX34VwTz(?FROee{ zMp-t;hZ8>dghO=iW366;gQJk8A>bxi{Z;^ zUVc$o7kkqr-$%WG`s1Y}8;S3iJ0{tuz+pMdv*6w1JQ4CZaO$NU`SQVda7=ogn#sD` z^Sb!;k)P`ix^A!|X@W5ZA{m7V#X{k|T=K%bPTxN$5F;Mj6D;ws8VP+3C*#za;yvP3 zDd?jS3g=={&gqO}7+4%c`x#A%LKO#XhaOufoR*OkfKEUWHFDwq@@?9kE81&6mYpEtL6&q-HjDP(hEZ%rNmeqH^(d2^U4~M{ER>%P97(1k6mLo;Z17gQoPC4fw;OIeULt1*C%_LT7!LS3+O*dzfCkg8aiQhbd>#ce zXlC~d7&B;NLSp1}3z!Grzhl<}Gj~3nAIwg&vFMhf<&Y{x ziajC5i+SP!@8tCq3~P)oR;UO#J7bgqe&-vviFUx7#nV)4_?&BpVIkp+$&Zd8?5atJ zu+vn-b@<2U0;`K%@pXs(A$O28;U<_|$Q1joBQpwMu{hvKvr8%8f+7ru>PFK zZp}3u5W*bG&=jL!3DR-RrADU7bFQ*TA%CoauSmqg5z)hDgbDr3vb>{+&#$q-T)}Lk zejk?@!&0XQkNi{Gg6}JO-bfayyTTB1`Ex7tc5v9wL`>mZUyFyN4*6GGVkC)Yr3hbc zi^UZBAM;q#@lY+NeW}TkLWq?z1g7+j?%*cPe|osqbvecgLws-Y@u~Vgl9u_(sKXs^ zd>z*)#O!iS|Iz{1>)Z@CvyX6sAimez zkK{NZCtiJMn6H2lk-^r?qXF>{2_y*tF>2-PkSZhbQYvEM9C=^*{cWt6E<-1j%XTsW zJ;|AeXy~&tdugF8f>p1sb-BMF{XZS=Pk_mqrV2P1JmOrUZJK8nvh++#HOmQd2m{OG z3Yxmp=YF(aV{68+9rh?0RC{}04cRQ7LP3*I`d&Ic;!*$q`COH=8>ZX~MYM$x} zwU=By`!AMvn1PlnGDYp$fY-?KHeNei35|9dS0dT+P~EyWe*wUt%M|SZX)?vEYkdyN zkxYg~a5?4od_rkg9}27WoovU)>8gdSR*1ARkjyJ00(2q@<0X^Wjedeg1tmU#z-~pa zQwAueEE+XY33wx(_FL~A)|cJA@IN-@n2cyO7Z&_k1WHv{ss8^pT6ziyy6a5QOCTt6 z7}EW3NyD~oWr!P;^5tRxk#hd#(}0E0`qiH6e*-U|CO|Z*jgK?>Ikw z;}(XJ3JG@d1zzMT5g1}lSVfbOTbV9Pk%g?-J0K-7;#vOCT{xo^NEQTI>+j2BqSD>K z^+R&RKkJl4W{KX+wIL=3(Z3%@4nH78qv^plm#@jGLrAn05nEbcJd7#L?Xy}6m{I{0p?{+={Xg=kH_Y%| z7zCuIa{#CTLtdk>Jnp`!BQ zouj2j)*vi(88e9ww6L-#?MdS4)2gzu<}~dtxpDh`f$NILR)d*Ynisk!O=QNa@%&(7 zqS}6by?Q>f9Ex3m@vwbO;Sg+Hzthf?5A)E?rexxR@2=#ejf1IJQSv)6lJo%BY?lA5 z7!4wuOxdEYA9#T-O(>}knyTkan9vqI7vBdIM|uUO!+o*#a55tl1HbF0&iDc8)N9z| z7c{(nNaMwCZ`JeFS=ahAU#Ec31MRY*m6%3Ytn zt4_SR0{El%#Qjh3g^U43+W_LZe2oBu;{S&^A&C%C zLI(*cuG24zQd)y0={Az;03e{Pvc4Lenh8{1d*OA5J<(J+hsiWUKv^v0s!KkvslO%g9b2 z5fTle$DV^}4_obew^FaOoer1JSFuMyuxvmn;8H=V=hiIGw@6I>&@g}%#6*!I7jCa3 z?EN$-9$CDpw4NCD3S#v*SU0x?8|gk`K-!LPw2+hLU6y3qI2Iyf^{GtwY6w9D3?57k zROo07#R{dwB1P$t#=8q&U6vBfYAYy`*FgX>(VfVd;uyMJ4RRqHKU5T)dySL0t&>YW zA4}>$`3mo&S!~OJtdKghoD>&_NLKk(B}qyX2*ArT8~VRVTN%s|Xx<*TEFKfssy70U zub~8A>FpQS`B9`haWLtqFyX#dNNJKhy4NQ%6NFD~bL%dbo%0+_ELC?UkOit`r{`bodOuV4zAEd3WEJ(H$3ntc)zE59cX&2 ze2ll+{@E(X6R5+~d$r}6YUHyGyHOc=UU{8&oTHUB-wGwLv^mUhdV&v2EZIt3GM$-ap`{8!D~;*f)cbF zfYZn8IDB<)0->S#Gh!rVFhK?-l+@GS?hfY;i2qW;({rL3l&D}!h@MR-$imp|m!x)%Vc=$Z z9>X7l-|o-;p*ppcD&6o)=mE&!k?_5F4CgTUMx3u%o*kAzU{9m915#l8 zSN)8>ai05`QOKh(GSUrNgV+MGeIKWw?%COB+P178NswEsqTXpbp>QKv=lsl$U>zXv zT+QGCsfolGJ@N5qQiM*&P2raNnx_ZAVucqx>qKJKd7bZ%s5iJfn;imkGF`a;IVh_M zeonLMYh8`jZ}PSgFd25IVLYZpw&{1&(zM-=xm~pEn87%zXW|76?p-*NKm`2UDG$-2 z1D=4=w;+t5wgqWR@{Y*lv(ltxaf8k`V$NxAbpb}P1XeS-D`E@i2^&X&XQkZpq0B{g zYmW)Y1ud(lT*{&B$wygTx7k1&p(|?=qYm+^RG8Ot)#}#E!lqs>r`Yts9)vG_Fzlt&fTQ zDk(r>x#pAt{?K_b>Q#MPY+%D*_*UU zR@6v!?0oC+b~-h7M@qc|?3*Jkyje4M2?)o)zW_21lP&%3q*$kaRxQ zIqyi>fLmy(EOe&_^cV-YjwKU!4@602Rd>mmfGWH8AFD5@K;g+(TBF=tFp`NpFc;l1 zrU#-S(cMQYn+t$2;Nn2hc!QsFW<-@zfD_^eD%xL)rv_+FM%h|MIq=pTV{j2k0G0H? zX!36W!HoV%;hX=%T|}a!eD5evF*1T%u}tKhCBP_uzt(lINQfAt*AY%*2R!gbkzPj< z(31L%%wb4N;=#4carU`WNOVQaN)Q29I9y;` zvv61@;$;GilkAQ?8&Oin6?N{Ew$On@M`Xg_P*%U!Js)cX`#%xTwY+yv>|4&%(3%?&kW!V`4@hF`U~j&% z%~YhZ!DG2OrU?9ilwne}C`=?&pYhO64J?&_87#Gw<24?0cp~48Y(5|`qo>YUuONX% zKODLZhN*xA7Qs@-!$=sb+qk&D0@P_}chxl+itWbuEt0@G(cl_L^F09V(nJYt_+X}V z#Pqs!7%`B35Lev?0c0?luLF~q_wgdBc9l(vTCVav(x6G-HQFcTOo}ye0L#E zVI1Vz&Egmo&;Sq9S+4?)VLgCIzNE%+c{~7zXdNKns_6!goUy`%_@={Y50`^6vx&3g zy(uh^wrYqV=jjEhS6=OM(};%4i&K|Q#Ou*^a@*vx#*&e@=;lBYoa5hv3L6kxf=9_u z9JWxm)mT21|7?QFV_k`UCakSsO$vz6H=+y31>oN+$T&@j znZ;IrX|yjS@5jWC=PDmsD#g zPt6(-D)!DcHH+_<)>@VD9Cgjfb)=9BCu_x3Nj9}#KfL(yDJFtiWSV=*X)x;rmHRIQ z1Fy&asv1iznEro1w_)*4fN!iIgPP)fvI03seug(vu-=1T{h5WpIA0e0Ip2@Z1%Ta=#1I)&VcLII+cPXYa5=>@9$ZC2Bznmbz5kEd|@cQF@x|M*B2@&5)m zuLJ7O5o!P9lhQESTKka9Fx#vz^#JT^fh*;K+v3}2lXp%)479$KWb2YaIFVbR01ySO z*#C|w)Zn`S;cEeiW(79z;BdxAdoWur#h=e*U1QmE+OG8$xAi#J>FjIj0_iwYUJK?F)ca*y`yHZBcRPmb*ampGVBctD0+0`X6;(CV)OOlhJ*Kr-4a|l3u;x@bxO^NvSt2L zW@K3i5yLpxz)j^15MJsUa(z?{`ns0{l~KI1@O}(VDU(!ro(iy_2pnUzfMgJDv0?ZT zd;mGy_8vPC2rah3C3!oDa^8rI_ii;^Zf1}_hWlOle09+gb!~+ohK0J;hpdfR<%8X( z&wQUoqx?lbGGDu@2x8)F zdV-rGD_B;g)Gr~TU;uMXUtJ1G2Y;myLQ6PMW+FpcDoQ*I2oW4%6mCp-apTFikcL(~ zf$j(#tALacEv#aYkWB%KUC6i?R>@#JUSa1q|`TD7DYoEQv5@xjdpLjLglnPc#2BivY%a56=u&kz~MwYg?qH zj`$c@SLcfJRdbcUorD}@X?f}=d)?3s_`U@KtqDMbt`pGU0ajVh5)i%cM^EewEtOXY zQo~90gYYO5Z_-^Uk6`wY-EstPT8>IjUo&d^E_URw@K*)i1&At6fBZy4Oio`SzfaM z{``<7*;Co`sXHDXll&&c8k&C1Z6yu3Wv@V5jS~*JiO8`tdWUMguHQ_t%!uN~VR_=8k80 z065YP1SQ-nYuWddCl0I-c>7OVg6J8Px9Ov|hynh@3A2n|>=%a8t>ktyczOB-$<%L-pGfs5WaAh*M( zYDU>e%r2oMz{DPhK%buzCYJRC0N8){(xu^8npBOB2bRMu@yLZ@fnVwV%ENv9?*`t8 zksz4W3rZmR)t;^)LX~fQ17Kptb^lK^wEsVdQ-j6^Z#pz8GAVWkP+`^)5L@{s|*zL@8vERoz%vFnx|Y>6>W!NTwhzW$}S z=Xt~xBqsJ-@ii9p17v`sFu_&c>;l^Kl1~j;%O!QU0~1|cjBk(xT<>K@h6L{Mc6JX# zhe>=t70`|ntG5jUYsU~>`jS4eL)78uETc9sdAsLwcx&9A214?Ope#)x;Kk*|xvo?9 z);n?cAuLjzpTiq8cct_9{s7?CB6H#ZIwMm+G0S1Utf^LyiFPnBb>`>;8?unt{6hzT z0FHanYVbMjZ^&(++>__=8b`XI93yPl;tkr>Agz^6j^!2o+fZWaRXmb`&NH*_ytv)P zk(dW@Tc-r|k*BT0`pTCO?!Ej6_uBWp>npug54Sr@rmu=yztgw7idxq`NG9<0AyHjYv}Nmq1|Iv$m}Zs6a7M7KCfc`w{=t$AG4d zw&+!f#{f7oF*@dP0^?>544pKQ2AVw{_LX~f_t+EkteCs*^G^euHfK#;2{M&5b>Ogk1Gr8Y1N{wuvcLdR1tW$c{E#$oWyK{`GoTm)bfCnGzQjr&Ks4)?#l2&I ztp+z&o$DcNH6d&PEMr+`aj-0FaBWW8wRsEFG{@V%^a3f=mzDJ=lu#3nJvwq6 z1P;;AJ!ACAO8`v{U}kqcfhyGlrAb3Xvw%#HUkblLI939}vGy-*lX#pRy5AQ=#a;o3 zl0!1Njrj|&7M(mxa1#=&kr4hu4Qh6g0TowLEZW5qKyKjPV9`_vmqO_pC=LNx?JU^` zs|auny`rhWLVmlgSOA@Cfdr*-plS;S1h3ryAoJ8aPkW#`v>V{Ig6Bg|Kvfj<>7VrS zU1*R+2&BD4H=ckxL1;Wquq3`G#i8IvLs1~P>k^7Yf5-aGa_3Lij7>za|Q%@u%})*UD>O z7pxBn*^|F>bAZ->{ax)Nc)S&i7fzTo{I91V6(eD1r;DyUjFMAo&mh612fu1O^zk7us0sZ?0&v^LnH-A3(cb^i}H}LNlSoOc({B6vVg3d;$_S=8<`0q|bQN)Xz zf7klI{{MGj;D4Rhe=PE!5B^=0_+RG*5-8XHW8TnI|0B%!k9h+1{oC^JAF~a917x06 zt(N#l7ymWS;Q#DD`)8{Esr3IjRiG%>|MNY#{vVP4k4R1aHEBk?|9YVQ$36X5kM)1VJsnZ|vgy{U>Qq{&&4cU}m3pr7 zN26}5WpHg%HKeZ1stZUxDnmeL(_qxlD+1yb3*^A^l|P6Drgg8Mf?DOqMnIgoGOK>t zUT8R+uB)xs0DaZ0d{ZFz_{Xb%r27s^y=Az^jN@ED#Kmiz26#Xyh_$I)0bFs#;yZ0E zKt4xY=0jFQR0nnj3Z~JX#}4zCAlTR91e~b}_{!KYc$T+q&-+KT*8!V&e+vCHAWKGe zv33gs=v2KkRJ}teF^ixyUX>faZZaFPH3y0_s`5;%BFi9 zZqkAj=vFph3iIA~OeqdRFp!2717C3ab1Zw~kzvbc-)j>&wMs}j)~s3peE)#L7I-zt z9&Pd-{q&#Uwi;Eec{UrpavxYC4CDilNihLwj-73gj$Bzao&uR#8l!yXzmwjf`3^Jz z4p@AF96+sUcVvoN1VU$ z4Ga0se;)S+9|Q0^fYxdWjF1e!v*Wu}3bOho4N$ik&@zHQqGkIvUb(h8j>U{InkNRN zVhi&GDNt^wU*FlW@u|+(L!#>+Cfx-P9eg7i9}|>*yFLb03qcj2Ie1NUxB0n6CfJB9 zOu*6ZuT9oCPDI^#IA?!fosLfV479mGqD)uBaa#RhZoW0$P}To9Ake~KUj{sh2&3t2 zH*9}n!u2blIni;juK`(`;4c_}B@_5wDx^Cu_ZF@V<&P9AWlBuIKnEqX;|>@gqk6tL z^i03O>eu%V_>6=ZN}&7e&!HhB{59QhngnVJW|ctYzkZOyzy|b*Vm0PcZ;GW+N2He* zXridRCw60`cl9sS6~)8^`9)=WuvtwrfEgqgS4_$KGlP2i@0pTOmC(Tx2SVV^yvzPq z2$mS2@Y`BFQzAkMsKFS=gf-aCXlqcLIGim<{%pv$>D(0DQ3=lBSZ+@0s_-c|n;Wq* zY^ATM+&iJtfaPSz$c?7U3zKQC)s=~=;#*XLqxV%mDK7Q-fF$iY_);0@ndt82Ut<}G z2gS?jpHiU%(kr+pOAhKHHb7qh*^tkW+Osi`w0Mq9>7*#pH@gH?WPq$TgC!`LZ0~!z zf2IAZmoO-{PcAI3+vGnTX$s}0ykDxfIRi?sH^Mo48F$7#n_k(EH+Z;`gYpoNN|*bH z-UErT^)U8EyJVnIUQ-_Iyhd}U(?DgxQccRCgZUGPpF7iAWMwt=ZWl+sIs4-^{038Jzpf$kR z@XE5+XoY{U0TEX;MavexX4Q~QT6@)~0Q2R{Ub=p+VUN@SUkE9eJ zd4xqmD-mvYJ_#nyd6ynaIfHMzpnJFz*;kH1cG?Og{?MQ(-t0&AoQ=fUM&*c}JnC#& zvzl$ zNV7uq_#9gn=IeWaUm+J;0DLRU-ocywYmn+x8nuV7FvFFHjrRrrDzSq&q{Qr17DIX7 z+!?n*XuRGSbtgPTZ=fgmvClx6c@-8eNwv>BiYQSu{b$L1!9WqnFn8FEPgGi(EvI@E zB{At%+kGHn2DJ~jc+0hI8!CH1*Tqs_nk}y`?=g@_y)Iym)N33T_us1|!;V1#N#`lF zwpPtgVGO{l)9Zo36{18^L6erq7_SUFs%J<)V|ZadNenkx8qH~<+S zu=*);y^}Vo0#tmA0*1*NsvOa^|8g4*veBb)3c}`4(Z)vYT2T;{>2DL0oQ4|-#E7bxnCleiX?B9U>A6yFOJI;sQM}d)?h6p zT9u*%d;JJsyJ@GLoK5U{&U0xK9${);yL6*=S%F@gG+{3tY9d^(_MmX)0JstisbSD@ z8!b1q1qh3pizZ-SdxM_odsRNN8vU+btY-}-Q5>eM$OHVUjeSgEI&7A5+l4;1y{^UV zcRt9W|EX#yZ#y7zt_8Jb8=zLk)$7An1t>{1weifk%L&zDSvQ>@8~|#iwv^KIlCXxM zybo|KHc&ecky5zF`cEIdQp3RJYY+L2I|+DtpNH#`9pqCyWS@CEt_qu$8Y1bsg&YS{8&;(gfaMNF$p7Jv}Y&*mPID+u=>11U{u) zvQ`F|^AxEMti1abq>?GZ1M11<TuNqWo(dLtWz!z~u0y01I2r z@4PyCv@>rFQ60HK2zlWNX4-)l>=@YaeUS67c5iWLR{BzEIbB~vMErFXH@jbcsv6S>go?;oB}Qnzz@37l=W>Yg6m z*yKV!mt(0~1DomSQ3~GKeTLx99e5Hqg(&YE; z7{8AU5%lL~uoOX3Jq-KFfQ4JC(6#{JgdCr#8~*uGW`i(?bXFH>wTdmrDNVMQP&iI| z$t4-Q$AZCcB(HF=&C_Ca)lK9uVx?kKx`BGEpY)L)azdKbOKuG1t3cQ@KNtxF25a9p{QzW z3ID}2<2j%Ff?db%$o`=I&h}vzA%b@;3mwf7H2PutCX$0!vS9ByWe9tL*$39{?{g(5 z73em1>Dlz+VB8{xr+)LBnL^Et-$f|&lTicj>dPYtT4J*8Zk3PQwc!{^P~^ZFM%YIW zK!t7p%mbZzn6G}`NwAw@JyF81?mdBl{$Rh)&7{gn;LkO*;f53O5oj7_Clgb$zd7fH zg@Vlqa*S%lRoJ?jqZLLd%et3bie>cZX4BkB#8e-sj?9qqqkh)t1;Z3sI;*`guuUiq zLwkY}#tTG&xozG7=#VXyx^m>RSA@U=rzZiMCrGM&Do2C9TtOPyc8HsVIU|V-{kj?` zS27c9rHq#u8SuGAAx&6cIsmne{Y33=+JuoQB(U{KL&4AyzyMQyP;FHCKJS>`gPvr*!H-|vcIL6J$`kdbMIF#oXwb;E z`FcMH!=oJ-@{^}N*Qt0B6GqT4f{EcgPjgD>GX;_I+7?Tj1-YomzCES zc6B_!uFVDYnlX#EbQAP&>e-#IeE;AtL-fS+p=FsQ{A>7Yax5hHm@-d_dx z{)k-SE?l7OEuENDIYKwsiD_8=IqpE(031=ls@7Ec$oilz;h}m6ss#O7DgmIC1uaaN zERcII&s?+Z_UAs-0w`Bd>;Tnz4ck)Tpa%;GJ~ir&oad$ABw2p$`n))7V^$aG_qpzt z0uqsnf_W*Zvnw%AKcepGQlrB>r3nY2%1QnQ_rHKgG!9l$Di<1=~5GlYy$ldgai@Y5~?Ikm0TU{c7{lQNt#JD-|#oamb z$Gv^)I)VO?Qv{tMNX)CUPl+ubN?oP9@mRp%OM=|6_dux|x6#{MHwE$CvhQ*VvMb#@ z+DYgXO7zljQb?%?`7P5fJYT|v3~&#jilvvLCU{Xm{h_!fH~>&&3u#ZBpZ;+SG*2;< z!U#^5QuvcOTv{@svjeYfx_;d)Z*H!*napEqB5h>oN}cR<1CL}ba333X)%1)1iiT&< zJfR>yCS0tIw)E%sXve7eQ&0$Btv_EfC$*y^Y_`kRD|k zx;m_2%M*Xunnd|9c7KlZYm?V+zSymMo_0(I$Dk&m*z+0I`T4U{FQ{dma}E!ijV1o4 zbM7jxL?nT5u((S>#%IcYi8rthKPQ^C$WV7UcLYfV%D7w7h+4E@riXF%+mmPI1R9e` z)eoj}jPH%#noVL9i%n7RW4)sSW1Jx!C?U}0Jr6 z0&!GkO4pJh`pnGfWZ=FuH z87QrIr{#g#DO@XjqKu03%h>COD5nRqX`x2lcW9AnbuQK;*vKFhj{llc%Q)lU8l4!& zy-%lq>A`P8zMdqA#c4N;=x3Ots;`2z=Dr>X4@ELcOC!08`E}YO_AQg8I_Mh0r0}#~ z#s!h?Gp!LKOssT-03Qs6^=A-;?8E&m%JIo7RphYfaVx7AvlQw4w%BkvU6}GhcI8gN zTU7z&eyJHlp*s_Ium@Q(Ehc3;up|43UM@ z+Nb*j1w3D!SS3B(E4^hp*UY?L4Mfgad|0pOD%M8~s0`GmuUDj7rQL@sqXqZ5{&Bxj zGzBo}NhSsrRf<)KyP-1~JY#!DLd)9GE-|+9FZt_7XJ2plofpZMJkNiI){iJF5g>Xk zQ8rI1;QR6vQ=#@?Vy~UocYeg4Q$7~F~fHoreoQ61a_^O%I}0N@fpVy z>Sm%jt!HfNHbU`4WM4mI;g!LZXf6zG751OX7?pU>n#QM(Mc=G4(JGu%F;Y56yu4E4 zRm8r&`$dy;{bmQ7$!Kb!-Iz<_)VSwPTKVZ+0Yfa;4>ChkR$bh^Ryk|96TF-*cX$jM zv7b(iw4H*w2C`EC)!( z?;TI||NsA+ImmI2Eyp;=&ZhFT*RiEil*lYcFYBC?k$oIF_G*xWNKr|oq>??OLo}>7 zC@Zqc9^c2Q_vd%{{aMfBJb8}CxZiKL>rKR%d=l5I4+gJ~EsmnT?Oo^;P60){?E{18 zjI}Lhxk{DLZC|6Vpl80;)>0%t{9tBqU$Ld~VV(zhgH}1L6MKlds~Zz%B+DQy!s&q% zv81@lPt`d2=`Ap%CJO}JD(Wo&bx$p1r_e+!Dd zyAPWZWE5!($j%n4=YQDnQPbI1^-enYLgz9nyB*qc1i(s*{r_8OodCDGG1R@w&g;ck z*rHyr%mG`CB;y?94+@;ZhdLbDKFG(1axh?~ULJ>@qFknX>>ALGj6cF*UYF(Hg{=n_ zoRXy;uBz;Q9w^3u5JT!d)8151e#gksn#we7 z!&L2}tJ-4%@qcu~x1rOqRmPC2D!=Pi!X&p(5!cd>bR#(azOC1=mbGNwPsj#dn2=@K zs89D%Py4Foen4lz5L70ki~sbxPt0M!RGYto`F<;swYsv&s$Ozn9G4 zrV=k;cdkL7E&}8rCY5VxNPP~$<(|hJPG;U}6V~md_(h$6XYdDw?1l=J1{hGR0=NX=V0LZs$Tv@#nWzL+q9xiq@9E;I12cZs8ljU(z(-%f(|9oN?j4sx*hy zKEgEo#FD@I7vSlCU9{&>kco-^)D`jwNab{*Se-nFE5^7R^{q%Zw+-@`{?-FA>GClZ z7#5sI6N%m5jF*jv4L+S@umcVF<|dp@%!-qYUF|HBwB@jcQ#oxFscdkWo{1w@q7G}# zT0@%@Z0f2}1myOqv9nKC{8WQY1kkHeBpWSzC}PwyWn1yf80a|Vvyl`2J=ki_vM^PB z9c{E~>(+6kurC8yROHGvZ zO|@j@5vYVc{F`jY6Ao_Ki7I6?vPEP$W?M-nZZ!5W!UJ(Cj#qF>n}u}(K79~5y%38x zBuVJw?`p~Q>Lk{EfWGvXoCs#h*m9$mX~Ok!!T3e6yPDZcQzFP|$)zS`)t!!zA$CNxp!Me{(}Mi5vsk z;^68MJe+%?DNUnI8EH5lpZf_|N|}t|O^Iz*l&LJnM==3dOELnqmzp?CS zYDeAnub*?$6GXY?5;e)p+L z-KBUWqJ2~5IwLnq+2FLzSm`#s_JvRR_*s`;zcrDs+q}(ub~LW#ngUo)^?Y;lh*|DhMBLD4g-7BZ~XW*+)ZMt z1#P6cQF{_wMw!H7=ANnr36P`efzteMiJk{W;zvWS&?o)0(UMyTKiU|UX{Ss9uK7r! z_%W>`w0&5Io6JgyEMnKqIwFTU;*~ECl|Uj;Pj|!Q(l|w0dmd8l{{t;)t6p1>& zA#o4Ek`Rvc>Hg09XGx<*QMIj5QXRnuy-=FJ=0a-tGTi(Fk1oYm?G7x0%^)t95R0qz1U2P&HM7Tq@ABW?g9HT_A$jIXw zUrN_1UbenXvgnLcu1e(+g|I}AIg~SO+vnyM){$!-zgSl7Vkz>7Vk;3;3FyMB=iQ-g~`-^iK&w;&Su2n3h#Ma%NV;g`D$b^ zQuG#emr)cuA$5}vTk#jeEx9WR^p zZt|CFOB9SlUWJ?(KXD|wR658^Xu?er|8C=AQOt23q6jw$iHo&pGtp#&hC}zJw%dMD8Ya{Ou#)xUlt>w5T}y zyyMj4XP{bjaDQng=p5Cj2?;B_cZam>EuyeL${Qu%rI&D> zmOhC}muXg1<#fwg@OsE!65HAc!M;aK>Q2n7OQI;Et&SXt2$X)2v~Jc;DC!n~2x%k7 zzrt0YSdD5HXly4+CVR&6en|GmgZauAjkVD6j9}9kg{V;V&X|EnNumWq)dnQlePi-W z#(R@7q%=fHz>ru!N1nwPtPq{Pt>_Gq0?nc{ z-?8a;{+t94Hb#;UiXnCP4ow65-c?qpyZEwjN(WjQeqI-}mHUfxE zlB_2zmnHbm$|+4OyNFc!lqEL4gMWdfvKWCeG5EFVVibZ7Lh80YcxFkO2`K)%YXYXR z1Ve2M$>3KVg0TTDMQp_QqYk*%uBKHr%wyp4tZcj`yymSXM4DTAaGFNiX>+tR3y#OU zfP8?e*Mp8|DtHn-X)>yx%F4>d(|$lUXRyEJX;fzzP7p&b2wZ zpOv9ph-zb{N@lR@H_J=^>DW(o3_=yQ1RCSDEibLkDjEfDU4unFWuaKet`4J1Cam9Z zP;*?>t(^}2pB5n6W^8AWOaBtLONmXclRWs5jpyA z#x-FLF66VW_@T?Zo^45pzT^;rQ%oF4tuO3qpmHyW5q-fGuMeD;^8<|V{Kg}iu3%ov zTiYVgwA84)ud2OJ5;qaAlHEsR@8wm9?*2Z-s1g~X{}Jh$`Jid@Y6ngGCclD1O(pHL z((8f_?nSjCsSUk`w~b-VZ)AG1u8&hT_Ef2{W5SUU$PD?u1C=Hd0^N=4l8}FCQYYfq zX>Etwd%ZK2|2JyV_pHn7<7bxQ^$Cp%q5EJkBkl+)c1KR|O%}6=id|{hyx)VuhZ#sQ^Yq+s6@?Akl6DR(X^MsSD`pGEF&$rEHn z78?oY1%lqUY3u|u96NC_2clYJ6sfYGvKv32FMKg=#vOC7IM7W2*Vb*Dz3N{Ulz&PJl`A0pts-peqX>8ANh3kUzH&m#scFjg1LXWW%@($ z23M|2q0uRQb_s{<1RQU)+jX%=p}tlP*YEoZe(9@_%UeixbSmPB0($1#Ma*zs?y)2bNHB@W8-m_w3pjm z^?7^Ffd66Ctcy6CEfADf5QqM^Gx^G5rC>aOOwiCI%0`=W5f}UhEfokE;e>@HocP9t z>b}bwucv%9yI#vGhI_@!*#!~b{wiLr?Q`xLVx+#1^MA_3`C#yAS3ri--Rm_aHIeR7 z`C}FC%`e0Y;3|DZ0~5D2(9d(u3*PX#+~$OUPsSZFs^<0Dso=b2urH1DAS4f@Bt3l; z8z))G9UCALyM^Dc__ncv}Nn4IA#WF_1UBRuI-OF65n*Bpi zBcXY=`Lc~YRFksm2*sm$+uzkhviA5{yy|g>znRP#&GG6QqB#o8ei5A7Qgyc080Bdf zi^uB&;DW!V%qaScQr^`*%YAR~*ShuWQa&1C>DPSegkUuPtqh? z%5>s|)cfBr;-ewo^rpgK)SUS^w`Tlcr4N@aFPxdxoV1N6;ftYLl!zUzJJEsK_%cX@ z_%ui>>pp$G9DZQ#H!clvD-_s{Mif;F)Vk(zZiI6DO=uIvmVhHbqHz0OBhMIBr(*T2 zu+z)*C`FexOVfGU)eNtuLK0u~l}k=;aR2)~-4cNhSu~mwh9lMcZR+v*@-Vrg zL%wS7yN|sMB79+Iir0{WwxtO1;zdlT)DEVp7-qINRVVOo29U{tGLX^T*gqSuK?^)p zsoEqR@6TeRb9IJRbPfn$s&z_J_O3wp3((x^h3~LorFWWX-WpCwwiD6o;e;#hiB(ib z)kpLDpl|&q>+!7kdLOsfXI@-)s2GwF3rkfwCYjiRxR|9WcOy-lPnYcQ^k5X3q`T*V48W6MHh zGZ)DAnXqx;MmecmH9Yk|P@9W8wgWVx^W2tu(0%Q%MSWAOIVj?jd*1^`*`tEEc7#`x zU(;n2dHl`Wvy01~q zu_Xi@^vGL{35kEC@p;|k@}42svD~=(>tBQnB8DMG6*Nw`ARJ{Wd9_jgBjr_NXA72@ zO#bxL>8q9z7KU#@97Y+p*XQJXU(#t|pbBafho{Ci)g##;TZl|)`%s^Aw2l48nM)KG z)Y<%){u^$M>~w0yHyib@wB*T|@qrbaxu(m0{SQ-g?s4JbR*k&B0uXFo^Dj>0*tOnB zc$Y~u;`qG_P%>l$`ReBO;Qj9?I!;i;Q6Vj`63xl)6Wx;t8M6e7KqCoSH|8R~2;VXr zyQq2DgDf~8!y!F1hnqwqDKobEddJ)ya`z??6K>7qo>@saub=Fn8?oH)B+#D|g6O2d z@~0FrQN=w&?IGhi{#wGPN=92T_+=oQqPP(QfVng|tW=~i_I`HvUNL68EKuw~wfn)B z0b_gO@#a^8*r+;1{pO}MX_XDLgd;-EL*rD+}I$PSL)li0}y6SJPc zx^x%&Z`j+3a`S7N6f|&@v7*A&aBP5XsaEDhG?P_wZ9vkqK6X9lij{co+dlV&J{oX9&sF^H-=Koy2FonoUfqns$>6dtd__EgcI z6mN=Bloh0rfwF7g2P%{WiZ#b0VTcbBLLF(dDK}U~nG4|3pV|@hp^vEPL#Lv%-rF4Y zYg#seDn7`wns3m%>{PjryeJs~&F#7kTnG>J94demumN~yZ_Q~_n(BBoP>hwBYHT>i zG8hifLMA)5b|Q;(A;W|W*1p#k!%c-He$boW%q|sNYqSB<)nHa(F z5U+9ndd86w?DRVbY5d6@)B*Q54w+n3Kc@SnMNQ16eZufW(Sf~pafMMQEFKhbldVVl z&-fU7GfXlR7TEkQ-pW7zxsLWnRrXCBdFq`sPiHZMXBxrsDyh=;yl}nA%{~ViCUTub zamW}#J>0-O?cx}>s={%=CEz;x4S2l%PW6mT?pWCCFOYQi-nJ=CUz80=WWICm#zEl; zuMh$s-Y$F@Be9{?WA4n7=Y$HhQe9{=Xf}rt;ac#1VAucZb3mi0dqvWJhkbSwdEA+I zBJVsZ2%`oh0|a>)=t}p1{z`|W^3X&-nP`jocnBpXP*l8+NpMNbJ7{Os96Y~4JEfIFMJI!Z>v40RF6qF&oAY+_Q{ zj8qjb^@uZ(nAGu+zC*Rk=2=+W+)#_PXc30ze{4LO;E}QS(RHyQFvax_R-8BQO53I9 z%h-Lqg}k##K|-P%4i&=EQ*4<<2`NN;Yi=}yZU_eyGxB`1^b#x*HOgJyIpgDFl}JKV zqOYZs88Z+hy$sPdZABzCVfJ(*q4N*fkfgwhWFK}L-!1HcogR&{+eTP_ijNS|BpYCr zs0J7rwdc`>w7hYYfa{LVxxPP*XKVvhe68MLzw>Cex`p$Eu4XYt)?$o>JUi>eXIv)+ zw%fZhzcVMKtKPht^1pYG&qN{_)+pTi$X$umHa?i4bGw~g`g*iy!@M;7J%B1uG~xq^ zP$?)=zm2~twMUc0;Jw4QxT%b`#59s>bE@aBJbp@GpHepR5}U-{Cuc`qz$)V)yq+;p`_5XOyBDXx|{V<9RjO&0!j&$FZcU2Oi0D(KWeAC{Ko zRbH^8qk%ir&H=+RecKzJDx}dsR-GfV>l{Ifx}_uwq6gw&tn+eZ+ZKFhvGx^Cy{~ax zti*nu$dNRY6D%Y`hIiDL`tC@WP(Px)X88tW zAq{^A1L)wb=-vJVk`!;L(eP5f1P7UkB`->#rH4*$oit=nRSt=NNAq;<)8yDeJjV8t z;Sa19jdvOke6%X&S^k-Ky^RTzdkj%|P@v6=@Kth;{AKyqb2v+GrgHpK8C%NC{Jf-V zF@~pdQrm8MhZHM_uI>7LbZ|X(G2l&<6o>?ne)tnKF!#j6a7?(s&uz=N`I~v~GjArA zB5s|{ExKOyAkHc&@#Yzex5idag2o?2oVqDp{6cQXJ8T%HBxPOn{G#jBZg?8CHtOp; zjbN`|d9S+`!}ayMyZ57RF9!Y!iJaD&*8RKcH>b zjowPxf0EHqZE6Z0*8KE<27D`d7e7Mygv=ZG_Ka3_9`33lHNer@LvV5IgyW*HWI?>M z@Xt8I8T+n*SD~v@L7*goW4FUN;Z1}PdXmPbxfCw<+TQ^k>1cnr8?O2i>oo6h#m)}9 z_AeKbL}s>iS$>st%Bl&ds5@aewLWN0c}O9fs*UPjruA?Pk7qv{IQ;vDCW{2_8Ddh` z+{jQ}pruT3F4A8$xU$lqy)g)j(bnw>(hx%aao+6!P0JnxL@?gf=u^z`em3cSU@9^nA>jS455uw)k8 z+1aDn@C@rju%vH-D&(U2FMPc?G}fw%85pP}FTW!y{U(uJ`-?~mvb!>dNF-(M1i2Wp!sh*6G>C9;a zvTWtb(ji=u{eKQ_NIjHAn_5HVLkTJT3w+a{0X0!O&JQ&o&;9Cn$FsUgxrup<`i}jp zvIA^^n)oDyF)K2r!p(NPIMnpQ-ig4&V4S*t0Z$rq!B{?xjq zHke-Ay5;A}ZL54rL}P<^r|Rh)%s z@jyFIlK!SP9=|y`7&2TboiuaWpJTT*q4`(FiptW#k8HlE|E4Y0dLD7_4LMTWw^BNq zmZj7MDcp5p1)(C8PUiaLzFRmkp$Yfi~wIIEi0RGsyCwBI*bgao5n7&6}z-ic@(Hx#5G@dO83nG zCIGP5rSqwKalqsJOevo3Vd7sao+}*|+O+zDmNc$WQVI!lex52Vx~+uFOm+C0{ZBFC zK~FDv2+>`_hKB(C$&y*phy3pyTBb)Wy4KCQgt<^Z6d%%{7T^nsR&(?Zi8}o!_3uM* zSP8HVyDeNkcJOSC-K|_A@s-x*^gw+NmzI72)(EZ;5@zo*{Nv3To|+6#%-yEjhpG<} z0?#N8O;3qeixIAQ`*X5g>tvvA7q))wy7uI|YlD8_*@>y@ca;3~SDBkWLXnqxd~sxF+>VhWFg+^pU2v~$Av>yhS9v`8-9E*%E7~XewO3APzTozy zuK+0U!lC#7H;PChi5gvpk7;hEyE072?*4?BMuvO-n%h>iYa#sNzA*PD@6N5J!dE<-*DYtvQ@Kzc{-TMv z#^uSw}?5WB=Nd>74w;f-u)9j#O?ktYcg`A`y;2K=6@htP58Qd`wneY*Pwh$j39j z3}=nM2UvOK7kFw3{PGE3L)h5T6?7eM{=S$h_71MN+ z7~@E`mFp~d+is)W6cpvzPPKUVjpOQi4!w@IWK47wsNc_wCk~!0FEf-BKt=;w)m6B= z>U#XMJ39*BuhE28;?s{HMY6(}Ts}3veDQI`xY$lyVXy3FGh;bDa^#7^#yg3h__h1> zMpNC)ln{7PKNawyzSUHUuSp;;6^C|we)ciBf4x9)gl=W|_UD<@swbRC z0SD05M@Y{$=heQ_+HqMwZ#>G9iVy$NDQKcBs9v$Exr_Nvhz||polo}LENi~2#UiNR zzcX4W%CVZ{?P6PSyr4hsb<>7R#GlU<_0JLol;+BP;JEtvy(|C-h${Tw?M^?zq?Leh zP;I_s?d8KdSdA2j%sl`X3>zcV;H?M{S+PQtZ5s74I!ioRo#tKTcSFjDeCWB|dpO8 zl;aLbgQHF7j9)jgO$#lvMo~si${xbO%Oi6Eqh!y+m7?Ev*U3dng>G%jn)5beD8 zj*g&@l7s{6#<^+4_Qb0#(om22H+?pCR5pC-Nuxk1Vq$SY<1gY=6%t16okyw)6HR>8PRDnK_?vKE{mF%z3{4(mwn zA=sA>>*I5#&_P5QOi>8Q{~$tNFqwIHX>)>Gcwq1@IRxXQcWfdIR@NI7PCTjqc1L-9 zoiQ+RZ#fjF9EKb>!0qJq;{ul_TFdpPY=J4%xxVQ`7O+v6y%4vwkmLsux_j;Szy2H8 zu@cWf$2JfcSi0Wxq*f6plTM%b#A41`5^Epk;J(S7$A6CUk><#5{#F#FnQCuI&4= zN$Y+J-q}&l+@g>OnAl*V`@AU)aj$+LtD4M*Jmuzt`pAIMllpa# z|3J6t7Vja`hEV{x+x0I%vhe1-Pk=U_;`KdPH1s*K{0VElY?R-<8W!W~)f)aRJbzX< zCjz@BmtCp0v{m{J2GT)Fk>uEOJpl_b@&BhAHS4wc8a@+y047JOc>x^hW&gJ2YJ@@h`=RS~Tk zm)+wGLIh&2<8J^1=c_JQ>~O#i_g&3^Uvpkv@xd0cDwSJ_8dpKy?CXGSC26d|xyC=c zAlh;l7Ozv|*O`Q%{0Aygka$LniQwIDqJ)-2C2EM`5VwCjhreS{Pub1wr`qE+O~X~( zsR_Xm@36+Tfm8?4vGv-eE#Um4R5VwvIX>Ct(4G&MiiO=#f!(=x4>pvxpoujqZ5Axz zft?y^v|Nv;?Dj~0X!dUF{O=gCaeXX6#e?%yDQtPQDXq0fNyXUMARh*2F-t$1dL#oC zAfkdtD)*V zZ$*^2yHR81rE7OenQaA!tpE?)3*>^OY~Ot<4EdH#Z8g_X3}~U00le)|Tj4)rfF7;< zJi4kA?O()NR>zhkE{GIy2y=Yt0t|pZ*@jyXB8@~CdKu+}BNC-%K21N2=*d{P72VqC}9#&S}2-+&& zmT==<;XGKu_XtfS$T2$2hF_FCLy|z14);ilzcggnma{%7-NCd@< za$&Sltud!5!(%KQqNjEk=nrQ=Dow`(92!DZu8JfEJK(qQ2SNqgxp8T+jpJAtQ_{O- zC~nhlY|O(Ho6y1Ogol>81O%&JG~5zNY9h4G#`S|%Tu{=$#`Of~2OoRFZ9$ymPPG^d z&+rXelHTBZp1F-p`EILlXuDBFmcP;BQzDt27{|ZsrsI2B(wHdMI1cAWcY`; zyslUKBErV8J!~5+UOI)Z^Dga@ZG&nz4nu&cKE>7uoov z>q%0@pVTcfyy9ts9~qkM-gc`)hL~<8(>CHKn{Xckggq5*EuNTpCaCh9h-ope9I%a- zn-cb2;LJE$_wYjfLSk+e;&J#xlb#n#F8)~ZKBcl%{cewp@xdfSk zHt){ef+h4vSv&?If&~ODFY3cZCy4eJ>kswhz)A5c zW!|T`!`?->n+i?)79W}aKP>=9drs41gW(c+r@4ZU!bx$Z zU>q#pouv6Vcp#Ng;jIMPnjFXQ69l}mxh8xpEy==SDYSf{6?sssVk#6KE9s4YgTJ>r zTsKV)Y%wBGlnl%$x(-S1hen(hUt`Mg*Bw7|f9Rk1$>oo{s}~kjxBc_g#l|~L!Y~$g zh0hsRG$bs*t74SMaIb=ci+Sn*Q@UE^^~GuC#YtzgyYU}WdB;hU$ur|-3VZPB?Csdu z$Wiqu1Uxw_ay7sep-zc|U8~S~k=n5q7uxwn1$Awd+l;?vmwo#*;tu&~@6U>a9dI-7 ztB!b`+pp@!Jg`y;9T;R1USV%9{3L!`sKCCh?E`_bD4{M?dp+Bfp+>@aXMOjWQj7j8 z&$!!o3~5Yr&xX8zfw=U$K*JZz4E2LDi(myO2)131_9c&kJb1d99zt&P zbx#qpp5{D-`ANzmGspDNGUtxAI&ucLmOc|_yF1Y%uoO^Th?sTDz^El>1d;V6CNP8tJv;8nm2w|{ z-&w1XKj^gKcl_fEQEKEsw!tUn0Ee-NJ=lqCccN4(RDFvASSzz!1O?fQ;Z^gRkL ztH<(4p!E6ePzN4#r@GIl6aW6!CaK<@?gMuR9W+D&ydq*fq((8ts%+)erV=_#d(Le@ zhxh}ds)3_koz4Krf|u6R{So_SV|A*Z*ho(PHmD zR+ZzmcKYC(vCi(jOI{E59{J?uT)I1G576CFAhY=Z$==i$>6T{j>M=n;{+6T&JF8xb zwj?sstnJH5`m#=fi#^=UOEY&ceiNnh%9C*I6hUKkV$!Tg;?t9bbDPDvX3qjm_%toz zWNvrE8J(gapT?IT3SV3AggGnBXN|TpP1B>P!s_tf)GSv!G@A?Y@Qd-INBEP1?9I36 z8+&mlpJMthAw8AFL)y4zyE-YyPoqk4c{~PCMkYVKAI^@r5pd-=)`=+mDZz@Q@V%AB z@qIqC*>rex}<%JBsj5i&Zjrt5S?J;6x=k#e3MHx^}swY!*sKT@Kp5LZANVxo-IY#jF+g@7; zM)Cq=YK*mq<=D>4>hJ#JJ}tZprvpF_??S%NmSrAU8vY;eE%c!K4AgOFJZqaEs>aSg z8z$v`Ypd$;J99Z?=IGkjnZGyfGkc3M>3avDyqaSz_Zis7LFmXlDs07xrGCmwj%PpP zV!GnIREK1tXi;o%`AEH6)Qfoe-XXf z7wn8!nAunGYnHv{cG}p3ewj1`vU$BD#Td|Ti+kvB(u}fHY$!mYL=W4Uih#tGV2rdJ zOSly27~&8>Or%?v$4eNUq3420&)knx_sHU9F*0!oAi)gopD3J^ILm2?u~e-AP=T6@ z*YOg=)mB@;9%N~d>(lc08Lc9=a_;HL?m?( z1<{4S@iT+JeweaNNXQuv1ety(dNU8_1G%6ssA%NyYPyg@2;U`-VZEVdqcb<;S^#ll z<}TQlpZ#`QzS@%26y`X9WZgkOIX3)s^!iUF!B!*RlZbQVVmd6s)Qos-BTxl!enu~$ zQ18Vx{YR8drVetRy4yQHJFE7jFYG1{de$#0#f3gY+vR~*>akNzblbFP2k^ds8xKHT zt459+nuG8c4u@THkiUsx;6q)dS|7RG*HZp^>d3?fErO+3dG&ydfck zI89+jb6~Hwna6}5xJE)|WYD0}JF&k&9uI!P3nbFDeNh=JU{Zf@*Af9PF1rWpn#sR) zg)(@0CWuFO4}Ys6+z;F%v^c%|?-FQl*Ca83s}F@W3OoT6ptr$;6C~Kox3{mJFe76T z^!N~+XsRQ;T81!_OJ=mKOCzz=dpYq>8|4|}0?()@1hwI^W;Gu7(9(q6@;fobO&GqWba8%oeYB@@T6`iTwpA5^< z3#%rCox$sT0rLKZYJEb;h^vxrZp$Mci|ja1cL^gsVg55EXFzNmqvn~oIas<)VgCMQbJM2CY$CzxDq$5 zb(SdSUiRWtU3jPlGhnbBsa?);k=Jn+D*qJBIrnT=|@ zUFOY=<2`D46|YQEI`L5e%k6;)ks+;Vo#iQ4btq61W#msjS&^4$AZ>LM|BOco{n%)C zr?VU%D9DPupIJvAExxWDdj0ppG1D(x#g#)T1VB&mR}f-rPAL8U5PyIq$LjQ`qu=NZ zNkiV{=J$undJ0UN^muSr;`RTj^D@9YEA{-^r&rFrwAuq7IpLAA>`Um7Vlt>b~$ zRPiT;i-On$A#gs9*f&G}V=?_rYA`*&@OS!FrUQSOZj1dx6IsynA1ra|*8nC;LKGY- zj=go%jK21;a0N$ZeZo?l!I2pHc`FE?{t}!(pfrHec4`{i|CIz(f(#3uu!oON{d=~7 zBAz6bs`QDM{v{p21zFVj_hXp!_u#j(8+>z!o+Z!+tdf@J`yWmItIM4N6L11kCXh>k zsgVc>zjnPXpY#8>-k`fGEr$LBkR?NwBEZt+k(Sc~AY1xWeG`0TW}ole3-FbX!7pWb zjngOm?-4rew{Ljw&^vI1NI%)h=2EABCsU()F?o|8W9eV$K~Ed2*0l$}6n$~yK_BH6 z!%8*jAEnXJrWpGFgU6kow{fPrybYW={RREBU#`y8{QDt3@Xw;?VsrYVbnhO0SUo~` z`HvoSG94V_$gCa$IC4ac95{w$w@Ukmx{{IxUs-%4R~wAL>2u(7cHf!~75qJ!W(-LX zUB9>WC%m4|A zFFk&sq#$xAkx%|_XcypqK)=Ex_jiKI7no+``jd8}e*u;MW` zubtzx-Qw5aRSkgeKga6px4W0NrCzN<0`x3!R@2Yue|M~ug~x^DJ5uvexqj!$&%vq^ zQ2=(S_H2g-`*cU`Z@Y?UT`30csUG}u5$kz>Gqh0w zb(>zYbL#5q6GL|ZU7}yB1AwyJKP}M6F5%0q^aKd(u5Cr$tI_KUMZ1EE=V&apfMtFE z@iw@SFX`YG022}YyjmG4H!x=5d|So!*HjeXJb8W#cZkT?$`IW4`r0`%B;1dE>B;mzhk+kg0jL~b0K)y%;ZR_2uK7FMVmb6+Hn$Z+)a+T|)z~w=M?(M~0U9Z$QL*9<}?^ zm8vGL6I3P|LW^-U@Z=xS2?CJ0m)}5820h>WYdnZi@5g6@d187_+3|U?ll+f70FW6p zViV=7&Qo%#hQ>dE8f6$gf*HgJ*kU)INA6w^+uNM>`#tl~;h~N2+qEH|1rWMDc*&&_ zqYs>+vMqA^n>|s_&#A)a>Zk7dIN$7e)eoY!w^zDUo|+~J1Oa%s*7RdQ9k6V1q62DFuHAgt_f zaPE4wm`0X$&DX&FT77_ex+Bj06w44{m8(1d3TpSbBq&JS6J0jo5R7v>$QH<0tj<> z1>!vVK70WDLD`><`ELP9?AuPM^Xun6;u!-Va85Hym=gt}9qwP)GA|exm}esvOuvf& zg;!xhZMgFKkdI34QJ>p^Gmd8@>@43kPPALMWc9FlO7Jv>i|U3{hX7-g21~W|_q z+aW*eEI~9`sSWVkOf(}&JpkA-e(oD6X4)Qgs(p4qjpRx0hULb~YnXr7HJ=JnJQA=HjgfQ-{;;Y*ME$0==bw{vLP@ z{ZX*rw1M3b&X?BsT$w+s+l)@0Di|URQ554_WpY#P86fI?k7QF7A19ZRw5o{@#ASDJ zHr>ovY_vF^6vi<8v2UFSpM&q5)AU(`n%$E&4fA z_gkz!nT2+QN34&&obkaU=)w`La!K^jWK1Gr%21EytY(@pZLi+lsB^tVHGyn;D*|S~5?<$ihWt z$vNJPPNNlUaLj!3@-h)&&hwE)!514P494EQ8HaY0p2!g}H!7;$Jt|zd!}>d={nT#;!uRPOO3ir&4HwV_M~)x zkkbakHPjU=N2^-o980@+hgNGW@lha&^LI`ws{pdJAk^kvx9kSGNr+7sv8t$Ep^Bim zxRy^WHd8~f9Y&-#0}e5NSxUaPCb&U zxQJFn93V5G7VrzSj<9LH8m_LdDKNBg^y-Xt4ZkOr8P1*R1*nbR1Oy!l6L?hN*n>~z zBj27qNut?=PX9OC_rR7!5^#7tKF67=oGO&68;($iDt@Od_+@NV>>gkfHovQej?@)& z7$;;W395*FL0+=vHHMeue8zE97b~$G$19`-x6p5$J0ShcCrFK>P9yx5IIbS2UI=0l}WCh)F z>92qc%qNTXAcZ}0#hVxi;wa5);3icp%(roF+vaIs%3EcBI+i9YXI$%TW}_MvyQ&54 zSp=~sB1nvIy}-ONR;=o*N&&Y%z(g()xAVpgR%=E0&@aZP)dJHaZwO#2yDz&U=#g+e zUl*f5yK=n0>)&#e-Bv;#3p?oO=XEQS|9m|rt+{j0A0P?$Gr@6aiS#Gqa*=G^Qh zQ;~KSSri*r{1=_6Lh#BaGJk`*%OnD4MC0Q$Cw-RK*zPiSWY~s+sokTdnM2l<+*?QkeTHRzR`Dk8J@gR-l z_Jnpgup-Z54fsYe3T3I1U$U98?*|_89`>)T>aNzu{sKGnypD_T3O#moA`DA8DQldf zWU7A!nP4p?tNT0H)E^5=20X3tA}y#J#)I{k5s)#!RickI$n15;*2gGoVp@g;V+1eP z7BU@nz>q9lq~4Ou1}fCnegwCap1MzwxWVeAy7>;_90HRy-hpylv1hVRD6%X$(!-rb z7=!B8;ubBekVPDm22fmYK$Epyp?s7eR0xT|Nedwv`T3}`4mrsJ2vgS} zG3?a=GqZwo?w72sDmFx#@iUICKSnrg!o`ixrp9I<9Oei&g}H|GLboZN4R3X9#PwK$zWriWCJZ1qnMR%iH&cKJz>sxX6t z($KS=D&N6o2kbz_YXi@lS)l#t1NgoEE*Oi!LpK)4zUVd+m17-?Dv=54J3ODZ|Gg0j zHWHVyWP@~3-R${SmkA9w_4aP|>LQ^B;oNM8*eLr0T9by2=*Ae#^YQ!4jUeTS1FkR} zRAWhQvVxr6?)X6zZiz!Yx`wHq!sVh4#|bN1{fLp_U$W%jiH*BT#?Voe6!(P>Q`2R0 zcKFhBpUp=Q3+_jU%lSO0& zWc7K(7b*Xbz4wf2vitf56;VN@gr;-|AW9Jh0g-B?i2_RRNLL_$AVIny(z_xeO%SE` z5;`hfnzT>?gpNQ0(n~1sx%9sO&&>0zS!+Jb%v!V7`$2(RS5Dn$pIv{O3*qDpW2@&7 z){B^b=moa8#0gLBeamY&;`=2ScN&`SG}i31!<9w=`IR~OkSp}rO30OG1;G+ut1ie=!GdEdcRijR9lk!3;(j1Z=r(e4jQT8gh zZAC>hWyAYZYOugWPo#HI@)LZ!$Y#P$@RJu|kWUJrK-toJV`{+~4 zwZgfZjt3Fi^25$5KQGPFJPl_#;_Z`fa29F!WYyyG%_qRQ=V@)#Q{GVA&uu21V_z{|h z+r|#l(@fU%Fl9wx@o9e|x~2cul4Ah=gu;p?Xm)`N4WZq-xa-|U;eR>X7y+DK6od@W z1l;p&b#iLw)>ES&Mx9#azQ^54o`AdeQ<<~%G>QMRdizjct-DKnToTQ}ha`^K+V>JJ zUpnADLzZaX<90O8XSsmnGW!|#dj-JSF-{rfQbSMvt8MEJ`_p(S_-yK=?c<|)o$Ij= zW7+*#F4C>XUB6a9bGhL><3u|vV*PeYC(_(V=)uZ`Sk~A#r>}8WZHk-4_)Y`lT@)d@ zJkf}GOsr+F72qbj5Mo$jS93Fro*w}1;H+>u-hWRK3rUYsuDV%ZhHcLku7bq;q?`zMrVHvpL00!kWv zxK!J$8i`5@SI0i6v<-qVs-#|A(^DR6b>SZ4y2l330g^XrIUmjRh;?5j@VPvNtS6`z zZ7dUa=hYdBw6#^=V=Rvh_ubp=oK>7*xgLwBW_a7#+yy4@U>usrT)+FzMmPb3h4)yE z(Z>BVPNwV@vH&=>q)9iaD|3l999Y5q8Rf_SrsV}+1(SR~tz{)I31Sqn!8A#~nH_6; zt(_ZGvTr_M_gY3Cowf(X8BOuwgqXcatP26+d?e_MM>+DoPo`R?_jN zC*TR0D<>i=RdztuqUC}ounZ+#A~z8XCnJ|p!Z_^Tk)d0XyTZYwtQPceI`8}=+9sOm zpev_)lR?FI$&+`c?DkdW-CJ;IM^n4uqBLgNUfO_GP|hM?w*YAA*Q&qX zan;$WQ|9oH+w@=MVsq+lzk^6i$t|e3sjiY@Bfdt+%oZumB4g6yWpUv@xu`5^~9!{!XCF8tqE zfS#0G$GR=d`f2aG8t1TrWL5v@R~RU^O~J3QO!|OC zjB(CqaL!@|PO__`7DPIdkTweMyR!kboFMrTNSLDvEXN>8$;fo7NrI+{E{27&pj0qy z2X>34Y@tZ|G1?gp5k06((JUe?EG7eLOsrpU zDGByT;U}5pfNJlKSMWGsZi5=2ZdLx`x^atUFlA~IP)N2t4=~UhAxBfmtlZl`(G$E(YidpR;!UTIFK>X6%8o>QoV({tTj<1l>g_5P2f?Bm6;AqY-ppjUe?DS99 z-$K3`WmS?lmsJf!fZx}K-F-I3B#rAW**(=nJFUN6Tfe@Hcq!{N`IX3g^U2R#V9al} zy6~r0aS~v69oYwRh3s|kJh3st7|uOz9nix6=Vre9@u33Q`@*XE4`~n|Z-s^&Co?Rn z0Yy&m{!TqUSU>}VbcFk6uac*dIVUW3rBr_APhiCW&%1e+Ph@r(32PgQ7r+mAvw(`o)uAIjH^K@`l!Mb6 znG5Q341!v`xkk;QDm<|zrD~^W{cdv0!M}rI0r{Yu!PF|ShW&z0MV?_19r?XR@-$8; zoki{gtujc5CdeTgK`j?5X#nS}G6bffb-2IPKPJyq4_* zfu#na1qy)t^R?3DLmEOa3e}eYYdlWSwEmzxhD)j58swI+R>>=yv@c5kr6+mb=-+Ve z-jg}L5Q$I=0U2`*p6l_Kjhut(#hV$*5&o0e$2WHoKU+-G15xuqe$nRwb6 z&;ZniAE@j1<jp>9|a%>Jkb~|f%ueMA0*~`(Au8(J7XB+ ze6)pz^xyrLd%!;$>lly&SfU*1^j)wpGDg~yknsxH;i~&LxEIs?rkjSB&s5=y&9R9i}XQ2(Lhvkq!n-@$47G~E; z`yXVqe~PkxWc$;x9<*7P{ti7GYUF=!)*s6H|LbOj+<$x!qGWm5VRb;{&*sbeiQtGD z^*RSPa$j?Ef22~RVNx|_@U!H6N%mB7de3sPVE<1crW-uh=R(hea=2fVwe`87&Hac!Vi2fP*6|oV3JWKQ+9Mb!NoIF^pe2WHD6V+S|ygRR~ZTA0p z_n{@Z=NXP|Wd-z^=K4JzkZJ^dy(4Nj{H=VuYw#riR(gG(Dw7cm{-#J}AV{6Q2M{zk zo?d)ls41IbB`aWP?`o&Z|NhKiC>i$&ztar@=u^3aC77*gWH~%cuK48o>NWIj+wg3fU9q%|Xo3q!1p>pfcXC_#MCBV0rMzpwoK*e^u z!#4xSW&uA@b_iK?2fRNE3T24kd&&kbd?wB8PdA{zjJxl1R7j6Nctv_P#F)iFZ_n-; zKB2!KK*!`EY7`9dL0J6OzA!!N z2H$YD&ft~jKtsR%O)-^+j3TyL_ck7v1V<}0Tr1`2@J0VTo?T+o!{%t^P`gYpi#e3^ z)PJyuU>Yc2pW6<1KitdzO=M>nZ4$?!(-lI8F-UCQT(OdV>E)m~w873%r@pB{m#yc> zN#bDmJ?{{`5P4;|fr7UR3QVxw;m(#RDb0H@K@w)(DC7GKu=VL(alC)7!+FUci-qAu zv{6q#D3MH=CW;*MN^Ul};6Dwel+7!Nh3oBrY7qFAZ&4DkpVf0W_EsA4LJg%hEov2< zhn`qAE0v)9)wRslQSHMO7gOHlKDc;O#X9yY>8hwr{&KSPI7cFEU|ru~6(Q&E2{5#CABsBze6+dVjWKd;VAJ z*pjT(NN5~tkHT$4y+NRO^-EN7-{<>t=CdQR)!syu;XYO+w?dbm-=tQrDF~<$))8te z_PQtutcOY8RU9EI_4c^O*z>4Espaw_P#C?HG2X=Hu&}PvVQGZNuG7NAv!k2vEUfPK zl8I!lYKPR0MgNyB%q;GrLF!6!zTpDp|E&Qh97IxhZqs|Z;hp%`qsYwO3#leq*AZnO zZ&=sc((}J9b!<59b*OQyR6YLXvOG`_w^fgqk}R9>i)<^hF)98*-+?_y^(mG(?^6*U zNKp|bd)(r{bnxDLb7Tl*`RR<<^h6>dxN&JDM^+bm*qBnvX53vdO4LD9$sXFG7bsZ3lQxg(z!D%^a5HQqt~_LsWjkaDSQ z<%@UH#!q_JVDsy)xynjb+!fc=P1I=}?Py#rk>0uT#!7Vw`3y6sljfzLxH~}2uLGc^ zu84^AS8p;s_SDX{+`(Zw>O`g@cJN12J=i>z}{e$TQ~&fx8me3!2y-CLdS+qc*497m$q)t@g2 zP)Z!x6Y&uX_Nh5>NZc1B%F|(@^O@KlApv#B8g)y_8}GYq z4218chB!$hcGz_#blq@$0`V2C7Fm@fn@?Xz3A=2{r2He)%tl2BK_J2#2_i3Sa+nlA z4R04nPjvu1XF9OrC!ZPv41hgubX1)+ZBg^U9&W4{7L+g-)V3L*mdsqYbDye96>Z?j zNG5khuDOuRL^6Bay79Xsc23N?X}r5C^(HdV*vZwGxS!lx;hWF2vbTIj+CDznH;|s+ zV1QC)`vEWF-C>3Bw2SL9ej(u7V0_9^Z)9uIgy{XdU{XlsUF~gZZ=basx-jTIa2!f!-UclNzBHyHdn7B457*a~^{%_sb zdjTBqVa%*9c8{20@xh>DCQ_JEi+!*<%&>TMXjubWVwKCK{&u?Z6EoJcFw$v3iHY4n zd>P-;H`id;bvb|BB{(q>X;_8SuwUMvT4>gXlloCFO85qTPbD|QUW%clbk)Vxl9JJ*j zwZEl`Si^4}$q_H&yjCmBy~U4tnb*c{?OXvESnV{JT5ny$-&41+Hidlp+SeIWekDY6 zguM=nx00;a8~;ha8Wkb0TuYvN^c=Er{(&I)2o+AJqy9x=e_0M$*8KG+mr*Br^zI|&kI zZ?XP!T%4-Rn5f;c7>Z@d%<(X4_Tt69?0kZuwP zhEaFBho|nF$it>j_lzJ7M+rm5^;iLkh0sLgUZ}R3Q}OGi?X!xb?XB#{%%q>4l*5IA z$%BM5ya*rDt$5?Uh3z5)ua;J?^1}dueb=fmpw^m3*m}}W;=4RGf!)IzCEY9mbB5?V{%D+kUUhUm7UNnP0Gb7BD43sK85(oxPQw? zm%@K`pj#I!K~S&Q&SXjDK?Ik`d#r?pbvwf@`6ki<5AYeocrTwAdj4alvx5@5U9Qz> zF_BJi?n_tKEG(BXpNA+*vR8d(3n*orj=f9gDctWarT**Hp zbHQC_*nevf`)ORP@Z;C%1$)(Hk>7WS2N4VSVaj-dGgdc?tlhyYrhxuh897^;835ES z4c>oq4jglhZ=p=D$o|ngAIMb4@xe(+sUp033s`rfRoz$2>`+ZdBm+($UYG& zgBs09oNB;iC%URA-t#EHm(@&G(7-%1$t_M=DyvXb`XE|BDY@-V#zMD4e_wLUt?Fl| z+{ltjhRk>kTT%J=DJ*fcx?#vLlivXqlTe6bLuyX!If=vkHIJ7|=p7_6h9cG@61rp4 z`wvnPR34r;zD?~fu+@z(vFc&Rw+E+U>sOql;Gb;g&aE)yFA=p|y(d{(73$7ZHqH;+ ze;$wpGoMWeIx~!87Bg5r?@@L4*Uo0mDEa%zxJKX_K$?z32+2yQtlx-mIn0q)E{It? z4Qq=5w?<^}CZv9vKw5B|(R6*h06c)K(WS6{rQi#NNiQ>Z2U7o3V0c*#n>XJwHVWtZ z$=Lmw(vE0M^rxs>1FTY+_7k*-9)ip6O^upV+io`Zy=G4+$@aO7F}U{pw878U z1db+)Zx{L0RgcEwx=Z`J8(IJzX6B-;x9SLQ?x|Nbz+~caFXFr09Uov4s0+yEzaE4| z;T9*J4(F62$I3<+x>79T_}<}=>m28*ao2|@j(5Y1_Ya4Yhp^z3)vVSXbq8U#(|F+z4`S={CIz)Y-x>a!(@0Kb0xLSS+P|R zU)p%)tc_%SQ}SZX_5*mvq=2Z?_h$M~I>8lTA8Sj?vdPs49nXD_8}J7{yRmym*VGLH ziMK^u7Ixh1ar;|eMN;&Qowzja#{jnQ!~tkIO^|Xk_LIS&83<<1r-I{rDWASk=lVdn zBNf$eS|YzDz$;_qIU*hO@v1?Yvd#+S=z=??pKgH`r}(%y4UYr1VqE2&Kn%gtCrPR` zLO1R8mCjMuWn%|AINiW~`4*9>Wl_6hR4)VN%)*yh8!zBCHR(|aXbQ_4`8p(I_qMoE zt*xz0F@X_trBRrvxv)H0)W%?5moZ^m+d9xYPQS_eg1yL6?hADGz8mmJrt1Uy!GB5o zndxL#Z@#y^^%Tse38RHpUqX2VT0L*Oxf~r6Q=AAdD6w%JdOYYXI*y~?9_~<~J8Wnx z&_FHhG{$K!zq9oA?AR8p@HkvuS&p-F^YIGl)+QN4-F=)BUo zT;CD}{)H8|a;Gq^r?b;buQ%qBpAI*-3(`7}xE_FzSZqu>7HMfNSbn=T~WBR_<4 z>(N#BZAJnGmyL!*I?qgC9A*jaVv+KMLV4wM1I0rcKRQS}BvHJ;=>LDx5np^aE;P*B zC2iPRie6G;1dW|X%o43qk3_;d0hwbx0t@!K8i10v-t$ltkoX@d(?jzv$bGZVfz3St zN{Nl4)Qup&F9wC)vk}U5kXRW9NaKDupV1y|P0yQq%N?nomJWSYkO4zXI z$xh9_X4E^yx5}iH1;*n`D-9yY@(y93lcqDOD=F=oyaST`B^@&{E~+7ir0&Yroy@DZ zM;gYJ_j>oP$4}0kN-+U>7i}p3pv&^xv?(Eo=l*M9c2de5{YJ`yaz`24;G;pk;OO>M zUo+r9Kvxf*JGSlqrBuNCCgH39+%kT$+BF|2`tD4D^2*!8MwHb2>ukEK6}CSm)WhE_ zes-G=N9pdZT!|gg8^LTiKu9;G{fW@RPzQq)=7FQ4Cy^|DQr(x6a!=Wb7h$^2&;Pc` zlMl`}v?hF*MQY!U%GxwwqJ6*K?A#$>2y8fNE{`YQb~p-sNEm6*iMyM(c*NV99oLk- zUHaN_q%e1WWIH_k&MEAXjokF6K$Qm^7HhPv;i$loO(xHe2({N22)Y^duDNQ|#M~5Y z(t5w$;vKNZ^(eMY1GH|Qa!l!tfc7^vX?*&w*t-+u>cnjcqG!KtM`w}lnKIUqt0$}9 zzBL9^t5TZX507Sn#A-)gV1pFVIo}Q$Eb7HrZhpqzeW#z{)*Eh)Nn4CtL*_->frC{> zZYt%FkRVCTNp<0gkg?vGrT{$Jv zIaZNzM)cTfD~FX4cjkQYc2$Q=`D%Q(a8t0A<(SOJapm~8k9c;#NSu2fI6@>0Y&gIu zvG?KuoSXgkrtK&c4N{ox78>1ol991lK*Xhn)p+4%uKwc3T`>c)a-k!adhhN2oBSFX zS%l%@ap5j*#Jbs85D@saKNsxO2r%G=9AAhb3z4-bk3N8=YC z#om1Jr3|W+6|Zaw#*a}S4?!Jwy%~>k)YAs9ui&2rE}`4 z97KVN;oOKPuEfavib?eG=)s(6r7scjJVWvGEBn;-@;pRB-89xI{o46|V*$R|+nUx* zxq-bDs@UvdM{Whi>8mpcYK$#uJDQ&*j1TX+6@js~7y+GfD$4+@#JPt7V_O5v7{_6G z{u-sLk`+^a+bylQDooIXQ_2>8;5)DtIf%=MO&G9g_ZYBm91rH|F)bz~Dvj1E@Z&o! z?(2ghI!1$qzPtJ51nB|FtVhk(vYw^d*+n)2i5Cpxfsg^q{ln2|Ou4Li5ndgMXk?k` zagyWx2KdsT@#0f_f_re59dWIT#55V$lpG3C8GJ(&9`;(r%&n#`~N1Z2Pc&%L9;^fUrSSP zqqL^$LX>CG;hVf4jln@=3Fu$qlC$`e+aoUGhW-2HrIkVk6+a?t?1SqLUkG{rZg#UD z2mlpcTX4Rwlb@Me5bX#a%$rTi+rNLg8I#UM@{bxum8uufG>47E()*4y3f0-=N9Nc_ zuX?weRP8uRrke;_*bO2ZO-mP3d(dk6AM{o?3`Wz=Vw|=-VC$o&bVoB1ObvtT8}lu4 zFK>?#;`Op)kEzC$ax9jVaHF#cxZzjcw+$9GBz1|_z@Qo!>D|Ltb7aJuk$x3~dX(v- z=d!n3mj)};2l-GqRdGCA5v0o%ho;=S39i?*a%BgFwrh3mon?c}x}!f_?<47bG1p23 zvEt47jq>7rtNL9z?{dwwJ1|bY@fSLhB?VwK%p0?j9`>VvlsHJT6($`;u#KI&rl(dV z?}sSI#Gk2Ii1hu zuLW*^8`Xe);yEKQA9x8S3&Ci<*vSiuIgUSOMkAm55@oSRAusUZD0|mOQG^7^yeEn= zzHsj5l63Cou(&dsW)=PRX{)i+zGju0hLD0;G>|9bC%boe5ax}K%0bE`b=Fhs%mwG` z_z{V&&V!R=LW&N|zSA(ba@IAkib07?RL8UtvTMyS)t}yU^ypH}{1|Qi)HmX2B&%fJ z+TJU|l8aiI18ZctxXgaH!H!3#&xaS8tPe|bJPCvm7sA_=s9TR7)#^Qx-0eIP+e=Hq zY*#jp69qk`EM0AN%6T1X+N67SA{*?3lZVR+#(QU;*G%<3Lmj&~TDkhUaF{kcPbBDn z(ZXzu4EC<}Vbm@qyEtps%=Pu#6L8G=YkO{^$nnwPX2J(0BuP?kA%jDiGmm*9HNL=% z%f2~Bwq)P$QnprF?bffpX38AHyV&CNifFb6kPmmQ9FeD>?B$twJo-l%g>#Et&<-QZ zpgAf0V9LFqt@&dc;x#q-3OhWve|L?St(S)lgit&a85HU`E^_oSvISM!>>5pzr>doV z$2fA!)p_ikrzZ16IC~x(4X^kf2@*Xvk@~Q})OUGhrzFRg;IO$J0c0zx2Iq6hHz*EU zT9%Ki9En_VM%T=pD=xBH7Sk2)jhkU&w_J^=#OzDm!YC;1n_^m!9!uG|B+O9fPm2mbVyd<8H_T?+tf#|_Pc^eC1)5?=MK!d-(m*2 z@_o*sMk@v`=~%MAHiR2z$ooi^u(L$aDIR01c)EefBN$3cRurikR#aDP7ie{F=jdU& zB|c|wF$uTS8x%Etp<0~@pg@ih@i!AUC*v?HyMd1eZyd+duXvpgS~PXvIZt$+n9h5( z(win8){4sOX*k5F5&8x(`KFG+Q4c!G3=3+%?;DRama+01bo{E42W~+cQ#){@#yjR< zuEAn+-VIjDb2ySZ^CP-NN;A9c??3d~{W8OeF!8de*s8QC6TBqewwxr+o+<((wNcO&Ik#-Lnh221Z9OwfP!?B;U&5Te?v?9bC>B`ip4w6%;%%D zUX89W0D;D>66xLh?z5h+VM2NaoI0|bz^yfn*E{|0Bcb444%G%%gR{`3`q>%Uki zaB1Kj%h#!&Y?2k3G?yg2zdMdzai3SMasNeHQ`)+SDYUb5bC?~-Wo!4SA2B;SY)7?O zRL2)5!qWB-hIniKwXI#zT;7zeVNI&0WTv~8Ys|8Iy|97MEGg7AI^DbzRJUGVGw-%J zS%4|FdSkylx%au@*hbuAaWg+ymUY_xX-{PNNS_zj^GlGovAiAG=fFhiYX{p=TxTE~gsFJG8Xb zqYhwaZCpnj-CeGKdqMZq^1-=L^O@^S72ubvv*N|J*L9uqzYUjdo}ajo1QG=06vk zG7~Ho|5aZ)b-&kb`#Wp11gO~>IL2SO*yECzh&x)KH9aGw7Cg|O6zfW(pRhJZvW#l&&MiKRaeoYY6AQ+(~{OEnIqh;No{rhfazK z)`up#qMk*C&0IsM$xc0IUQgvjJ*<0`#8Fk-Gl!{s$_3@%>OwR5Vh-74EM9bHz%++*X7WylKI0(O2Ja`Dc2J_LE-h_|JJR9yi&; z!22nSr-LqDPGYWJ{ZMM8>&%64R>9o!mWfgukyaUL972_Bs7d#IFm`rqvP?FtaBz#i z(s}4!l^Eo$pV zFZFf{Zqm2{JhpMpx_WUbG5@#@t>0xJ=_?z_EIk3j$*c*I6=)%AZ?i*>ty0Z6FsEVn0h0w-u&AC$qUB8x&+)yo(idy3*y-A7W`dJg#{J9tH8 zizOY|>qx7{qtf;4dSBLs>?D9UFdS5HhmASXT4% zvhS^SYv1cww%Uz5%m;0cJFaLn=^O(TPVq?@$<^46ybgL}I067Rbb0lm^8PAoe82_~ z+Zjv4dD^DvA0A+gGfj>JL)t*4Es%2Y(qtvf+n@z^Z5C1`hWb z42x5Iz29|EXzr&jr@PRSuYKyerq3(xws*Vgkg%6sTB3?^f0E3E`PeTfekS12%@DCL zhVcYPUj1{aZ+04tt*I`IR}mC>Oi70Wn?G~c+e>ZrS^KiPv`lGlz!3-UuCTlB9-?uC zCPm(nGId;;glSiCYtV&K^3@3RX_t$`+QtPHL$V*tcQzY__;mB_b#YE{%Z>ObnevlE z+vsA)h;p^e=RZax=RU#jz}7o@8irpJgnrO)dS9!-EU}y5220IH&JisJ*-?ve@p`L1 zb>*!5rv2Ot@c^^@PiRRpFn4e#l=C3Ybw5r6Soih}1!s*Yyoqy!@u>_EKf|spdHf;{QNQl>k`BRe#T1QOm#5aGNU=@_ftp)Fx%%MSS(Adzkhq=L&CC zqGf@!$j7i^SH2p+H_=F(LcmWSwf5WRfi`OZHi2Bpq1E=O^{3k1-{pz`xITR+_*3Go zJH@UYIy<)Q8a(6rQP*sY?0eKbx|e`7^Ts5>@~(sL*NJ`m4{?0PKUnEjF^j^vE>5h> zvffFO0y6U>H?}v6G6~H?re!5o9o5W*m;!yf9jb<&+hxCsItY64+qDCcw{nW1IAQBr zk$$%74Ngyo=~7IF{+m2(F`M@itm8_oSwez!Vf}7Sgy*v))x%xa+!9>?xcvSBYe@7h zbFD#mwD2Dm0g$;)+gxu@U4*nk+Q?gNlrp6a?rAW*LM3z27oW}i@)q95QTc$Smann~=Q?VY-|zutBKkTBjeukZk~*gW`4vZmTa;4Qd- z8CbT4%K+o1jhrRlo9M&@Vi+Po%Ejw*oWDDFGm!`PY3=23CksZUx5pa2ds6#%J;!k< zRBkEZL!zhtGG%6!O@;l0`77eMRbl<_9O8%I=As35bf1-qO(Ji=?ZUe9sKe!5->RL7 z#O)MG8ybNmcE*FYWYpvFQ(TCCRNnhe-tkEKe{K!AwBTs=i(SRlq9}E-_rh8;x1#s% z4~_bjGwUtSPdR3Uxb`n5-H^rzY-pO^Y`=Z4*fM51%AsW=>4$=a%hv$Rg&o! z?dlTE+WWMobg#_Z%Ce@Ati*KF<6m41iGD$=bGQcFGc;5=$AuycKxmc@M*{Vsc0tl*w5}-Xusf_<8;y4(8?Gu8z|vel|CTI72&a_~(gXfP z6a)Pf7%?IYM{9Xtv0`7;vH?0{(@@g?kcoj)sP@_YL^MdFY#F#J`VdU+gXaIxAb`D3 z+~MiQI}rc>{`TiHd|+}epuPX5D*_9Biy(3$mh2w0X6Aq#v{-8Yd$InXUMz_xDmxSJ zo>C2t)TD{#xFWom@4p;vFpz5WF<2|t58PVBp=KM&e}2xu1E-_L2i0VTe?v+JvTo@B zf7-#G4qCBl;AQ$FZYe+LFn)7gHmG4xT^|^_3LI)!@r$KUEbY?aRb8VeHuXDJKZpjv z`-y?~ht}%WKcKf8{OD3}iD#y9wUZHPCze;jsvyiv1v$AbS?w zmW0v^n&neUCn5?hFm#fNMeVn!r!bx*Jrj=eg0mxdt(Rch_m|EYu`6$pnoK#oW+ zxXI*g(y+Y7VmG+BW;TU+evC9wI#|%F=titGbHA|NYKhx!_a8zwzAJy1kgzxUa{JS5 z?mKAO>M#&0jAV0FBR!V{7=a&`dcheUL~Mu264D+VLHX8alL2A;bXN_$(yb1n>NZ}+ z<_uT=X4Im-9(GcJZboDwX+}h9p}+q} zGG)biQ`5zShWSzHev$t1e(5?pL582+j)U3WIjiF}-Pt)MMYp|^>Cq+Sy2J3&#Php3 zg+3lV^(;HxrVQ`m8^n%#s)%k9lPS3K!?WqvRpA*|#<;m&%S`~qr=5AAc_dn1`Psgz z&JYDy+z(R=hTF~;AH}#DAfNIJ)uFohuD;CmJ=o$WI^%0N_hFksBXPQA1l;En5A3Kf zD+k;p6VIVVaM*$AT2lN7)Q^!@ZrsfE&=v*TBFfI`OL(u1iqaqXG1g@eBN~ruGC=Fq zd>jfZTCv#7D72s5o$}2;+`aE}pl3bTYK+;AOcPZ?xMhHZ4S9>ZWMqDqKx9-z5FcQm zy(g|JfGgB?b&EssM@RLGPzKTBxK%zuO!2$>1v=FJq*H4fv#a=^d!~W;Zu~0ldv;b< zbH>~MCp3y zU4LqBfybuld%_j+rB->(>HL_wVq4qyH<3w)G8XBFGT!OMleMwGi%PQRbdKb?5`CkZ zlpKsff|a3{b`A9vF)+-~E(`YxT{w5o%iJn|$O%^C@N548@o*uLV5;LlG)xdo$s2#& zRuYy^S8q`J^t@f|<2RulIW&A^7ld5qyDF}V9EaK;2)jPml{~7S{_dQpVPdT=ChWOh zQgN8t>ENhscpLO`Q!L;mbuhFzFS4K*GKy#o=uEkptghqRnML`8u-Ua^VtgXlwob85 zV>^0LUk!)tXZi`=QVn@tS!&Wfr>3udh$hQs9~;b}zM=(MJU1wE+WaDX7MrSsH9$J2 z3P0j7e#eOTsu<2>lZ&=TdODVBNBq3>e5n^TncLW0ZX57{G23uV7{~OwA-|TzuS8x! z)YtK3QpxE0`q06Kb15!A4{vdVYnu;Jm{TdvNfU8?QRQ<c-gydNA4HiInro%$Q4 zNHz;x_~G&MAg_x2iU2upc#&c*J+ceq`}wSu0XITeL1ico%6|C#%XLeiECV1X%YOp& zagsBd2aLLeG$ZF}G$6s7%IF+T#77MHb%5#i_!UyHK3O0i0C@JPm7}1aLDbYFH$X#7 zR0ughUjmRji-$v7^%XRhJJs6BG$iF9jUof{b5W6#1AHIO$#e?Ap$U3{20`xE2X-^# z=0TpxIneo8QabYXQ*E~CPrxQzH5h7l;*6#RuR4?D^3jtZKGH!SD-`DTBtWSbS2e2D z$ljiTrZHu+r2)E^f?`C@Mi0vOg6A4#1#hMh9K2xgv!puOe53(#SD}wXO>|R5K;SI5 zX2$bm>MInaCD#xtr^KKJzz~>DCciI;;Uv}I0s%(gXMkL|oQ^{9N6a*%p@ z^BPzSKq;4~|MOry6fiB5DIE*M$4S^j?ub) zv#UV^f4}Va7L4)9W6(M^)ax3wPJbWGvVeD!?&h5dkb49jEv=Q<;(x~x3bix6nV82w zQUxhdx@|co(D43z^&<&Hzh}VT=Fni-{%w%VF9~!J>k>TplKKiXkI)~+!aDy>>>0E^ zNj`4|5gfYEvYpc(Yu@bHFJTsh_aZ8nnd9>Sb|4Y_glbj zf;T}QYEU2jjwJ?Uv**BgjW}~X{#_F?KPa5><|Xjj-$VCbOX(a5+Ue%hIfeL`1sRn1 z+}id2Hb_m<90Hy}9QM4Q5kzkMmfD5?8OuW`Gw%#Ew*R8aKSPo02DH;I(PRtuf*$OJ z!rV2+f9Lk`7DQKS4ehp^(frU{Ugs_S*M9Rs+x!@ejRO#}{LGzy7V9N-n*?Y_B1n&d z%r6~mKt|RWkHx=pqvM74dr@3pkklDklY(gNx_>t=K<+en$aDex-2`pC)L*iK_Dur9 zFkhg~J<0h{3p}EWtFg@cXKsGe(2=@zcscjATmf{~(3j-s{%0&%;26oj0%QBj;?MrO zSO|^QdRHfV*ildi>cQOYDu?>RZk{d z)dZ&}iWCwtKi~}jmwtn=wM!g0ABKja74xM8sQh+6B17J8Q ze8Dd}3&X`09RPH*-OU$NKdu9*;RR0-Dr9tgfO1|hF^=$%E}aEE?SHFFA6yx)F+Bn( zcBUu*gL$p;2Vd?$si>_9AXRhu#{*f9P(%W{$MEUrxPt26-_O@DSg>2VG=g)GF-6pq zrXvvr;aeG(pIEJp0$4ktGLVbkfF8BYMLIRXly3eoAIwn!Ezu}Ueml#abPQnld`f;I z&Lc6O@5k@)06=16An^szWm#ChgO-UKv2=2`UriF(zPGWUE(HKh81!tCU6;O*h+YMZ z?XJQk1io3bQf+s{?t4%?3qjbHr)_H<@A4zPfT}!b68nfiGZx{ zD!G(I9Tz|wZ>dQZlHE+)kB<)ByWhq?L=O&SigZvbTO{S5RdgMzdU9ZTR0tzD{=VIo@P64WzV71Kb4kL$*Y1 zO{mW+Bmi^%Yto}nipg$WqC=ZkACV0Z0HuO%lQ=a4m0;zhzr>R}+6?DO>~Wp|H<#iMX23OuL@S#{ zhWo)GHM9%QXGWB!<1>(l_UWIoR3}*K~;#O-s#x;*Pa4^fd;{f zVRJ^qjYcZjVNeIj!42n)7A%tM!nE|HNMqFi-i4DdfCIpfx%9jqyCjdU|8ZZa&Jsc~ zX7$;f8vO8^xY}R{^2G3<;y`}ocDP7)(JRW^R|@4>Spbl6+vF=y!QwOyfV6-3_QkHS z4zoS(W@_k3C~rK@R86!7sOm+a93K|I;2=TG2sFS-9eSr{9ug|!1wa5G61&a-U{QLU zRL5Gwu2r{zl@;RW=Pw0y(Ym1n$rO=b>vu@>uQU~9e3O7lU8;WZprC$#i9Y`NHHX?Y zMF_LF++lo_J39wIXB(Vr^0_4p7?YR9E}T{ zB>?^2%Hw{sD|Nj^l(ZPNNkD6YO^Ut+Olw9lw`vLi-CmGq<$R=_hT~0s9*Zpcb_O*a z!plVB0FWpACfT1g!5Bl{+mFbAjD8E|LDwPUA%Mzsae1uDg_QvOV>HP)Y++h4Uy&AuO-MX)-MBK90=OvSKzwn!}-t<99rA3q!n5c3P@Oz+ARlw2I2)}eJTs= z0OQ!zHiB^jaDy&3uitkJEn^h$5#kd?jtz%m(JIPUU?8ZnVLGHIq%|gatqE4C4ou;W|!ahoTXs01ZZ{MyGi>|x0kY_zrUs9 zjJ6nkIgGX)y}Fuv47_5L(aFXt70W;QlY>44S@Q zk|Cc<;_BtZLM{N}maYJ}!)JvlWuD#18w1OJ=Vmi$0^>SBO%#dNZsV^U2gt_Xd`M5C zx)MZ!`m>M#HK_vYP$MW0qkh~NL`CH~Jp?Wj>6`J3u4ScQ#v@ko#tiaP07`_$z7n9_ z5&-;e1^7&?toT=Y*eHeg*uxkx48UP#mi6%pR-AGPI5*_N{{6KwJ*ii}s(Ajdqc`d@ zPdfzBM%2c`RP*7qr1sTEGiM*=7%GZuhyk`s6R4DZq>q1{XN zXDC@Njc%;PvrsP{93Bx@vEY!idm&QS>_DlHQ*6)ffs7kvBd2et?*vN&Y*aHNf!g2S z(^8%fBg=Xf<47NC%MMV<9$Y`LzO0_YLMlLz+8WS|D>6ow4?-0m&mVn$(S$rY*yFsd zscFBwIeERbmCZB!8LA5~kBO@P3!>NxQ+6u^zd|fAA7|@VPZ%|?VJ|Fc9^>z(u4!BeHUe3X(7s>JF^BZP3OqvS@T_>QxcV+DoS! zcQ3#mgi`kvb1X~Zi|%sFq_Dl={{F0ivpEB93~Kq^xn&G6!_$n@=`vG1a*&l%f&YuE zHxGyM`{RepI`$bvvds)x%9NYM_3)xWFkg-HoEo0zA6aaOwDBAy% zLL0B{cW%$dk9SBjN)33|s3&aDWk#1bo<-2g5rQD4Nx&w^sl%yjU3h;r2q% zr>t$n!2XY)-mB!f81gQr=oonRG*|vnq`Gn{bdlNrynt*=xkL}s>P3|`Ftpr$zh6CE zH5sb%tcQLkljO^^^mpm7;pAd~?`Q-(kfKki?%%;sR$8S!z8M9DkVHSFT7k{|wR3TY zkcNV~1VW1-kLTWB@4CVE`?((KZE~6xPMvXIEh`P>8S*H|wpQ28Dy<1b_E5x!z}LWr zEZScLc9=xy+2?Pr_}}uoQ&onPFw~K;l6ynpkj0Cm@rPasRNsYFR;9(=n(!vGrE_;eyMK;K95(- zyo8Ra`~*y~u@<)O<8;EQP^4-WoyP4VeuNKr#c+=tB}t(!wUs>%c3>=+GCu;fBZ5^+ zL!E51f?W^Z|D7}~15t3ag#W-x+pa~1+#51K(7`=-Bb&c~{Fls`1${z*6W)0%sFxqj zJ)4M$B*DfbhoWv9TnZM*g>@I1!$^E8(Z_Gu5v$sRp-?(1{!C%~`^CaeG!Cw>yOtS* zvjh$f%?x)x*mMTH@^9`kU`NQs zr16|*2Gsry`7F`+HOb6xfd!c3n0+g_bx{lQPx@|m%)WFR51Xw$BC4wfMU(8XTPi60 z9c>Lops&FTx+Yo~{Bjasiq}Q#`C=75vLU+c`{m}6Uy5e3rKi7KE@9Ik-Y~%<)hTqp zZf;A}+5O>}3AfjMa+!gE2;a^K`GJ0nw;VPK$xgFQ9tgE*GL@T-h^%g zZyTinEI+&g?PA|d&Aj*AKYIv)f*0+D4qW`o(2IX3NRNBB`8i@VCJvk^mZ0B|=Q`=+ zC+|+qL`(8Xgb_4@zzBu1q}eAvqXC?mn`+96v%urzCQ?hnVxM_ZsO8lm*ZUga-Tv@K z*lfB&OZV{$2w11Rfwnd13*O}8mZKq#U`8w9W{FS@p*ef+93~kL4bXf^@1`>hOr%4l z?2h)1@jiy7GaHNbrUCRE;7J$sFt4r+=8t-V^T_GxufyTb_q-t33*dxjNLlEa0~I+7 zw!F=$IdE1^(u`VqY#0g6cx8u48Mx3cCsU$N6Zj|j(PJuz%s#=)u-wR_L9gs9Kb$(; z*%7gmRYK^aet)q^<1vTKaSlheOn;0k{K9iQoOP;N>EhvXb)YFQF+$9o%>j;dCU}a% zS7Ieg1RpTrS_u!Ru!1XMuks<;dhM5%RH0VV3$1b|J&a1C03;l|>hqnTje?JgLA0+v z7Y@>)r?ss&#SP3UqBX_r;l+9N?^QDe@z(}9f2K!Y;-~FuS36uTX;ialJD^|J#EF*; z7@qsd#!I0Y7X&+txTN7JU>c0*)qlxl4dKAC&Ym%c4I5d8oxAk$A(&Kh&}0OXG8{kS zV^UeG8$9#?CzW29EW)xB4{ak654fm=X4QBxATW|UriJg8;$6#$v!Y_lBk?K8na z-s$D|wRP?#bsh06c&p9_&D&e1w~F$YN8AmH~m~~BKQ)j`- z`RrU$mEo|W+YB)VjbDqU(s-gRMm*=p4Yea^8~#$xXPTCA=*zO;pGz(+G8%Yt7YCI^ zmHu1k7luU4IVn@6d$BeTM$TyD1!-H$F)Oe+U^b&c4|Qa&)yw$FO;L5(dSQ?VRuXHp3Jg- zf|QumfxuW=MP^g4q9yC#zYw=--vk^C`y8)Ipk%ORt5Q4b(El9_(hPouo)*Ks)G%IR0TSH?aY&&dpm$Y z6Gk;3GxyS}MyLxrU%Vx(DvUd2>p+|n`sO9QSJWz~Pi>t~B^Wm&a{{5Hw}FME$B13* zFM>XUw%&^;D147!tOEY?G}urP8Kys#}US50k-gyJN%P)|c%7yKZjQs30?d(mTO{+rcxov$Ifc9(otohFyQ zt?PHai4P}fwk8@6wt7kTGdWnNJ?FIjx=(pc$Pabl{{2tUcWIX>@dZ+jOC_6G*FGv$ zGAGc9-W<6e#mZ1uM4O<`pIVb$T$U}d-9jwoPPAG?Fum~PUSBUeC!1fNJ=8B0+<-Ku zcFJMHo?Z(S7orHeP52$1aRKn?;Lw4Asgi@Og1 zK+CA6@Z}r;5dl6+L(d6*a?`&TVr&$?xC;G{e6b#6ju%|%NF8vZ`BQ&I0bmorpp;=`A?x(P_1ARR z8ZtJ`-wyckp(T%D6ad0NTfcK9gR>@+?N<;4Z}PiO2~2|i_xk`S$;d7Nt`fGy{YZ#v zlZ+Y%!GXsdOZQVPfQ^D?7q&?YZVfB$`Laf;o)zYJW&nPrhz3=;Nf4JmW%V{AHUN)o zfNkB&=>ak;_RJ!N{4uiSQX1kOwHFyR`R|{%GsqtkJ}7fBMrQ4h7WBc#ibKK2FhJc@ zMn=p2`{!-)01Q+!Jbj{Gr`7&a^lnHR$RVr%(Mp96ECocmcFf-X8`Pv4Nw8WsY%ae80Gz{zwT@HZE7(7U zZe2uOkL7VlQ}inCNECi}#%rZ)Xk^gXCGFu94GW(Wo3MT<$jxX4_&^d|?g7}KEt-$^ zw^s5>x{HC7W8_1e>Qi8JSxv6%t`)6;_>4l}WZf|cg3i@n8YoOt0YKy{8T~1HwgzfM zfZoJm)LGKI^>x{%n+} z+p`)4<#WH)`r? zym}>D{L#3)^oKW)A(&cqI32uu;PoT@T7TXCoV8;~ch#Ws2F0<*g!18^**K?(v2W$A zt=z_mVV8Tp-#T8AKipXQ>ePENsr3G!*{6}6U@n=~Z2fenFD`|RY6ZM9?pZ&QRYo5e z2OqEV%3w2Uk6*voTi3i?;qLft^HO;uW^{DsrlhH}Qq{XZ@u;#Tyu zhgX_-|4Fu^xsno%Z?ANl&GVS=#;n!uj-+1m2!VV9d7e*szo`$TdiLp-H_~vEB8AiK zZ%Ta2dcmin2=#}6U<3Yi`54&QjNp@R`2bkOuKTM+>ZM{v9Cm;c=jbi@aU0RbCp^M{;k1z=1P83w*n&tYVN&3pTD?PRdkCz3GoF5ADDTqs_+ikL{^cl-R}bfZmu zAmys_Q-Sc{^98F1>*~hADb6Je5f_GJ{fH1H|BAGgx5DYgvT`G&)uo9aa-?TUqn=5o z&Vw;rm{q=Nno-H>wX>t1^QM=6o!YON?KG6BIHie~mlnh+KmDZ=VD3NT=3ly-kJ*Zr z9QDo!viiyxK#Z;4-hAG1U%R4&&brm;>%;Jo43GJdbJ~2i=C!9m4Ne_TlFH)DxG#*X zo{$pDyE%-{Q;3$Awek)zy&_}v-Dl$+VNEvbWW!}(w21+g6tXJ-O3&v-HjJAiby+QEHK7C1!(;;K@aGOCRYbG!XOEJm8C*eMJe&fIe)CP*_ zYaHW)EXs{KvElm2fk7Zi$ggks1K|XfNk*rGl`oqEz{7P73_3qL zo%7)EPl^l8Sm6S|(dc0mM;i5!Xhg`f`eV$f&+H3IU*QX(XSh`Zd_E`c=&K!X-+q!k z)Z4AEw8BnhI%dF$81Mx_XGV`6J^DKYW(jwu4W6K~LlVHVJ2e=P=1+sc16b}5&R~oe z!(R>y5(5=P<5v(483+}L7Aw|ixYRlge&K(KXRnUxmI|st$XzYRauzZEgEpTp@o~A6 z1MoU67OxoVV^)|t<3An7nFo+VjX6`#UM*1pUlJMJ4pT$F2T7~85qy634KPIbI(p1d z*av!1<9V;-0iDpo$Ub;>&6UUtM4#WM0EY%jNeJI}P#bWzvRO&-&2P((`&AU=@3Gc6vX51VpK)z|S3@%H^Ek}iK9vg!fFHcv+8G<)QT$^xdPti6v2r^7Mbdd~ zHnt-1Yn7t1g=m0xMx$oFRvyw5(F`UjRF=khgrNK=Qv>FQ(`UwhcJg#p25kLoKX zio#N4OVol+RnR7{jcmCN7ms)Iwy=lBacvo;W%85AQu&4XjO9h^xFXwVi3>#TIgxVN zj5o5xa&qVQ%Qp@L2#aR4p-X7%^2w!Gu+8S9_`a+l$khaSWc`3UfsQUbPh$e{9DoB3 zZ>GaNHFw~jl1+BO+@qekj;2Y_y}^QWULE^}0ch95r~q|F#CqxP9`WTKqM42?6@NUj zD@d7vSvL^CL(A#@tJ26bT?qmx_%t5g4!6mu+i;=c%Fu+so`RCnKx?~oqXxj8&iQ47 zxmRX1($IcT1vGO5ci&CHMUeki4$yvD#^h@eKK-=qe*p>#?fU|~mu%MdkMIQIJZ7*u zuVmQsmp_D-e=9;31yMhkUoZ*a|KttR2+a!}ZNO4qKB66N{fZ8RACsd2b(Tf|w&euw zj9D-(WGeDF)}9zqff)Q(G0IAws9iH<%ZH!2h~bfnYQdH*GXgEn_P6I!ro zg$zhrTYkwe&mAy7$aty@9M>gC<;~1WB!J~{_Q7wCb+WgiGvd^3Z)Gj=8QQa!dul_x_)8M5NbM%S$Nrm6|64EeppzydD}`H@{e3PI*@JYS2hv z;2&`%&?!z}B&^>2Xf3p{JDO(9A!WI=#EWES;8^?T@y@w_%K7Y8#QN-jMr zO=ZB0W=L^+)mk7T*j|%ASPU%><#;*2T08ps@iX7ir#-b@TJ11irQwUTywJKyr=jt@ zX6L|_=7(nG3wN_gd@HfV^67qk2bj8_t3JD-H$<)Y>kgur>UQ~*>UW(n218#i4c|Cc zdvTzO)}HVUDioi{3`_IU?76K*9dkYC=uYA96GuOixFmCt)|(vO%>aa)N!ed8s!z^ z7-N9`jZ?&j-`24Grk1z_7G+-0I-R7@;J#vmFS?yR{1nLzRT$Y$4d`pH!mM0C-_avJ zwUR`&+Lg_k1mhS5IZ|LFOjb<)mkV%_;DMJxy}(m1Jc7gur~4qgHV^Yud+BgY6iio^ zr~wRsAKtk~Ev=J*7{#ZrI|Z(OgKA`s18C`CDa#*7@hRAH5Vf zY|w$xyGb+$o<=>L1t8y0-$x)$l=4yBP&?7l)&w^tj7vR?(;*zbs`DjM!E_Ou%_>me zT_q!F2`&S)xyT+*-XN)7UALIve9_d|$G`5^qUx&LwFXW6MP&(UT7+u(Q`QK&$*F6KBN(RT6LOQiA z{||8+3T;U_t!$|9cD6g`kclzgts+fo{6NRVFY@I@?td>sHz9(b9#^rpnC>to4UL6d6F&U4E@OL~elyeA!GvX3om&AFb| z$MU<_t=5E^9uC04I_n*(gKh9$9PJq#v!8{d;C~DzdnaSR{k0km*sbT=$+8OE9sX3l z*C)O_w4r7^ue3^!*{NS^OT-!rlg@1yo^gY+PpJ~DECGd1Tz9P<< zU~ju$G)x^E9jfr~cK`!}HCV&jyoACv9&!276TyFcrkcq@NSilT53~G7Y??j z+{@A#ANr6|yF+Bd^lwRySltwVVjjF+_fKJ;2-gWwk;*P4 z#Bx_4mQnQKz^@%*qH~{t+HlW@x{58oaoepwU33}zz3&r`*MBF;Ep|$x_$RrJQvX$N z&)h&}d4FOqU-Vm|R+{z9V+pUZsW2sV900+Y5!;oi&6_JpMb?@s%2zWMgZ-ggW_ad! z)^PEgrS>pPQ>63785yT_i|U0i&dYtHcvm>Qre$$I5x=lv1VOY`6|Yx&1&XxH*d zm(!n&R*S?R@@1WC!BS}KjT~~-THzs%Qm4LhGZ$tvkYTOt0oTonR$t#6qbuzhk?}YN ztLX#eKd7qhb|O-cgR?Zb!;2sTxtt@OMHwH$s*QrGt48w!B)d3y#P}7&EprV?^lppN zf-KqMW2H22EnY4e$BPf<62rKHZNFK^H|`$sBQ$TE+be!R8KS$P0}*`VB{~r#Mlb{r zl1T(4@-T7=UNw-Z6-}U_jkJBiDC$D01l*SUcqpgR9^M|OT@$cEg(M!&qf`FUJ444U zUqmNu%(g}BKxt#nty132JfBC2Fx1enDdcDpK!EwR_&hDERys(RcFwd}h}LYKX(58V zN{33lo8mms%0>ceHx#sqpDq|2rGo%;DDo=gD(>=(kSNCEABa^W^UvhTJWfOSKc9@z<}dB^ zmDAMXOI|G|41(~(65iDuFT?#;C;XcpGn(B{JC*t_p=ePbj3*2_=AR>K)d=BE`CS(m z2A}@>rTO&HspT4thWmyFtYHMy)V~CztmU@-;YoClGpQtW zd7RT6f@HdLHpkU?SMiTR^>j>s-j9(bQlnj(>2&0-SpWjUOB@t-sk>9e7k1DFy1V!@ zuxrCk72{5;sn_HJzu)8bS^9x#`fchonK){vxWi5KBJ=!O1MtvEUIurFXh?tt4Z@FL zHK`Ff<_qC?@2-f%)riFRWKYnrJZ+{Bi8vED`H$iB z<5Rn6@p6c$QyvS2WFHk5H=g>S8uXWG&xR5*oe!Q{Xybf>BX>StFu?N-{sbu{mmycE z6zUlOvo)ZgbMY-15TuZ4SL-E=hSyo%1cZZ+ms6?C4+mrr_wBpnC+|hQfwSvKMrq+c zT|=Nqy}7f_6{Cy6J!gE0jo^(Cw7(jwjtiXB4&>(u5*9!#pdlgQr6MEB-yG$+cULNQ zh6^h~YrQewYLFrEmsn?JM7Zd3Zs2N8=Ge;Tu5^;ZN7ruC$xw~|YU5>-igX@7UKa=z zu~La-kmNMyOV*8oO2H|J2j|OgrmHxQMFVK&Bf!)A;_P z1}e8iy~G>Y&L69~KPXQa6o&sTF~k04vp$o$am@C?>AqZTlrb~`$-kiNV7-bb6{Hc4XJe$D5eM4pohJQLsK7oe;+h5!>;u{~H(Q-JN zZH6y~bTN07u5ILoW5GF0j^FNn=n~8BY`UPSe6%9NgelQa=c$Y;^E>y_c~>H|8T8Drl1;u7MZ~_ z&IgUT9^_y;Om|6D#?HJPJp#6$BmN=9kam`edtw8Xx(%P#v^Ys)*F2g-4#EH`Y~yG& z@7_m;Y5gZZGU&g0uAI4U^RvLpT*1Rp)wbi)OdkVXO;?kkz4zBgMt|>)^E1Z=)T}wn z{Vh;xE^h<{oxk34z+5lJD`LwDV4FF{S{H+MuRSz%_EtNn{P9+0^sT(}0gH5k0nG4k z!FriU))t`&g&4oC1!1S4P*uIg88IM%e3+Mm{2{?V`u7hjC7EgZrAmfuVaRl&i>m0> z%JWW%d{3=5)rwJ!^KSkgFz`1kxg2+J%K7JUiqq4ywHhU{Cfmaiu%+79ngz)&7ypJu zdH78vT;Yx0QkoeM>}xU$T<(qX{Hnm~*jnmf8Gm?7vW8v%mYudJhi}D_=lhkRlb5dD zbipOf?D0%g-Iq=uD~a6}&V1hfRsrL*r#4DCIrPCFuX>v#=RLMNc_012N-10KtbfzDNP`HaKUC8f`C|G0%s+@6p+qF6`2KPG&l*=B$VNiNrDsTsv3 z5}!LB)o@TnbE+{)Cu&R*3LO5%6C!9;9Jl6^IMX_9yWcw7nfcy-!?hc7e%RrQ_)3v# zEx-l*!dgg|f)VNx%A*;@`e8DcuS6O`ln?|-DxF_ehn9xZ=QHyD}T2vDoVjSBpO;oi4d%ABcDiuh?R#4JERB zhW(`1WEDEb{t0a4EjP!!Xb6%WUywR<4{Bxm!%~ zBmDh#=VwAoU+|?Vl5`_@S-X1fD{|~Fq1_?{ea!scPyaTi^nhnX0rs|$S|c|2Wk7yP zhx|d_p~VsB_cb6*ofJ@Cxd_^8y>EbYgWPnoRCLLCAz!io`*-=z5QYb={Lh@rL1R6A zIKIQ1JChePY$^OcKwR$AEsT_vykPe|cv3p$66sbugK{|JLmgU zW2o~CG4jzCuXEuOsgup(t}C55-VdZ4@r*F%7i2=ED<7j$s3mRmSYmYxVtY6@N#+^J zA!fXdAonVoNK3`^;xzM+1o?)cntLI7|A49LtcHzc<_-4Ik! zWF~x*$He94i6YHz1*PSv-|=x-uZGzXK@X@I?1n9)Obf2Z@$q)&KmWTYSG})JZwy6( zG)*&wd$IYB*W$1*R7l@nI~yXbAp+&!pD>t~H|IM>8jRTr3#c6;%oI{fKNUC+{s}6t zcLp@9ik{H}bXg*9P{f++ljc8Rod#kJ3JL-@Z*sESD?R`r`UzmJ93mka;NV{BI# z9X#-r3u?DE9ckY-E1%Hv`6(2F%YQjsr=WVwa~5^!VussmdJ4+kL7=dQU#}@VmNfoX zeC~=}rt1n|u%2JE6T8Ae?v1Rc1On7Fv~Wv2T&Ap|U`Q7?a86^~{2_UMfj5Ga;vXIi zx=M(7M79hJLEvpaKM$fL(OrE)oX(ozq(@O(JTvUV-A|^b)R0K1Qn##yP&sHlV9z)M zwyGQuBuIsJB3uZ9wt+DE|7fP}by&79dIbW==J%dTE2Vc82rL@z?T84R;v4Bd1NP-p zAJr4cN%jRdIhJR(9i5&--3urqT8mzZ9?vNqxPhCEDB()F2DTAIat)_}|)OvR!p zXPBU!DUb>e0zHjvWm*vJf@7bFY+h90<(_%;D!6Z$r8j&4`4XN3D1bMhksYS5?HyB` z%ZucKzea4HeyyB|ny!ibAwQ{%PHB)=O{BWgxq55wwW`bmJPuBQI6UH3z9vIF?s@N@ zN{6aVz1Jg)*OtP;Jz8nQoD&-Z06~%I&c$wx=`*S)Jy={R?{0+78Nt-g>@p`u8U1~; z!$E3+Jj+}%X6L`E_-#XwZ}ECOqLBgtcrhK7Nj7TYv%+~#A2d5@JurL7Z4XX+(|t;? zo>omM;xlCQaMOQEjQ4=J8_RS&?;Yie{5~Hc=KffzDWt@N+W!lwGOhnF^4wgYc#l(y5epA7VuT#+Cku!`aJPF@Fl&a?*M2VtzUkstLdfTnG zupE)a`Vm1fhXesiF^WXtfzaqv{*BOj1s4jFYwuX3QT2#vf(!F~n=L4gJ7{*|Q$~=Y zNt-wRERhDrN(K9eu!VX$sW2e^@KI4!t83J#++wKtmZ1irf?P8a_yZrF(hY_hKv)l2 zk}t%R^{5_-1#s^EVsXz~#JS?G?jREs#1eu%9xGZ8jP3^Qi>?O%9JYtL`r511ouZPe zC8!-fFvw*OKY3wvGemqL)Cm@M#+I>Cov4=Af^u5tzW7%2Ug$lY`q&~po3I0bcqXlL ztLxo{uHvJ06NSRcuWc7so%E?KPEWPp3mUio@ZyT!Q(c@5Rieaq1lX1SkABmHe6V%I zdE5;aLQ)kqEMIoKWK_sN7uujfKTCm_r`n#I4|zJb1ROE*5KRxwM`=zB|y-XbUXW z6^2;oJ5~M4@a3ZHEI=uprgF#8+VJ!ly@I@dhU9z3vUCA|eNU0f32}?Qn7(%xg$wI} zsipqyW>i7*ShjlQ98qfM+o{2rAfFkoueW@f;!avbLvk?bRcKGfyw53rY2p#|uq%T& z^%@ve>WDruG~~Rsp0rGy`NlP(tbSXFj)2()7x9eP1rRH)goM~hjc z=Qi`|k$dm9!B}-@vejN$JQcb;roeASKL$_Mg0QzJA-s5~IQf3t=K@4p8>#kGx0> zuAt6j64i?$WZgwHW<`A5WQjj_@b-HUegzOjIU#Bn)1CvCx%to7^+p!-Tlk88O(Qgu zcQh_8a3_QP3Jz_8Pk^&S^(2_BV8wteJX&|S%H2vQ$kj{x?ZuF`Am@mG@Oe9QdcYlJ zWZcUN8$q0O2o(AKmB}F%KPBjusU)FOq{bmZ@CjlO6Kum2B0@9|CxQ#!$LbY)P{Utt zRbQqwpTvqBg64ZDq=^>dEg5sGm9r_-zj5d;3#R1Ww_d{wUv@^9Yoq2vo7Q92lE6yG^AuM>z6uwxR~9Ya#*PLqC{7o zyR+Dpz4X&WN#<)>?}+Fg0R$l@QC~49WI*wb@aCCFP`(S-FBE_Uit{R)kRHTQ!iqcX zs$bfK@Z^2GECj9chRNOq$Pwt)1pIbM7L;eHVncs8!N)OWZI{N zO4X6cPAd#$5WN9;2U2XQ-?u433*V_%DS0ijBN2G}HkoVb;C+dX*83WL7`~2N)QUQ{ zS7a8Z^O&c_0})MH?EeIspj~0Sdqq3n8RAiWUv*lnZqcErGX%E#{w3+2;Y7qbT&lON zascN7FN3Fn8IDv}I1u7|ey!OiZk7cr9lpoPKEC+R5N!DKhM9+Ej)}3KQ@`Iy3Iaz9 z>e{ZgA84HVU-&ds2hS;!1${X;!ZOM0`0>>Puv;LEjH=IUgrF0KSnk;U;qTL2y(Ve| zf%bXKB>w|=)nbT`Mmv0+U~2H{tZ3g4_+ZDsGjro@I|;kY->##3)$nW%=5;=tncri4 zQ)63}1Kl5rP=$>)*GFD})5D#zGGMYm(L;MFpKik>7|AVm-ZqdvUVsWQC;ciIs++T{ z{nFyDA+C_g+0bZ4Y4CmF9~}M+?tHK2jXSwI5RkFk`JkA9G4BM4$}PiFG`=lsF`S0q zb!1UpfOU@kWTgC~3@>4jA0>duK|_w+5Z9?F&0&EQv-g(F1H8o!8s4(Et6H%wJ0u?B z|01#*aDSP4Re~7Y4wIw6P&CtKVW+)a|FK`?)SbGn)<|onVR=@0&%>Zb>nifK)*4#; zQJ4NCbZ#%E2-hx<5VAM5<$3%&d1|&LF!lS_EGk<=pqAIr9r~a0@Jm&gdMsK0CEai> zSCtLc#C*TbkvZqm98uFp<^P&Sjc7q=Fn#5NSM!FlonRRd8kZ>imVFNXQ{U>^VKSK3Wv08E+ znu@`^_0E|Q%W=xgMASBA{XxiD7DR)+NQ$Qs+irDMAx!IM)`@!f1~o2``Y*ffHlhaY zeiW3++2MgQnPMF#2ZuM+ZX|Qv|0mqa)Z4IA0nx?mMMY~@K|h8sFIQTnUUVL)x^ZE5z{x ziTWI|V!2P5^Q8P0drYoA%FgX_Q%I_h?TcB8X~7@VAqijEavT!XoX&Nw-i1)w2I=-< z&mh8Q*k5JULT?{%yWH#&yE4->RBkKe4jhAMXszx(w5Or{W49(cBjKMd7(7 zX`?c}N5s%K37UtQ{z@>m8v5wW?=p~l#5Cg=G^@(&*f;t1;MXDGYI3?PPB@W48qoZY z_@6A6ZckAzB?ppYEko^9z2-@k6GoNzaLtj1{`+k%Ht2eCP^LxJs_*wZLhE}MxG^18 z(Z-o{=mwp;H`5~%bOWn|{*x?sBktq^9enLYpo9OPsRN$Xs)Sj&DDK_Lh|K;RhCk2Vv-}J_2Z1*7``s|Fzh7~b7|Ho%0#tO2m9DI`AMI|g#NGk z%F~W!A;(bdO;6WF3ng<*pp`hwY*ZO9&j=?chRK??B6l!0OUWYc#aU8LjCjgyiTqQm z;F=Q7wbYS=%dIjKba_JM?44zxn=q3T?r7Jo1(A#ZdxQed)lwj6{-u=gFHpao%$khg zan~W4B}Axzc; zb07xSR4tT&q;gLh6O9~?g71;5=f|!jjtbLi%(Pzk!KGxB#ib(Xgg?Z9cApcBO6xY4*(#*RZ|P-M#hiZ^@5YHA{;7M7&fH zFp_@=e6%wFk9oAah?mz`dvM#5z~DVl0kQm|$w#Vj^6~MAk~r)Tpisz)ZZ0MzrU!OB zDou7?h9U@dJCzX@9#VaGw0X}l<2D1Q97B`>Exx)RoE`q8k5`R`UK9DzLMLOhT-a2% zxPPfexqfekVH7+o%0Hu5 zjWI05-Iitu{yn+ZHqS#G9iRUIkxkI=*40^khBKPK_HVOOGD1d4;cMuYy3ZiWWH=#d zo-tz3?LcYX?5FCkn*?nH6RV}q@xP(weR}qc``RXzX`~(-8fRAt%1^di$r&F*>}S?% zH9~2QKcv4QY^n6n;HARs|A5MxC+IYQIsQ)!UANo2XWbw1T98Cpz}mQ_pqq-CJUU%C zU~v1|Euogw)FU<>z%jwev)x9795;KrMfO~p_D7$sobpJ2g1)cN7DCBYgbh7=Z97hG z{cf@9;!a{~BhhVZ3x&Vu%3^%^E=yh3`s&OP>rr$@|2ae|#tv&Z-%bZM{o!91;G6@*L5LVaDB%_X%>!*UEOY*#CIlhxp$h3XgUO)(hN`T3;h zlCbxB8*}5|{Rz5~RQg9sR!8oYh}jn<#)bUTZEMdduUunHtlLzYQVROA_e#blVLpH0 zPX}0VxCcB9c2hMl2wRzG$Ex?*Gm+E`*JUy@E!BbbfP0Lrr* z4~lw!mdel;P3lkQq-0?-`>brUf2Y`7NoG)4aNli9MG~ubLkNkZEZxJhl}){GY>tQ! zmJ~M&Ds9^(HDWDl@)j6alx&$77|Pw4C_*E61+o3ld@Wz_tEp};0U`p^C(Le|NR84tr# za=|+Z4a4s~ocFXwLTaF}?1k1dBo{!?Zj@+cmQ*RY__%p*<_Sd|AjCzdC0)n@M>52@ zsi@ni09T4D6gW;^$tSI}J4N*>$CR}6qxaqEC1{^*gmhI*_Pub{LS5Pa#W^ACbq;YP z2M(0^nie21JURi__y%5WG$I{pMO2g#>GyItORP%FH@5YmZwir(8}TK9jxykTspnMt8Y|>11uKp&3 zV{(I$$XwT^-!AwmLZFzGA898OF|?8TdlGGaeATC~J>ehGE?(*pg`9FUB9ZVcT^!Bg zlfEIg6?s9GmUexUZP+)wlkCLsN5KPI4ukD2oi9T{;@X|_?j*q zVps6HqQj>-?kHA=pQt^cWlL4h6f`71=Bf#WSK%DQO`!`@TDmfm)j2yll@9 z!je4yq(M_r-`e7)mThri;v-=`f(b*iWi7o8PYUd!G7<5cw1lK8Zrr`Er3^p3|Kco~ z5*;2Pg*ywH(9_cfFGFst>^<=2t+Ulb723y1<3teD)c(HHTS#hazI8Xtn$351HPSNF zu*{ylG)}v^?5<1Wq92*3 zb156|tpLKY`}@Fl{(5<245`&6W}d!Bkt&SMl!~qA4w?zmCwx!|o#{NDFV^UzG8nZoMk0d(y=M4ZUa+Bw$+q~hnwS^f;S%39nw{sq)>Ld0wLgEt=L zp0r>r`B7oJTx*)H^L%lY>*>?`(Wf)*`eVUJxvB3S%!WOO41G~=W|A4d{T|k`bZ2U8 zlTiY&L`HIeWgkJ#XWq~AY#uZhkIU`b?aQaLbjSOFmuWqli73?*)JnPbB%tvyiB5f_ zF-XeF#68#$=c=Om+n2dRc!ewDL0P$QE1O2E(&Ui7bTUobbXvDh7nOmlN8{OUK1-V! z)_M!hdP|%jicVjn8gk==MLY93^~sYo`kKu01x(Rb;C#GweEY_OC%14?3{9GEA9^*rJozSKv0^F?T=!J!KYb>pth^h;tkgY*S3T`X^S^tRxo2MQ_%vP_HQ^8PKqe6Hf#Wd$ z5Lj5ZFBEsKCC^{Nh1*Hu67A>&BZr^p@WSYW3_4PM+f`;RSQ4JvzOvf{*wI7jyQ_li zR_vT3AqrbDTXr-s_H^o;L5Fo7OV$Qml{?V%611w%bweooSmzdn672fX^+5N~6FA?S zypWf$oad#Vz6gJtrlsOZ&{i62lL_YvfP7XvEDXiuvLWi8PipD7qx;N}+&KqHrJWxx zLH!^F+KyHxIl}spv&Rd^5m}oPo_)&>HU!h7X-Agv>o`v5R#@DC{Epd{ANu&1>i&Jo4P6Ts9smL{=~^C4GMA!f)2u(^>kBJ zpZ+V!PC7kC9LK}vy-GQegieGGCr>4hO*IB<$A}jiaAXQj>GJO%BlEs-6lh!!sw}d- z$_<#GK#LVy1t-YDnqsI}Zb4+JkuM(4Q_q&nLA`>Ml|KgrLaZp=+gRe(0^CX@r}Qz* z(#@R|s0G1EQkWC4w(N zd}P)Uqf+ERSkQd?<44b;Z99SJ-sZ>tx1_;Bo}-+kX2Yj8#@qvRVlgHGrnI6Dpp?XO zB{DT8k^bh~tjt|9!L6_F z1j|$}Ix6~ngJMx)Y{zcWtvAoiG>A!m+d1OKG7f)Xso!6I;%;&iH}HGoVeqc4CQd3l zxi_K^m5aEHc0mj&JMN9zz4pa?WJRF)l=GwKFU|5H8rDK1!xdIU(jZtHgx+47!X1H& zF?Q4xv}ZLIAw6b6nqBmXednX0eW82eGHzO>9Eg?!=Aab9oe35_(z+AYbu0C^3>C#4 z&djx=y8d6Yy*#@Lq>ZDQ{abH^)-EAej`(|91-aNvvwVP%yL{tldYI7+YC+6kh`4tg z2KlsT-Y3C{Q1*z-^$|Q%t-?ydC*2Wo)&DfmQc;dLm*y##zOv1Rz>aToWj@^0+j;Otq2w6!c+cKXs2XZ)1z}4$&kFQuj z;<(^^a$P3s1N+!3A8y5puo&nF5MOdaac{072OaM{1ape?LyY_1MQ=lQSX1=dwSCwY z^8F+!4nEV^elv>NSptR6UT?4zngCZ+-K5yHj~iXBj-8`WLQ+5k`C2VB{9rcNN7oH6 zK`ku0^k6L4&GyjLP@BEDZED*hDA($j^8$FN<+hQ{Pf5NST*IUD9So}D=iw^!YN5t8 zK|-P^liR>TWM#j=0uSX+B*>u8QGFjut>lM>plhLL(53D3*#i-ieRRuVyGrfL`x?KP z4rA&iFUvUoD*h58{K}KXx(fY2OuczL)Y04jZyAg&Gsw;?_UvSrWekQy zq@wI(DMg9M&S30gDP$|DkVGUR`x@DjEj!tgeHr`j_#r!Loi*fHC7N=fA(=J_`0yOVZdxA8XVya@$a?@|&fx z3it7xFHHwTZ$ckn98}YXTMmQOSzeJT?$Ia9sC_}@`6JkucTTn*=%3eG{|v`U=F`9l zlfDyS0N@a;f#sgYm&}gP2-Qsbu+QoVd8jcrLil}1!`khdpOV++z}K2?!MfCX(#af) zWL7U>C{uB(@hz(1C+J}KN=+w$2c4a)+ScOJ&y*nB0wi$^%p_UVu0_ED^=d9}$mFJ) z;Z|O`889^ zoRgAgRmWy=N(QFonQN{41j~tGT*jj$m>ALgUHK0+%1qSe(ge5E^aJZ_c#uB^5{==F zmy@@V*714PGBMq;Xw{l^S@dYVvl>TwINCqMk|i_^O$E*EEIOAHc{~4yxxLZIMZ$4L=^PWbs~G+N4ZCdt!r=9kDmLR9I&|c8KsVl zzc;I6yYN%kx-2|nl&(`EW9g4_-Gg!YQ-eJh7eQ_`#1KZt3T2B)2^c~PT>{_>T<%9& zJA1NM>p+}H zxHB6?V)Djy*12+uHX&K&ZZ=%xNhle34GF?yGHaGo!h_M@CDj3x9VtAvZO)L zvH{}BhKs>>Vj0)Oqz#!z%@*)5ls!#hVK*(x{zo=dPnFScUY-9sKHf9-8$mK^$*Rp!);_6 z$_gjpYr2S^9rE(E*JX2QO)$4TvPM_z(^vOJ;r+c6;w?itMNu%mu9`~V^Jo^M{9%uB zDTtmlC^VAOpSMSYWO_V|LIwNJ+f3b+C>2tyiamHY)r z3@lC(zKL?xO`VWwEV(mZO6@GIl)q`=`iDa#r$i`@czJc{(LfmCl@u#p2qX53gU};w zM-8=~yXR@%M!rjU{lZ%BcGpXEH0){YYd}MA(k*2|w<*oG#A;Hq|7T zLOzqRw%;iX|I%fVXWndRKvr1(A4PkDdc-+H4W z#%RWxP!1B`ERB#mz`;DANJdLmm54l zWYYis`?{OsFHPyvX*$&>S|t{-IcnSSKR=^7Iw;AK|CQYr`+fLU#YCOEf(^qfW4*MZAL(#? zSMGrlKKa8;vgnV`1qoZquy|5vii1Lv-QmnA+vKfOiHH%y$gC=oVzqDSxMa1Y?BKDQ zw1T0Q+QTC9+j3=}AJ#@=aka!7s!N~&`-cA~1?{1V)J-)0iVQ$Zm3kCYRo80`D_zF_ z%u_ax`_QP2KZpKd!I!C8uOii5HPt0l!Ry>6XOf`BurE;M9_GOR9Tvc+Z{?jT6*0k^D|V(j2Ip4> z35!uNlWo4dL>syV8d; zgR>lZ*U$X$O+||RVcyG4SDxW11Tje8%)TbkN#bRV6h>JCI#_`jPbOV~ zgAk{Eo11#|4*XB>Fs2Ljj3>9Xm4!fwXP7$|N^dcriCony*BmA(&cPnFe9L@|eQ|y+ z?!HMfzOPT;>fh4k@;155Ex!`pM>n&0Cv1Sr$;7QpA`)5v{glhdux(H=OCGkrJ*BmI%*281o^-U&zTjCeVktYZ652mNA@sbW1 z8*LUhc%uK_0m#f}%i8&7kz&VKvr--Pig*qg^l)3jCP56Mx)9^Bh;|To7Qk~W(*Qr! zW1IsF;DIA+D`wvNWWwTW$bUC359AQ zJ$R43H3S~6AEtj;xV0Yf(iDcvyidN7Fht`4lZHI|K!j&x%2P>>u^%!`j}%*}aw~bf zJd1*b%%RPdc6f?v1Z2paaiXCVLFnfk+^lG7+sL$r8*8cboadhY>9s;%D_RS&)Sh4B zMnAh&tNbG~?13@^b4JOJhh#wq#Jm3JK#q)9rtS=TRUfqI_NDar>)e)6C3Y+nks{QX zrlCu49fvHY090=3cXhlq2)%D;UQ9aaz1gY}sd5cxbvZlDIlXvOBf~SvE;wj( zWr`cW=tBI@PEVOq$|hSS5;X3-%Ly>r6+6k0#*oskhu6r&)O4%-g)mcfB+xGjb*;DM z#gBQl?}KVPZprXWlnagqgC}ArmG7`+Slp#+W;Zqb3X`kv+B|qlD{Pau$(1urJ;{Dgl?bj3>C~#9djzs;ux6l zaECmq6gqwISc!BDGbY^6jEK0OH!vNh6wV0ryeRmkuzD~QR9yIvBqk}0K5-Epzm}A? zo=)HM5D*=?XD|W`r%7L_(!GNY?1C*j@-%U?In zz#r5PJAH&cO*IPtdO;kW;yR3N=jjufG_P-?HIX%aV|pCuA{Xz|?9i#=6qFx_ij+LWNOB-fP- z5CFB%bN%HCV;)Vm3Udq_nzy^sR4o>&&CtzMkY)zi?_KHw2|Wd2E(CTPRSJEthno|A zYvJm4mxa8QrXw`VUSBt4b$FP##1+_wT!f!vGb%IZeiZ*Q<}k$l zte!5H3mXg*AVEq)VNN`@2v=jQ2Ztw?P5ty}3;9XyYctpL$7iUnEw!r3!zGGRk!FVORS<;0`roeF_=n zKIYv)nc@0SZ=j~!F~qZ+OQOu9Q)T~@MRHMjNsQ&NrV`2-D@}Nd6vAE6*Qt&2(cG*l zfu)+k*p@Jl;p$jz+z*4#e4#kn)eFU<~uE0FLZ(CphpPm$-R9-x_t5mx42f=%s3HKdH9m=(V%t2S84ngnF*~dtam;EIw~z z`(>s8<2V3Gxq-WxD)*^wJ>#8AOO6PKZSeXawTb2g_3(5HLTWO45J|LtR&#Eq-Ax&i zW#QrEX>pliI;{OFZV&w|(u=F(qJX;aeNiK-89o9cCg+=G4eCCD9x7M%*BS>8tJJm? z?JCh8+*e~!O_~XnM}1S~tonbs0C^c&tf^&#m( zDYTNtu5{^;4{5eWMU=ece8i;XeY$ZBjDrgjo@(Y?;`6wrjdBQ$wy0~+iiSCP*FQQ< zO2TtoIY_>T9I@uOHl?2uR)-oT`h1M}o6j8rn{B5cnaw6IM!Fl;e;ZQ-IjaUs!4uw= z2mwBnDR1$LO9b-WT2WP053Lr%)HMifC$CKEMB=TAFn&iVkN1X`5!8O*3DUtI78M=t zr;x4skk<_@ZQo4jtbVd~GSm&bfO*LWYd6Oagx$X@s|USkea|XGZYGB3SMgoIZOcCw z;@%ct_HOd9w_D|KWm)pa!Cu$4tZLQ+F-tCNT8ViohR*maJ?~}5f|0Kfj&k_Aq0c>*04pqP-nkQf z?~2jKp1Hl`IGM!1Do=M;l<%z!msW589a@vR^AQbMKJ)CKl6|YqNcj)8{n%8`b~jUb zuxc_3_30(}J0-dCo2MZCqmWg7$1Y>E>kng?>&JV5%+qSE-y5~#P&rd-d2`5-KV5&ur}KTTCARV<@ugH-fG~8}1&R&K zeJ59_2aUbnt%GbSQGdjpaSQ;eX&2IkYsSITI_!KYPgK;dp2678s&iDlmM^-43Xd2@ z9wiT_+EFuA4Dw8ELQqLk0AtX*wERd5z1}^<@763;7ZEmR2C89T6ji!YfE1mh;k!8( z1K9aRmc5o?9}eFC7YWHVK?QJmJ@1xH0OIfPWkbauz`+8k7B_3Mh=0H?j#Z6f<;89z zy_Ek1;I;42PndI>GlL~21)m}I1W2$#vWg|y#VJ+{A9w%w)}-+E0{9IS2#eISH60)B zNp)U71}Yl^te~A=pa;o{Q=zV8MrQ0>tQ2xi-4*l)V-JKgJuphoZvFQQB_M?0v4Fkt zOoh5(FtN!?+}1BNvof&b2m{8a{`HoSt#wAbMd~9Ic9#mE;A8 zQrCKr6w~Jfy+8-C;*!wMpssk`x#j%Lav%e7{<_V7v`4CRY=O-wJQ!2rmUHT=Ia8HL zpk)!d=-!{#@e&~03bKGOfW&U$w+EnA2N>&eYXG56WL)U=Wmt%^=fcRaO<<`^9SC10 z3yloZvV3s;`F8gQlST@XYxxuCTz$x`au=DqfOKC`PeJd0@y_>@RBrjZ+kGn|Wg7kZ zi(FzYXB%%BAJI+);D&Kty)F!Jj#_Bx#evuV>TgEgQ+ye^9UsdK)PV-hEU*C%lFmYn zZl;E7(w=b%|8oi2h3jlf-gdY3daDphqCGqRY;I;n`T1XD=1Z>xX0oWAin>(nhp=ajxpG%;#LJce@_u=(j zhG);ulN>BZvj*{_&UBTc6Av;c7Ue~8F4kse@0ZD%()vm#{( z01AF6Dk_>g;C*6_&dVGB*i8?9@gGcJW!NLTY%EUl>h&zl%Rm^1^3&M31K*ms)BB&U zWXUwWJ(3xJYjoQ5+|vIcw_+gXnB&b2V8q}NFJ0i~AQdVwTiJ8oo?fzY>LZZaU;$6k z>&aB!`nI{b`GkgnWBpcziV!?WLLereFN%nM^xW_~1ubMgHTAb1zwYR}$%IcmwZ{{; zJ`Q|Wn0PFAZ>+NPj3`(E5cd&v8H($=n^cV>z0}vVW9PbKw?rK_ z*Y$uKH2>4!l`!O;dsFoxEFin(7!=Xg)h&P|!i78ipa#|O>RsC*AO|KLS*Xg$9D)es zbN`~YnP%lN9X<%?71SeoUO{rb zpcK5HEUQpbUIa360KV;S=f{6F=Xkly>IOLf`%Nw+=;O7C<2^7-Sowg2!QGFAU%>nx zB!2Wd^1s$yallUjH!~r0z?by1?Xx9~naQu_284PW|$s#mb%8b;Rmf{rs@6VRtnuMeECMNbVuxvcZ`w9Rh5WR%|v2GuT zl846>xBH0if*95NsVu?&QS?IcL%_y&_xD^!@*eK9E*34o59J=z0k7JbvwUTPzh2Uu zeRs)u$SNpc29=-n`~YNwsmaldx3+E)7c*8%!uulS}Pn9jyRWb3q0^;&pPD^blmQEU~q zoT~C4Sr_oUdUz$!j1Ue4G-O_C1`dz9AaFVvI;;J^OCI|UuPwXxYEc-Jeo$N1@V`%6 zj;;rT;2$VC%k~GjDG89~cJpEkDG-b2&&sI$De?f?fEmbR9 zFc1nK-UJ1RuAt&C`V8>z{Xam!xWDc5jQo1>L^lh)m4`Z_Kf<%`F_o0)1+6qP@Ow(aj#+vuD&%m`M9?k)a^b#KCu9p za+mh9J$uTmKU$CZ?OFSM=-DdzrjfIwcJG7g9k9D9y?eO5#1Guxr=|(%K=!1_s`|#6 z=mmaF4_5wQ{8rjS05Yshk+f3rUIQ#nv45kVlO?UbwuiG@b66}CUVlFac1EdS&F=(j ztK{tpx5P((zIWWT2@pI}yHNuI1e@Rw-vN7bZlev6@XHe@Qgi~e;95I;zvrn(hbeWiS0^egc2a*9ae!n*)~5;U!F8=?59*u&WICnDdwwVHA4!Pg}r=ShQS z7ycCJljsB0U3y>UwLZ+|+dY-aR&>ukQx_?{UD^r2s3PaZZWz8*(RV5W-dgXKi(`Py zxSAeYmEm4%Q4AoG!z2oBj{s1T=?K!8t`y#H$T$;&shW=9w#<^aUBNn93L5XhwY?ar zT9JE$MTx)~*xEgtE=-RAWMm}|Kzx@zp-vOHRe9R0&GhUH3DI{udhRPw*}2Je(FJ+E z(5z!`%U5c5Wn}9&m`3D5q5o;@4m%`2H3iBiybTP@a71d}1<9$5+)>Uo85n;v_sOlQM}O2lLxZ$nNF#a& z^b`;=c@Eq{)oD*q+pAov>d?v{{36G9K0R-OvLjZ$wZA=)KZ^r7v)`wOsM@gka7(@l z1otwLKOZ(8iY_MjQjAn{%mfaY=yd=Yf`#QEK#v=r(}RJz{&Ye|lnFp69TCs|1`Lx; zKLNekI>C7YggDQuf$FET8s2u`PA2|-qjT_N;%snxhrUOCU!QJL^xp(}761jTJc7k( zAz#>er9nHS!z?^w1SyQW{Vn3vstRKq=RS)RM8Lpa_T+fM8gxLIeLYhAT&&TE2AM(y`dsUD`h?Q0Y4A# z4i<@Gqtfo20zz?~_rKBpTpjwMk5Meb-@)gt;RLYrpE@P!|K02@DQ9nt8YX)(`tI0y zp3^2x;r@$i#tpAVT4AN%u7@Z$JJQ2TeZo#VsB{vTQSUo8gi;wj4)FpiW1d}=hdccm zC$%np=qFMft6wGqf0O=z$!K}y#}2`;nXw{6#jEf=w?8}t%99<_^9Rryy z?_>Ah6(7n(Pv*ZQTg;Cg?1Q&boi?;0RY+m#$tD{lNk%|riq0Eneo2k$OE8h&Z;nn>i#IP1kh=c`tPa8NDEiA50zsh) zW3>%D_g@gDd3J`d-AQ(5WVswmJ5h?wPmap(*L70^i0mawYKHuKXn~J5r}iG-02A95 z`xn#7-|O8ATk0!&w^IJo$aj?<3%B0}iPRkcbse5==mZTzP+gI;%c90cCMelMDB2=9 zWq-cEDW%7X>R`9=FTMO`ijvm#r8{BC8$EIQzfF5qV)BTZK@=lOT^TYz%xd+vMq3q)4H-$hY~5B{0q3@ zIw=t+KX2gF(dX)dMb5P6C`i zQ%R>N`(Z1mtna3yMWx3pzxcIO60iABrxmKwcWZ#SDm+JnGT=sz4RfPut+8*`S#Zpu z(I@;|8=N@l-4?~qS(Ypj!s?n_@Sggi0wxR&5wA2u;27M_TG&_tr8C3usqQRQ)jkSQ zof2E_(JO~hY149@&m}x7veW~fT53?KLRiy6WY#E5V+r-58L#U?2j|HR?(@#_g-rcs8$(Xo-EaQLxksYe z*|b*vSN@YnvSwku07SK0(1<)b)M%*ab4z+Ql1xDR4=G;_yj_!d<45=xC}O4AXWrKi zEwKEJP6(<)P@4@e?NB-w(>1S9+cdFol7@A`jxdI>|3XZhkELu?QSa(8^j^=_g~?W! zZPQTsS*zPa^Uh$-A5q#7EB1gG+^lNv|qhz5(42&qOIaO)Y2U zkG2Sy`uR^J5Ow@$Jx*(s9cM%RGXUn*#WA}8z0|H;c1XC6eSLt)OYufCxIW>?9!6{? zC^aFj<7fiX7Lbi_mSI-AkQ~`;7;c+09-?8Z z*h=qhYZ(^9rg2^R!atf*%pBUMfJWBnDH0@RbatBabA`FE12%uAt_K`ltn`iz4{%RRWWKTL1A=m zi3IkjQuFxsOvl)vA#k=`YaR0`_OUQ`Q=e2Bg<~A54e6oKX^Sp3?S7fb?{S6DEy535{|0t~Uq|ek>C8cu&)~j@+~S4j*F^xXwLgzqcfTN-PcW{b zmb&fYy#(Z;-8~JMH*}PeNlp5>>FXW4o1>lId^zvMx?*u=)jmSAT-s_d(%PKr$-l(7lm zvvZMZdh`W(CTNHT)bHcw1X@Ka#f&O1nxjr5D%O462Yr`9BwGW1{oG%s++W6CTlc%u zTK448+=HvwI-95CVBz{=2()G2M-gk#HyMf*;ie3+E>`U>knE=$ca)Ft$@X&lzDo=U zU$$UoE##$OrZuo15X~E2M4Nn&%7)s_Ki?L0g6jXW^Je%|uV>BvLav&rAj0jc#t>Cb zL)pauI_6v~8AV$g7db|SvFvM}5?p`UB2US6fa+6zOna0x(fvo84OKAneF73o1@fP$ z6VGQ;Du*p5F^5mtwx(J<%5GRu_j(vGSsO6^g7Q47oJIz+6yk<5JHkPm4QLZJW)pf* z%k{VDCFV-D)Nm0&2vSH?v}o4S0FDq16U5jZZ?X?1*;9z_M&;{bkRPxmN8_bOBezy4 z$)g&Le`XD|5+ooZWv6*b%`7Ma*{ZV;qFU>SWF_qdRa@t`GNxRzpXaO7lwRH;;;>vw zC_>c&*x-2NGKOAOVRE&^%2p->bzOZAC6`-ajSvou|Mxj(gY7L#m6i|8SF0IqRv#{} zw2k6GUF$ERP|eOMgqqAmiP#&?b{3^;nvqmB3a*B~Jj@VtX{N58{Y$v&;h=_$Eu~ze z$7@=*a^5}fHlXyw}sGP5QDlC{2)rzA+xXfl;wV}J_P&R zc=WaRt|^@2hQiZl#oVDe~8{KqZp06@VX^Gg?r*Vv`U;McQr)OM4oFj zzQCBrgy9wf67pRY+PeBzUj87mu7;)DRbitD=d|drBn>A&e`7+9h2qKjG%wILXPPBQ z!yD0eu?RFJvvEc#Iene0^Zw=^tLi92q&iY`;LTp?^Wc1%<1mgea(g;Ui+ToHa=9!o zroZe3%(n;>nw3#Py@CBH_2fawON`v8Ba&32NIOet_@Rr&J=5IvF!SU<{M6KG>8t45 zN1+4AL7M$UM!{)YoT`PHQ8euwd@K|VF*Us1K-qxVj{eLkF23j7>8dJMMxgTN(g<-3 zyA%+LbhtKNd?Tl`Na9~Jds+umQ}T!{lwEET>IfA(rtkEO?47R8o11nXwxGQTkpSr; zv(VhJBi89WblOR%)IRC!=MQhk3XZ*=h(j2>b$cCdUdiI8i)5O4m&b&9uFsVF(NJyf zPEm;9tZ1Q?!9?BuJold36`DJ-GqVJ`D~en9=_gF?J2r+rj1DTf5x2*j%uHek4NfsQ zu?ZkL6YV*l#kVl1i|SPE3wnbYrULUFo{9bJ9939 zcv3@a*;{sc$kR*mMlTfZvEA;MlUqf|+#5F_J3rKoKWj z_U1$xb;Lj$Vz|M86Dj+^3Ps~nIn|q4n%N%Fyn4m>HC)CX{}}C*c>EaAu9{cRj_NYU z;FmP=DDB@bXi5JDAjh{?>3d$E5}3!;(+|@`-%MNiIM3-lv#A2a^Fx!$XnwPaR= zLPMExsNL(9`7CIL(m#ABh)*2hh#tF$q>C5si`^GMSU<_eKuPLTImzTvP1(0fXy;nl zB}f;%P=Nt;VTRgfUYF>CniM~)=RP8$Mso!c?!n+#?cs+snNgNVf{U<#0-doH!H^fK zf^{-iiPuFSwSQZKRQ>}Mzbk92kR&^mpt3((v+ zXvN|vY|noIJ_xH~%&j0<#*lN`d>~#{T~!ij!hUJG25Dra3vmhXFA4M8+fr2ThZzi- zYN8)Mk#<@`${b1bVe;@6rdFrK#ek>0x4&VQXU2_Hm-L30*2*o64Vh-xYm7fqrH&aT z8Ryy9#wq0$OaI#r|&_uoeKd_70OkemHlxPhNJfEz8;plVHiZMCgtOZRn&f{m6E!82tI36Elo8jtI2?~XmSx~xpGC~Z zZcH8CG7EY=@jhD6L2SYg`DG&u+HK+;Gla;dKZ$)a*7_8EpYWC1?<`XOgax&)C8ND2 z4^Mg(QRW235Q(V1zKwOAEOjVdOz=VRQXqcxQ;q``ESM$e{^r*q^2JA2M&tx z5VErBye^^w=6n2kZKM?(c|MBsXzGD)pr3vee^$ypeSV49z@XWQs+>!=q92=!r6|&m{E7%h5k)A9s%=@K#s-fCZrQxGb_Qv$5~)4j8PE>l zVDD-a(HIi_9%>g^02q0#=VlEcLgO1TS#KImrHAQK<#fwEuA+bIvU&3ZcWss77Z~0xMgxx#CY8iZ{3l~@GC;yp)+xDvg2o4;8RhgJKHHwz&cn=|R)gg%S zuXvD(LDTZEmdbC*lS1a5tahsfk&bh|*#}~5_Y6eZCuy0oqmWtx9!8MgEsr?3&=B%Q zw$$>B_mHGo;PyD7y#4Ld9U%&l zU*QYEGKs=$$NlU$DTNulPdD85z1?`Y!Ec~t`YGb2L7u?V0NIn2_N}JkJ~^PbYUeB^ zaNAvLJdzQHa|_G-9dA#y(-m5z*K;kzXTh0~=6BO0@96A&YvO%|_hKeCSIT+a7`qQ+ z%gjux4$X4^nZTJ9idjDJkNgE2l^Dy2NznC8j4nTVd?2Qx7$lKryM^s}W@`Nn;)-3* z$+}z5_rcUmn+6)9r>K%&2owK;rRG7}s|5z8imP+}w9%(>c^OR&Bwm_!06G|W~T zxn$haU|W$C_DktDep0JknJgiA*AS7HTB~!yXKl$^q25A5!#w0R^+ELr8Dq#*e*a84)(D!Og(%aA*jKTB7?9$k#J!)CQ@6&6$mDGr7T9D5 zcJ|a_ZWawDSu&|)cQDCz43<@})0`Pviuk5XC=SI+B5D2n{F)0%P?40XS!7 zLBq^Jb!V4Z+8)|({Fot!My?f&X8Y}N z*3}#N zpo;$SU*Vg#>QmcMYs?c;SgUo~i95pr48lSeT$t9_+NEc?O1YZj>HvR}a*b@Ib42z? zBN-C=EPoG;zCnMlmV4TM)1q7NZahH%EX{U_%>wh>TADC=Dn(?xH|&x`I=_C`=RwcZ}Ix^i(FrEJ6@ZPs6U9 zsNRnf#vq>)gxhJtM{ZQSx?@E-$BSW#nw>RPP20!2V5X27FqBgxOI5srDJU6m^4<^L z6ko=RyM~BV0GX&r1U~`kOynu15ylecceNj*gr7dW1ZO#@FGKnflyG_vj>GfU#Sdbj z^@BupI>-0{W(^7PyCphNFt@_MH+{^|i)B4s^UU`{7GYI0rD!+3gf)Ui&yDrf3-245r|wi$HyF`@p-xq$C@- zZU+fvcElpE=lnGBOHvB&dfZB0+UvfS!&aNqP-^L}XfnWi2I#9Ih|GNsJbH0bxnV>{ z-UWh=e}bI-5k(@SU%Upjm)o-b=60gG?d{fE!^c8pgD&N4N!{cL;Hg_!db>3PzdmWnal?^5AC< zbLUUv{JpKsuR9$5M8t%3LeV5}Ww!f3x>fF9TXEFj!cb!D>3aOa@tb#p4jL03*n|dQ zH_Nu)LRCoh0U-<>MGHew6Bb9!_2Y$Q5e)Yk>N;4IekdXv!)^&HbQQ+Rq;)t(T)TET zrBXA~AKvJufiS|-LICt2>)+4;DIWu?q)wvdyb};+gKX}i-s&4nu6}k=mVc22xhlvg z*7C+NN>Z^J&>XaiBl8fsOgEw|BiFCO8zXO@B0}l( zLo79g(p~j95PX~W{@|e8wH#Ecyw?02R%cHDE^ub$4O*~4s3r(vleRiR!!ps zJJ-fu+7Mn5sJe0aibQ|yj6*EBzlI0~_AYOD`sc97#L}2ng;3JyN%N~b7m8?grwJ11&g)dEQ3Z^ z>cqOK#)oc37g8l#=ba&J0rOAnd|*1^`AIMG$~I39Tiux)5*~&zp>a_aNnhE*St({f&W1vkbM7kOFh2EtJ#W=!Psip;Cr2O zQ?RkPS^i(q6{V`|Wm`lGQ;)Q7LZ)pRAhd@-5V&lxeI(UA=4UTI4!kkBBA9K`vvC|2 zMFWw;WSq49+kG5g7&R-&{}4 zKj7#wK?`u6Hnb787ya042o%is-}2hcsw6(q2~-~h@vksz>hWr)ag}t1d+}q#>jp!2 zZSZR950flSw=75A8KyHVC(8eVwYx$3weZr{&NT!NZ@#)ClxShoA7sAW9+~+V3RRd( z=e%!P4B9I%IN<_9Z#i^Zn!7_UwXT7vP~Ds1LE~a$E1K9SU%0L7F6No-RKbRNd*H z>qlmp;&*E+hT3;ImYBBVIIWs#jvcJ19QjmHZn+1SZBUVf^HxXQU%A~H51@~RN~H?) z2?A)llZu8Dg24^E^zAOsMKNrgMF8%GwGPhuh}Pz^86LTcw3{-%i!`A`LrCbft+A<9 zbA#qz2#c#fiZ1=NZZF%T7mZl4ZmC3#Qw2E>zL06YL=tZ1&%J58 zBv>*twz_e(Z8DvejIvooJpqx_nAayOy{-d=k4UQ#lHeaSaX+8*=lCFcBcx>rR#Dri z5*UAMm`G+?5%?!=1N`(`G&Y>kA+epaPvjuN3c0Z{adw#E*E^Vh@c2tbiB)~l214k8 zPtX>hog8iMWo(MC&1Sp;JZU5o{o(fMbpIREf6?#r9v7JQzjN@bdUfrl?@`D^f2py} z{{2~9U(bFY<>K$B64?fSyUk}ALhOSz?P6f+E(XC!9jq3KaF(XBs$EDWOI;PJiBd6_ z{vPUyi(SRB7`E9vC0V#_PNC*tCh9KYmEmMWYb;6vf-%_EW?$d*gPx;rJ1&RZXA+?3 zZx6WTqKHrAeMVC4d3S|%yp%4K+%;5FMvOPsqhvSqsjF0;)W@NMm%&{>HBK{OqvQpl zT^P5=kutf6?ei23E3es{L{LrTdi3{&FjONDF}6i*f25FEKaXP2`stV zQy=9DOnzrZylD^D;n-GVgr*;G2xMB=NerKxq;X0=cfHqB9vm*9O>Vf&Nf{0WmYzToDXNCNR0-|UnH*&V z*cEwt>vxsY#-k7LVh)iVWdFEN47Nol{QBC)jqkU-%U#}T(>m7_RayR{=77ojPe8Yy zRp}fjf#u4Uga4fOgKH%c`}-q+A*m(RwECehKdPq6Co1KFg=vLYX_niu^Lw|WS*8N- z8Cu!B^is}2?t8^3;s`X)6hC(!+ytTBOnq9eSwXtAf8wjm6UUTScX~18IBE%tOB)Y&`Sa#O)g{G=$$fM7xu~{L8k}=Ug6;Q}(p?Fu<2z!e zqaF5BjTeS*7zg#NrL#pHT+0n;`UoE($p`AIHpqW>hoQP^SiU*XD9{zi!Zz}^Jo0l6 zjy6~a)ghFEF5Iha6Vbf2ADqhsLTLg9zM@u579KVG#ZOuXu=i32xwTd2JfRVk+D&K- z+k?y^k}_9F@lTnk4%49z26Sls*aep(PrNz?Q)5r3)@rKjWi=K)3;gVv0-=gCe+Lv? zwU6Ai;jcU0a4u@8el9NRnZxH`LS!g?C0|BD5{=M#q?dOu$w27X$elW)Otp^Et@MzX zDNvKy|0jpsq{O&llp$m$As8q`xzF-k8gL<;^yeZi=E(-f%eCsUxY4vmE_)~zU4QEw z+ncg)o*pr`!+wAe(`F?2$AN<7AOciwX~-Vp8ro2iXlXe9|WCx zh<8pHxfn}DaPzS`uj8q}75xEDZ4&L&j$n)!Cx z{F{`eZ)0UpUhJyyak}QKxR0_QxbKMBNXgT24aYBE^Q2px$!P6u82_|**iVAsXz9t?sk{W|Hs~2zeU-$UBgPq017jJgw)K? zpoB>GFu-6?79dDUNJ)dz4l+m$p@`Haq8M~H64D_dDc#-8z2j4Ha zF&^8=oJa3#U;A2HAtsO4gsG0_KKX_k0fq}KZsq-L^?-T-nRl?dfl>GdjI zWfM9&*C0%%jkTUTtcbe3TC}$p&7&EYH43}C`utsz?YeTVpUT%C)F5*&wx)L7bQe5|KzD(`bY(}E?waliUDHf-C(s-sfzSQNOU^ZRR{Vqavo0;>BW_ zxgQcp3O1J}0}eFffk;D2TFCU~nIAT=fDJG#=d@NoFLbf>H+hq@J;&S&5WkDN$L8Ds zTazd8n|r3VWF8_wM!D|-<(z-JU_g`fr`>>&E$zZrz79cV%1OA)uy$cU*83u;+B*;> zzql|J@N!35AZ67VM%LF-AR`~8x-Q-Hil4+9{Y;t9-DU40MW-%ZRpfl`6A_AyL&D4- z3Yu1n3Y(N#7CJWdFSZtJ9L+4kNgR?5v9e?-#`^(nd(U!k_P+7|zyh2Xnvq7(`1J)gorx{Ye{Ed8AG z74MB3HiU#Dct_Gh085z4G(eC6q8rgmhWk!1TM?l{g9#b70WC_DrUDV0LB=kURCID`Pxj=+vrk95htvP7r=H$>M!^ zsqW=c4wcFM0>E!w8^Vq-D7eSI)smvbkObO-10%;pKm z)P1_0aDB}K4WZz0@tP$P7qi0#Od4Ri3^ednz?$VhHS|;*ZFiI++X@c|h0-IuJ>I+3 zeE5P9j0V4a-H%MmcT(90U82JEbXN@#08wGyh;qFK-~Rpmp(i(E+8BU?Gy)O~=Jx?9 zs`~ruA_~0Msd^#VR*rzO3Ji6#4>)$uBVj~9l&ckugkG2T1YDAyQfG^V8@4ft-Se_m z$A~RZFW}Kl|c|axKpz? z_QEONTpjTgIBK&c0G6Q7(PGA$XOgTIma;a0fKlS2iUDxWG~fw~Bx!L3D>>wvLm0?O zcu^po5hbZH&L&Fw+zSPK{Zn!Nh8-0mXf z5=5v0zN*pu%%y@#8O2pNWE_<3>DB^2M8SIwzvJBzM;C5c6sGTLpc@lN*rK6mlh(B zh;$(^Q@RM3f-bS}2E`;obkn+A;q4H*21?k=*|zu!$T?k#C5y(Cx^h5<|7_2N(%)BU zsN)+o>gp1yImx%C=eA z?i2v}arwNhrG~T9VD5*oBmDcuwa4gi91YkvfkXW}&02KtAIx_oN!@#Ttnod6gTZVh zwpp9`bhhx2?Xmyl6F5(9>@RjBoY(G%N0{XT9kvSJl*(^nt zXmg1=8zv2n1yUGJiNTBIa*Vc^bbr`2QwK_im+uPJJ^*g4u=$VYuT%X`hd!Ail=c5v z)v%}1!)BV)DE4b(Ri68cowUz=={~hP(Q%0mYk{7=DhhVP~mp*H}Bq^ z>qvA()9i2z-&$hq8mKd*gvhE{pTI6S_Dl`iCBp;%P^jTJtKh$>o#`1VTUKR5jT5 zZg9W3OlpW!8h3Y{~k>}z~e z{(J$)T!uRDv%F9|nR5QEzbVAm*T6Ox!+nMe490)p6yo`dX`RW^}egb4*G)c@%H$=RE*O@ zKLlxtzp978We&ypGKb|9u2l{W1O@v8wFiEC(QHPCHbdpRoMoTpG_P+2OBug-;Is8% z$M*L*sRu;_?{2LU6tAenC z4vD5b{UsCj=}+xt3yDmV?TCyy%52NXOlH1!u_!rylDb79ljc8r&0%)&{C*j(-k6K8xkW$2uG*C~Om z_5Lj3-E7Z_;t^alal{U3bR#t$8%}Jj41bASG4S9#e6rfrWA|r!tLtrt%lz!TOmq-G z!Ex5*(0%oa!RaPN5bmA0t^F7OE;czmk3Y87-WH7jygeC6cTd&$WJOS4GdkyEKDMLT znZ45Rvb3_I<tMiMLzuS^5aa*EsOpi&tfYz z8G^L-c{rEo=`<}{gYVzCPBM~BGGYo-RE3pZeYYD_DdYNW<;6s8{_*1% zx2jklg?37E!Qlygd0uNm`D;y_Gx>=lrAG^-N+v$59eJ4MaesmUVZBt-adF5bGSjew zkaCX&DZaY&8_)UB|Jp#|D(`(Q**kj*3#J11k7^`DQ!9@jL>|jZRW|SD_-&8ObR_gz zo=hlSciTfAZtq73|D-nSOVdz#NQ>giG#U4=s+*kGP=x31lsKGCM*dQNb1%9NHqCdl zNs+dtQRx&v`p4{1jA}SH64les6=3cue~rQDf4@*_c;%Nfl;E1T(pT5r5JB=sSLX+jMQ81(k{)_=Dy_%u`$ z7J~&|N?mMHde0*hIOGU7^e>55vici{T#i!gj9v#T9DlPZ3Eq_C_cqblZ{;_SWAX*+ zs#KPPfE)I{8E$1q=C;0Prc9xxcbZn?lNR-&tB;=s)6=)>7vMZcqsH5Ie}8MH zKRL`l9T+!v=Tet+8bU6=t>l_b(Z8x)bRyEja32iV-XCid>!=Y9Ho)i2iH&cHiiwPh zeEZ^kf9$I)xl&=UMS0BM#no6}7~{Nk7`C-Oe8de`N2r*ND_84ZixrEJ+&PpAcl%|*0vg{?|y2_b(SFu z&!+S?t-F=~BB9Dcydm>T?!GZElHw zwCwQwZaL8N0wU)nQT{P(+rq>v){tp#9ET4XHWG;+?c?RWk-Ht9!4d1o)p%>zS#9AR%W5v4)!5xzGq%p0Yg_WPekUrzPo*GPKyx>EebXReT{ zMn#e7qkWg?H~VAnxIC2F9Adqr`^8q^ic^%{s+lndg}r~z(4WJz zZPl`)tLlowuh$qNsvg~Fb(i{d@6&SO+L)@kwzt;l$+44)4>7UgojaYZ=Q!@m#vPh& z@hNs4F6{0pF`Q$UJ=IA7jf!@l~z=qHV`scw^2Tb`k9{|M+k( zf~vvJQd=I&QVtm1wbGrdd>5fIN?E7svXZ56MoP2VV{m_sHW?tScyvA;vJ2=dJ^7|D z`{3|(NQK0e^bVa6b(C~(VA1))v%1EPKhMKO6!lknnx2Oz@M^I6yR0bozcBI~hUH0| zWEbq$u!kUp!A95X4TcrH4?^5sP1m1pe zqPr-!d%uK>AuM~>X*AX6LF+@*xs!1j#OWdX3e7H+oP+zJldg=N=JTk;$^Jy;_6!A? z2DOWr^UGedRAKmY+sPwXRo`y%BuUbj z!=05)r>V6|@$Itg?lXU@EZuEa?Pp=rnyRSA22mR;`F3ARA7A;MGp}*! z&86jm3L83Gs|am*ef4Ylb5?WHZ|=qReX-`75;?6(n2|H{jofnT$M!jOKcJB=jIlpD z1LgSN*;Aj-QCD z$JI+ATzYO{lT&b%%d-FH)8w7+ud-wt`mtokV)H{8Pj^Fc%}VB zW704~?th>8O8E%HObuwv(en&kF0*fju}8GTxW7=y0~y{MDEbxUZ<f+yTFa!`^fMWja?7e#j0Cx;oZRx|+yr|dx)q8G# zx1<%YC4uLd&o6%E{Yw0=CwdNmf1qY(@}m6TwWI6-PG;~HdD}bpVgWv)wtW3-v6EyN z9#nCc8}9()Fb!Z>YrOSj0ciV-BnuSO)5y(y=cpKhHj|MtOA!?bl2IOS+p&9(ST6;p z{rmUQHY(y2#eZ}EMq_Sv#M{jhpZFSIb9!{^6)mT5ET4Adr2pnmrZ!L}FZk)^&vA3s z$*ob(@fJ{B&r#v|r_@>R^KF(PAU5y>fLA?*w!KEH@0-cLKgfy!PDaK+gX9{KBv5&J zwCplq>?xCX7f-BecERR@a$#}N=E09@MJm9 zx4;@!13p>xV*hQ`-f$a1isS1MK-5NkwH0>bi2*Xd z=xpGDjapp;5ce9c4@g=VeCfKj5Q4b4@$-}b05@~NFhwDQ8h=0}upBLS=S88y-MSR^ zG1H9^uD8FW_q_GaN~8=S!jsOg18P9YY0m>uo?)r~U{Jen!pnsJGZDJWQQuY*9gs6% zpxu!O>3Uo#kfeACoTmFaieal>JKY+yK*R(OP~ZR`@$j+tr$YN7 zy`#NVAq{r-IG{q(Bttbol-teDHk~{LgKwDPHASg`uJBkDB&vR#fO7S0g_A7HmYAMm zhetA?-k66U1>Q}@`(QG}cmy60#&|6TWPe(dJ;wxq)`3Z6(`E_4a@)Y)e*$c>T!3sv ziw37JH&Jy2C=H0X)L)Wn1|kc>KyEiMtXK!mgLbvi?szXTy3Tl2AA0N!l*{q~K-m_~ zB0kf1SKHkSK2>@F(Oc>5s<9V@6v!dWl@S%Ofbwho?&T8%9DMu4Wua~?1*gw1*pVOM zsEoy%%9nC4s(8aEP4ncV@JjtfQNlj;0MIkJ*%-;rddy0YUrdi>TZ5oBCS}j&zsz6Q zOuNRH;+4h*D!frQXb@puvn)U#H7u+%K;cx(wugJ3>)@&W40gyDiNf!+z7dj(xnM?J zP@&#wBL({bfO{FGjDuai9@>;(&Z&ok6}lhQ^DyMQusdWHWZt=FY>MF>0LJ8_W)gNY zPm$bR8S32)q&#=J#&ne7*F{z*-X+fkN~ud(`3{zWWWbtmR9!t2!bqGb+hAN#OrNLg zr|7+f?8p#@|Bbq|RQLj9Dc>bix{Q8N2=ap^5vhs9hUD{^c%@A2-?c3yY2e*~v-n z{RS?LEY_uQ*CEED*DmOt*OUXQA;wBy!ggpdd_l87K7vv27e+JaY7iy*Y&uHG14|R6 z7TB=Z<#S+58nglg2QD{XQM$`yYY!2@P-3qu5ni1`Iew*$A=8}oh6-6Z9*XRFgWZ@t z5?TTXxUcqTYlB1sZOp{6gSlq)Mx%mkMOi0)Acq%e>7syU54@mNND&VEl6lshn&-)! zT_}QM+I=Z@psWtR3mGaIdoHB@2kMHxeW2j*=^7C6XoD$C9zq)}q7?ck1G6@ne2(jB zmD;0X}X>|`0&&-F!s4=0mmR1K*u$)$A&$uw7Om;fRt?4cCC z=`}!1B$B922Xn5G>7w|I1FEzB$w zLqShSpyWV9kRg(fy(WWcoK90lj&q(>cY6E34#i8qQz*4@AA@xS$Voa3U;UV&^@f#I zvN@oicc6iWFJ61C(dW;7BLWX6K7FPC-mp|6@cD4|IXV2Y`1~C1Dw!%Zrx~OZsJ^g^ zq2DS0N{|T2)P)=3DXioXIz}0Gn)>2(>v6eHtNc$7Gq_lMZYP9(zSiz#@~oCzYiGmR zx<7{H0hVIbvR{E81%C$p^?Y}!?8V_T@$HtYn?w+6k`S zZc5Sn@FW#soypo=n3bD~(18}6>?FEN6jEkFL+~!m+++v9*YzzBVu6U)_>G-_Nx?X* zgi}iIWqOTgZZ6}b)IDBsAEY4hB&wUhQ16q~Ti_-~u6?exm-CmVf4YV;ObX#Ba8p3W zaJhdPE{}+Bubh53$egNQ?Nb&edALl{92FA4CHpQoBMZF%%FAXU|2TP$^VvvMQ^L57 z@yBpAsO(bsR+Om{u-Eq5sMpS;E*NHTU?pRs1<^}FLnF=8voZT`CD0-D2jPT{BiK-?|AehkF# zRlxZd!_=?Js?PNG#5%2i0>UAsDeu^0eQqK8ygW%(kX%$W++|&`x)xTBfBN#vF9vQj zDOp?;f>Q=)J2aY3IzdPYHd{bnh@2qGb?*ch5JT02{KADXys?Y%&*`Fi4Hd=WRW13` z`IVJJUmq-UpRiaeuHogZ6bN-y?S-h^8%~Ot&XeFOsGAkv zM$$B6>CQHNP1+BqJjWP-lA;cwaw-x)oc7e{wnE< zQq`mapOk$NMyJ_!gSZ3_T-j$sfwGq;PmlDTk&<54hVWhPc+M&QTlW;U5^{tA*AZ8U z-SF}>b0w{RttUo;s+eaX=XJy>2P?7<-Z|`HEJAW#gIR6zg9VFROecl#=1J1BH`Btw z?|J344DHml<{QEM0%@J&=|SVii+ZPC>R7U$SNFMQQv6T7<3DFmFVvqzm;Vs8w?7bg zc+?Iil+1Y=M{wRO)xCm1UPn^*{Djh*oi1w7-pBO#VWZcKitbzd%?N8ptz+dwq@Ny7_zf6*Nle; zQ>HZor3Fg}3#VDiop0yGN1)oL!D=XYM7pEs@#|+3FK;KlBv8i4LMRrwp@v5VX7v|< z=lCJ?dYV|e148zo>hn9i@T<~5Hu9DV?TbEi(;CcRC?(S(t`w;>`vA2a7ot?s0#?cH z8}ibl;N7SNIv78OS)9OdnW@$TRq2yQVm0v*iB0guCVpNH^zL&l6QL5(GlAypkg~oM zfzhS`W0qmcuh@3vZRn*_8udY+jfq+@vCpt-VDQ*+sO^YEbIIO(su^m|sMx9$M9?9L zs=-UDKaKe8i%5YVU7@6;H{0Qn)^edoK<{FNPQOqeOVFW?n2L3sm!?%1Hb6Eu`qd@Y za{qAOI|5-_t|nIlVGfCamqUMyR@x9iv+7dzFcB6av{2ZHc`slJq-ovjtl<{><<2vs zSPv#iNu1yY#}7_}5;a2(C2@7cN$oxjj6Mw;Znt}_NZdbcOWXf$@IR1l$`H{SUOH4C z;~964rkwY<8MVK8pmXODtzPp923Kvj!8ca%pG8^Q{=YBE9yP4;7RJ3hI1AKoP((vq z62Z=Tw^f7LTy=@T_7YUeYT@u)KEw-{I7TWTEnf4w+t>fz2Mc3tH_sPVX2Pm|d-r>K znvBJ=TR4p@hLYvdS|qt{fZL`gj#E4Y{{s}Yw--BFQ;YE=hkJ;}-maF=g)=rH<>8fm zq?18tWgUIKa{@s=(dM)34^&O+(YQ6Mk6c0teyXjA@xt@@wRNWbO871M+oL)@xQp1` zs9o;Cm>re|$Ra8|14_BA1~I2c-TB7hA7Z2@H4rGZZ!Tr!hR~F!ZU2};ot>_5=*9my z^HP9Ludw7fQ)6lYUg+&5t2_y^)StCDqmvFMgy2e?POPDZoaTC6Wc4UPDv8drpR${C zm8)B22}j(VPxwh3)EQvG@XHq;!C20!@vQ|y=O=Ip10{U(({GgWsM{D|`tpVKdRrL<^y-r~F&&J$U2LW@UZMa+v7`LkKb) z{D}6?At(7k!I6K-03OA*rKXa*QTxhB zp03{iO@k`x&B>;mp8UIO=?>|1DogKv&L=?|NXkar&)JQXQf&Tcw-aT*m7{TQu~U90 z40SK?2tiWF5=7x_IS~4DKLo2C99V7WC^HsJvl?zt_j~-(8egkEJERWX-5*SXoTu)fUkyo3 z3&H=S#if7ATG)52Se?UI#?_FiL6+H|lzula?;aAmcQlG<>CZt_tp-1CY>c#uCqR@} z3M!1{mG~4|OU~=7rXaePEKbM?fyuoW+Unk{GToU``j zr$YNX)Hwt-9-(+0&t)}MPqmNwBmH62pSJ*qBk%CER+ktPSSyT3aA~%6q_}#t`cD@F zI?iN)5BbXPDQoD?0im-aeu|)w;P;aL(?3TcIE0$;{S?8WkEgKSU&9P05q~|3)(WD=aIKb_9S{ND;{m{Eg=jL5^@Pe;i|8}l{-hQdfzNHhiseJOJH1!{D3{I+@WOsfPG5&Cgz)V zv@p)&5qlYz@=fY65BG|xKkJxvA!srB(Ysk%y5${5@5$oG9Srhnf?vMxWSW)sEi%BE z3H|3@d$s_7%>8!LyftPLn)8hsKV3UxfA(g~QAdkZAKlD;>KbzLxnLlL+4i}&g6*ik zj^Rq=n;b3mKkZjJGO}ae*DEn*8@Bk6VIs^Q7<2`+>~Q3*1>aEW3DNWI@#eKqy9ryS zw`a4?zua4}%8Tmh6&7%K6N-D;!RD)nIoKenZY7?3RQV z>#giBUokv_#W+o5lKe&X%!wptbEhc>IU6K5b%dj_up60GXEI-htjAmTnv;^bfBLd{ zW-Fimo(YUxo&7~h8#nbn^8SMI2_Pv8sNfpyE;>8Y+EM7dE^7#>9b3apy6y zOKb)JRfhMzh{M8%f?qxc#cNL}|jGk{_bD1=-zA4dL@jqOEMkHtL z1wb^r7du%0mw?lA5%jRF6~4|U63~&9hf<6{9hE{qYvF# zZMH<(cAy8697|P zE96c5&j9B3$$lt*M1KBzPPNOy%q#Cc!seA-;FwOiC;TuwDbuj%CUEoM0>U6MtHmS2 zCcZ7}9TSl`m)K=*%$7FU**zxkC=s;C{Kq+Oy}er2A>Gln9a}cg6cQTBuQXcf{LyEB z)YAo^fqdJ{6?`Bat@`BE@RW`xZoisRG0#8hyf}w0iF( z)oUsg16w%elH6*t^-D=!sZvw~yws?jUZ6qSf9J9MZr@$CwMQ*`62?TGi2p<+U}{5+ zz7In&P%s<1mA^hK1>HLX49#B~9}wj$LGUdE5Z7}2V{!pzDaWLw=SyE*K<%M)^d=}? zY!=F?L;@knbb2--#A;ArMG35Ii7Lg94>pKUrpK7~JX^$Ip>3=@VW*cQdf2r~;gj7! zwo9u(Ml)!()Q&c<=HV1et9J&gS%eMOujc2V0-eU^;f4IO47jwP+{q4T%F5PMZQOy`gdW+Fv z{8PN=Sjx6qg~-K3ou|-D2xJ}l4Eh|vvbjJdR<^JzJ-Z43z` zTln>0>6~jLqX$sD{Z_C$QTuYV^kdYY8u#S~`zBbKXz9zrOHuL09trjBoEf;82`@#U z1U%}xaV_QL_;szN{;cIj$UD!4Un)y|U#IQmff}*YoItp7qm2&!TUF4(3V`^tF_DzNNUn>n%A zw7N-<6^JJq8)|UDXYntZJ3&r{O)~@p4e%a(CLktLPC;OM`Ed2+~Jhh3oFn))9uRQ_K96e?g5P3~4e(q|xbBg3sRy8w(Pd{tnzl;l(OC zPNkEt^ixlE;!XSs_peAfuH?eYZ}=X$fqG!4B%BQ>l(2aLDA3*mju76N2p0F@3zRP{ z=_i%(2>Sy9kpEsl-u7E!8h{F<`4<98A>>tFQ3Jc*4A2%k4mNJMErS-EwK-nXRg43dMdmr6sZ0PURlj#gj%652gHyb@7 zI51zK9*QGgj}8t*?PNhQM9JG}aB8?SiIawX(J?0x@p!YP~XaE=sW?j8xnnq49d-E-jXSXZD1mQA4#tHvTpzo z|3|}=m7j@zUuNq0Nz@P5!|_A8G3=I!etDhe^KS-*tDbz-R%-@_=Ne9=pc~3xHQ*mv zBY7T1LW2{;aWycfG5&r`#yB8ekhACn70cCF*pMQ_(Ro8AKsKQ2&RAvYXVSon%LBmN za0$Y_uWALe#=Be&H673FqyNuoAR?zdC>w|NkudDIHXQl>X-B8=glu^s^9yX z%Y#&Iczrtc0!?9?cyyzBNdtAG=gX?aTh2#47m##=lq;K)Knwf_CG!%Oi-sYc`AtG- zHNDzDCgIdrDcuWXkf|P#YNahH_Ka|W6DfOn`q74Lh!&bc8otCLIX5j6-X9)(K^xE>>(OQ^WxuO=2L2`I7%@lIE4vDFQ@1}c-RxHyq;6Bpb ztZ_s`yDvB6-kMt0nb6l=l()o_Ols^Xcg87mJ^K<>ZRFCzvnI>)3NH^~DyS~64%*}J z7&LPM36Um1Yr*$1L*%~7CdJkfuV01N56zP!SOyp;Zg-1*7e zyJDhNC^8)giGLsjVV4Q`yDR5(xv9{BmP#ODllLX6m;%)rF5fjP(;g`#HgKwPknn_d znWC#tZ3Ws_Ih=~2gIz~jpPGC9Bt&a)IPdNE?m;!=rS$9cKHreg$>AZ#StF_o$6wRJ zc&%1L^%lx6?tYzkk2gII3Typ6o=e?T_ps;}=Vip{75=4PVxjM-)K&VL+-nu<49-kG zx&iQmKiuh|o={mz-tzR#VRn*Lu*p38y%DM0z=bcI&|wV?d}`%;>Ar|v4R?j>A+Hqz}C9UTSiSEVcNyqvj;A3P7wibUX`Jx}0b zc&}?f48R-!VxMcE2Jodooq%6#uI*xuuNZWHpbV|BEgkbF`rKr6;Wp+M7}J_BDw2tp znkKWjLTC!+7}f%BgZko|iXUj{5$*P>b>lwUcLpB!{Dw#PX`->{A|^UY0YDv2Or)fs zWn2i_1v@(@y{c?|3J!99Ki3b)8%S{B4I&1AaYkTGDNf;OFbObU4K;kn@ux}%mwd#!{DCSV-Ow7;H2^Rdi^w0AtBhs{;Hez+q5`AFeYz-z@r76qlW6(L@D%2{+(#QSC#gHWj>)?iCr< zq`D8P`|rI-(ACg~kNu#&j=P3Q2>NrlI*~BZPU5~YnQ{A&OzJk)27Pm#uP4a(H%+?G zrcatt-#Sw>TvxEC6%$Jtw$rdoL0tj{;tUiOLB3jM2AVotfL-nHhBMl@zJsWsyOo+n zZT)eK*<2Crnp5^GC%ZE zGg8iE@j0miA9fFqs=q4v)xr?o(yn(rlhjO7hn3|&?bL(1D6xmhdy>(kZg%l>y9?oO zlaVwCdO<8i>885oo~8#B@-fPW6fvbyYwEBnKU<_O*ax!3O5E=ao^Amb zFuK2Cm~90mhuCLGY4S36xS&g`qgC+X+LYa0MYdSBgWx2P;M$~KI{t)dzJt7 zuy2qjL$+(AB(zST209X@Di~m=7eY6vVYG~&W3ovTdisPJYqsS4nFP)hQ^>z+EIg}W zTnqGBkR|WQm`Xlh+o@{Lb-Q9GC70u_h$R&)W+3(t>^j)D(HFfnpHfoGBmLJXa0Wr5!vRw{m7jgdT98XnRQC~ z(IF_9#z#N~ONI2mCqe}D<;Bw^fr6qLubris20#TSS>7>R>yOCwO3aeieA2puiVNst zE$-SaL3Hf+85~~d!NY|E&)qnXHETe*f?LHXdQ7+#K3S#u@hNC-(hp^T1qw&As9TBFWC7#P4AI105 zfY!Fwbawc^j6MY5C8k4bwc<5EjTh4`eYt!V&|=8mce&!<7Q`@W2YmDwV8c@)XFz25 z7DV}4;OY}nSm(4o*Rj>a>5mDe<4Fg=hGxks2vwr}&j=5JWe}3c+3DFGj36RL-jEZ( zlgRD{Rs-LOWVD2VKqEsVo%NP`Bo=>D9-s^QMEf%{QE*+@7ARG10i1-{uNf&Wz>UHc zSQ(Cp>9z8|KbLg`Elz3AYeXwK(FZOecSQssujRvbawh5bV;w=&DL|Y zKkLya5dE!$}%jPIhc;pPN!6Re(7L$u~!37`r<^bZV)l7cp}z7bol9z8jq8( z>&Fh?z}>Cv?0E%3#qT=K+s7Y@FWOE22qc{areX16!sYz=)T~mDalmS)(>OkUtC7{I znMgnZ(31%bYvsXIn3$3O(IOw8W7`{{`1o(stA;hcz^*9<006B3y?C=VPozq@fc6!h zbg>ZKPZmv)E*%mB&A{p=_Ff_=0|dcJJQ$I?{W&I_-xI~$LDe_kZl#g`)u};qk zKzegt_Zxc{UID0WO&k$9qaGs;o#V@WU%58NVq1=U^9kXesiF9L|Gb}b2fS)mQiJV$ zl0dXtGchCwSW`3*=_7(Z%Zf>$limOF}z-tQQ@oJyv@u@Hv1}oLuE*x|#&OodTbcyN;Ec>fRu6og~8eK=U3}Sy1RfCO<$L z)GT|Mr2tClQ60;4bu$@|QtY|NY!j!B09#T(BWri@tF$c`=gZo@{8x{@O{9GLlV&#uG>ECk@8y@ z?}ZN`e?q9Xf`7rE6S28w!1Y{0UIU@qKi}h7BzRVcXjoV!8MXMAzK+}Mx|G8PA5i25 zRnLovgv@9H;0jhOP;}9}#six!Ee=p&Ow2c?14Kp367dC2rJ|y248rub&CS`votJy- zz^iBruxFbI`{Mve+6n{4+Lv5_#aKl`JpeHKVDE`c(jnWW`Fbr&9E$UudzS9UMoC{R zRP04trZ;dsGe(<5DeU2atJ%W`nfjAfm7FhD#5_f!-wq$So^9JAoml+sYh33(tvjBSbAt>m0kx7^HNb<#=J>MzZ9IvvX=yR~~u7>F35o-Lb zuH?t1i*4~D>qp{%mB^%9F%d+av{BE9_sS;KSepbUGE{8->WotwN;b5op*8T&@K5a< z031yCV4?Jl6SBc?g!mA`?(wcb>A=kYBxK&?#cEN$Z7;92P>L_$#>(m)0cM-ME4#;M z<>5_hpihG&Vre62)P~tJp69rlyK&O$Mf74XFV)&k)&vMf{|TV>r+q7Glpx9s zOjiK1p_p%4OENGA_N)p>h{%>V-@$4<2dD2&^!6fPXUZrwHeuXnd^Z3%-ef-lL^6Ki z&O2Dqkxhk1{c`$ARigr>;gBDUP-?sbU~wY`+s-7JPK{6$u)WH2?3o5L`wg(NYy+0< z{Bo;>vB1kgtgpsq1W;E09EaB(m>QX~j-S3}AJ}&M$9LGD!0PeO*+KD{R{aHt>#%l3 zC{-*~>kG!z+9u|ZN~Z%6U(8N9zdz!76PmR6$E)z~z#{};xJgs*!_E-dhjQ!oRO{V< zXj$s9nH~9D+r^~Ban$8NVcp0#D}sywzJ z_W$0r!I6QgKWwHWNASFk`U%ruL(Cjs|46Pm^O7`r;!LwGNWTcc@mg}LH}*eZ7dAJs zzfhG>0sKY94PY`CM`R=NVh)s5e;wkuc=>&BkX=>N!wN<+I_?l!5pgFUvcq$#Xs%aNGOyE z@P^0F?AC8jWF_@0o$_Bn2Xk-BzvAw_lYUQ1m0L4#kK1`NTnStwX>WDtXl3b@b3J|?i5m{Xz`J=}F z>=eZTo8maBZKCBu&%6|}z)Ay(c2^{`s*c4jynqobLPn ze*bu$<2io6|2jBEb6)3lUFUgzKJWMIJ^6uZd*Z1}ZtUb|wOc~&La^pNt-I@8cMCMa zk5L*)FT?i#CeI@;1qggsoYmXcuRF(k5IiM-b%l)vo49dJQ(|yiQA#o16?f2_!O18g zhj^S`eQz9C3RNa`RUA6Fol0a3%jah$7H*QMr; z4Qd04!?r@fuE-;|Y#%ud^Z=@n_YUvOWukD)AcH$2W7g@xvnW|H`>RoBmZ+kc^q_mK zexC!t`ig4f94>3qcB`Z95CeQ2HsmX7VPeQDYhRt-bWch9L-}H$VIBRATTO4Zi5-!OClx_9a(5bOO+|Z&$QNu zb~2E`W-Y9XLUAd>QIFI?I%G1H!^=5_Y?+XHTIh8H_2UlWm&^;T-&r~^ zWKGnLd`yxoO=*ECfN+iA(WoY_oZ#NLAZd4w1A)_0bvX)g>>`|R>)ckITytbbSmD(FoIXt; z9tcS)VHq7GPt9D0$Q|AX=+kJnq$f*&>7!!g4;KGlAY%71V|SL~YIpc;5JYq?ssn8|RbsRk zKRhRxcQa36P^ut>_wP)cq|;aZ3o(=QvuK?gX1(GhC1LgzjQzn;xo5NHkenT7>v^50 z+Ydt=Yx3u^mE$(=MU8%sXs0ZCxjO2ApRjETnGtBV*)7n+(X@^liszF5OpZ*dd*2qg zCcg5lY^&|E7y&OUpXauxvyVGJ3u+`14HI*T@XG-qC9Bl6o; z3stbm3!6AOxW}hR*b4V~g4);9{XPBr#ycE>s$;*%)<;T#w z$&*h~s*{^vDFM5ZkD27mHaLmQu-*OD!$6e=L+nw%j*ky@)EtFNLA@aY7)p1A{Dn+{ z400#UOp8)^y^+jr){q4GXkz}xAw*R9AkXuWvN^FYi*CY`Q3Wda8O~*#c z(h!j#*L(8q4JkNz^o1yeHRx3PeL7HT;e9FU>iRNCpikd9XzcBgnPUB`T9M8Wi#;n07bQ6A>360yui-!9e&Qf`|s$_?TwI^{a4l z^AGVj^fF}o8Qu?5EiJdQ8SEDU@QL$ObG-E6y}+6&suN9JAJK`K^`1; zWJk>M^mX~Y?vb3LUl$lmzO~Wf9g}4tRABOBNLHSiGyK@#>YTufJpKDzlO|arIs-CV zGI)BMJgtj1X0(3M9Rm^hZy?Q($nqv3TE{T7B07IZSkxm-ZV*_iE<01+cXPA_FjTGH zl5NC#@Z;bPs&O|}Bb+41VFFv&b;98sL+|o5&(dXk?9K)VL371zbJ;<#YGZfKZ?c)v zDTRWzXm?^UO`^_<;iB2q;8N#@Tw2qOJyRvq=xm+VeInpaa`}tZXn`{&vrHXm7abG9jEr= zisnAUx>`RjJ4&alwL1O!AOx!-_;=O)vM<$e`;Tsk)!p3bArMQsG zSzN?#Z?Zq$H(+$+1S_yV>YKF7Da>5DyHuCWl66J-L~+2k6rc8Wh8oMM0!#Zp)Rhv# z*zmY5222#S0;4z;hx4~`Fz_e?cBJ@2e~f z18rlA{njr~7CNoT4kOkj?Yh{CK+!B~>ZdnQ)3Y_2SNB!c<)mjbS8pI$J8jKV-{pxP zwLfT%0FfP6vPeU}+MnCZz2jO$?yP%KyQ}J;kxgBSUGQX5wD!lf?pG;~z}$~b*8W-h z(aI}h=V6a+wFb*cGU$~2f0vW!Sq3i0Q;y(Z@0|5-mao!a#!MYhS0!hWtr>S)d%+ znT9oTIx~I4sW?4(KI-Et^_6Q17&@&e6hex^9ey8agUAm}6-nBm?D%=gGl{F2f=AEc zt_g08k6m3f#fiG(C*|7n@P;fm7AHYntaliy5n`bwik+kyX;ILv!@ks-hh+mLb_L@; zWvbZ)9gb~<*U$)@i7@OrLTrMH!s!5Kw|Gj1D8Cw8_GdW${9{Ogz*iWiYwD8|BVGbm z5;B9y!#iYMt@nwHAne8_iQH{U3P}DI?QjpHJn4b9f?5)|i0_?j_4&{YWwqK@5GG`P zYPCo$Q%H>_j+&9Wd@p|JnyxmOy2>WiRVgZ;fnd4>e3>nAzW6UoIa^ion%R2&q`6bc zx>PwQWN4#Weeieb+UVM7^qHZ`a5~BFbGbEthZt6<>nYGSP@4Ln3*tH(D(GbAk{}(a z!H_{V%FJy(ZrLN9I_F+arNPvUgW-vdm4mA4y3tln{Jup(@8uiRu5#a2w_8s2%W3_y3< zZqHeOuhXBfd<8_XKtv^xJ5G~{bOq09SZgo7^E_WvfJA*p*fi%r8%R6CGe((sUQ!h2 z*J86TLZaH|-J#}$2422pXQUEL?mN5GK57oWgxAC|Q(rqZ5{bQwrjeT(WvGe9Ic_<> z<~x7DT(rgzCi2IsrD})Io`e(Bp%WBo6s)I#@=Gn?O$_79fTFzZ>n*cY%)!?j9&AXLI)lAA^Rzp9+ZB}3sJn%eJam{0IsOq_{f{;dxEAP%>fw~UUa1W@F0iMQb^QwL~K)JxPxw7>tqx|9Wx{RK0wxYHhM6^RL9%x zS(c*qbj-i9VLvJ&Y#p&w#8^aot z;GfqBtB}7mqC#54kV&-{!Olk^y|y!`IaLP84d1$^s~u60_zz=r1%0-q=>pxX{< z_i@T8niayLH%?C_QmyMn8ED<3b6jO(D8IMX#?UKD6(vJ&K<#MhNS#7OMV~rp-Ap=e zI(@qN*?Fl~YpmQgc}sAMwbGWf*W$0V;h4vYYIHol3tSP)P$8oE&idfaJ&ke&C6iLe zr1v*Rzh^jaNeY@kO|JNu#=idJV)}U7=b8t`^_ys=V7Z`$!BuI`c*SJY$G!XIcTm<7 z^F2b7st4a)g$D!r+ms*?llG604+zHhWv*zv=r106#6IM3JoUlY+JW6m03$MH-p&{L zm$-PR`s^4}t??y9+9sW;Q9rRRF5*4yAap}wL)$(;oj8U7@J;>W0|AN`e~Xod&L{|( zFQ#ngF_!MTv}b<~@DLXLe06r@BJj(2Anz-^WR3EO$4fXADN;$w7e;@>>WK5}7b#|z z_Kq?WmKVznV-LuEsJ;O%rX`1LXQX=?U8TXze8Sj)mL|(&%NH!V7kZWB%&x*UK0_(c zq<+-=!BM!7(WI71c@9dt4WmS%n&>FtdQT(Bfn;lhBDP%41ebEFW#fKMn*fX4n5d5; z$XOrG%bKdXzn#HEH9Qh8t5~0ebxL)2ez^?n*@eqp0h0#C;13&CBj)%iYow9B%(6@W zQ}4Aqkx0IKrSQYyDpseZvs9j{FXq&w$zeXfxNU8K(M>kXcmLIW5%}+rQBY4Yszw*| zrbgtc`+ArJ^(MHY)CfN=Q>GK9s-}8>&6KX}|3%|{ zkA}7A=eq~FT?RzgOra_|<3Kg&m3C=uj{?5YPaP|?KHE80N?ql37Mw4aI&Sj^zFMzF zzs#NJ_B`X3jdhw;LJyw_&}%Ce{oPTgm@!?L>(S*-kSjYWdC zz=aebbem`E`_pH1doDMqd)j< zmCkx_k-TJ|sGqaztm4_)o3K(hUr7wGy)=8#gRx7<6*oV^;W0<}sj{RM30^~|Hi(uz zN6Kf{$}~O7XS{^VuU%99ebj|$s%qDcWwZiQ=a)67Vbzk-R6%f=xG#vXsUd% z|CV)oK__W-i^@mMK3aiCi9+D{X)Pz2FsduBO>##OcSK8_KfEjplM|#SEb?asbt}&) ztr3fU@>l2~26-4{^8M~m%w05lBa}jg2oAYblK^FAFJ!7>nsq_b|D>tZl`yPpeokAo zrW{9GK`k!|EmoMzyKt|c1XBxCI!ORl35p3hJn~j&oRi#f5hzxmWs;|%uj7=n>%QX9 zg{oENy91KO|I|~LooEPu6@7jG^@%J>S$P#db^Isag{eJfWDS^tFZV!P4b4EloA+CV zkG`d+RkD2A8TjbSN+gic%Bmpa{?`+_q>KgxGca-f?tX9P_=M4}i$(l~9~@46=*O;v z|1RTk`>Ug;Ly{tcaPsT8bh0uDW~AZlbcE8MSY|^9ViRI49{pWN?3SGS<;_VqH&d1_ zFg*uV?#4qnFS$76md`fxrZy>GSdMLvLWhLYF40Pj$p4f9d&G+^%=fyOXoDBEo)H9? z$DMP_+J{#uo4ZDMax_=+#RQj{hbrB(X!8sQDV!(7X-nkw2@e9-PFv*VTbA5XcGe!| zoy>ttj_60$@TmkY(}J3n1{crosCax5@%}>|$^wY$-VYt+XMa*pO5!|7D@{$7foKWV zDT)H@-NhCDhBk^Ayc6lXtE=WSL@Qp+q-j<`s>ZoJ2_*Sx&F}KLFciyDWxK)b34k4lB9klhGe&Rr90kBlxv0;C+o(w2D>l2ZRRXJ~J6+XMH%K&q~&*3kmP z&i6}HIW6<>=B|e_chi~^zZVoGwn#6i2=dOdO%bSBLua43);5S-v$Eiqh?79(M4q0W zNn)DCt0PSO$6!9?-U)r`hu?x@P~R`PD#?1PhHcspRsQ8ENI(%RUME{~K@A6v{ef-)L18fU&*0Qlj!=c^<#%IO1&*EVZfGZvx2b+E=xu zVK?zw?WTy$SD?5jk6v|{GsmF63sS?LHx@&*K28WkLZ=44h2}oXvW;8HpHEOX-|hl^p0I+{Q>H|P0J8qQs0@YD$ zQ+-S#Ipaws`RP)rf`3J%rWy7dHAL?5Lg4Qo%1bKbm{nn44v1v$_vaZ+Y?M@V9bYIY z=vmblMML8owR7G>k64Yc@KbmBj4oq&D3{pA;n&rh#pSsBOpedKr<2p;eglc3n%+f& z+WzQ8psw>@z2Mi*?AXReSsj>4i0hU401e9`V*5Xb$|kNVv!$X(Mz4yE8<+-xe|(yvE?{B-kwH@$gMKoZ+3I z`}#4ATNS+;OU=M}K>>EH{V_HkFMnzB(rAwEvyE@GdPQDA^0C3+*K+VYFhi4CVR`yBAHfYHKph*qWUe1Ex*FNh!yY^$2=%R zgUnHJMTuqd(ps7iVxV<|?eP@bGD^7c&ex|VsIpnmS5y%{xBBSF}1h+gnRtcB3_o)a#ISC#cWsEIJ~06FXIBJrt!q+D)RIPpzcUb=U( zt1IYsVA_P_Xm@E%7duWz-=uuU_#33TkKTpT+o6-88R!eE+;HsO>`SX2ySnM`5JQ{P z?>MHL*G)^I!3l`?2Yg-fwGmhD?j9F=_o z+v@7XZ#v-hqI{lECf=TKCOcfa6fwF9dq+DRla($KJrv^(Glgm##YSqrfsVz-=?8TX zi%-#@Q&v5{i4$Eh@e2@MEFzczHPp#h(1X@%Vo5V>px>31*aXqP86+wf)Z#|Z{nbN8uY>H zAh6UmHK2QMCfKD^4mz=GmfBhCtlFhG_8I)9<13GQH9vQOBT=J~bjvf19^fdRI=3n>z>yLXv?e#R&OhSICpzP2N zANlQ9NQBL=ycelHpQ99t*!|FT>my3KmYh~WuQk~I@a3b`=MGcSk8k11#QNSs9IFxM z@jirFRK~y*vsD}vnRXT*0$BzPhTOJ1%vJ{0BXBP?}@JX`c54wxVX&u$qtnRlGsHYN((TPJ*6_UydTU-6(Q^ zXXVr|g4y2#zYS`rL-DdYv_xuCdf~V#m^mmGj6~t4Y!OfLk$1W3Bw}V{&16(U+_WOS z)rK+IoQp(W78t)_bke^)<2kHoe>FlJ9_9GbJJv^xW5M^&|(8(3>ZO#lt#0+R7v&+ zy7s5}1;g0;n@yD%gUyW;BC=?h0H1H`6R1EHV*yIm=_-NFRs@ZPv^o81yCuR~+OFXK z^XSeIsI{7v-2qgR%p^gzyUxolRaMb7-EiAF%X1zdULG{;1{Il= zKbP8H{YBX9JeehV$_Q`YJ+>Z$*QK_$xTK6_5zT|kJ_o$h;31ZjED*!XePyCsI#0#_ zoPKu@X#hKhx1mkT9?`1thTHa27Gw|lclBdPJi}v` zRm>v`{d(n;7_Q-+r86F5Y?Ig1{!V`t0Zb$3Tnw%I&kmU<7x6{zFh0kPqTfqTXO%aM z2p7|e!mU+wVH06M`qB9EG!5ghuFerC0_s^B^k_xjCW)kUz5*f*exHmI$uEc1n`wb1 zw;sdTJ+fjoJrT0I(^eHzjS*MASeEz}JKrWKLiyKuRRz$R~CWDDUkQF|Gf6v zqCD){wZh-w+VI4aj|%U&d4@Ct3Rh41bRjqyR=Ha~Ew5VqPyKc!xd|9|j+Vz8HE2r) z&r3+`NSQwbzmzti@dHhwU%5wLS;zjI)*{A^-CiCuFF=BP|0ocQv6vaHMhG zs>0Ni&`VS5S2N__?v zm9?#Y%x?t*Hx)z8aRzOlGiHiS)dPdZ*SacwQHR3fz50Z$h)kyX+GwexSw5c4AAEFx z{4g`B;Y@6tAu!+kqO10RqsFCsf5q_KpsUdb-it0fkE(BHFAhxq_4<)0L-K2hC55q# zrwwQvOF8e2p5q$rH@^3~CUZ30(b}rYyMQrQbzp0wra+s#MsfIZ{nAfTv%Zi>{?#YT zi=N}v`8grIXV%Aoey!urvUr^0UHBGne$EByKQo>)Dx7;Xfc#5%TM@ z)u+G`f?b_SRk7s_P8r)fr~VgRX^1cb`N}W(E_nqc&2wC{1NA)PKMDN~%}o}zZHT0^aSt0?Ty`S$7(+wGMfai4$Kho_D!dOcoL`6E$$ zlYmc5R=Qfsh`st$_{LkyjO4G`pU?i5_I=)Z<=%;& z_?GHM(Ir)}w%|-M8;wlRN3&bTyP~^X_tc{toaIg&-f;aB_n)JadiGJ(=#N>|nvEK+ z8N74KdEbr$<>S=6lAgy}?;8Ff@eO%f@%2jU6u~P4H*H9LPkyTyL@RVZI`Q1@-)XpL z7#p}iR%Ps{R?_ZX>DLYX>7}8i6MEPw-uK?vI@oFA7iKkTRPnBlp5p^7W->T(en@54 zMR|Jt@3s4J0;A&$A%F30*tA|xF+c3_X7Kvi-R*gE`L)i*^+&ZSg42uoBvrp-hbOBOcjvU+ zzR!rcg*&QnnXGT57`YImS+3-=nc&Sog%}Lc>M8S2KU5>K&;C9GO5TC@?mL`4VHMMB zzW?`aXut-P-NL6-7M{EYbnZHGRJAK<@TVu=Mly#{#G^0CrQ#j=W5m?W8lf-=({U98 z&vV@8w@lTH)zQ-dHB0M8wj_3^J6-ob+1jGbAy&k6ijl_ULG|^8&Fb3{w>g^rM+>n2 z(bZ*@&+GG8TtDZYEWyZCc`i1&VjnOQqpP<9$C$T57?*yG#N%!=aFPCA3_8cyDa`IZ zapUG^H!geOcdF}U3>|yRxeM}(kMneql{B_~8T|hJy}m!rWO63pv+4CZMZ#9R4;`*@ zZOxyVjvW;@n(fI{X;%}M1ddy~w8JHSgsW}9hvgu&K&H6G(Q(ip1iL#itGAT7ePAn! zQh5Sb8)Nsfc%Q}FPP9End}gtZ_HzZb2I+?Q0mqL(mly56!TCRD5?M5GDt{psS=E_f zq54_$A?oERu;QFO)%*4z)H&SvM9qCl3c-YyHrQ*}ZH}W?<8`b)+&K*Do5Ng^_g}x@ zI&i}2EBwjx+UUh#$xEwj2J&oWxBuidfjH)%Evda(zBxngy}|3jhie_=!y)@1N7EZX zj}we6_3AVD0S5OWMXftVEkN)R(nP89rTZ;v)0J{lQmXhx-@Hf0;EmsFoZb1xI;69# z(;_!Bs;7GNEr#E>t6cv1gPY>2tB=_?7tM9BaHqe@n`T_{9GuCzcLxM%1?Ly{-FlxR zrB;_WKYg@?DLu`3ke3sn+x=+7>5wmiGt511J~zxHZ8U;RO? zXVNUZ`25Tw8=pZ>oKVJ#>DiJ_ej{e=vfwdBXvGif3EAHS7{F{@lHRXtLw3Et$ks=o7(alzlYPuOLFWn9Jl8RBMh zxIC2kx^=_dREB}47wej=qQMJ!>s758zNPvr|)kGiI)< z)Ah{#UEuE708>J~RF`=ukKGqVo2EurRs2Zm*LVype#;ScStdGl|e&ZAMFAM*k1Def+6q7W?qC ziWlxLugi6>jK0Ksv%TFS2~>aS=gJQvAH_$VwrOblR{cszQbQ2KmwlL_Ikrl$)Fml> zO>256+w8o$D8j-;=eMqgIEM_S(9Zhqr@fLH>zaFB<#)M03?}c_m+d=uJL0!az+zjb z!M@5K9rB8H*#&+hKbuvuzgKYV1^1tqUO{?C+3lr_g^ttME{VMQB=U2BV1+9j-)=AI z$tXQ<62J|&obSj|ukOUTeb1%Et#7@qB){T(%@ON7NeBA;Xy+8!nBWKT@%Z}OTYM<` zlkE*9w1obj-B}+N+_<*r_{w)RgJ%jFFa0&IIV^H5 z1e=1(sZHZOOT$*T#=T#t$~|lRxmPu(onr9y*S0rRc;|tat<#=J(CB1ftP}0o?(x<5 z&IC{jXd#9~ZK@ht8_TqsS(_%iQ;Cla{a3m&dw$yWfe_-OK0$>D;^6So@%9&3?#kCGf{$(1LEo zJ_T)Ud3x5LL};t!^K$(hVtqZx&9gHpW;&;P^2USVE&s)_yPYg8I%aDjWeKB;#)u7%qie z>U{G1-6Or@d$wq?&iWqp^UG_wpe+{1@0Yay>&z>!;fcU3z_nW(uuu>6bDFGy3z>v! z(}!&NH>Q^z4ci8N-Z2;X^~oc<4t-RuThC#U7ttMa^>DXCNV?Ud`@u@BoZ0Jf(<;%1 z?OJ!6KZ%^}0f(Qq4L|8U{H2deD?eO$RApOdxU}Tu9V`+it<<<0ViMmN+|_dJlOB^f zef~v3!8O~f6*gJd%LP%o^{_ucU@vz9HVDGXZlSWT)*V?L)7{P zfjfl9(Y5&T`Hb_QGt$>*s{LtsXc)G?dl@g&cG%x6_5ZzM=02zMwXX5C?{X@y6gAh( z3y4*1Dv|IuWLp5d-|33|0oS1YdwL)GiKQSgP_rDKiLBMkV>?);QCwnWi$=*qYb`Xi3fu}&h~u-EpJSx^gnPQxa7&vk$!pb4FbewRs%|P0hf9y)WJxvt8Lm8R+i?8DG2C^f%|I{;Fs82jmQNKWi z=vuU90}ijKzGHT7aMUVUV={s^_!SMJ_{=yoOa1=SgP=BFw~#J#y0|;Sq6nS9sDF;N zRwu-r!DrR6Oi^hfco|`GROZq7Ek4CmK%6KfKSMDEKWxfT_9I6ZSrlr2;iT&TUXTCZ z4;Sh;b1(G2OuP=9P5*rs7%POgf2kPkeQ1=LR05oSEJ^y`EruMg9*o!Q3JfQOOn%^88(O*kZbR;h z-^hi4wCk!xhHiowfHRWNacKNq{AK@G>M)pnh`H9DhDFdr!5yN5dbH4YKa8vF^YJN};`qDEep8T+9s~l8T zw|G96906Bh$!^)$Kj0xVesC;er#;DwA;G{u$s`?=qI?2))&AQ{1>YCXc_LDvwk+<4 zk{H3mL-aWUtN=2RL5A_r`EYM*rdws@WN)vVCu*_`wENYn2dgdD8bWtT+dh+^y+%%u zEcM>LNkEzZV+aCdltKW&HXKM_NaT{XkpM@|YDOM;(X#~kUQseKKJh}eHOlu6d(u09FYv#mi&9yNCzC%ubJpoi6p~7*3A$PBB z7eQ)H0Ps~mJ^hH&!2Fg096(n9geJXIGF=gl^sJfT6t9Oke|-sDl$m#0_MHByc&&kF z>6+^3va~i_{N%Ah^MVnG$<(i6j6ys1<^IEnkf#!50?8q52^=T5j1yG=8QAL5zzNz^ z5IsS0(`URPYzDxs(*bwfP|P$>>I8;-LPlRFr<;C0K@|PGU!A+TJYoS*_+TUCnajp? zaDS-%aa!R$YLvMGtg}#K6_bV^{!mo_Az0`k<*9 z@GSz6F%NE*+MHD!^^R6uCy7)nmDU{@W0Sb$klh-`p+mD;v;v}N0mw)Q@L9P4-w#B9 zeJFOI5m5EnYx0gnziX&!gVuR!wr8y&v-*xh4FFmff_iA*8*>r2pH(IMhIfCS@O#>g z(1V#^QzUTN-&?o@C$46_+Y+1mITvS%@fR- zD9t$u0o$F^I9^bth2TKlhy(~qHp3jm+u&*(WkZ^sky+m_{q&e#)E1qzitOs34aAkFu5Dda$>4rH-7km&7ngmqW-Ik=+#_=?n%64OKcKtk)+r9kRp?(oIsP5v<&!an#Ul5r!w*9cv$>)} zHm05r>17_@nfh}U&nMY?a=&xGeg>IjR%OOIf)b(034&*??Ty{1TAPrCm&pzy%o3+* znf-;Q0N5r#n94jVF52wvMCDxE1-EyrcCD-k(Vp$4p`KtPP+6K)73mNNvgx8|dppjB z=nn=YFYy5l9U3QsZsK!mwdq_$|JC%hUE2+-on?S=m+8BS{C*NJalALwNUxDE>xf~K zEs{Q|IKLTi{pZ=7g&EXA5QDn_DU)$IV3A~LeLrItMsrKbcn%A{04lX}Qy=KwDJ{Nv zQ3z}<$&79Y>=Ymp1<1{x@UTEJOQkRU?TI%|rC9E<1O3`~Yt1{mPd~m&t}UB0$o&R% z`j1`t8usdY^CF6Z^lN*q1@0pt7Q$v;-zP1y=(N1PYQtaUE5~q8{28RV1gc^|Xc&3@ zEO6}lZLEP2FmR69NPuUi2YI5?uhc_HTD&$1K-{P=h9bz(cl*%!pt1W8pZ~!h=o!Mm z2{0)5OxaE&AYe&*VH?vGF#0D(+wSkgMijtRBkUM_rQs`UX#)XqC1rbIFihFyB|>G| z;yAFw${ZiAL@<2fb?%&BN8BtPG#&^|?4S`dH>;lW`S+Lqwh?ua6o3P{dPOPRS z*42T9xWa2l#7VY=TF9os$UPNcF}3|jj}>$Z?=uuvPNAOUMJ1=7NBbB!#4KCPoiMki zNIcfSJ(Y{Y;9upuDKs=UX$JrOp(7yU|f@&j;64teDVm3qNmaCwrzq`E4t zs23Zu?QtC$TXqTFf#Xb@tO*AZ7t(VggMU!{539-b8{O%EW%nc4)h^;NU^{7t%C3b# zT$~dqm;q0c1fxRY4~_O%U@j)5RsbM!jVrA)MLSJ9!10lc5jSH;IqUVnfKwjGOpJ84 zn%n}D{O&;=@t@V#Mjw7#m?{x&|E(2jQMRZ>Q!cfxYm`Od@>Ir>5Fc7|9{|Aqe96Y@ z5q3fg)@C{~RpV1ozjmEE7IC_;;tPZN1W(kw0dI*_<*R*_2gmwni#QSKV#dBMF=+3- z4rWDtejn_F)(K^uPk~At$1+rLTLN(-iSNr<`$Z4&&zb5}l-H=5o30tYIXxJH)4*sm zxXeYfsC#1t8Kh!Dn#Q(ezsbmA9isVEMrG|!0y;!Aa;!D8Ck*$y=wd>k7h6d{1KG3% zFjHd^jJjIa;S#Ig%((oFekJAi1iTh%$3fZ_i}UEEO1c!w$qnLE7>JvQ4)vF}jisTZ zO>v?Q>MzC#;GCOXTQyRGtI@L2lpmRi%Y8uHOVqvjiNCca{Vqeh!af2Z=-rYKL5x@m!@!x}; zF7GmOJ|SS3Igvzt~6hDl}Rky zsDhf`?A7Y<;FJYr1cZ-i&goa`&8Y2|fH!oDC(VcKUOmHzvZH6TG2v&vYvhHESrFXl zd(QMItXLiAK)0~a&#{j2+mQCt$9YrSVhJ1kV5MZf7nt(Tma`^C6F4NmGM95PMMeRl z+?p**D@9ta$7C1-3AZ-nRO|9d6p7Bm)yJoqm6}ow8yFGw=L{e+k?c-09h4oHQbmzS zbU8}<-Uw15VL)|2m|QcL=QjqCin^!f!We2^$t3Yui&z9@O%lq1>{GDeC|&s0KbNZD z&)}ejAns(lQJ~&}6_56#;rCQtB9*yH=oD3CJMRd$I2=ibkG)*8!RR(Pd zhbKwtE!^^5Ia*cm0dZ!~Yt3PydPwOoXX%f5jaq#J$i%Ye?+&_m;*a&vWzoz|r`@IR zyP1EK_H4_()J*E8>{|}Q6gfCuQUN|-|)V(NT(EA478(@m9x+raB`(ZA<_Z zgPqC$z=9Ye*7Y>9u;|s}MTvQkU8fRYrJR5W<-L~e@#)`7{I2n}GvVT_EdQFfMPKSR zY-JZLaS7FN1CIYJD1k78ClDT>xMZ+}KRRW^OO+#YgYdcauQp}5PGzoWYnHo&s1mDP zE0>&0@;-bG{~%5HqAE>AlVv9ADdHz;q0GZ~o*Mx}Ejq)jgr@v)P^kh`9gh$O!pc(9 z@%+kN8qsVS_p0BbNzpP7>RFSx(wKWY(msD;#{mh+7xC7cYKQ|S87fPQ)mNHim=7BH zQBV$<`#xpWA<>xrIaPBUe2O6_xT&RpGU~qK!f9&I=RkahK7f4U)PY+EUMrhIwsT3L zCUiup61>l=a^sbds#zL8Udg;Sj<|uP#8#u7T51*&voOD6GDwnS8F2B2x z?&3N)2KsC#vG+b5IbD(k7jV#aKeO~%`G`qm(e-jn&S6i)k#UmCHEbCjmG(ZYg=4YCd&V+{S?I0|#6E6&xoAg6yI>%5z$W-jo%4;vx=2 zXhVIaRy|%Uu=#T^{^0t7aVgHEEGR_X8()1ddx^LN-@)IVW$S%2X?PBaK{;=^hOahh zPOL$oPhSm2a3Gd3x*9}Z4N_y%bQ8M8TU)l=4oV5(Ym}u0k{D%n9l_rd=2}?nR;D{N zaFYW@r`47n6X{efB=w!#4u9M9i_0_|l{HvWBkF*|O$9@`wb^@f<~b~G>5z=POwx)y zYi?K)_S%@vO6bX-MMA$ow6T@>{a@#>rfXfg!I`2@vvnfoY-8`9xz4c?pD_LXLmT}#f1f}BhrFWZs zJ^KNE9X{EbmTphvrdxpD$q8j5RdWVbAiOa7Xj6DS)O%6b!}$E$E;>&17WNIKSD?5I z!j_Dk&}5Hf8>4F1R$@JDnqoPE@V6UtvxPOY#k|29r1F&mZbxk;D@3`4AyzT6eEvW} zZzdSKmoWMsQ_+ev^sNKig>XOCYg9;dK&SRI{|!sJ2jx zx3j)*#Q8}kCtJi7+!{*)wB0E0O8t>=U?;5>MCAH){9WdUvz-7Dk4Xxi5hPM|?rL&R zK0#isP(Gba3tep6XbN4eFMNLecW_+&VM>dI`Hfpks4|!M_rHgA2TSc&eiW4rSem>a z^Zh;0HBsnocfm-$v0;}!^~a%{spjIHM?~3qHgAke94n27jxdF+(o+`@-<4- zsbmN*#oBpR)O>@*T~4@_<((GF#;1+r&t;@1d>ng4bN)d46GT8bP{=p)4R}R>BA3M? z-C9feK@Jr1cJ>;6gA#G4Qw#Dbd4leN6Co49dlWT~!=yLwfye z{8lLJxgcY%YpLS__H7iKpCE%`{rS!858A!9&6u#i9f_I3mJvm#3*xpP2J&c7BeVp< zxt}&#(kW}px@)|Nj=(8Uu}}9Bv!H`G()CAutjPg?2ZlPa)nZ&QA={tFJ^LA*-h}HD zc4?On(mSF%=g?Q=2Ft$Za5AcJbE5U}jn7@9@G7rr0&I%&H`FI>zpT`sPOw00Oh>i; z%t{0vW$EsOtyaiUsS36TLCaBl86U9CAej9IrtEfbf>|Gd!daVl$hv^z3 z0?dT0ch-57h0TrL>KgP1)-bU@{`wrK75SUSG;7Mr+|c+|&*Tf_&a zlWQATA1YWzu>Im%Ss{egD>-OtWa+nK;%GfqU(GXn7OCok#Rnfeehk;Iy1P4M#W!Sk zzG27gsxkH;hRS-1wfoKM6z?_+x7woo=OA`QsA@`*K- z=43iqg<akL9vkBCd^s1(OInrAJk+?_vcdKaRC5P)Ga zlkgVw&d!<2RYPL_=GE(GmRaA?IU^%Qu5xQ2G9k1`xfeKSJsPdXlbFobBaJfKWMo$h zP3?hddt7{25FIMh3jO&&;ZBu>E3Jm=OR`ZE%Vfp>`w$McP{CctgTe?TS%^wosI1g) zmPUil%c#xs$`fAcx+|%L-6j?dT(t7-Xi^G9g%)9P_~p6^Idi@sec^5;m^X=O>3B%9 z6U$jWc$x8~pIU6ZK>51)&_=SV`AlIl)Ns9QxGbvvB38|gwp&0riS8Opu&cYf?;{|4 zp1TwcXJ?`C213@l-0u*s))#uVKG;ZvP3m!ay6*7VfTkJ6^G0fOaG&*I3_3z6?dE|XM{7c_Bnei&IcN<#=jRiVWIGh#|6 z=6+76(RV*J_yqdQY6zTucqDnliB-(Rr)G=O%xITY-g3v&);1RX9I3zI$%t@4C*9} zRv}>~bMe3lyZ*7ST+*-c+s^7Hye^5!2(jUVDucr z1B_@o@0dU~>PbO7=cEs2ay2@D2$c{7MXw_w(~_#o6TgJAhV;4S&N-~SR^RSIBGebL zdd;D;!-Dtlu=UAzd-CZ-l9O+dX5@o=|=W>$>Ya z*O-8+Cfab-X+GGr{~<}!zerpM$lUp6Bejj!WK&-w)!9+r;U?!mkp1=NZUO(uknjSa z7U@D8wj12O~&|!IdF*tZAE(c0D zCL66Pch2Hi)5g|3@a!hpXlD4>Q>cjq>#hXZ_x~yC+T)pC!}yv@Y&aXa*0PaXX-X*6 zG51R+6kW7(IA&N%cvHQDW+2x*R&3LPVXVv~;6fk`$fuyuYo_ z*?;@I+w(r}^SsZy-=63DKHm-}Jb&xJNJ-UsdI>MnWF!%QrrwhqiNiG% zm-!@BUC9;U%AkTT#*YSCsdhxEs^y&9xP;5ThrXHbO4p&h9Sa~u^R@M9dpCbBtTqoO zMamlmoD^tCw&M30S)+sV{I#7o|42?6BsXi_CqHM)Pmv7jAlG|x?=bX6T*}*^EZ(5T zh&>mZT!8Ar6zV|#-pVT7O}L%M+BFdl5IxBQ_CYIdl^Nf8c9NO8H7_7?#;VQ6wlW6bDZ}XVYC8!FO!s76cNYY=R8Svg^!J_p%TBOg$KE0+t!mNx z@j6RiT!)BYq#yE;_KLi&(qkc#9-pSwFglD%3CEIRrEx7@nQi8@mWl^mO?My58F$zvhfjy};W zc0b8_7R(xe3qQuJ9(b`-s>h8PA^QI#&x#53d&{gdIR`gd7Z3uJo3Y%-Sz8R z3oj@`d+>)8JThX0OD%Wbsg3wYjyJWNo90%^8tQYdL)k7;V}V}Aof%6H4n=VcNRSU? z_0=L{d=!CedXk=V@!}2hLYE|Z$ct-IAK!=vP2A2;@*LLWX;+_yR=`E%51A>pB z-V~Q<0?HcU-72TO)mKf`Zs|LliiiNzvuV#r`9RZlY@xNFfX*>@U4O;ESYMAOJS!$* zK51D2_O#cjcSKdZ07Z{9vk1Hgs1piHXwULRGJIWBjXoB~Y#I zmn8~`r$x3W7KZu})bwcn(kMfWYDKUXooRF8*liFoC1zFohh4%xcLj;3^SZ@Pz5GIZ z#|9e~f}pJK%dPKSyK~Ec--Nvdf=R7FhBf(Q_#m5;^DD^M3bnXDAsU)4K2y;g)eG%L ztoMSVI=T+QM%Fom^{j`FTgQVXZQ?`XRFI!Ni#h0yH>a&8vlEmFutL%Esxj<}678%D zqqk4;75ToSC|U~VzB`4zO=oC=7VGdMLmMzHIuRRv(BQfI zkP=fC5jae+pa^ZU`}?l0g+0eeLBZ`d*x`dE%3xafN#!rr#MZh8ofh@3%X^k79f0gq zs`{+20t=;5)bn(^dT*JM6{rOxcuAF9#dKuMfmyxWTPra{DR?9Sc_bkungSl-+9PM# zJM=k)VxsTq!t(BQa-M7gj}+I!ZTr&N_WX%QXmPVVsc6(p$}&_0i9QHssU@->Do14? z*nfF5bmT>$dIxQb(drskrEkB3)q5OaChKve#Q5qaoIH`MJK{2ImYp2&f<&%buugq1NC#d>bD=Z6}@qe T?XrE0gO|T|pjV|w#G(HHz@)&x literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/cli.md b/versioned_docs/version-0.45/develop/advanced-concepts/cli.md new file mode 100644 index 000000000..36a225cb3 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/cli.md @@ -0,0 +1,156 @@ + + +# Command-Line Interface + +This document describes how commmand-line interface (CLI) works on a high-level, for an [**application**](../basics/app-anatomy.md). A separate document for implementing a CLI for an SDK [**module**](../building-modules/intro.md) can be found [here](../building-modules/module-interfaces.md#cli). {synopsis} + +## Command-Line Interface + +### Example Command + +There is no set way to create a CLI, but SDK modules typically use the [Cobra Library](https://github.com/spf13/cobra). Building a CLI with Cobra entails defining commands, arguments, and flags. [**Commands**](#commands) understand the actions users wish to take, such as `tx` for creating a transaction and `query` for querying the application. Each command can also have nested subcommands, necessary for naming the specific transaction type. Users also supply **Arguments**, such as account numbers to send coins to, and [**Flags**](#flags) to modify various aspects of the commands, such as gas prices or which node to broadcast to. + +Here is an example of a command a user might enter to interact with the simapp CLI `simd` in order to send some tokens: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --gas auto --gas-prices +``` + +The first four strings specify the command: + +- The root command for the entire application `simd`. +- The subcommand `tx`, which contains all commands that let users create transactions. +- The subcommand `bank` to indicate which module to route the command to ([`x/bank`](../../x/bank/spec/README.md) module in this case). +- The type of transaction `send`. + +The next two strings are arguments: the `from_address` the user wishes to send from, the `to_address` of the recipient, and the `amount` they want to send. Finally, the last few strings of the command are optional flags to indicate how much the user is willing to pay in fees (calculated using the amount of gas used to execute the transaction and the gas prices provided by the user). + +The CLI interacts with a [node](../core/node.md) to handle this command. The interface itself is defined in a `main.go` file. + +### Building the CLI + +The `main.go` file needs to have a `main()` function that creates a root command, to which all the application commands will be added as subcommands. The root command additionally handles: + +- **setting configurations** by reading in configuration files (e.g. the sdk config file). +- **adding any flags** to it, such as `--chain-id`. +- **instantiating the `codec`** by calling the application's `MakeCodec()` function (called `MakeTestEncodingConfig` in `simapp`). The [`codec`](../core/encoding.md) is used to encode and decode data structures for the application - stores can only persist `[]byte`s so the developer must define a serialization format for their data structures or use the default, Protobuf. +- **adding subcommand** for all the possible user interactions, including [transaction commands](#transaction-commands) and [query commands](#query-commands). + +The `main()` function finally creates an executor and [execute](https://godoc.org/github.com/spf13/cobra#Command.Execute) the root command. See an example of `main()` function from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/simd/main.go#L12-L24 + +The rest of the document will detail what needs to be implemented for each step and include smaller portions of code from the `simapp` CLI files. + +## Adding Commands to the CLI + +Every application CLI first constructs a root command, then adds functionality by aggregating subcommands (often with further nested subcommands) using `rootCmd.AddCommand()`. The bulk of an application's unique capabilities lies in its transaction and query commands, called `TxCmd` and `QueryCmd` respectively. + +### Root Command + +The root command (called `rootCmd`) is what the user first types into the command line to indicate which application they wish to interact with. The string used to invoke the command (the "Use" field) is typically the name of the application suffixed with `-d`, e.g. `simd` or `gaiad`. The root command typically includes the following commands to support basic functionality in the application. + +- **Status** command from the SDK rpc client tools, which prints information about the status of the connected [`Node`](../core/node.md). The Status of a node includes `NodeInfo`,`SyncInfo` and `ValidatorInfo`. +- **Keys** [commands](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/client/keys) from the SDK client tools, which includes a collection of subcommands for using the key functions in the SDK crypto tools, including adding a new key and saving it to the keyring, listing all public keys stored in the keyring, and deleting a key. For example, users can type `simd keys add ` to add a new key and save an encrypted copy to the keyring, using the flag `--recover` to recover a private key from a seed phrase or the flag `--multisig` to group multiple keys together to create a multisig key. For full details on the `add` key command, see the code [here](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/client/keys/add.go). For more details about usage of `--keyring-backend` for storage of key credentials look at the [keyring docs](../run-node/keyring.md). +- **Server** commands from the SDK server package. These commands are responsible for providing the mechanisms necessary to start an ABCI Tendermint application and provides the CLI framework (based on [cobra](github.com/spf13/cobra)) necessary to fully bootstrap an application. The package exposes two core functions: `StartCmd` and `ExportCmd` which creates commands to start the application and export state respectively. Click [here](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/server) to learn more. +- [**Transaction**](#transaction-commands) commands. +- [**Query**](#query-commands) commands. + +Next is an example `rootCmd` function from the `simapp` application. It instantiates the root command, adds a [_persistent_ flag](#flags) and `PreRun` function to be run before every execution, and adds all of the necessary subcommands. + ++++ https://github.com/cosmos/cosmos-sdk/blob/4eea4cafd3b8b1c2cd493886db524500c9dd745c/simapp/simd/cmd/root.go#L37-L150 + +`rootCmd` has a function called `initAppConfig()` which is useful for setting the application's custom configs. +By default app uses Tendermint app config template from SDK, which can be over-written via `initAppConfig()`. +Here's an example code to override default `app.toml` template. + ++++ https://github.com/cosmos/cosmos-sdk/blob/4eea4cafd3b8b1c2cd493886db524500c9dd745c/simapp/simd/cmd/root.go#L84-L117 + +The `initAppConfig()` also allows overriding the default SDK's [server config](https://github.com/cosmos/cosmos-sdk/blob/4eea4cafd3b8b1c2cd493886db524500c9dd745c/server/config/config.go#L199). One example is the `min-gas-prices` config, which defines the minimum gas prices a validator is willing to accept for processing a transaction. By default, the SDK sets this parameter to `""` (empty string), which forces all validators to tweak their own `app.toml` and set a non-empty value, or else the node will halt on startup. This might not be the best UX for validators, so the chain developer can set a default `app.toml` value for validators inside this `initAppConfig()` function. + ++++ https://github.com/cosmos/cosmos-sdk/blob/aa9b055ddb46aacd4737335a92d0b8a82d577341/simapp/simd/cmd/root.go#L101-L116 + +The root-level `status` and `keys` subcommands are common across most applications and do not interact with application state. The bulk of an application's functionality - what users can actually _do_ with it - is enabled by its `tx` and `query` commands. + +### Transaction Commands + +[Transactions](./transactions.md) are objects wrapping [`Msg`s](../building-modules/messages-and-queries.md#messages) that trigger state changes. To enable the creation of transactions using the CLI interface, a function `txCmd` is generally added to the `rootCmd`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/simd/cmd/root.go#L86-L92 + +This `txCmd` function adds all the transaction available to end-users for the application. This typically includes: + +- **Sign command** from the [`auth`](../../x/auth/spec/README.md) module that signs messages in a transaction. To enable multisig, add the `auth` module's `MultiSign` command. Since every transaction requires some sort of signature in order to be valid, the signing command is necessary for every application. +- **Broadcast command** from the SDK client tools, to broadcast transactions. +- **All [module transaction commands](../building-modules/module-interfaces.md#transaction-commands)** the application is dependent on, retrieved by using the [basic module manager's](../building-modules/module-manager.md#basic-manager) `AddTxCommands()` function. + +Here is an example of a `txCmd` aggregating these subcommands from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/simd/cmd/root.go#L123-L149 + +### Query Commands + +[**Queries**](../building-modules/messages-and-queries.md#queries) are objects that allow users to retrieve information about the application's state. To enable the creation of transactions using the CLI interface, a function `txCmd` is generally added to the `rootCmd`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/simd/cmd/root.go#L86-L92 + +This `queryCmd` function adds all the queries available to end-users for the application. This typically includes: + +- **QueryTx** and/or other transaction query commands] from the `auth` module which allow the user to search for a transaction by inputting its hash, a list of tags, or a block height. These queries allow users to see if transactions have been included in a block. +- **Account command** from the `auth` module, which displays the state (e.g. account balance) of an account given an address. +- **Validator command** from the SDK rpc client tools, which displays the validator set of a given height. +- **Block command** from the SDK rpc client tools, which displays the block data for a given height. +- **All [module query commands](../building-modules/module-interfaces.md#query-commands)** the application is dependent on, retrieved by using the [basic module manager's](../building-modules/module-manager.md#basic-manager) `AddQueryCommands()` function. + +Here is an example of a `queryCmd` aggregating subcommands from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/simd/cmd/root.go#L99-L121 + +## Flags + +Flags are used to modify commands; developers can include them in a `flags.go` file with their CLI. Users can explicitly include them in commands or pre-configure them by inside their [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). Commonly pre-configured flags include the `--node` to connect to and `--chain-id` of the blockchain the user wishes to interact with. + +A _persistent_ flag (as opposed to a _local_ flag) added to a command transcends all of its children: subcommands will inherit the configured values for these flags. Additionally, all flags have default values when they are added to commands; some toggle an option off but others are empty values that the user needs to override to create valid commands. A flag can be explicitly marked as _required_ so that an error is automatically thrown if the user does not provide a value, but it is also acceptable to handle unexpected missing flags differently. + +Flags are added to commands directly (generally in the [module's CLI file](../building-modules/module-interfaces.md#flags) where module commands are defined) and no flag except for the `rootCmd` persistent flags has to be added at application level. It is common to add a _persistent_ flag for `--chain-id`, the unique identifier of the blockchain the application pertains to, to the root command. Adding this flag can be done in the `main()` function. Adding this flag makes sense as the chain ID should not be changing across commands in this application CLI. Here is an example from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/simd/cmd/root.go#L118-L119 + +## Environment variables + +Each flag is bound to it's respecteve named environment variable. Then name of the environment variable consist of two parts - capital case `basename` followed by flag name of the flag. `-` must be substituted with `_`. For example flag `--home` for application with basename `GAIA` is bound to `GAIA_HOME`. It allows to reduce amount of flags typed for routine operations. For example instead of: + +```sh +gaia --home=./ --node= --chain-id="testchain-1" --keyring-backend=test tx ... --from= +``` + +this will be more convinient: + +```sh +# define env variables in .env, .envrc etc +GAIA_HOME= +GAIA_NODE= +GAIA_CHAIN_ID="testchain-1" +GAIA_KEYRING_BACKEND="test" + +# and later just use +gaia tx ... --from= +``` + +## Configurations + +It is vital that the root command of an application uses `PersistentPreRun()` cobra command property for executing the command, so all child commands have access to the server and client contexts. These contexts are set as their default values initially and maybe modified, scoped to the command, in their respective `PersistentPreRun()` functions. Note that the `client.Context` is typically pre-populated with "default" values that may be useful for all commands to inherit and override if necessary. + +Here is an example of an `PersistentPreRun()` function from `simapp``: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/simd/cmd/root.go#L54-L60 + +The `SetCmdClientContextHandler` call reads persistent flags via `ReadPersistentCommandFlags` which creates a `client.Context` and sets that on the root command's `Context`. + +The `InterceptConfigsPreRunHandler` call creates a viper literal, default `server.Context`, and a logger and sets that on the root command's `Context`. The `server.Context` will be modified and saved to disk via the internal `interceptConfigs` call, which either reads or creates a Tendermint configuration based on the home path provided. In addition, `interceptConfigs` also reads and loads the application configuration, `app.toml`, and binds that to the `server.Context` viper literal. This is vital so the application can get access to not only the CLI flags, but also to the application configuration values provided by this file. + +## Next {hide} + +Learn about [events](./events.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/context.md b/versioned_docs/version-0.45/develop/advanced-concepts/context.md new file mode 100644 index 000000000..1fc74bd8a --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/context.md @@ -0,0 +1,104 @@ + + +# Context + +The `context` is a data structure intended to be passed from function to function that carries information about the current state of the application. It provides an access to a branched storage (a safe branch of the entire state) as well as useful objects and information like `gasMeter`, `block height`, `consensus parameters` and more. {synopsis} + +## Pre-requisites Readings + +- [Anatomy of an SDK Application](../basics/app-anatomy.md) {prereq} +- [Lifecycle of a Transaction](../basics/tx-lifecycle.md) {prereq} + +## Context Definition + +The SDK `Context` is a custom data structure that contains Go's stdlib [`context`](https://golang.org/pkg/context) as its base, and has many additional types within its definition that are specific to the Cosmos SDK. The `Context` is integral to transaction processing in that it allows modules to easily access their respective [store](./store.md#base-layer-kvstores) in the [`multistore`](./store.md#multistore) and retrieve transactional context such as the block header and gas meter. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/types/context.go#L16-L39 + +- **Context:** The base type is a Go [Context](https://golang.org/pkg/context), which is explained further in the [Go Context Package](#go-context-package) section below. +- **Multistore:** Every application's `BaseApp` contains a [`CommitMultiStore`](./store.md#multistore) which is provided when a `Context` is created. Calling the `KVStore()` and `TransientStore()` methods allows modules to fetch their respective [`KVStore`](./store.md#base-layer-kvstores) using their unique `StoreKey`. +- **ABCI Header:** The [header](https://tendermint.com/docs/spec/abci/abci.html#header) is an ABCI type. It carries important information about the state of the blockchain, such as block height and proposer of the current block. +- **Chain ID:** The unique identification number of the blockchain a block pertains to. +- **Transaction Bytes:** The `[]byte` representation of a transaction being processed using the context. Every transaction is processed by various parts of the SDK and consensus engine (e.g. Tendermint) throughout its [lifecycle](../basics/tx-lifecycle.md), some of which to not have any understanding of transaction types. Thus, transactions are marshaled into the generic `[]byte` type using some kind of [encoding format](./encoding.md) such as [Amino](./encoding.md). +- **Logger:** A `logger` from the Tendermint libraries. Learn more about logs [here](https://tendermint.com/docs/tendermint-core/how-to-read-logs.html#how-to-read-logs). Modules call this method to create their own unique module-specific logger. +- **VoteInfo:** A list of the ABCI type [`VoteInfo`](https://tendermint.com/docs/spec/abci/abci.html#voteinfo), which includes the name of a validator and a boolean indicating whether they have signed the block. +- **Gas Meters:** Specifically, a [`gasMeter`](../basics/gas-fees.md#main-gas-meter) for the transaction currently being processed using the context and a [`blockGasMeter`](../basics/gas-fees.md#block-gas-meter) for the entire block it belongs to. Users specify how much in fees they wish to pay for the execution of their transaction; these gas meters keep track of how much [gas](../basics/gas-fees.md) has been used in the transaction or block so far. If the gas meter runs out, execution halts. +- **CheckTx Mode:** A boolean value indicating whether a transaction should be processed in `CheckTx` or `DeliverTx` mode. +- **Min Gas Price:** The minimum [gas](../basics/gas-fees.md) price a node is willing to take in order to include a transaction in its block. This price is a local value configured by each node individually, and should therefore **not be used in any functions used in sequences leading to state-transitions**. +- **Consensus Params:** The ABCI type [Consensus Parameters](https://tendermint.com/docs/spec/abci/apps.html#consensus-parameters), which specify certain limits for the blockchain, such as maximum gas for a block. +- **Event Manager:** The event manager allows any caller with access to a `Context` to emit [`Events`](./events.md). Modules may define module specific + `Events` by defining various `Types` and `Attributes` or use the common definitions found in `types/`. Clients can subscribe or query for these `Events`. These `Events` are collected throughout `DeliverTx`, `BeginBlock`, and `EndBlock` and are returned to Tendermint for indexing. For example: + +```go +ctx.EventManager().EmitEvent(sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory)), +) +``` + +## Go Context Package + +A basic `Context` is defined in the [Golang Context Package](https://golang.org/pkg/context). A `Context` +is an immutable data structure that carries request-scoped data across APIs and processes. Contexts +are also designed to enable concurrency and to be used in goroutines. + +Contexts are intended to be **immutable**; they should never be edited. Instead, the convention is +to create a child context from its parent using a `With` function. For example: + +```go +childCtx = parentCtx.WithBlockHeader(header) +``` + +The [Golang Context Package](https://golang.org/pkg/context) documentation instructs developers to +explicitly pass a context `ctx` as the first argument of a process. + +## Store branching + +The `Context` contains a `MultiStore`, which allows for branchinig and caching functionality using `CacheMultiStore` +(queries in `CacheMultiStore` are cached to avoid future round trips). +Each `KVStore` is branched in a safe and isolated ephemeral storage. Processes are free to write changes to +the `CacheMultiStore`. If a state-transition sequence is performed without issue, the store branch can +be committed to the underlying store at the end of the sequence or disregard them if something +goes wrong. The pattern of usage for a Context is as follows: + +1. A process receives a Context `ctx` from its parent process, which provides information needed to + perform the process. +2. The `ctx.ms` is a **branched store**, i.e. a branch of the [multistore](./store.md#multistore) is made so that the process can make changes to the state as it executes, without changing the original`ctx.ms`. This is useful to protect the underlying multistore in case the changes need to be reverted at some point in the execution. +3. The process may read and write from `ctx` as it is executing. It may call a subprocess and pass + `ctx` to it as needed. +4. When a subprocess returns, it checks if the result is a success or failure. If a failure, nothing + needs to be done - the branch `ctx` is simply discarded. If successful, the changes made to + the `CacheMultiStore` can be committed to the original `ctx.ms` via `Write()`. + +For example, here is a snippet from the [`runTx`](./baseapp.md#runtx-and-runmsgs) function in +[`baseapp`](./baseapp.md): + +```go +runMsgCtx, msCache := app.cacheTxContext(ctx, txBytes) +result = app.runMsgs(runMsgCtx, msgs, mode) +result.GasWanted = gasWanted + +if mode != runTxModeDeliver { + return result +} + +if result.IsOK() { + msCache.Write() +} +``` + +Here is the process: + +1. Prior to calling `runMsgs` on the message(s) in the transaction, it uses `app.cacheTxContext()` + to branch and cache the context and multistore. +2. `runMsgCtx` - the context with branched store, is used in `runMsgs` to return a result. +3. If the process is running in [`checkTxMode`](./baseapp.md#checktx), there is no need to write the + changes - the result is returned immediately. +4. If the process is running in [`deliverTxMode`](./baseapp.md#delivertx) and the result indicates + a successful run over all the messages, the branched multistore is written back to the original. + +## Next {hide} + +Learn about the [node client](./node.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/encoding.md b/versioned_docs/version-0.45/develop/advanced-concepts/encoding.md new file mode 100644 index 000000000..084cffada --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/encoding.md @@ -0,0 +1,261 @@ + + +# Encoding + +While encoding in the SDK used to be mainly handled by `go-amino` codec, the SDK is moving towards using `gogoprotobuf` for both state and client-side encoding. {synopsis} + +## Pre-requisite Readings + +- [Anatomy of an SDK application](../basics/app-anatomy.md) {prereq} + +## Encoding + +The Cosmos SDK utilizes two binary wire encoding protocols, [Amino](https://github.com/tendermint/go-amino/) which is an object encoding specification and [Protocol Buffers](https://developers.google.com/protocol-buffers), a subset of Proto3 with an extension for +interface support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) +for more information on Proto3, which Amino is largely compatible with (but not with Proto2). + +Due to Amino having significant performance drawbacks, being reflection-based, and +not having any meaningful cross-language/client support, Protocol Buffers, specifically +[gogoprotobuf](https://github.com/gogo/protobuf/), is being used in place of Amino. +Note, this process of using Protocol Buffers over Amino is still an ongoing process. + +Binary wire encoding of types in the Cosmos SDK can be broken down into two main +categories, client encoding and store encoding. Client encoding mainly revolves +around transaction processing and signing, whereas store encoding revolves around +types used in state-machine transitions and what is ultimately stored in the Merkle +tree. + +For store encoding, protobuf definitions can exist for any type and will typically +have an Amino-based "intermediary" type. Specifically, the protobuf-based type +definition is used for serialization and persistence, whereas the Amino-based type +is used for business logic in the state-machine where they may converted back-n-forth. +Note, the Amino-based types may slowly be phased-out in the future so developers +should take note to use the protobuf message definitions where possible. + +In the `codec` package, there exists two core interfaces, `Marshaler` and `ProtoMarshaler`, +where the former encapsulates the current Amino interface except it operates on +types implementing the latter instead of generic `interface{}` types. + +In addition, there exists two implementations of `Marshaler`. The first being +`AminoCodec`, where both binary and JSON serialization is handled via Amino. The +second being `ProtoCodec`, where both binary and JSON serialization is handled +via Protobuf. + +This means that modules may use Amino or Protobuf encoding but the types must +implement `ProtoMarshaler`. If modules wish to avoid implementing this interface +for their types, they may use an Amino codec directly. + +### Amino + +Every module uses an Amino codec to serialize types and interfaces. This codec typically +has types and interfaces registered in that module's domain only (e.g. messages), +but there are exceptions like `x/gov`. Each module exposes a `RegisterLegacyAminoCodec` function +that allows a user to provide a codec and have all the types registered. An application +will call this method for each necessary module. + +Where there is no protobuf-based type definition for a module (see below), Amino +is used to encode and decode raw wire bytes to the concrete type or interface: + +```go +bz := keeper.cdc.MustMarshal(typeOrInterface) +keeper.cdc.MustUnmarshal(bz, &typeOrInterface) +``` + +Note, there are length-prefixed variants of the above functionality and this is +typically used for when the data needs to be streamed or grouped together +(e.g. `ResponseDeliverTx.Data`) + +### Gogoproto + +Modules are encouraged to utilize Protobuf encoding for their respective types. In the SDK, we use the [Gogoproto](https://github.com/gogo/protobuf) specific implementation of the Protobuf spec that offers speed and DX improvements compared to the official [Google protobuf implementation](https://github.com/protocolbuffers/protobuf). + +### Guidelines for protobuf message definitions + +In addition to [following official Protocol Buffer guidelines](https://developers.google.com/protocol-buffers/docs/proto3#simple), we recommend using these annotations in .proto files when dealing with interfaces: + +- use `cosmos_proto.accepts_interface` to annote fields that accept interfaces +- pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` +- annotate interface implementations with `cosmos_proto.implements_interface` +- pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` + +### Transaction Encoding + +Another important use of Protobuf is the encoding and decoding of +[transactions](./transactions.md). Transactions are defined by the application or +the SDK but are then passed to the underlying consensus engine to be relayed to +other peers. Since the underlying consensus engine is agnostic to the application, +the consensus engine accepts only transactions in the form of raw bytes. + +- The `TxEncoder` object performs the encoding. +- The `TxDecoder` object performs the decoding. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc4/types/tx_msg.go#L83-L87 + +A standard implementation of both these objects can be found in the [`auth` module](../../x/auth/spec/README.md): + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc4/x/auth/tx/decoder.go + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc4/x/auth/tx/encoder.go + +See [ADR-020](../architecture/adr-020-protobuf-transaction-encoding.md) for details of how a transaction is encoded. + +### Interface Encoding and Usage of `Any` + +The Protobuf DSL is strongly typed, which can make inserting variable-typed fields difficult. Imagine we want to create a `Profile` protobuf message that serves as a wrapper over [an account](../basics/accounts.md): + +```proto +message Profile { + // account is the account associated to a profile. + cosmos.auth.v1beta1.BaseAccount account = 1; + // bio is a short description of the account. + string bio = 4; +} +``` + +In this `Profile` example, we hardcoded `account` as a `BaseAccount`. However, there are several other types of [user accounts related to vesting](../../x/auth/spec/05_vesting.md), such as `BaseVestingAccount` or `ContinuousVestingAccount`. All of these accounts are different, but they all implement the `AccountI` interface. How would you create a `Profile` that allows all these types of accounts with an `account` field that accepts an `AccountI` interface? + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/x/auth/types/account.go#L307-L330 + +In [ADR-019](../architecture/adr-019-protobuf-state-encoding.md), it has been decided to use [`Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto)s to encode interfaces in protobuf. An `Any` contains an arbitrary serialized message as bytes, along with a URL that acts as a globally unique identifier for and resolves to that message's type. This strategy allows us to pack arbitrary Go types inside protobuf messages. Our new `Profile` then looks like: + +```protobuf +message Profile { + // account is the account associated to a profile. + google.protobuf.Any account = 1 [ + (cosmos_proto.accepts_interface) = "AccountI"; // Asserts that this field only accepts Go types implementing `AccountI`. It is purely informational for now. + ]; + // bio is a short description of the account. + string bio = 4; +} +``` + +To add an account inside a profile, we need to "pack" it inside an `Any` first, using `codectypes.NewAnyWithValue`: + +```go +var myAccount AccountI +myAccount = ... // Can be a BaseAccount, a ContinuousVestingAccount or any struct implementing `AccountI` + +// Pack the account into an Any +accAny, err := codectypes.NewAnyWithValue(myAccount) +if err != nil { + return nil, err +} + +// Create a new Profile with the any. +profile := Profile { + Account: accAny, + Bio: "some bio", +} + +// We can then marshal the profile as usual. +bz, err := cdc.Marshal(profile) +jsonBz, err := cdc.MarshalJSON(profile) +``` + +To summarize, to encode an interface, you must 1/ pack the interface into an `Any` and 2/ marshal the `Any`. For convenience, the SDK provides a `MarshalInterface` method to bundle these two steps. Have a look at [a real-life example in the x/auth module](https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/x/auth/keeper/keeper.go#L218-L221). + +The reverse operation of retrieving the concrete Go type from inside an `Any`, called "unpacking", is done with the `GetCachedValue()` on `Any`. + +```go +profileBz := ... // The proto-encoded bytes of a Profile, e.g. retrieved through gRPC. +var myProfile Profile +// Unmarshal the bytes into the myProfile struct. +err := cdc.Unmarshal(profilebz, &myProfile) + +// Let's see the types of the Account field. +fmt.Printf("%T\n", myProfile.Account) // Prints "Any" +fmt.Printf("%T\n", myProfile.Account.GetCachedValue()) // Prints "BaseAccount", "ContinuousVestingAccount" or whatever was initially packed in the Any. + +// Get the address of the accountt. +accAddr := myProfile.Account.GetCachedValue().(AccountI).GetAddress() +``` + +It is important to note that for `GetCachedValue()` to work, `Profile` (and any other structs embedding `Profile`) must implement the `UnpackInterfaces` method: + +```go +func (p *Profile) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + if p.Account != nil { + var account AccountI + return unpacker.UnpackAny(p.Account, &account) + } + + return nil +} +``` + +The `UnpackInterfaces` gets called recursively on all structs implementing this method, to allow all `Any`s to have their `GetCachedValue()` correctly populated. + +For more information about interface encoding, and especially on `UnpackInterfaces` and how the `Any`'s `type_url` gets resolved using the `InterfaceRegistry`, please refer to [ADR-019](../architecture/adr-019-protobuf-state-encoding.md). + +#### `Any` Encoding in the SDK + +The above `Profile` example is a fictive example used for educational purposes. In the SDK, we use `Any` encoding in several places (non-exhaustive list): + +- the `cryptotypes.PubKey` interface for encoding different types of public keys, +- the `sdk.Msg` interface for encoding different `Msg`s in a transaction, +- the `AccountI` interface for encodinig different types of accounts (similar to the above example) in the x/auth query responses, +- the `Evidencei` interface for encoding different types of evidences in the x/evidence module, +- the `AuthorizationI` interface for encoding different types of x/authz authorizations, +- the [`Validator`](https://github.com/cosmos/cosmos-sdk/blob/v0.42.5/x/staking/types/staking.pb.go#L306-L337) struct that contains information about a validator. + +A real-life example of encoding the pubkey as `Any` inside the Validator struct in x/staking is shown in the following example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/x/staking/types/validator.go#L40-L61 + +## FAQ + +1. How to create modules using protobuf encoding? + +**Defining module types** + +Protobuf types can be defined to encode: + +- state +- [`Msg`s](../building-modules/messages-and-queries.md#messages) +- [Query services](../building-modules/query-services.md) +- [genesis](../building-modules/genesis.md) + +**Naming and conventions** + +We encourage developers to follow industry guidelines: [Protocol Buffers style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide), see more details in [ADR 023](../architecture/adr-023-protobuf-naming.md) + +2. How to update modules to protobuf encoding? + +If modules do not contain any interfaces (e.g. `Account` or `Content`), then they +may simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf (see 1. for further guidelines) and accept a `Marshaler` as the codec which is implemented via the `ProtoCodec` +without any further customization. + +However, if a module type composes an interface, it must wrap it in the `skd.Any` (from `/types` package) type. To do that, a module-level .proto file must use [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto) for respective message type interface types. + +For example, in the `x/evidence` module defines an `Evidence` interface, which is used by the `MsgSubmitEvidence`. The structure definition must use `sdk.Any` to wrap the evidence file. In the proto file we define it as follows: + +```protobuf +// proto/cosmos/evidence/v1beta1/tx.proto + +message MsgSubmitEvidence { + string submitter = 1; + google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "Evidence"]; +} +``` + +The SDK `codec.Codec` interface provides support methods `MarshalInterface` and `UnmarshalInterface` to easy encoding of state to `Any`. + +Module should register interfaces using `InterfaceRegistry` which provides a mechanism for registering interfaces: `RegisterInterface(protoName string, iface interface{})` and implementations: `RegisterImplementations(iface interface{}, impls ...proto.Message)` that can be safely unpacked from Any, similarly to type registration with Amino: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc4/codec/types/interface_registry.go#L25-L66 + +In addition, an `UnpackInterfaces` phase should be introduced to deserialization to unpack interfaces before they're needed. Protobuf types that contain a protobuf `Any` either directly or via one of their members should implement the `UnpackInterfacesMessage` interface: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +## Next {hide} + +Learn about [gRPC, REST and other endpoints](./grpc_rest.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/events.md b/versioned_docs/version-0.45/develop/advanced-concepts/events.md new file mode 100644 index 000000000..d62663abd --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/events.md @@ -0,0 +1,137 @@ + + +# Events + +`Event`s are objects that contain information about the execution of the application. They are mainly used by service providers like block explorers and wallet to track the execution of various messages and index transactions. {synopsis} + +## Pre-requisite Readings + +- [Anatomy of an SDK application](../basics/app-anatomy.md) {prereq} +- [Tendermint Documentation on Events](https://docs.tendermint.com/master/spec/abci/abci.html#events) {prereq} + +## Events + +Events are implemented in the Cosmos SDK as an alias of the ABCI `Event` type and +take the form of: `{eventType}.{attributeKey}={attributeValue}`. + ++++ https://github.com/tendermint/tendermint/blob/v0.34.8/proto/tendermint/abci/types.proto#L304-L313 + +An Event contains: + +- A `type` to categorize the Event at a high-level; for example, the SDK uses the `"message"` type to filter Events by `Msg`s. +- A list of `attributes` are key-value pairs that give more information about the categorized Event. For example, for the `"message"` type, we can filter Events by key-value pairs using `message.action={some_action}`, `message.module={some_module}` or `message.sender={some_sender}`. + +::: tip +To parse the attribute values as strings, make sure to add `'` (single quotes) around each attribute value. +::: + +Events, the `type` and `attributes` are defined on a **per-module basis** in the module's +`/types/events.go` file, and triggered from the module's Protobuf [`Msg` service](../building-modules/msg-services.md) +by using the [`EventManager`](#eventmanager). In addition, each module documents its Events under +`spec/xx_events.md`. + +Events are returned to the underlying consensus engine in the response of the following ABCI messages: + +- [`BeginBlock`](./baseapp.md#beginblock) +- [`EndBlock`](./baseapp.md#endblock) +- [`CheckTx`](./baseapp.md#checktx) +- [`DeliverTx`](./baseapp.md#delivertx) + +### Examples + +The following examples show how to query Events using the SDK. + +| Event | Description | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tx.height=23` | Query all transactions at height 23 | +| `message.action='/cosmos.bank.v1beta1.Msg/Send'` | Query all transactions containing a x/bank `Send` [Service `Msg`](../building-modules/msg-services.md). Note the `'`s around the value. | +| `message.action='send'` | Query all transactions containing a x/bank `Send` [legacy `Msg`](../building-modules/msg-services.md#legacy-amino-msgs). Note the `'`s around the value. | +| `message.module='bank'` | Query all transactions containing messages from the x/bank module. Note the `'`s around the value. | +| `create_validator.validator='cosmosval1...'` | x/staking-specific Event, see [x/staking SPEC](../../../cosmos-sdk/x/staking/spec/07_events.md). | + +## EventManager + +In Cosmos SDK applications, Events are managed by an abstraction called the `EventManager`. +Internally, the `EventManager` tracks a list of Events for the entire execution flow of a +transaction or `BeginBlock`/`EndBlock`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/types/events.go#L17-L25 + +The `EventManager` comes with a set of useful methods to manage Events. The method +that is used most by module and application developers is `EmitEvent` that tracks +an Event in the `EventManager`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/types/events.go#L33-L37 + +Module developers should handle Event emission via the `EventManager#EmitEvent` in each message +`Handler` and in each `BeginBlock`/`EndBlock` handler. The `EventManager` is accessed via +the [`Context`](./context.md), where Event emission generally follows this pattern: + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent(eventType, sdk.NewAttribute(attributeKey, attributeValue)), +) +``` + +Module's `handler` function should also set a new `EventManager` to the `context` to isolate emitted Events per `message`: + +```go +func NewHandler(keeper Keeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) + switch msg := msg.(type) { +``` + +See the [`Msg` services](../building-modules/msg-services.md) concept doc for a more detailed +view on how to typically implement Events and use the `EventManager` in modules. + +## Subscribing to Events + +You can use Tendermint's [Websocket](https://docs.tendermint.com/master/tendermint-core/subscription.html#subscribing-to-events-via-websocket) to subscribe to Events by calling the `subscribe` RPC method: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='eventCategory' AND eventType.eventAttribute='attributeValue'" + } +} +``` + +The main `eventCategory` you can subscribe to are: + +- `NewBlock`: Contains Events triggered during `BeginBlock` and `EndBlock`. +- `Tx`: Contains Events triggered during `DeliverTx` (i.e. transaction processing). +- `ValidatorSetUpdates`: Contains validator set updates for the block. + +These Events are triggered from the `state` package after a block is committed. You can get the +full list of Event categories [on the Tendermint Godoc page](https://godoc.org/github.com/tendermint/tendermint/types#pkg-constants). + +The `type` and `attribute` value of the `query` allow you to filter the specific Event you are looking for. For example, a `transfer` transaction triggers an Event of type `Transfer` and has `Recipient` and `Sender` as `attributes` (as defined in the [`events.go` file of the `bank` module](https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/x/bank/types/events.go)). Subscribing to this Event would be done like so: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='Tx' AND transfer.sender='senderAddress'" + } +} +``` + +where `senderAddress` is an address following the [`AccAddress`](../basics/accounts.md#addresses) format. + +## Typed Events (coming soon) + +As previously described, Events are defined on a per-module basis. It is the responsibility of the module developer to define Event types and Event attributes. Except in the `spec/XX_events.md` file, these Event types and attributes are unfortunately not easily discoverable, so the SDK proposes to use Protobuf-defined [Typed Events](../architecture/adr-032-typed-events.md) for emitting and querying Events. + +The Typed Events proposal has not yet been fully implemented. Documentation is not yet available. + +## Next {hide} + +Learn about SDK [telemetry](./telemetry.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/grpc_rest.md b/versioned_docs/version-0.45/develop/advanced-concepts/grpc_rest.md new file mode 100644 index 000000000..c4f1feb17 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/grpc_rest.md @@ -0,0 +1,116 @@ + + +# gRPC, REST, and Tendermint Endpoints + +This document presents an overview of all the endpoints a node exposes: gRPC, REST as well as some other endpoints. {synopsis} + +## An Overview of All Endpoints + +Each node exposes the following endpoints for users to interact with a node, each endpoint is served on a different port. Details on how to configure each endpoint is provided in the endpoint's own section. + +- the gRPC server (default port: `9090`), +- the REST server (default port: `1317`), +- the Tendermint RPC endpoint (default port: `26657`). + +::: tip +The node also exposes some other endpoints, such as the Tendermint P2P endpoint, or the [Prometheus endpoint](https://docs.tendermint.com/master/nodes/metrics.html#metrics), which are not directly related to the Cosmos SDK. Please refer to the [Tendermint documentation](https://docs.tendermint.com/master/tendermint-core/using-tendermint.html#configuration) for more information about these endpoints. +::: + +## gRPC Server + +::: warning +A patch introduced in `go-grpc v1.34.0` made gRPC incompatible with the `gogoproto` library, making some [gRPC queries](https://github.com/cosmos/cosmos-sdk/issues/8426) panic. As such, the SDK requires that `go-grpc <=v1.33.2` is installed in your `go.mod`. + +To make sure that gRPC is working properly, it is **highly recommended** to add the following line in your application's `go.mod`: + +``` +replace google.golang.org/grpc => google.golang.org/grpc v1.33.2 +``` + +Please see [issue #8392](https://github.com/cosmos/cosmos-sdk/issues/8392) for more info. +::: + +Cosmos SDK v0.40 introduced Protobuf as the main [encoding](./encoding) library, and this brings a wide range of Protobuf-based tools that can be plugged into the SDK. One such tool is [gRPC](https://grpc.io), a modern open source high performance RPC framework that has decent client support in several languages. + +Each module exposes a [Protobuf `Query` service](../building-modules/messages-and-queries.md#queries) that defines state queries. The `Query` services and a transaction service used to broadcast transactions are hooked up to the gRPC server via the following function inside the application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-rc0/server/types/app.go#L39-L41 + +Note: It is not possible to expose any [Protobuf `Msg` service](../building-modules/messages-and-queries.md#messages) endpoints via gRPC. Transactions must be generated and signed using the CLI or programatically before they can be broadcasted using gRPC. See [Generating, Signing, and Broadcasting Transactions](../run-node/txs.html) for more information. + +The `grpc.Server` is a concrete gRPC server, which spawns and serves all gRPC query requests and a broadcast transaction request. This server can be configured inside `~/.simapp/config/app.toml`: + +- `grpc.enable = true|false` field defines if the gRPC server should be enabled. Defaults to `true`. +- `grpc.address = {string}` field defines the address (really, the port, since the host should be kept at `0.0.0.0`) the server should bind to. Defaults to `0.0.0.0:9090`. + +:::tip +`~/.simapp` is the directory where the node's configuration and databases are stored. By default, it's set to `~/.{app_name}`. +::: + +Once the gRPC server is started, you can send requests to it using a gRPC client. Some examples are given in our [Interact with the Node](../run-node/interact-node.md#using-grpc) tutorial. + +An overview of all available gRPC endpoints shipped with the Cosmos SDK is [Protobuf documention](./proto-docs.md). + +## REST Server + +In Cosmos SDK v0.40, the node continues to serve a REST server. However, the existing routes present in version v0.39 and earlier are now marked as deprecated, and new routes have been added via gRPC-gateway. + +All routes are configured under the following fields in `~/.simapp/config/app.toml`: + +- `api.enable = true|false` field defines if the REST server should be enabled. Defaults to `false`. +- `api.address = {string}` field defines the address (really, the port, since the host should be kept at `0.0.0.0`) the server should bind to. Defaults to `tcp://0.0.0.0:1317`. +- some additional API configuration options are defined in `~/.simapp/config/app.toml`, along with comments, please refer to that file directly. + +### gRPC-gateway REST Routes + +If, for various reasons, you cannot use gRPC (for example, you are building a web application, and browsers don't support HTTP2 on which gRPC is built), then the SDK offers REST routes via gRPC-gateway. + +[gRPC-gateway](https://grpc-ecosystem.github.io/grpc-gateway/) is a tool to expose gRPC endpoints as REST endpoints. For each gRPC endpoint defined in a Protobuf `Query` service, the SDK offers a REST equivalent. For instance, querying a balance could be done via the `/cosmos.bank.v1beta1.QueryAllBalances` gRPC endpoint, or alternatively via the gRPC-gateway `"/cosmos/bank/v1beta1/balances/{address}"` REST endpoint: both will return the same result. For each RPC method defined in a Protobuf `Query` service, the corresponding REST endpoint is defined as an option: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.41.0/proto/cosmos/bank/v1beta1/query.proto#L19-L22 + +For application developers, gRPC-gateway REST routes needs to be wired up to the REST server, this is done by calling the `RegisterGRPCGatewayRoutes` function on the ModuleManager. + +### Legacy REST API Routes + +The REST routes present in Cosmos SDK v0.39 and earlier are marked as deprecated via a [HTTP deprecation header](https://tools.ietf.org/id/draft-dalal-deprecation-header-01.html). They are still maintained to keep backwards compatibility, but will be removed in v0.44. For updating from Legacy REST routes to new gRPC-gateway REST routes, please refer to our [migration guide](../migrations/rest.md). + +For application developers, Legacy REST API routes needs to be wired up to the REST server, this is done by calling the `RegisterRESTRoutes` function on the ModuleManager. + +### Swagger + +A [Swagger](https://swagger.io/) (or OpenAPIv2) specification file is exposed under the `/swagger` route on the API server. Swagger is an open specification describing the API endpoints a server serves, including description, input arguments, return types and much more about each endpoint. + +Enabling the `/swagger` endpoint is configurable inside `~/.simapp/config/app.toml` via the `api.swagger` field, which is set to true by default. + +For application developers, you may want to generate your own Swagger definitions based on your custom modules. The SDK's [Swagger generation script](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc4/scripts/protoc-swagger-gen.sh) is a good place to start. + +## Tendermint RPC + +Independently from the Cosmos SDK, Tendermint also exposes a RPC server. This RPC server can be configured by tuning parameters under the `rpc` table in the `~/.simapp/config/config.toml`, the default listening address is `tcp://0.0.0.0:26657`. An OpenAPI specification of all Tendermint RPC endpoints is available [here](https://docs.tendermint.com/master/rpc/). + +Some Tendermint RPC endpoints are directly related to the Cosmos SDK: + +- `/abci_query`: this endpoint will query the application for state. As the `path` parameter, you can send the following strings: + - any Protobuf fully-qualified service method, such as `/cosmos.bank.v1beta1.QueryAllBalances`. The `data` field should then include the method's request parameter(s) encoded as bytes using Protobuf. + - `/app/simulate`: this will simulate a transaction, and return some information such as gas used. + - `/app/version`: this will return the application's version. + - `/store/{path}`: this will query the store directly. + - `/p2p/filter/addr/{port}`: this will return a filtered list of the node's P2P peers by address port. + - `/p2p/filter/id/{id}`: this will return a filtered list of the node's P2P peers by ID. +- `/broadcast_tx_{aync,async,commit}`: these 3 endpoint will broadcast a transaction to other peers. CLI, gRPC and REST expose [a way to broadcast transations](./transactions.md#broadcasting-the-transaction), but they all use these 3 Tendermint RPCs under the hood. + +## Comparison Table + +| Name | Advantages | Disadvantages | +| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| gRPC | - can use code-generated stubs in various languages
- supports streaming and bidirectional communication (HTTP2)
- small wire binary sizes, faster transmission | - based on HTTP2, not available in browsers
- learning curve (mostly due to Protobuf) | +| REST | - ubiquitous
- client libraries in all languages, faster implementation
| - only supports unary request-response communication (HTTP1.1)
- bigger over-the-wire message sizes (JSON) | +| CometBFT RPC | - easy to use | - bigger over-the-wire message sizes (JSON) | + + +## Next {hide} + +Learn about [the CLI](./cli.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/keeper_dependencies.svg b/versioned_docs/version-0.45/develop/advanced-concepts/keeper_dependencies.svg new file mode 100644 index 000000000..bac9328e3 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/keeper_dependencies.svg @@ -0,0 +1,102 @@ +The dependencies between Keepers (Feb 2021)StakingDistributionSlashingEvidenceBankAuth/AccountGovMint \ No newline at end of file diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/node.md b/versioned_docs/version-0.45/develop/advanced-concepts/node.md new file mode 100644 index 000000000..132b6a8a8 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/node.md @@ -0,0 +1,76 @@ + + +# Node Client (Daemon) + +The main endpoint of an SDK application is the daemon client, otherwise known as the full-node client. The full-node runs the state-machine, starting from a genesis file. It connects to peers running the same client in order to receive and relay transactions, block proposals and signatures. The full-node is constituted of the application, defined with the Cosmos SDK, and of a consensus engine connected to the application via the ABCI. {synopsis} + +## Pre-requisite Readings + +- [Anatomy of an SDK application](../basics/app-anatomy.md) {prereq} + +## `main` function + +The full-node client of any SDK application is built by running a `main` function. The client is generally named by appending the `-d` suffix to the application name (e.g. `appd` for an application named `app`), and the `main` function is defined in a `./appd/cmd/main.go` file. Running this function creates an executable `appd` that comes with a set of commands. For an app named `app`, the main command is [`appd start`](#start-command), which starts the full-node. + +In general, developers will implement the `main.go` function with the following structure: + +- First, an [`appCodec`](./encoding.md) is instantiated for the application. +- Then, the `config` is retrieved and config parameters are set. This mainly involves setting the Bech32 prefixes for [addresses](../basics/accounts.md#addresses). + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/types/config.go#L13-L24 +- Using [cobra](https://github.com/spf13/cobra), the root command of the full-node client is created. After that, all the custom commands of the application are added using the `AddCommand()` method of `rootCmd`. +- Add default server commands to `rootCmd` using the `server.AddCommands()` method. These commands are separated from the ones added above since they are standard and defined at SDK level. They should be shared by all SDK-based applications. They include the most important command: the [`start` command](#start-command). +- Prepare and execute the `executor`. + +++ https://github.com/tendermint/tendermint/blob/v0.34.0-rc6/libs/cli/setup.go#L74-L78 + +See an example of `main` function from the `simapp` application, the SDK's application for demo purposes: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/simapp/simd/main.go + +## `start` command + +The `start` command is defined in the `/server` folder of the Cosmos SDK. It is added to the root command of the full-node client in the [`main` function](#main-function) and called by the end-user to start their node: + +```bash +# For an example app named "app", the following command starts the full-node. +appd start + +# Using the SDK's own simapp, the following commands start the simapp node. +simd start +``` + +As a reminder, the full-node is composed of three conceptual layers: the networking layer, the consensus layer and the application layer. The first two are generally bundled together in an entity called the consensus engine (Tendermint Core by default), while the third is the state-machine defined with the help of the Cosmos SDK. Currently, the Cosmos SDK uses Tendermint as the default consensus engine, meaning the start command is implemented to boot up a Tendermint node. + +The flow of the `start` command is pretty straightforward. First, it retrieves the `config` from the `context` in order to open the `db` (a [`leveldb`](https://github.com/syndtr/goleveldb) instance by default). This `db` contains the latest known state of the application (empty if the application is started from the first time. + +With the `db`, the `start` command creates a new instance of the application using an `appCreator` function: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/server/start.go#L227-L228 + +Note that an `appCreator` is a function that fulfills the `AppCreator` signature: ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/server/types/app.go#L48-L50 + +In practice, the [constructor of the application](../basics/app-anatomy.md#constructor-function) is passed as the `appCreator`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/simapp/simd/cmd/root.go#L170-L215 + +Then, the instance of `app` is used to instanciate a new Tendermint node: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/server/start.go#L235-L244 + +The Tendermint node can be created with `app` because the latter satisfies the [`abci.Application` interface](https://github.com/tendermint/tendermint/blob/v0.34.0/abci/types/application.go#L7-L32) (given that `app` extends [`baseapp`](./baseapp.md)). As part of the `NewNode` method, Tendermint makes sure that the height of the application (i.e. number of blocks since genesis) is equal to the height of the Tendermint node. The difference between these two heights should always be negative or null. If it is strictly negative, `NewNode` will replay blocks until the height of the application reaches the height of the Tendermint node. Finally, if the height of the application is `0`, the Tendermint node will call [`InitChain`](./baseapp.md#initchain) on the application to initialize the state from the genesis file. + +Once the Tendermint node is instanciated and in sync with the application, the node can be started: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/server/start.go#L250-L252 + +Upon starting, the node will bootstrap its RPC and P2P server and start dialing peers. During handshake with its peers, if the node realizes they are ahead, it will query all the blocks sequentially in order to catch up. Then, it will wait for new block proposals and block signatures from validators in order to make progress. + +## Other commands + +To discover how to concretely run a node and interact with it, please refer to our [Running a Node, API and CLI](../run-node/README.md) guide. + +## Next {hide} + +Learn about the [store](./store.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/ocap.md b/versioned_docs/version-0.45/develop/advanced-concepts/ocap.md new file mode 100644 index 000000000..833efa646 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/ocap.md @@ -0,0 +1,79 @@ + + +# Object-Capability Model + +## Intro + +When thinking about security, it is good to start with a specific threat model. Our threat model is the following: + +> We assume that a thriving ecosystem of Cosmos-SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +The Cosmos SDK is designed to address this threat by being the +foundation of an object capability system. + +> The structural properties of object capability systems favor +> modularity in code design and ensure reliable encapsulation in +> code implementation. +> +> These structural properties facilitate the analysis of some +> security properties of an object-capability program or operating +> system. Some of these — in particular, information flow properties +> — can be analyzed at the level of object references and +> connectivity, independent of any knowledge or analysis of the code +> that determines the behavior of the objects. +> +> As a consequence, these security properties can be established +> and maintained in the presence of new objects that contain unknown +> and possibly malicious code. +> +> These structural properties stem from the two rules governing +> access to existing objects: +> +> 1. An object A can send a message to B only if object A holds a +> reference to B. +> 2. An object A can obtain a reference to C only +> if object A receives a message containing a reference to C. As a +> consequence of these two rules, an object can obtain a reference +> to another object only through a preexisting chain of references. +> In short, "Only connectivity begets connectivity." + +For an introduction to object-capabilities, see this [Wikipedia article](https://en.wikipedia.org/wiki/Object-capability_model). + +## Ocaps in practice + +The idea is to only reveal what is necessary to get the work done. + +For example, the following code snippet violates the object capabilities +principle: + +```go +type AppAccount struct {...} +account := &AppAccount{ + Address: pub.Address(), + Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)}, +} +sumValue := externalModule.ComputeSumValue(account) +``` + +The method `ComputeSumValue` implies a pure function, yet the implied +capability of accepting a pointer value is the capability to modify that +value. The preferred method signature should take a copy instead. + +```go +sumValue := externalModule.ComputeSumValue(*account) +``` + +In the Cosmos SDK, you can see the application of this principle in the +gaia app. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.41.4/simapp/app.go#L249-L273 + +The following diagram shows the current dependencies between keepers. + +![Keeper dependencies](./keeper_dependencies.svg) + +## Next {hide} + +Learn about the [`runTx` middleware](./runtx_middleware.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/runtx_middleware.md b/versioned_docs/version-0.45/develop/advanced-concepts/runtx_middleware.md new file mode 100644 index 000000000..9c978fbbe --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/runtx_middleware.md @@ -0,0 +1,73 @@ + + +# RunTx recovery middleware + +`BaseApp.runTx()` function handles Golang panics that might occur during transactions execution, for example, keeper has faced an invalid state and paniced. +Depending on the panic type different handler is used, for instance the default one prints an error log message. +Recovery middleware is used to add custom panic recovery for SDK application developers. + +More context could be found in the corresponding [ADR-022](../architecture/adr-022-custom-panic-handling.md). + +Implementation could be found in the [recovery.go](../../baseapp/recovery.go) file. + +## Interface + +```go +type RecoveryHandler func(recoveryObj interface{}) error +``` + +`recoveryObj` is a return value for `recover()` function from the `buildin` Golang package. + +**Contract:** + +- RecoveryHandler returns `nil` if `recoveryObj` wasn't handled and should be passed to the next recovery middleware; +- RecoveryHandler returns a non-nil `error` if `recoveryObj` was handled; + +## Custom RecoveryHandler register + +`BaseApp.AddRunTxRecoveryHandler(handlers ...RecoveryHandler)` + +BaseApp method adds recovery middleware to the default recovery chain. + +## Example + +Lets assume we want to emit the "Consensus failure" chain state if some particular error occurred. + +We have a module keeper that panics: + +```go +func (k FooKeeper) Do(obj interface{}) { + if obj == nil { + // that shouldn't happen, we need to crash the app + err := sdkErrors.Wrap(fooTypes.InternalError, "obj is nil") + panic(err) + } +} +``` + +By default that panic would be recovered and an error message will be printed to log. To override that behaviour we should register a custom RecoveryHandler: + +```go +// SDK application constructor +customHandler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { + return nil + } + + if fooTypes.InternalError.Is(err) { + panic(fmt.Errorf("FooKeeper did panic with error: %w", err)) + } + + return nil +} + +baseApp := baseapp.NewBaseApp(...) +baseApp.AddRunTxRecoveryHandler(customHandler) +``` + +## Next {hide} + +Learn about the [IBC](./../ibc/README.md) protocol {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/simulation.md b/versioned_docs/version-0.45/develop/advanced-concepts/simulation.md new file mode 100644 index 000000000..9b838b40b --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/simulation.md @@ -0,0 +1,101 @@ + + +# Cosmos Blockchain Simulator + +The Cosmos SDK offers a full fledged simulation framework to fuzz test every +message defined by a module. + +On the SDK, this functionality is provided by the[`SimApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/app.go), which is a +`Baseapp` application that is used for running the [`simulation`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/simulation) module. +This module defines all the simulation logic as well as the operations for +randomized parameters like accounts, balances etc. + +## Goals + +The blockchain simulator tests how the blockchain application would behave under +real life circumstances by generating and sending randomized messages. +The goal of this is to detect and debug failures that could halt a live chain, +by providing logs and statistics about the operations run by the simulator as +well as exporting the latest application state when a failure was found. + +Its main difference with integration testing is that the simulator app allows +you to pass parameters to customize the chain that's being simulated. +This comes in handy when trying to reproduce bugs that were generated in the +provided operations (randomized or not). + +## Simulation commands + +The simulation app has different commands, each of which tests a different +failure type: + +- `AppImportExport`: The simulator exports the initial app state and then it + creates a new app with the exported `genesis.json` as an input, checking for + inconsistencies between the stores. +- `AppSimulationAfterImport`: Queues two simulations together. The first one provides the app state (_i.e_ genesis) to the second. Useful to test software upgrades or hard-forks from a live chain. +- `AppStateDeterminism`: Checks that all the nodes return the same values, in the same order. +- `BenchmarkInvariants`: Analysis of the performance of running all modules' invariants (_i.e_ sequentially runs a [benchmark](https://golang.org/pkg/testing/#hdr-Benchmarks) test). An invariant checks for + differences between the values that are on the store and the passive tracker. Eg: total coins held by accounts vs total supply tracker. +- `FullAppSimulation`: General simulation mode. Runs the chain and the specified operations for a given number of blocks. Tests that there're no `panics` on the simulation. It does also run invariant checks on every `Period` but they are not benchmarked. + +Each simulation must receive a set of inputs (_i.e_ flags) such as the number of +blocks that the simulation is run, seed, block size, etc. +Check the full list of flags [here](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/simapp/config.go#L32-L55). + +## Simulator Modes + +In addition to the various inputs and commands, the simulator runs in three modes: + +1. Completely random where the initial state, module parameters and simulation + parameters are **pseudo-randomly generated**. +2. From a `genesis.json` file where the initial state and the module parameters are defined. + This mode is helpful for running simulations on a known state such as a live network export where a new (mostly likely breaking) version of the application needs to be tested. +3. From a `params.json` file where the initial state is pseudo-randomly generated but the module and simulation parameters can be provided manually. + This allows for a more controlled and deterministic simulation setup while allowing the state space to still be pseudo-randomly simulated. + The list of available parameters are listed [here](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/simulation/params.go#L44-L52). + +::: tip +These modes are not mutually exclusive. So you can for example run a randomly +generated genesis state (`1`) with manually generated simulation params (`3`). +::: + +## Usage + +This is a general example of how simulations are run. For more specific examples +check the SDK [Makefile](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/Makefile#L251-L287). + +```bash + $ go test -mod=readonly github.com/cosmos/cosmos-sdk/simapp \ + -run=TestApp \ + ... + -v -timeout 24h +``` + +## Debugging Tips + +Here are some suggestions when encountering a simulation failure: + +- Export the app state at the height were the failure was found. You can do this + by passing the `-ExportStatePath` flag to the simulator. +- Use `-Verbose` logs. They could give you a better hint on all the operations + involved. +- Reduce the simulation `-Period`. This will run the invariants checks more + frequently. +- Print all the failed invariants at once with `-PrintAllInvariants`. +- Try using another `-Seed`. If it can reproduce the same error and if it fails + sooner you will spend less time running the simulations. +- Reduce the `-NumBlocks` . How's the app state at the height previous to the + failure? +- Run invariants on every operation with `-SimulateEveryOperation`. _Note_: this + will slow down your simulation **a lot**. +- Try adding logs to operations that are not logged. You will have to define a + [Logger](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/staking/keeper/keeper.go#L66-L69) on your `Keeper`. + +## Use simulation in your SDK-based application + +Learn how you can integrate the simulation into your SDK-based application: + +- Application Simulation Manager +- [Building modules: Simulator](../building-modules/simulator.md) +- Simulator tests diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/store.md b/versioned_docs/version-0.45/develop/advanced-concepts/store.md new file mode 100644 index 000000000..1dbe05536 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/store.md @@ -0,0 +1,257 @@ + + +# Store + +A store is a data structure that holds the state of the application. {synopsis} + +### Pre-requisite Readings + +- [Anatomy of an SDK application](../basics/app-anatomy.md) {prereq} + +## Introduction to SDK Stores + +The Cosmos SDK comes with a large set of stores to persist the state of applications. By default, the main store of SDK applications is a `multistore`, i.e. a store of stores. Developers can add any number of key-value stores to the multistore, depending on their application needs. The multistore exists to support the modularity of the Cosmos SDK, as it lets each module declare and manage their own subset of the state. Key-value stores in the multistore can only be accessed with a specific capability `key`, which is typically held in the [`keeper`](../building-modules/keeper.md) of the module that declared the store. + +``` ++-----------------------------------------------------+ +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 1 - Manage by keeper of Module 1 | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 2 - Manage by keeper of Module 2 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 3 - Manage by keeper of Module 2 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 4 - Manage by keeper of Module 3 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 5 - Manage by keeper of Module 4 | | +| | | | +| +--------------------------------------------+ | +| | +| Main Multistore | +| | ++-----------------------------------------------------+ + + Application's State +``` + +### Store Interface + +At its very core, a Cosmos SDK `store` is an object that holds a `CacheWrapper` and has a `GetStoreType()` method: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/store.go#L15-L18 + +The `GetStoreType` is a simple method that returns the type of store, whereas a `CacheWrapper` is a simple interface that implements store read caching and write branching through `Write` method: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/store.go#L240-L264 + +Branching and cache is used ubiquitously in the Cosmos SDK and required to be implemented on every store type. A storage branch creates an isolated, ephemeral branch of a store that can be passed around and updated without affecting the main underlying store. This is used to trigger temporary state-transitions that may be reverted later should an error occur. Read more about it in [context](./context.md#Store-branching) + +### Commit Store + +A commit store is a store that has the ability to commit changes made to the underlying tree or db. The Cosmos SDK differentiates simple stores from commit stores by extending the basic store interfaces with a `Committer`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/store.go#L29-L33 + +The `Committer` is an interface that defines methods to persist changes to disk: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/store.go#L20-L27 + +The `CommitID` is a deterministic commit of the state tree. Its hash is returned to the underlying consensus engine and stored in the block header. Note that commit store interfaces exist for various purposes, one of which is to make sure not every object can commit the store. As part of the [object-capabilities model](./ocap.md) of the Cosmos SDK, only `baseapp` should have the ability to commit stores. For example, this is the reason why the `ctx.KVStore()` method by which modules typically access stores returns a `KVStore` and not a `CommitKVStore`. + +The Cosmos SDK comes with many types of stores, the most used being [`CommitMultiStore`](#multistore), [`KVStore`](#kvstore) and [`GasKv` store](#gaskv-store). [Other types of stores](#other-stores) include `Transient` and `TraceKV` stores. + +## Multistore + +### Multistore Interface + +Each Cosmos SDK application holds a multistore at its root to persist its state. The multistore is a store of `KVStores` that follows the `Multistore` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/store.go#L104-L133 + +If tracing is enabled, then branching the multistore will firstly wrap all the underlying `KVStore` in [`TraceKv.Store`](#tracekv-store). + +### CommitMultiStore + +The main type of `Multistore` used in the Cosmos SDK is `CommitMultiStore`, which is an extension of the `Multistore` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/store.go#L141-L184 + +As for concrete implementation, the [`rootMulti.Store`] is the go-to implementation of the `CommitMultiStore` interface. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/rootmulti/store.go#L43-L61 + +The `rootMulti.Store` is a base-layer multistore built around a `db` on top of which multiple `KVStores` can be mounted, and is the default multistore store used in [`baseapp`](./baseapp.md). + +### CacheMultiStore + +Whenever the `rootMulti.Store` needs to be branched, a [`cachemulti.Store`](https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/store/cachemulti/store.go) is used. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/cachemulti/store.go#L17-L28 + +`cachemulti.Store` branches all substores (creates a virtual store for each substore) in its constructor and hold them in `Store.stores`. Moreover caches all read queries. `Store.GetKVStore()` returns the store from `Store.stores`, and `Store.Write()` recursively calls `CacheWrap.Write()` on all the substores. + +## Base-layer KVStores + +### `KVStore` and `CommitKVStore` Interfaces + +A `KVStore` is a simple key-value store used to store and retrieve data. A `CommitKVStore` is a `KVStore` that also implements a `Committer`. By default, stores mounted in `baseapp`'s main `CommitMultiStore` are `CommitKVStore`s. The `KVStore` interface is primarily used to restrict modules from accessing the committer. + +Individual `KVStore`s are used by modules to manage a subset of the global state. `KVStores` can be accessed by objects that hold a specific key. This `key` should only be exposed to the [`keeper`](../building-modules/keeper.md) of the module that defines the store. + +`CommitKVStore`s are declared by proxy of their respective `key` and mounted on the application's [multistore](#multistore) in the [main application file](../basics/app-anatomy.md#core-application-file). In the same file, the `key` is also passed to the module's `keeper` that is responsible for managing the store. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/store.go#L189-L219 + +Apart from the traditional `Get` and `Set` methods, a `KVStore` must provide an `Iterator(start, end)` method which returns an `Iterator` object. It is used to iterate over a range of keys, typically keys that share a common prefix. Below is an example from the bank's module keeper, used to iterate over all account balances: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/x/bank/keeper/view.go#L115-L134 + +### `IAVL` Store + +The default implementation of `KVStore` and `CommitKVStore` used in `baseapp` is the `iavl.Store`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/iavl/store.go#L37-L40 + +`iavl` stores are based around an [IAVL Tree](https://github.com/tendermint/iavl), a self-balancing binary tree which guarantees that: + +- `Get` and `Set` operations are O(log n), where n is the number of elements in the tree. +- Iteration efficiently returns the sorted elements within the range. +- Each tree version is immutable and can be retrieved even after a commit (depending on the pruning settings). + +The documentation on the IAVL Tree is located [here](https://github.com/cosmos/iavl/blob/v0.15.0-rc5/docs/overview.md). + +### `DbAdapter` Store + +`dbadapter.Store` is a adapter for `dbm.DB` making it fulfilling the `KVStore` interface. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/dbadapter/store.go#L13-L16 + +`dbadapter.Store` embeds `dbm.DB`, meaning most of the `KVStore` interface functions are implemented. The other functions (mostly miscellaneous) are manually implemented. This store is primarily used within [Transient Stores](#transient-stores) + +### `Transient` Store + +`Transient.Store` is a base-layer `KVStore` which is automatically discarded at the end of the block. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/transient/store.go#L13-L16 + +`Transient.Store` is a `dbadapter.Store` with a `dbm.NewMemDB()`. All `KVStore` methods are reused. When `Store.Commit()` is called, a new `dbadapter.Store` is assigned, discarding previous reference and making it garbage collected. + +This type of store is useful to persist information that is only relevant per-block. One example would be to store parameter changes (i.e. a bool set to `true` if a parameter changed in a block). + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/x/params/types/subspace.go#L20-L30 + +Transient stores are typically accessed via the [`context`](./context.md) via the `TransientStore()` method: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/types/context.go#L232-L235 + +## KVStore Wrappers + +### CacheKVStore + +`cachekv.Store` is a wrapper `KVStore` which provides buffered writing / cached reading functionalities over the underlying `KVStore`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/cachekv/store.go#L27-L34 + +This is the type used whenever an IAVL Store needs to be branched to create an isolated store (typically when we need to mutate a state that might be reverted later). + +#### `Get` + +`Store.Get()` firstly checks if `Store.cache` has an associated value with the key. If the value exists, the function returns it. If not, the function calls `Store.parent.Get()`, caches the result in `Store.cache`, and returns it. + +#### `Set` + +`Store.Set()` sets the key-value pair to the `Store.cache`. `cValue` has the field dirty bool which indicates whether the cached value is different from the underlying value. When `Store.Set()` caches a new pair, the `cValue.dirty` is set `true` so when `Store.Write()` is called it can be written to the underlying store. + +#### `Iterator` + +`Store.Iterator()` have to traverse on both cached items and the original items. In `Store.iterator()`, two iterators are generated for each of them, and merged. `memIterator` is essentially a slice of the `KVPairs`, used for cached items. `mergeIterator` is a combination of two iterators, where traverse happens ordered on both iterators. + +### `GasKv` Store + +Cosmos SDK applications use [`gas`](../basics/gas-fees.md) to track resources usage and prevent spam. [`GasKv.Store`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/gaskv/store.go) is a `KVStore` wrapper that enables automatic gas consumption each time a read or write to the store is made. It is the solution of choice to track storage usage in Cosmos SDK applications. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/gaskv/store.go#L13-L19 + +When methods of the parent `KVStore` are called, `GasKv.Store` automatically consumes appropriate amount of gas depending on the `Store.gasConfig`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/gas.go#L153-L162 + +By default, all `KVStores` are wrapped in `GasKv.Stores` when retrieved. This is done in the `KVStore()` method of the [`context`](./context.md): + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/types/context.go#L227-L230 + +In this case, the default gas configuration is used: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/types/gas.go#L164-L175 + +### `TraceKv` Store + +`tracekv.Store` is a wrapper `KVStore` which provides operation tracing functionalities over the underlying `KVStore`. It is applied automatically by the Cosmos SDK on all `KVStore` if tracing is enabled on the parent `MultiStore`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/tracekv/store.go#L20-L43 + +When each `KVStore` methods are called, `tracekv.Store` automatically logs `traceOperation` to the `Store.writer`. `traceOperation.Metadata` is filled with `Store.context` when it is not nil. `TraceContext` is a `map[string]interface{}`. + +### `Prefix` Store + +`prefix.Store` is a wrapper `KVStore` which provides automatic key-prefixing functionalities over the underlying `KVStore`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/store/prefix/store.go#L15-L21 + +When `Store.{Get, Set}()` is called, the store forwards the call to its parent, with the key prefixed with the `Store.prefix`. + +When `Store.Iterator()` is called, it does not simply prefix the `Store.prefix`, since it does not work as intended. In that case, some of the elements are traversed even they are not starting with the prefix. + +### `ListenKv` Store + +`listenkv.Store` is a wrapper `KVStore` which provides state listening capabilities over the underlying `KVStore`. +It is applied automatically by the Cosmos SDK on any `KVStore` whose `StoreKey` is specified during state streaming configuration. +Additional information about state streaming configuration can be found in the [store/streaming/README.md](../../store/streaming/README.md). + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.44.1/store/listenkv/store.go#L11-L18 + +When `KVStore.Set` or `KVStore.Delete` methods are called, `listenkv.Store` automatically writes the operations to the set of `Store.listeners`. + +## New Store package (`store/v2`) + +The SDK is in the process of transitioning to use the types listed here as the default interface for state storage. At the time of writing, these cannot be used within an application and are not directly compatible with the `CommitMultiStore` and related types. + +### `BasicKVStore` interface + +An interface providing only the basic CRUD functionality (`Get`, `Set`, `Has`, and `Delete` methods), without iteration or caching. This is used to partially expose components of a larger store, such as a `flat.Store`. + +### Flat Store + +`flat.Store` is the new default persistent store, which internally decouples the concerns of state storage and commitment scheme. Values are stored directly in the backing key-value database (the "storage" bucket), while the value's hash is mapped in a separate store which is able to generate a cryptographic commitment (the "state commitment" bucket, implmented with `smt.Store`). + +This can optionally be constructed to use different backend databases for each bucket. + + + +### SMT Store + +A `BasicKVStore` which is used to partially expose functions of an underlying store (for instance, to allow access to the commitment store in `flat.Store`). + +## Next {hide} + +Learn about [encoding](./encoding.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/telemetry.md b/versioned_docs/version-0.45/develop/advanced-concepts/telemetry.md new file mode 100644 index 000000000..9e434eef2 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/telemetry.md @@ -0,0 +1,145 @@ + + +# Telemetry + +Gather relevant insights about your application and modules with custom metrics and telemetry. {synopsis} + +The Cosmos SDK enables operators and developers to gain insight into the performance and behavior of +their application through the use of the `telemetry` package. The Cosmos SDK currently supports +enabling in-memory and prometheus as telemetry sinks. This allows the ability to query for and scrape +metrics from a single exposed API endpoint -- `/metrics?format={text|prometheus}`, the default being +`text`. + +If telemetry is enabled via configuration, a single global metrics collector is registered via the +[go-metrics](https://github.com/armon/go-metrics) library. This allows emitting and collecting +metrics through simple API calls. + +Example: + +```go +func EndBlocker(ctx sdk.Context, k keeper.Keeper) { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker) + + // ... +} +``` + +Developers may use the `telemetry` package directly, which provides wrappers around metric APIs +that include adding useful labels, or they must use the `go-metrics` library directly. It is preferable +to add as much context and adequate dimensionality to metrics as possible, so the `telemetry` package +is advised. Regardless of the package or method used, the Cosmos SDK supports the following metrics +types: + +* gauges +* summaries +* counters + +## Labels + +Certain components of modules will have their name automatically added as a label (e.g. `BeginBlock`). +Operators may also supply the application with a global set of labels that will be applied to all +metrics emitted using the `telemetry` package (e.g. chain-id). Global labels are supplied as a list +of [name, value] tuples. + +Example: + +```toml +global-labels = [ + ["chain_id", "chain-OfXo4V"], +] +``` + +## Cardinality + +Cardinality is key, specifically label and key cardinality. Cardinality is how many unique values of +something there are. So there is naturally a tradeoff between granularity and how much stress is put +on the telemetry sink in terms of indexing, scrape, and query performance. + +Developers should take care to support metrics with enough dimensionality and granularity to be +useful, but not increase the cardinality beyond the sink's limits. A general rule of thumb is to not +exceed a cardinality of 10. + +Consider the following examples with enough granularity and adequate cardinality: + +* begin/end blocker time +* tx gas used +* block gas used +* amount of tokens minted +* amount of accounts created + +The following examples expose too much cardinality and may not even prove to be useful: + +* transfers between accounts with amount +* voting/deposit amount from unique addresses + +## Supported Metrics + +| Metric | Description | Unit | Type | +|:--------------------------------|:------------------------------------------------------------------------------------------|:----------------|:--------| +| `tx_count` | Total number of txs processed via `DeliverTx` | tx | counter | +| `tx_successful` | Total number of successful txs processed via `DeliverTx` | tx | counter | +| `tx_failed` | Total number of failed txs processed via `DeliverTx` | tx | counter | +| `tx_gas_used` | The total amount of gas used by a tx | gas | gauge | +| `tx_gas_wanted` | The total amount of gas requested by a tx | gas | gauge | +| `tx_msg_send` | The total amount of tokens sent in a `MsgSend` (per denom) | token | gauge | +| `tx_msg_withdraw_reward` | The total amount of tokens withdrawn in a `MsgWithdrawDelegatorReward` (per denom) | token | gauge | +| `tx_msg_withdraw_commission` | The total amount of tokens withdrawn in a `MsgWithdrawValidatorCommission` (per denom) | token | gauge | +| `tx_msg_delegate` | The total amount of tokens delegated in a `MsgDelegate` | token | gauge | +| `tx_msg_begin_unbonding` | The total amount of tokens undelegated in a `MsgUndelegate` | token | gauge | +| `tx_msg_begin_begin_redelegate` | The total amount of tokens redelegated in a `MsgBeginRedelegate` | token | gauge | +| `tx_msg_ibc_transfer` | The total amount of tokens transferred via IBC in a `MsgTransfer` (source or sink chain) | token | gauge | +| `ibc_transfer_packet_receive` | The total amount of tokens received in a `FungibleTokenPacketData` (source or sink chain) | token | gauge | +| `new_account` | Total number of new accounts created | account | counter | +| `gov_proposal` | Total number of governance proposals | proposal | counter | +| `gov_vote` | Total number of governance votes for a proposal | vote | counter | +| `gov_deposit` | Total number of governance deposits for a proposal | deposit | counter | +| `staking_delegate` | Total number of delegations | delegation | counter | +| `staking_undelegate` | Total number of undelegations | undelegation | counter | +| `staking_redelegate` | Total number of redelegations | redelegation | counter | +| `ibc_transfer_send` | Total number of IBC transfers sent from a chain (source or sink) | transfer | counter | +| `ibc_transfer_receive` | Total number of IBC transfers received to a chain (source or sink) | transfer | counter | +| `ibc_client_create` | Total number of clients created | create | counter | +| `ibc_client_update` | Total number of client updates | update | counter | +| `ibc_client_upgrade` | Total number of client upgrades | upgrade | counter | +| `ibc_client_misbehaviour` | Total number of client misbehaviours | misbehaviour | counter | +| `ibc_connection_open-init` | Total number of connection `OpenInit` handshakes | handshake | counter | +| `ibc_connection_open-try` | Total number of connection `OpenTry` handshakes | handshake | counter | +| `ibc_connection_open-ack` | Total number of connection `OpenAck` handshakes | handshake | counter | +| `ibc_connection_open-confirm` | Total number of connection `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_open-init` | Total number of channel `OpenInit` handshakes | handshake | counter | +| `ibc_channel_open-try` | Total number of channel `OpenTry` handshakes | handshake | counter | +| `ibc_channel_open-ack` | Total number of channel `OpenAck` handshakes | handshake | counter | +| `ibc_channel_open-confirm` | Total number of channel `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_close-init` | Total number of channel `CloseInit` handshakes | handshake | counter | +| `ibc_channel_close-confirm` | Total number of channel `CloseConfirm` handshakes | handshake | counter | +| `tx_msg_ibc_recv_packet` | Total number of IBC packets received | packet | counter | +| `tx_msg_ibc_acknowledge_packet` | Total number of IBC packets acknowledged | acknowledgement | counter | +| `ibc_timeout_packet` | Total number of IBC timeout packets | timeout | counter | +| `abci_check_tx` | Duration of ABCI `CheckTx` | ms | summary | +| `abci_deliver_tx` | Duration of ABCI `DeliverTx` | ms | summary | +| `abci_commit` | Duration of ABCI `Commit` | ms | summary | +| `abci_query` | Duration of ABCI `Query` | ms | summary | +| `abci_begin_block` | Duration of ABCI `BeginBlock` | ms | summary | +| `abci_end_block` | Duration of ABCI `EndBlock` | ms | summary | +| `begin_blocker` | Duration of `BeginBlock` for a given module | ms | summary | +| `end_blocker` | Duration of `EndBlock` for a given module | ms | summary | +| `store_iavl_get` | Duration of an IAVL `Store#Get` call | ms | summary | +| `store_iavl_set` | Duration of an IAVL `Store#Set` call | ms | summary | +| `store_iavl_has` | Duration of an IAVL `Store#Has` call | ms | summary | +| `store_iavl_delete` | Duration of an IAVL `Store#Delete` call | ms | summary | +| `store_iavl_commit` | Duration of an IAVL `Store#Commit` call | ms | summary | +| `store_iavl_query` | Duration of an IAVL `Store#Query` call | ms | summary | +| `store_gaskv_get` | Duration of a GasKV `Store#Get` call | ms | summary | +| `store_gaskv_set` | Duration of a GasKV `Store#Set` call | ms | summary | +| `store_gaskv_has` | Duration of a GasKV `Store#Has` call | ms | summary | +| `store_gaskv_delete` | Duration of a GasKV `Store#Delete` call | ms | summary | +| `store_cachekv_get` | Duration of a CacheKV `Store#Get` call | ms | summary | +| `store_cachekv_set` | Duration of a CacheKV `Store#Set` call | ms | summary | +| `store_cachekv_write` | Duration of a CacheKV `Store#Write` call | ms | summary | +| `store_cachekv_delete` | Duration of a CacheKV `Store#Delete` call | ms | summary | + +## Next {hide} + +Learn about the [object-capability](./ocap.md) model {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/transaction_flow.svg b/versioned_docs/version-0.45/develop/advanced-concepts/transaction_flow.svg new file mode 100644 index 000000000..1ae962de3 --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/transaction_flow.svg @@ -0,0 +1,48 @@ +UserUserbaseAppbaseApprouterrouterhandlerhandlermsgServermsgServerkeeperkeeperContext.EventManagerContext.EventManagerTransaction Type<Tx>Route(ctx, msgRoute)handlerMsg<Tx>(Context, Msg(...))<Tx>(Context, Msg)alt[addresses invalid, denominations wrong, etc.]errorperform action, update contextresults, error codeEmit relevant eventsmaybe wrap results in more structureresult, error coderesults, error code \ No newline at end of file diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/transactions.md b/versioned_docs/version-0.45/develop/advanced-concepts/transactions.md new file mode 100644 index 000000000..710df881a --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/transactions.md @@ -0,0 +1,159 @@ + + +# Transactions + +`Transactions` are objects created by end-users to trigger state changes in the application. {synopsis} + +## Pre-requisite Readings + +- [Anatomy of an SDK Application](../basics/app-anatomy.md) {prereq} + +## Transactions + +Transactions are comprised of metadata held in [contexts](./context.md) and [`sdk.Msg`s](../building-modules/messages-and-queries.md) that trigger state changes within a module through the module's Protobuf [`Msg` service](../building-modules/msg-services.md). + +When users want to interact with an application and make state changes (e.g. sending coins), they create transactions. Each of a transaction's `sdk.Msg` must be signed using the private key associated with the appropriate account(s), before the transaction is broadcasted to the network. A transaction must then be included in a block, validated, and approved by the network through the consensus process. To read more about the lifecycle of a transaction, click [here](../basics/tx-lifecycle.md). + +## Type Definition + +Transaction objects are SDK types that implement the `Tx` interface + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/types/tx_msg.go#L49-L57 + +It contains the following methods: + +- **GetMsgs:** unwraps the transaction and returns a list of contained `sdk.Msg`s - one transaction may have one or multiple messages, which are defined by module developers. +- **ValidateBasic:** lightweight, [_stateless_](../basics/tx-lifecycle.md#types-of-checks) checks used by ABCI messages [`CheckTx`](./baseapp.md#checktx) and [`DeliverTx`](./baseapp.md#delivertx) to make sure transactions are not invalid. For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/master/x/auth) module's `StdTx` `ValidateBasic` function checks that its transactions are signed by the correct number of signers and that the fees do not exceed what the user's maximum. Note that this function is to be distinct from `sdk.Msg` [`ValidateBasic`](../basics/tx-lifecycle.md#ValidateBasic) methods, which perform basic validity checks on messages only. When [`runTx`](./baseapp.md#runtx) is checking a transaction created from the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/master/x/auth/spec) module, it first runs `ValidateBasic` on each message, then runs the `auth` module AnteHandler which calls `ValidateBasic` for the transaction itself. + +As a developer, you should rarely manipulate `Tx` directly, as `Tx` is really an intermediate type used for transaction generation. Instead, developers should prefer the `TxBuilder` interface, which you can learn more about [below](#transaction-generation). + +### Signing Transactions + +Every message in a transaction must be signed by the addresses specified by its `GetSigners`. The SDK currently allows signing transactions in two different ways. + +#### `SIGN_MODE_DIRECT` (preferred) + +The most used implementation of the `Tx` interface is the Protobuf `Tx` message, which is used in `SIGN_MODE_DIRECT`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/proto/cosmos/tx/v1beta1/tx.proto#L12-L25 + +Because Protobuf serialization is not deterministic, the SDK uses an additional `TxRaw` type to denote the pinned bytes over which a transaction is signed. Any user can generate a valid `body` and `auth_info` for a transaction, and serialize these two messages using Protobuf. `TxRaw` then pins the user's exact binary representation of `body` and `auth_info`, called respectively `body_bytes` and `auth_info_bytes`. The document that is signed by all signers of the transaction is `SignDoc` (deterministically serialized using [ADR-027](../architecture/adr-027-deterministic-protobuf-serialization.md)): + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/proto/cosmos/tx/v1beta1/tx.proto#L47-L64 + +Once signed by all signers, the `body_bytes`, `auth_info_bytes` and `signatures` are gathered into `TxRaw`, whose serialized bytes are broadcasted over the network. + +#### `SIGN_MODE_LEGACY_AMINO_JSON` + +The legacy implemention of the `Tx` interface is the `StdTx` struct from `x/auth`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/x/auth/legacy/legacytx/stdtx.go#L120-L130 + +The document signed by all signers is `StdSignDoc`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/x/auth/legacy/legacytx/stdsign.go#L20-L33 + +which is encoded into bytes using Amino JSON. Once all signatures are gathered into `StdTx`, `StdTx` is serialized using Amino JSON, and these bytes are broadcasted over the network. + +#### Other Sign Modes + +Other sign modes, most notably `SIGN_MODE_TEXTUAL`, are being discussed. If you wish to learn more about them, please refer to [ADR-020](../architecture/adr-020-protobuf-transaction-encoding.md). + +## Transaction Process + +The process of an end-user sending a transaction is: + +- decide on the messages to put into the transaction, +- generate the transaction using the SDK's `TxBuilder`, +- broadcast the transaction using one of the available interfaces. + +The next paragraphs will describe each of these components, in this order. + +### Messages + +::: tip +Module `sdk.Msg`s are not to be confused with [ABCI Messages](https://tendermint.com/docs/spec/abci/abci.html#messages) which define interactions between the Tendermint and application layers. +::: + +**Messages** (or `sdk.Msg`s) are module-specific objects that trigger state transitions within the scope of the module they belong to. Module developers define the messages for their module by adding methods to the Protobuf [`Msg` service](../building-modules/msg-services.md), and also implement the corresponding `MsgServer`. + +Each `sdk.Msg`s is related to exactly one Protobuf [`Msg` service](../building-modules/msg-services.md) RPC, defined inside each module's `tx.proto` file. An SKD app router automatically maps every `sdk.Msg` to a corresponding RPC. Protobuf generates a `MsgServer` interface for each module `Msg` service, and the module developer needs to implement this interface. +This design puts more responsibility on module developers, allowing application developers to reuse common functionalities without having to implement state transition logic repetitively. + +To learn more about Protobuf `Msg` services and how to implement `MsgServer`, click [here](../building-modules/msg-services.md). + +While messages contain the information for state transition logic, a transaction's other metadata and relevant information are stored in the `TxBuilder` and `Context`. + +### Transaction Generation + +The `TxBuilder` interface contains data closely related with the generation of transactions, which an end-user can freely set to generate the desired transaction: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/client/tx_config.go#L32-L45 + +- `Msg`s, the array of [messages](#messages) included in the transaction. +- `GasLimit`, option chosen by the users for how to calculate how much gas they will need to pay. +- `Memo`, a note or comment to send with the transaction. +- `FeeAmount`, the maximum amount the user is willing to pay in fees. +- `TimeoutHeight`, block height until which the transaction is valid. +- `Signatures`, the array of signatures from all signers of the transaction. + +As there are currently two sign modes for signing transactions, there are also two implementations of `TxBuilder`: + +- [wrapper](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/x/auth/tx/builder.go#L19-L33) for creating transactions for `SIGN_MODE_DIRECT`, +- [StdTxBuilder](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/x/auth/legacy/legacytx/stdtx_builder.go#L14-L20) for `SIGN_MODE_LEGACY_AMINO_JSON`. + +However, the two implementation of `TxBuilder` should be hidden away from end-users, as they should prefer using the overarching `TxConfig` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/client/tx_config.go#L21-L30 + +`TxConfig` is an app-wide configuration for managing transactions. Most importantly, it holds the information about whether to sign each transaction with `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. By calling `txBuilder := txConfig.NewTxBuilder()`, a new `TxBuilder` will be created with the appropriate sign mode. + +Once `TxBuilder` is correctly populated with the setters exposed above, `TxConfig` will also take care of correctly encoding the bytes (again, either using `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`). Here's a pseudo-code snippet of how to generate and encode a transaction, using the `TxEncoder()` method: + +```go +txBuilder := txConfig.NewTxBuilder() +txBuilder.SetMsgs(...) // and other setters on txBuilder + +bz, err := txConfig.TxEncoder()(txBuilder.GetTx()) +// bz are bytes to be broadcasted over the network +``` + +### Broadcasting the Transaction + +Once the transaction bytes are generated, there are currently three ways of broadcasting it. + +#### CLI + +Application developers create entrypoints to the application by creating a [command-line interface](../core/cli.md), [gRPC and/or REST interface](../core/grpc_rest.md), typically found in the application's `./cmd` folder. These interfaces allow users to interact with the application through command-line. + +For the [command-line interface](../building-modules/module-interfaces.md#cli), module developers create subcommands to add as children to the application top-level transaction command `TxCmd`. CLI commands actually bundle all the steps of transaction processing into one simple command: creating messages, generating transactions and broadcasting. For concrete examples, see the [Interacting with a Node](../run-node/interact-node.md) section. An example transaction made using CLI looks like: + +```bash +simd tx send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake +``` + +#### gRPC + +[gRPC](https://grpc.io) is introduced in Cosmos SDK 0.40 as the main component for the SDK's RPC layer. The principal usage of gRPC is in the context of modules' [`Query` services](../building-modules). However, the SDK also exposes a few other module-agnostic gRPC services, one of them being the `Tx` service: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/proto/cosmos/tx/v1beta1/service.proto + +The `Tx` service exposes a handful of utility functions, such as simulating a transaction or querying a transaction, and also one method to broadcast transactions. + +Examples of broadcasting and simulating a transaction are shown [here](../run-node/txs.md#programmatically-with-go). + +#### REST + +Each gRPC method has its corresponding REST endpoint, generated using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). Therefore, instead of using gRPC, you can also use HTTP to broadcast the same transaction, on the `POST /cosmos/tx/v1beta1/txs` endpoint. + +An example can be seen [here](../run-node/txs.md#using-rest) + +#### Tendermint RPC + +The three methods presented above are actually higher abstractions over the Tendermint RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.tendermint.com/master/rpc/#/Tx). This means that you can use the Tendermint RPC endpoints directly to broadcast the transaction, if you wish so. + +## Next {hide} + +Learn about the [context](./context.md) {hide} diff --git a/versioned_docs/version-0.45/develop/advanced-concepts/upgrade.md b/versioned_docs/version-0.45/develop/advanced-concepts/upgrade.md new file mode 100644 index 000000000..c1cf37acd --- /dev/null +++ b/versioned_docs/version-0.45/develop/advanced-concepts/upgrade.md @@ -0,0 +1,160 @@ + + +# In-Place Store Migrations + +::: warning +Read and understand all of the in-place store migration documentation before you run a migration on a live chain. +::: + +Upgrade your app modules smoothly with custom in-place store migration logic. {synopsis} + +The Cosmos SDK uses two methods to perform upgrades. + +- Exporting the entire application state to a JSON file using the `export` CLI command, making changes, and then starting a new binary with the changed JSON file as the genesis file. See [Chain Upgrade Guide to v0.42](/v0.42/migrations/chain-upgrade-guide-040.html). + +- Version v0.44 and later can perform upgrades in place to significantly decrease the upgrade time for chains with a larger state. Use the [Module Upgrade Guide](../building-modules/upgrade.md) to set up your application modules to take advantage of in-place upgrades. + +This document provides steps to use the In-Place Store Migrations upgrade method. + +## Tracking Module Versions + +Each module gets assigned a consensus version by the module developer. The consensus version serves as the breaking change version of the module. The Cosmos SDK keeps track of all module consensus versions in the x/upgrade `VersionMap` store. During an upgrade, the difference between the old `VersionMap` stored in state and the new `VersionMap` is calculated by the Cosmos SDK. For each identified difference, the module-specific migrations are run and the respective consensus version of each upgraded module is incremented. + +### Consensus Version + +The consensus version is defined on each app module by the module developer and serves as the breaking change version of the module. The consensus version informs the SDK on which modules need to be upgraded. For example, if the bank module was version 2 and an upgrade introduces bank module 3, the SDK upgrades the bank module and runs the "version 2 to 3" migration script. + +### Version Map + +The version map is a mapping of module names to consensus versions. The map is persisted to x/upgrade's state for use during in-place migrations. When migrations finish, the updated version map is persisted in the state. + +## Upgrade Handlers + +Upgrades use an `UpgradeHandler` to facilitate migrations. The `UpgradeHandler` functions implemented by the app developer must conform to the following function signature. These functions retrieve the `VersionMap` from x/upgrade's state and return the new `VersionMap` to be stored in x/upgrade after the upgrade. The diff between the two `VersionMap`s determines which modules need upgrading. + +```go +type UpgradeHandler func(ctx sdk.Context, plan Plan, fromVM VersionMap) (VersionMap, error) +``` + +Inside these functions, you must perform any upgrade logic to include in the provided `plan`. All upgrade handler functions must end with the following line of code: + +```go + return app.mm.RunMigrations(ctx, cfg, fromVM) +``` + +## Running Migrations + +Migrations are run inside of an `UpgradeHandler` using `app.mm.RunMigrations(ctx, cfg, vm)`. The `UpgradeHandler` functions describe the functionality to occur during an upgrade. The `RunMigration` function loops through the `VersionMap` argument and runs the migration scripts for all versions that are less than the versions of the new binary app module. After the migrations are finished, a new `VersionMap` is returned to persist the upgraded module versions to state. + +```go +cfg := module.NewConfigurator(...) +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // ... + // additional upgrade logic + // ... + + // returns a VersionMap with the updated module ConsensusVersions + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +To learn more about configuring migration scripts for your modules, see the [Module Upgrade Guide](../building-modules/upgrade.md). + +### Order Of Migrations + +By default, all migrations are run in module name alphabetical ascending order, except `x/auth` which is run last. The reason is state dependencies between x/auth and other modules (you can read more in [issue #10606](https://github.com/cosmos/cosmos-sdk/issues/10606)). + +If you want to change the order of migration then you should call `app.mm.SetOrderMigrations(module1, module2, ...)` in your app.go file. The function will panic if you forget to include a module in the argument list. + +## Adding New Modules During Upgrades + +You can introduce entirely new modules to the application during an upgrade. New modules are recognized because they have not yet been registered in `x/upgrade`'s `VersionMap` store. In this case, `RunMigrations` calls the `InitGenesis` function from the corresponding module to set up its initial state. + +### Add StoreUpgrades for New Modules + +All chains preparing to run in-place store migrations will need to manually add store upgrades for new modules and then configure the store loader to apply those upgrades. This ensures that the new module's stores are added to the multistore before the migrations begin. + +```go +upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() +if err != nil { + panic(err) +} + +if upgradeInfo.Name == "my-plan" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + storeUpgrades := storetypes.StoreUpgrades{ + // add store upgrades for new modules + // Example: + // Added: []string{"foo", "bar"}, + // ... + } + + // configure store loader that checks if version == upgradeHeight and applies store upgrades + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) +} +``` + +## Genesis State + +When starting a new chain, the consensus version of each module MUST be saved to state during the application's genesis. To save the consensus version, add the following line to the `InitChainer` method in `app.go`: + +```diff +func (app *MyApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { + ... ++ app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) + ... +} +``` + +This information is used by the Cosmos SDK to detect when modules with newer versions are introduced to the app. + +For a new module `foo`, `InitGenesis` is called by `RunMigration` only when `foo` is registered in the module manager but it's not set in the `fromVM`. Therefore, if you want to skip `InitGenesis` when a new module is added to the app, then you should set its module version in `fromVM` to the module consensus version: + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // ... + + // Set foo's version to the latest ConsensusVersion in the VersionMap. + // This will skip running InitGenesis on Foo + fromVM[foo.ModuleName] = foo.AppModule{}.ConsensusVersion() + + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +### Overwriting Genesis Functions + +The Cosmos SDK offers modules that the application developer can import in their app. These modules often have an `InitGenesis` function already defined. + +You can write your own `InitGenesis` function for an imported module. To do this, manually trigger your custom genesis function in the upgrade handler. + +::: warning +You MUST manually set the consensus version in the version map passed to the `UpgradeHandler` function. Without this, the SDK will run the Module's existing `InitGenesis` code even if you triggered your custom function in the `UpgradeHandler`. +::: + +```go +import foo "github.com/my/module/foo" + +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // Register the consensus version in the version map + // to avoid the SDK from triggering the default + // InitGenesis function. + fromVM["foo"] = foo.AppModule{}.ConsensusVersion() + + // Run custom InitGenesis for foo + app.mm["foo"].InitGenesis(ctx, app.appCodec, myCustomGenesisState) + + return app.mm.RunMigrations(ctx, cfg, fromVM) +}) +``` + +## Syncing a Full Node to an Upgraded Blockchain + +You can sync a full node to an existing blockchain which has been upgraded using Cosmovisor + +In order to successfully sync, you must start with the initial binary that the blockchain started with at genesis. Cosmovisor will handle downloading and switching to the binaries associated with each sequential upgrade. + +To learn more about Cosmovisor, see the [Cosmovisor Quick Start](../run-node/cosmovisor.md). diff --git a/versioned_docs/version-0.45/develop/high-level-concepts/README.md b/versioned_docs/version-0.45/develop/high-level-concepts/README.md new file mode 100644 index 000000000..03934dcd5 --- /dev/null +++ b/versioned_docs/version-0.45/develop/high-level-concepts/README.md @@ -0,0 +1,17 @@ + + +# Basics + +This repository contains reference documentation on the basic concepts of the Cosmos SDK. + +1. [Anatomy of an SDK Application](./app-anatomy.md) +2. [Lifecycle of a transaction](./tx-lifecycle.md) +3. [Lifecycle of a query](./query-lifecycle.md) +4. [Accounts](./accounts.md) +5. [Gas and Fees](./gas-fees.md) + +After reading the basics, head on to the [Core Reference](../core/README.md) for more advanced material. diff --git a/versioned_docs/version-0.45/develop/high-level-concepts/accounts.md b/versioned_docs/version-0.45/develop/high-level-concepts/accounts.md new file mode 100644 index 000000000..b8bcb76ae --- /dev/null +++ b/versioned_docs/version-0.45/develop/high-level-concepts/accounts.md @@ -0,0 +1,153 @@ + + +# Accounts + +This document describes the in-built account and public key system of the Cosmos SDK. {synopsis} + +### Pre-requisite Readings + +- [Anatomy of an SDK Application](./app-anatomy.md) {prereq} + +## Account Definition + +In the Cosmos SDK, an _account_ designates a pair of _public key_ `PubKey` and _private key_ `PrivKey`. The `PubKey` can be derived to generate various `Addresses`, which are used to identify users (among other parties) in the application. `Addresses` are also associated with [`message`s](../building-modules/messages-and-queries.md#messages) to identify the sender of the `message`. The `PrivKey` is used to generate [digital signatures](#signatures) to prove that an `Address` associated with the `PrivKey` approved of a given `message`. + +For HD key derivation the Cosmos SDK uses a standard called [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). The BIP32 allows users to create an HD wallet (as specified in [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)) - a set of accounts derived from an initial secret seed. A seed is usually created from a 12- or 24-word mnemonic. A single seed can derive any number of `PrivKey`s using a one-way cryptographic function. Then, a `PubKey` can be derived from the `PrivKey`. Naturally, the mnemonic is the most sensitive information, as private keys can always be re-generated if the mnemonic is preserved. + +``` + Account 0 Account 1 Account 2 + ++------------------+ +------------------+ +------------------+ +| | | | | | +| Address 0 | | Address 1 | | Address 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Public key 0 | | Public key 1 | | Public key 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Private key 0 | | Private key 1 | | Private key 2 | +| ^ | | ^ | | ^ | ++------------------+ +------------------+ +------------------+ + | | | + | | | + | | | + +--------------------------------------------------------------------+ + | + | + +---------+---------+ + | | + | Master PrivKey | + | | + +-------------------+ + | + | + +---------+---------+ + | | + | Mnemonic (Seed) | + | | + +-------------------+ +``` + +In the Cosmos SDK, keys are stored and managed by using an object called a [`Keyring`](#keyring). + +## Keys, accounts, addresses, and signatures + +The principal way of authenticating a user is done using [digital signatures](https://en.wikipedia.org/wiki/Digital_signature). Users sign transactions using their own private key. Signature verification is done with the associated public key. For on-chain signature verification purposes, we store the public key in an `Account` object (alongside other data required for a proper transaction validation). + +In the node, all data is stored using Protocol Buffers serialization. + +The Cosmos SDK supports the following digital key schemes for creating digital signatures: + +- `secp256k1`, as implemented in the [SDK's `crypto/keys/secp256k1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/crypto/keys/secp256k1/secp256k1.go). +- `secp256r1`, as implemented in the [SDK's `crypto/keys/secp256r1` package](https://github.com/cosmos/cosmos-sdk/blob/master/crypto/keys/secp256r1/pubkey.go), +- `tm-ed25519`, as implemented in the [SDK `crypto/keys/ed25519` package](https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/crypto/keys/ed25519/ed25519.go). This scheme is supported only for the consensus validation. + +| | Address length | Public key length | Used for transaction | Used for consensus | +| | in bytes | in bytes | authentication | (tendermint) | +|--------------+----------------+-------------------+----------------------+--------------------| +| `secp256k1` | 20 | 33 | yes | no | +| `secp256r1` | 32 | 33 | yes | no | +| `tm-ed25519` | -- not used -- | 32 | no | yes | + +## Addresses + +`Addresses` and `PubKey`s are both public information that identifies actors in the application. `Account` is used to store authentication information. The basic account implementation is provided by a `BaseAccount` object. + +Each account is identified using `Address` which is a sequence of bytes derived from a public key. In SDK, we define 3 types of addresses that specify a context where an account is used: + +- `AccAddress` identifies users (the sender of a `message`). +- `ValAddress` identifies validator operators. +- `ConsAddress` identifies validator nodes that are participating in consensus. Validator nodes are derived using the **`ed25519`** curve. + +These types implement the `Address` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/types/address.go#L71-L90 + +Address construction algorithm is defined in [ADR-28](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-028-public-key-addresses.md). +Here is the standard way to obtain an account address from a `pub` public key: + +```go +sdk.AccAddress(pub.Address().Bytes()) +``` + +Of note, the `Marshal()` and `Bytes()` method both return the same raw `[]byte` form of the address. `Marshal()` is required for Protobuf compatibility. + +For user interaction, addresses are formatted using [Bech32](https://en.bitcoin.it/wiki/Bech32) and implemented by the `String` method. The Bech32 method is the only supported format to use when interacting with a blockchain. The Bech32 human-readable part (Bech32 prefix) is used to denote an address type. Example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/types/address.go#L230-L244 + +| | Address Bech32 Prefix | +| ------------------ | --------------------- | +| Accounts | cosmos | +| Validator Operator | cosmosvaloper | +| Consensus Nodes | cosmosvalcons | + +### Public Keys + +Public keys in Cosmos SDK are defined by `cryptotypes.PubKey` interface. Since public keys are saved in a store, `cryptotypes.PubKey` extends the `proto.Message` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/crypto/types/types.go#L8-L17 + +A compressed format is used for `secp256k1` and `secp256r1` serialization. + +- The first byte is a `0x02` byte if the `y`-coordinate is the lexicographically largest of the two associated with the `x`-coordinate. +- Otherwise the first byte is a `0x03`. + +This prefix is followed by the `x`-coordinate. + +Public Keys are not used to reference accounts (or users) and in general are not used when composing transaction messages (with few exceptions: `MsgCreateValidator`, `Validator` and `Multisig` messages). +For user interactions, `PubKey` is formatted using Protobufs JSON ([ProtoMarshalJSON](https://github.com/cosmos/cosmos-sdk/blob/release/v0.42.x/codec/json.go#L12) function). Example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/7568b66/crypto/keyring/output.go#L23-L39 + +## Keyring + +A `Keyring` is an object that stores and manages accounts. In the Cosmos SDK, a `Keyring` implementation follows the `Keyring` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/crypto/keyring/keyring.go#L51-L89 + +The default implementation of `Keyring` comes from the third-party [`99designs/keyring`](https://github.com/99designs/keyring) library. + +A few notes on the `Keyring` methods: + +- `Sign(uid string, payload []byte) ([]byte, sdkcrypto.PubKey, error)` strictly deals with the signature of the `payload` bytes. You must prepare and encode the transaction into a canonical `[]byte` form. Because protobuf is not deterministic, it has been decided in [ADR-020](../architecture/adr-020-protobuf-transaction-encoding.md) that the canonical `payload` to sign is the `SignDoc` struct, deterministically encoded using [ADR-027](adr-027-deterministic-protobuf-serialization.md). Note that signature verification is not implemented in the SDK by default, it is deferred to the [`anteHandler`](../core/baseapp.md#antehandler). + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/proto/cosmos/tx/v1beta1/tx.proto#L47-L64 + +- `NewAccount(uid, mnemonic, bip39Passwd, hdPath string, algo SignatureAlgo) (Info, error)` creates a new account based on the [`bip44 path`](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) and persists it on disk. The `PrivKey` is **never stored unencrypted**, instead it is [encrypted with a passphrase](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/crypto/armor.go) before being persisted. In the context of this method, the key type and sequence number refer to the segment of the BIP44 derivation path (for example, `0`, `1`, `2`, ...) that is used to derive a private and a public key from the mnemonic. Using the same mnemonic and derivation path, the same `PrivKey`, `PubKey` and `Address` is generated. The following keys are supported by the keyring: + +- `secp256k1` +- `ed25519` + +- `ExportPrivKeyArmor(uid, encryptPassphrase string) (armor string, err error)` exports a private key in ASCII-armored encrypted format using the given passphrase. You can then either import the private key again into the keyring using the `ImportPrivKey(uid, armor, passphrase string)` function or decrypt it into a raw private key using the `UnarmorDecryptPrivKey(armorStr string, passphrase string)` function. + +## Next {hide} + +Learn about [gas and fees](./gas-fees.md) {hide} diff --git a/versioned_docs/version-0.45/develop/high-level-concepts/app-anatomy.md b/versioned_docs/version-0.45/develop/high-level-concepts/app-anatomy.md new file mode 100644 index 000000000..0373d24aa --- /dev/null +++ b/versioned_docs/version-0.45/develop/high-level-concepts/app-anatomy.md @@ -0,0 +1,264 @@ + + +# Anatomy of an SDK Application + +This document describes the core parts of a Cosmos SDK application. Throughout the document, a placeholder application named `app` will be used. {synopsis} + +## Node Client + +The Daemon, or [Full-Node Client](../core/node.md), is the core process of an SDK-based blockchain. Participants in the network run this process to initialize their state-machine, connect with other full-nodes and update their state-machine as new blocks come in. + +``` + ^ +-------------------------------+ ^ + | | | | + | | State-machine = Application | | + | | | | Built with Cosmos SDK + | | ^ + | | + | +----------- | ABCI | ----------+ v + | | + v | ^ + | | | | +Blockchain Node | | Consensus | | + | | | | + | +-------------------------------+ | Tendermint Core + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +The blockchain full-node presents itself as a binary, generally suffixed by `-d` for "daemon" (e.g. `appd` for `app` or `gaiad` for `gaia`). This binary is built by running a simple [`main.go`](../core/node.md#main-function) function placed in `./cmd/appd/`. This operation usually happens through the [Makefile](#dependencies-and-makefile). + +Once the main binary is built, the node can be started by running the [`start` command](../core/node.md#start-command). This command function primarily does three things: + +1. Create an instance of the state-machine defined in [`app.go`](#core-application-file). +2. Initialize the state-machine with the latest known state, extracted from the `db` stored in the `~/.app/data` folder. At this point, the state-machine is at height `appBlockHeight`. +3. Create and start a new Tendermint instance. Among other things, the node will perform a handshake with its peers. It will get the latest `blockHeight` from them, and replay blocks to sync to this height if it is greater than the local `appBlockHeight`. If `appBlockHeight` is `0`, the node is starting from genesis and Tendermint sends an `InitChain` message via the ABCI to the `app`, which triggers the [`InitChainer`](#initchainer). + +## Core Application File + +In general, the core of the state-machine is defined in a file called `app.go`. It mainly contains the **type definition of the application** and functions to **create and initialize it**. + +### Type Definition of the Application + +The first thing defined in `app.go` is the `type` of the application. It is generally comprised of the following parts: + +- **A reference to [`baseapp`](../core/baseapp.md).** The custom application defined in `app.go` is an extension of `baseapp`. When a transaction is relayed by Tendermint to the application, `app` uses `baseapp`'s methods to route them to the appropriate module. `baseapp` implements most of the core logic for the application, including all the [ABCI methods](https://tendermint.com/docs/spec/abci/abci.html#overview) and the [routing logic](../core/baseapp.md#routing). +- **A list of store keys**. The [store](../core/store.md), which contains the entire state, is implemented as a [`multistore`](../core/store.md#multistore) (i.e. a store of stores) in the Cosmos SDK. Each module uses one or multiple stores in the multistore to persist their part of the state. These stores can be accessed with specific keys that are declared in the `app` type. These keys, along with the `keepers`, are at the heart of the [object-capabilities model](../core/ocap.md) of the Cosmos SDK. +- **A list of module's `keeper`s.** Each module defines an abstraction called [`keeper`](../building-modules/keeper.md), which handles reads and writes for this module's store(s). The `keeper`'s methods of one module can be called from other modules (if authorized), which is why they are declared in the application's type and exported as interfaces to other modules so that the latter can only access the authorized functions. +- **A reference to an [`appCodec`](../core/encoding.md).** The application's `appCodec` is used to serialize and deserialize data structures in order to store them, as stores can only persist `[]bytes`. The default codec is [Protocol Buffers](../core/encoding.md). +- **A reference to a [`legacyAmino`](../core/encoding.md) codec.** Some parts of the SDK have not been migrated to use the `appCodec` above, and are still hardcoded to use Amino. Other parts explicity use Amino for backwards compatibility. For these reasons, the application still holds a reference to the legacy Amino codec. Please note that the Amino codec will be removed from the SDK in the upcoming releases. +- **A reference to a [module manager](../building-modules/module-manager.md#manager)** and a [basic module manager](../building-modules/module-manager.md#basicmanager). The module manager is an object that contains a list of the application's module. It facilitates operations related to these modules, like registering their [`Msg` service](../core/baseapp.md#msg-services) and [gRPC `Query` service](../core/baseapp.md#grpc-query-services), or setting the order of execution between modules for various functions like [`InitChainer`](#initchainer), [`BeginBlocker` and `EndBlocker`](#beginblocker-and-endblocker). + +See an example of application type definition from `simapp`, the SDK's own app used for demo and testing purposes: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/simapp/app.go#L145-L187 + +### Constructor Function + +This function constructs a new application of the type defined in the section above. It must fulfill the `AppCreator` signature in order to be used in the [`start` command](../core/node.md#start-command) of the application's daemon command. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/server/types/app.go#L48-L50 + +Here are the main actions performed by this function: + +- Instantiate a new [`codec`](../core/encoding.md) and initialize the `codec` of each of the application's module using the [basic manager](../building-modules/module-manager.md#basicmanager) +- Instantiate a new application with a reference to a `baseapp` instance, a codec and all the appropriate store keys. +- Instantiate all the [`keeper`s](#keeper) defined in the application's `type` using the `NewKeeper` function of each of the application's modules. Note that `keepers` must be instantiated in the correct order, as the `NewKeeper` of one module might require a reference to another module's `keeper`. +- Instantiate the application's [module manager](../building-modules/module-manager.md#manager) with the [`AppModule`](#application-module-interface) object of each of the application's modules. +- With the module manager, initialize the application's [`Msg` services](../core/baseapp.md#msg-services), [gRPC `Query` services](../core/baseapp.md#grpc-query-services), [legacy `Msg` routes](../core/baseapp.md#routing) and [legacy query routes](../core/baseapp.md#query-routing). When a transaction is relayed to the application by Tendermint via the ABCI, it is routed to the appropriate module's [`Msg` service](#msg-services) using the routes defined here. Likewise, when a gRPC query request is received by the application, it is routed to the appropriate module's [`gRPC query service`](#grpc-query-services) using the gRPC routes defined here. The SDK still supports legacy `Msg`s and legacy Tendermint queries, which are routed using respectively the legacy `Msg` routes and the legacy query routes. +- With the module manager, register the [application's modules' invariants](../building-modules/invariants.md). Invariants are variables (e.g. total supply of a token) that are evaluated at the end of each block. The process of checking invariants is done via a special module called the [`InvariantsRegistry`](../building-modules/invariants.md#invariant-registry). The value of the invariant should be equal to a predicted value defined in the module. Should the value be different than the predicted one, special logic defined in the invariant registry will be triggered (usually the chain is halted). This is useful to make sure no critical bug goes unnoticed and produces long-lasting effects that would be hard to fix. +- With the module manager, set the order of execution between the `InitGenesis`, `BeginBlocker` and `EndBlocker` functions of each of the [application's modules](#application-module-interface). Note that not all modules implement these functions. +- Set the remainer of application's parameters: + - [`InitChainer`](#initchainer): used to initialize the application when it is first started. + - [`BeginBlocker`, `EndBlocker`](#beginblocker-and-endlbocker): called at the beginning and the end of every block). + - [`anteHandler`](../core/baseapp.md#antehandler): used to handle fees and signature verification. +- Mount the stores. +- Return the application. + +Note that this function only creates an instance of the app, while the actual state is either carried over from the `~/.app/data` folder if the node is restarted, or generated from the genesis file if the node is started for the first time. + +See an example of application constructor from `simapp`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/simapp/app.go#L198-L441 + +### InitChainer + +The `InitChainer` is a function that initializes the state of the application from a genesis file (i.e. token balances of genesis accounts). It is called when the application receives the `InitChain` message from the Tendermint engine, which happens when the node is started at `appBlockHeight == 0` (i.e. on genesis). The application must set the `InitChainer` in its [constructor](#constructor-function) via the [`SetInitChainer`](https://godoc.org/github.com/cosmos/cosmos-sdk/baseapp#BaseApp.SetInitChainer) method. + +In general, the `InitChainer` is mostly composed of the [`InitGenesis`](../building-modules/genesis.md#initgenesis) function of each of the application's modules. This is done by calling the `InitGenesis` function of the module manager, which in turn will call the `InitGenesis` function of each of the modules it contains. Note that the order in which the modules' `InitGenesis` functions must be called has to be set in the module manager using the [module manager's](../building-modules/module-manager.md) `SetOrderInitGenesis` method. This is done in the [application's constructor](#application-constructor), and the `SetOrderInitGenesis` has to be called before the `SetInitChainer`. + +See an example of an `InitChainer` from `simapp`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/simapp/app.go#L464-L471 + +### BeginBlocker and EndBlocker + +The SDK offers developers the possibility to implement automatic execution of code as part of their application. This is implemented through two function called `BeginBlocker` and `EndBlocker`. They are called when the application receives respectively the `BeginBlock` and `EndBlock` messages from the Tendermint engine, which happens at the beginning and at the end of each block. The application must set the `BeginBlocker` and `EndBlocker` in its [constructor](#constructor-function) via the [`SetBeginBlocker`](https://godoc.org/github.com/cosmos/cosmos-sdk/baseapp#BaseApp.SetBeginBlocker) and [`SetEndBlocker`](https://godoc.org/github.com/cosmos/cosmos-sdk/baseapp#BaseApp.SetEndBlocker) methods. + +In general, the `BeginBlocker` and `EndBlocker` functions are mostly composed of the [`BeginBlock` and `EndBlock`](../building-modules/beginblock-endblock.md) functions of each of the application's modules. This is done by calling the `BeginBlock` and `EndBlock` functions of the module manager, which in turn will call the `BeginBLock` and `EndBlock` functions of each of the modules it contains. Note that the order in which the modules' `BegingBlock` and `EndBlock` functions must be called has to be set in the module manager using the `SetOrderBeginBlock` and `SetOrderEndBlock` methods respectively. This is done via the [module manager](../building-modules/module-manager.md) in the [application's constructor](#application-constructor), and the `SetOrderBeginBlock` and `SetOrderEndBlock` methods have to be called before the `SetBeginBlocker` and `SetEndBlocker` functions. + +As a sidenote, it is important to remember that application-specific blockchains are deterministic. Developers must be careful not to introduce non-determinism in `BeginBlocker` or `EndBlocker`, and must also be careful not to make them too computationally expensive, as [gas](./gas-fees.md) does not constrain the cost of `BeginBlocker` and `EndBlocker` execution. + +See an example of `BeginBlocker` and `EndBlocker` functions from `simapp` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/simapp/app.go#L454-L462 + +### Register Codec + +The `EncodingConfig` structure is the last important part of the `app.go` file. The goal of this structure is to define the codecs that will be used throughout the app. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/simapp/params/encoding.go#L9-L16 + +Here are descriptions of what each of the four fields means: + +- `InterfaceRegistry`: The `InterfaceRegistry` is used by the Protobuf codec to handle interfaces that are encoded and decoded (we also say "unpacked") using [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). `Any` could be thought as a struct that contains a `type_url` (name of a concrete type implementing the interface) and a `value` (its encoded bytes). `InterfaceRegistry` provides a mechanism for registering interfaces and implementations that can be safely unpacked from `Any`. Each of the application's modules implements the `RegisterInterfaces` method that can be used to register the module's own interfaces and implementations. + - You can read more about Any in [ADR-19](../architecture/adr-019-protobuf-state-encoding.md#usage-of-any-to-encode-interfaces). + - To go more into details, the SDK uses an implementation of the Protobuf specification called [`gogoprotobuf`](https://github.com/gogo/protobuf). By default, the [gogo protobuf implementation of `Any`](https://godoc.org/github.com/gogo/protobuf/types) uses [global type registration](https://github.com/gogo/protobuf/blob/master/proto/properties.go#L540) to decode values packed in `Any` into concrete Go types. This introduces a vulnerability where any malicious module in the dependency tree could registry a type with the global protobuf registry and cause it to be loaded and unmarshaled by a transaction that referenced it in the `type_url` field. For more information, please refer to [ADR-019](../architecture/adr-019-protobuf-state-encoding.md). +- `Marshaler`: the default codec used throughout the SDK. It is composed of a `BinaryCodec` used to encode and decode state, and a `JSONCodec` used to output data to the users (for example in the [CLI](#cli)). By default, the SDK uses Protobuf as `Marshaler`. +- `TxConfig`: `TxConfig` defines an interface a client can utilize to generate an application-defined concrete transaction type. Currently, the SDK handles two transaction types: `SIGN_MODE_DIRECT` (which uses Protobuf binary as over-the-wire encoding) and `SIGN_MODE_LEGACY_AMINO_JSON` (which depends on Amino). Read more about transactions [here](../core/transactions.md). +- `Amino`: Some legacy parts of the SDK still use Amino for backwards-compatibility. Each module exposes a `RegisterLegacyAmino` method to register the module's specific types within Amino. This `Amino` codec should not be used by app developers anymore, and will be removed in future releases. + +The SDK exposes a `MakeTestEncodingConfig` function used to create a `EncodingConfig` for the app constructor (`NewApp`). It uses Protobuf as a default `Marshaler`. +NOTE: this function is marked deprecated and should only be used to create an app or in tests. We are working on refactoring codec management in a post Stargate release. + +See an example of a `MakeTestEncodingConfig` from `simapp`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/590358652cc1cbc13872ea1659187e073ea38e75/simapp/encoding.go#L8-L19 + +## Modules + +[Modules](../building-modules/intro.md) are the heart and soul of SDK applications. They can be considered as state-machines within the state-machine. When a transaction is relayed from the underlying Tendermint engine via the ABCI to the application, it is routed by [`baseapp`](../core/baseapp.md) to the appropriate module in order to be processed. This paradigm enables developers to easily build complex state-machines, as most of the modules they need often already exist. For developers, most of the work involved in building an SDK application revolves around building custom modules required by their application that do not exist yet, and integrating them with modules that do already exist into one coherent application. In the application directory, the standard practice is to store modules in the `x/` folder (not to be confused with the SDK's `x/` folder, which contains already-built modules). + +### Application Module Interface + +Modules must implement [interfaces](../building-modules/module-manager.md#application-module-interfaces) defined in the Cosmos SDK, [`AppModuleBasic`](../building-modules/module-manager.md#appmodulebasic) and [`AppModule`](../building-modules/module-manager.md#appmodule). The former implements basic non-dependant elements of the module, such as the `codec`, while the latter handles the bulk of the module methods (including methods that require references to other modules' `keeper`s). Both the `AppModule` and `AppModuleBasic` types are defined in a file called `./module.go`. + +`AppModule` exposes a collection of useful methods on the module that facilitates the composition of modules into a coherent application. These methods are are called from the `module manager`(../building-modules/module-manager.md#manager), which manages the application's collection of modules. + +### `Msg` Services + +Each module defines two [Protobuf services](https://developers.google.com/protocol-buffers/docs/proto#services): one `Msg` service to handle messages, and one gRPC `Query` service to handle queries. If we consider the module as a state-machine, then a `Msg` service is a set of state transition RPC methods. +Each Protobuf `Msg` service method is 1:1 related to a Protobuf request type, which must implement `sdk.Msg` interface. +Note that `sdk.Msg`s are bundled in [transactions](../core/transactions.md), and each transaction contains one or multiple messages. + +When a valid block of transactions is received by the full-node, Tendermint relays each one to the application via [`DeliverTx`](https://tendermint.com/docs/app-dev/abci-spec.html#delivertx). Then, the application handles the transaction: + +1. Upon receiving the transaction, the application first unmarshalls it from `[]bytes`. +2. Then, it verifies a few things about the transaction like [fee payment and signatures](#gas-fees.md#antehandler) before extracting the `Msg`(s) contained in the transaction. +3. `sdk.Msg`s are encoded using Protobuf [`Any`s](#register-codec). By analyzing each `Any`'s `type_url`, baseapp's `msgServiceRouter` routes the `sdk.Msg` to the corresponding module's `Msg` service. +4. If the message is successfully processed, the state is updated. + +For a more details look at a transaction [lifecycle](./tx-lifecycle.md). + +Module developers create custom `Msg` services when they build their own module. The general practice is to define the `Msg` Protobuf service in a `tx.proto` file. For example, the `x/bank` module defines a service with two methods to transfer tokens: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/proto/cosmos/bank/v1beta1/tx.proto#L10-L17 + +Service methods use `keeper` in order to update the module state. + +Each module should also implement the `RegisterServices` method as part of the [`AppModule` interface](#application-module-interface). This method should call the `RegisterMsgServer` function provided by the generated Protobuf code. + +### gRPC `Query` Services + +gRPC `Query` services are introduced in the v0.40 Stargate release. They allow users to query the state using [gRPC](https://grpc.io). They are enabled by default, and can be configued under the `grpc.enable` and `grpc.address` fields inside [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). + +gRPC `Query` services are defined in the module's Protobuf definition files, specifically inside `query.proto`. The `query.proto` definition file exposes a single `Query` [Protobuf service](https://developers.google.com/protocol-buffers/docs/proto#services). Each gRPC query endpoint corresponds to a service method, starting with the `rpc` keyword, inside the `Query` service. + +Protobuf generates a `QueryServer` interface for each module, containing all the service methods. A module's [`keeper`](#keeper) then needs to implement this `QueryServer` interface, by providing the concrete implementation of each service method. This concrete implementation is the handler of the corresponding gRPC query endpoint. + +Finally, each module should also implement the `RegisterServices` method as part of the [`AppModule` interface](#application-module-interface). This method should call the `RegisterQueryServer` function provided by the generated Protobuf code. + +### Keeper + +[`Keepers`](../building-modules/keeper.md) are the gatekeepers of their module's store(s). To read or write in a module's store, it is mandatory to go through one of its `keeper`'s methods. This is ensured by the [object-capabilities](../core/ocap.md) model of the Cosmos SDK. Only objects that hold the key to a store can access it, and only the module's `keeper` should hold the key(s) to the module's store(s). + +`Keepers` are generally defined in a file called `keeper.go`. It contains the `keeper`'s type definition and methods. + +The `keeper` type definition generally consists of: + +- **Key(s)** to the module's store(s) in the multistore. +- Reference to **other module's `keepers`**. Only needed if the `keeper` needs to access other module's store(s) (either to read or write from them). +- A reference to the application's **codec**. The `keeper` needs it to marshal structs before storing them, or to unmarshal them when it retrieves them, because stores only accept `[]bytes` as value. + +Along with the type definition, the next important component of the `keeper.go` file is the `keeper`'s constructor function, `NewKeeper`. This function instantiates a new `keeper` of the type defined above, with a `codec`, store `keys` and potentially references to other modules' `keeper`s as parameters. The `NewKeeper` function is called from the [application's constructor](#constructor-function). The rest of the file defines the `keeper`'s methods, primarily getters and setters. + +### Command-Line, gRPC Services and REST Interfaces + +Each module defines command-line commands, gRPC services and REST routes to be exposed to end-user via the [application's interfaces](#application-interfaces). This enables end-users to create messages of the types defined in the module, or to query the subset of the state managed by the module. + +#### CLI + +Generally, the [commands related to a module](../building-modules/module-interfaces.md#cli) are defined in a folder called `client/cli` in the module's folder. The CLI divides commands in two category, transactions and queries, defined in `client/cli/tx.go` and `client/cli/query.go` respectively. Both commands are built on top of the [Cobra Library](https://github.com/spf13/cobra): + +- Transactions commands let users generate new transactions so that they can be included in a block and eventually update the state. One command should be created for each [message type](#message-types) defined in the module. The command calls the constructor of the message with the parameters provided by the end-user, and wraps it into a transaction. The SDK handles signing and the addition of other transaction metadata. +- Queries let users query the subset of the state defined by the module. Query commands forward queries to the [application's query router](../core/baseapp.md#query-routing), which routes them to the appropriate [querier](#querier) the `queryRoute` parameter supplied. + +#### gRPC + +[gRPC](https://grpc.io) is a modern open source high performance RPC framework that has support in multiple languages. It is the recommended way for external clients (such as wallets, browsers and other backend services) to interact with a node. + +Each module can expose gRPC endpoints, called [service methods](https://grpc.io/docs/what-is-grpc/core-concepts/#service-definition) and are defined in the [module's Protobuf `query.proto` file](#grpc-query-services). A service method is defined by its name, input arguments and output response. The module then needs to: + +- define a `RegisterGRPCGatewayRoutes` method on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. +- for each service method, define a corresponding handler. The handler implements the core logic necessary to serve the gRPC request, and is located in the `keeper/grpc_query.go` file. + +#### gRPC-gateway REST Endpoints + +Some external clients may not wish to use gRPC. The SDK provides in this case a gRPC gateway service, which exposes each gRPC service as a correspoding REST endpoint. Please refer to the [grpc-gateway](https://grpc-ecosystem.github.io/grpc-gateway/) documentation to learn more. + +The REST endpoints are defined in the Protobuf files, along with the gRPC services, using Protobuf annotations. Modules that want to expose REST queries should add `google.api.http` annotations to their `rpc` methods. By default, all REST endpoints defined in the SDK have an URL starting with the `/cosmos/` prefix. + +The SDK also provides a development endpoint to generate [Swagger](https://swagger.io/) definition files for these REST endpoints. This endpoint can be enabled inside the [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) config file, under the `api.swagger` key. + +#### Legacy API REST Endpoints + +The [module's Legacy REST interface](../building-modules/module-interfaces.md#legacy-rest) lets users generate transactions and query the state through REST calls to the application's Legacy API Service. REST routes are defined in a file `client/rest/rest.go`, which is composed of: + +- A `RegisterRoutes` function, which registers each route defined in the file. This function is called from the [main application's interface](#application-interfaces) for each module used within the application. The router used in the SDK is [Gorilla's mux](https://github.com/gorilla/mux). +- Custom request type definitions for each query or transaction creation function that needs to be exposed. These custom request types build on the base `request` type of the Cosmos SDK: + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/types/rest/rest.go#L62-L76 +- One handler function for each request that can be routed to the given module. These functions implement the core logic necessary to serve the request. + +These Legacy API endpoints are present in the SDK for backward compatibility purposes and will be removed in the next release. + +## Application Interface + +[Interfaces](#command-line-grpc-services-and-rest-interfaces) let end-users interact with full-node clients. This means querying data from the full-node or creating and sending new transactions to be relayed by the full-node and eventually included in a block. + +The main interface is the [Command-Line Interface](../core/cli.md). The CLI of an SDK application is built by aggregating [CLI commands](#cli) defined in each of the modules used by the application. The CLI of an application is the same as the daemon (e.g. `appd`), and defined in a file called `appd/main.go`. The file contains: + +- **A `main()` function**, which is executed to build the `appd` interface client. This function prepares each command and adds them to the `rootCmd` before building them. At the root of `appd`, the function adds generic commands like `status`, `keys` and `config`, query commands, tx commands and `rest-server`. +- **Query commands** are added by calling the `queryCmd` function. This function returns a Cobra command that contains the query commands defined in each of the application's modules (passed as an array of `sdk.ModuleClients` from the `main()` function), as well as some other lower level query commands such as block or validator queries. Query command are called by using the command `appd query [query]` of the CLI. +- **Transaction commands** are added by calling the `txCmd` function. Similar to `queryCmd`, the function returns a Cobra command that contains the tx commands defined in each of the application's modules, as well as lower level tx commands like transaction signing or broadcasting. Tx commands are called by using the command `appd tx [tx]` of the CLI. + +See an example of an application's main command-line file from the [nameservice tutorial](https://github.com/cosmos/sdk-tutorials/tree/master/nameservice) + ++++ https://github.com/cosmos/sdk-tutorials/blob/86a27321cf89cc637581762e953d0c07f8c78ece/nameservice/cmd/nscli/main.go + +## Dependencies and Makefile + +::: warning +A patch introduced in `go-grpc v1.34.0` made gRPC incompatible with the `gogoproto` library, making some [gRPC queries](https://github.com/cosmos/cosmos-sdk/issues/8426) panic. As such, the SDK requires that `go-grpc <=v1.33.2` is installed in your `go.mod`. + +To make sure that gRPC is working properly, it is **highly recommended** to add the following line in your application's `go.mod`: + +``` +replace google.golang.org/grpc => google.golang.org/grpc v1.33.2 +``` + +Please see [issue #8392](https://github.com/cosmos/cosmos-sdk/issues/8392) for more info. +::: + +This section is optional, as developers are free to choose their dependency manager and project building method. That said, the current most used framework for versioning control is [`go.mod`](https://github.com/golang/go/wiki/Modules). It ensures each of the libraries used throughout the application are imported with the correct version. See an example from the [nameservice tutorial](https://github.com/cosmos/sdk-tutorials/tree/master/nameservice): + ++++ https://github.com/cosmos/sdk-tutorials/blob/c6754a1e313eb1ed973c5c91dcc606f2fd288811/go.mod#L1-L18 + +For building the application, a [Makefile](https://en.wikipedia.org/wiki/Makefile) is generally used. The Makefile primarily ensures that the `go.mod` is run before building the two entrypoints to the application, [`appd`](#node-client) and [`appd`](#application-interface). See an example of Makefile from the [nameservice tutorial](https://tutorials.cosmos.network/nameservice/tutorial/00-intro.html) + ++++ https://github.com/cosmos/sdk-tutorials/blob/86a27321cf89cc637581762e953d0c07f8c78ece/nameservice/Makefile + +## Next {hide} + +Learn more about the [Lifecycle of a transaction](./tx-lifecycle.md) {hide} diff --git a/versioned_docs/version-0.45/develop/high-level-concepts/gas-fees.md b/versioned_docs/version-0.45/develop/high-level-concepts/gas-fees.md new file mode 100644 index 000000000..0a93c1335 --- /dev/null +++ b/versioned_docs/version-0.45/develop/high-level-concepts/gas-fees.md @@ -0,0 +1,89 @@ + + +# Gas and Fees + +This document describes the default strategies to handle gas and fees within a Cosmos SDK application. {synopsis} + +### Pre-requisite Readings + +- [Anatomy of an SDK Application](./app-anatomy.md) {prereq} + +## Introduction to `Gas` and `Fees` + +In the Cosmos SDK, `gas` is a special unit that is used to track the consumption of resources during execution. `gas` is typically consumed whenever read and writes are made to the store, but it can also be consumed if expensive computation needs to be done. It serves two main purposes: + +- Make sure blocks are not consuming too many resources and will be finalized. This is implemented by default in the SDK via the [block gas meter](#block-gas-meter). +- Prevent spam and abuse from end-user. To this end, `gas` consumed during [`message`](../building-modules/messages-and-queries.md#messages) execution is typically priced, resulting in a `fee` (`fees = gas * gas-prices`). `fees` generally have to be paid by the sender of the `message`. Note that the SDK does not enforce `gas` pricing by default, as there may be other ways to prevent spam (e.g. bandwidth schemes). Still, most applications will implement `fee` mechanisms to prevent spam. This is done via the [`AnteHandler`](#antehandler). + +## Gas Meter + +In the Cosmos SDK, `gas` is a simple alias for `uint64`, and is managed by an object called a _gas meter_. Gas meters implement the `GasMeter` interface + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/store/types/gas.go#L34-L43 + +where: + +- `GasConsumed()` returns the amount of gas that was consumed by the gas meter instance. +- `GasConsumedToLimit()` returns the amount of gas that was consumed by gas meter instance, or the limit if it is reached. +- `Limit()` returns the limit of the gas meter instance. `0` if the gas meter is infinite. +- `ConsumeGas(amount Gas, descriptor string)` consumes the amount of `gas` provided. If the `gas` overflows, it panics with the `descriptor` message. If the gas meter is not infinite, it panics if `gas` consumed goes above the limit. +- `IsPastLimit()` returns `true` if the amount of gas consumed by the gas meter instance is strictly above the limit, `false` otherwise. +- `IsOutOfGas()` returns `true` if the amount of gas consumed by the gas meter instance is above or equal to the limit, `false` otherwise. + +The gas meter is generally held in [`ctx`](../core/context.md), and consuming gas is done with the following pattern: + +```go +ctx.GasMeter().ConsumeGas(amount, "description") +``` + +By default, the Cosmos SDK makes use of two different gas meters, the [main gas meter](#main-gas-metter[) and the [block gas meter](#block-gas-meter). + +### Main Gas Meter + +`ctx.GasMeter()` is the main gas meter of the application. The main gas meter is initialized in `BeginBlock` via `setDeliverState`, and then tracks gas consumption during execution sequences that lead to state-transitions, i.e. those originally triggered by [`BeginBlock`](../core/baseapp.md#beginblock), [`DeliverTx`](../core/baseapp.md#delivertx) and [`EndBlock`](../core/baseapp.md#endblock). At the beginning of each `DeliverTx`, the main gas meter **must be set to 0** in the [`AnteHandler`](#antehandler), so that it can track gas consumption per-transaction. + +Gas consumption can be done manually, generally by the module developer in the [`BeginBlocker`, `EndBlocker`](../building-modules/beginblock-endblock.md) or [`Msg` service](../building-modules/msg-services.md), but most of the time it is done automatically whenever there is a read or write to the store. This automatic gas consumption logic is implemented in a special store called [`GasKv`](../core/store.md#gaskv-store). + +### Block Gas Meter + +`ctx.BlockGasMeter()` is the gas meter used to track gas consumption per block and make sure it does not go above a certain limit. A new instance of the `BlockGasMeter` is created each time [`BeginBlock`](../core/baseapp.md#beginblock) is called. The `BlockGasMeter` is finite, and the limit of gas per block is defined in the application's consensus parameters. By default Cosmos SDK applications use the default consensus parameters provided by Tendermint: + ++++ https://github.com/tendermint/tendermint/blob/v0.34.0-rc6/types/params.go#L34-L41 + +When a new [transaction](../core/transactions.md) is being processed via `DeliverTx`, the current value of `BlockGasMeter` is checked to see if it is above the limit. If it is, `DeliverTx` returns immediately. This can happen even with the first transaction in a block, as `BeginBlock` itself can consume gas. If not, the transaction is processed normally. At the end of `DeliverTx`, the gas tracked by `ctx.BlockGasMeter()` is increased by the amount consumed to process the transaction: + +```go +ctx.BlockGasMeter().ConsumeGas( + ctx.GasMeter().GasConsumedToLimit(), + "block gas meter", +) +``` + +## AnteHandler + +The `AnteHandler` is run for every transaction during `CheckTx` and `DeliverTx`, before a Protobuf `Msg` service method for each `sdk.Msg` in the transaction. `AnteHandler`s have the following signature: + +```go +// AnteHandler authenticates transactions, before their internal messages are handled. +// If newCtx.IsZero(), ctx is used instead. +type AnteHandler func(ctx Context, tx Tx, simulate bool) (newCtx Context, result Result, abort bool) +``` + +The `anteHandler` is not implemented in the core SDK but in a module. This gives the possibility to developers to choose which version of `AnteHandler` fits their application's needs. That said, most applications today use the default implementation defined in the [`auth` module](https://github.com/cosmos/cosmos-sdk/tree/master/x/auth). Here is what the `anteHandler` is intended to do in a normal Cosmos SDK application: + +- Verify that the transaction are of the correct type. Transaction types are defined in the module that implements the `anteHandler`, and they follow the transaction interface: + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/types/tx_msg.go#L49-L57 + This enables developers to play with various types for the transaction of their application. In the default `auth` module, the default transaction type is `Tx`: + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/proto/cosmos/tx/v1beta1/tx.proto#L12-L25 +- Verify signatures for each [`message`](../building-modules/messages-and-queries.md#messages) contained in the transaction. Each `message` should be signed by one or multiple sender(s), and these signatures must be verified in the `anteHandler`. +- During `CheckTx`, verify that the gas prices provided with the transaction is greater than the local `min-gas-prices` (as a reminder, gas-prices can be deducted from the following equation: `fees = gas * gas-prices`). `min-gas-prices` is a parameter local to each full-node and used during `CheckTx` to discard transactions that do not provide a minimum amount of fees. This ensure that the mempool cannot be spammed with garbage transactions. +- Verify that the sender of the transaction has enough funds to cover for the `fees`. When the end-user generates a transaction, they must indicate 2 of the 3 following parameters (the third one being implicit): `fees`, `gas` and `gas-prices`. This signals how much they are willing to pay for nodes to execute their transaction. The provided `gas` value is stored in a parameter called `GasWanted` for later use. +- Set `newCtx.GasMeter` to 0, with a limit of `GasWanted`. **This step is extremely important**, as it not only makes sure the transaction cannot consume infinite gas, but also that `ctx.GasMeter` is reset in-between each `DeliverTx` (`ctx` is set to `newCtx` after `anteHandler` is run, and the `anteHandler` is run each time `DeliverTx` is called). + +As explained above, the `anteHandler` returns a maximum limit of `gas` the transaction can consume during execution called `GasWanted`. The actual amount consumed in the end is denominated `GasUsed`, and we must therefore have `GasUsed =< GasWanted`. Both `GasWanted` and `GasUsed` are relayed to the underlying consensus engine when [`DeliverTx`](../core/baseapp.md#delivertx) returns. + +## Next {hide} + +Learn about [baseapp](../core/baseapp.md) {hide} diff --git a/versioned_docs/version-0.45/develop/high-level-concepts/query-lifecycle.md b/versioned_docs/version-0.45/develop/high-level-concepts/query-lifecycle.md new file mode 100644 index 000000000..55902e698 --- /dev/null +++ b/versioned_docs/version-0.45/develop/high-level-concepts/query-lifecycle.md @@ -0,0 +1,152 @@ + + +# Query Lifecycle + +This document describes the lifecycle of a query in a SDK application, from the user interface to application stores and back. {synopsis} + +## Pre-requisite Readings + +- [Transaction Lifecycle](./tx-lifecycle.md) {prereq} + +## Query Creation + +A [**query**](../building-modules/messages-and-queries.md#queries) is a request for information made by end-users of applications through an interface and processed by a full-node. Users can query information about the network, the application itself, and application state directly from the application's stores or modules. Note that queries are different from [transactions](../core/transactions.md) (view the lifecycle [here](./tx-lifecycle.md)), particularly in that they do not require consensus to be processed (as they do not trigger state-transitions); they can be fully handled by one full-node. + +For the purpose of explaining the query lifecycle, let's say `MyQuery` is requesting a list of delegations made by a certain delegator address in the application called `simapp`. As to be expected, the [`staking`](../../x/staking/spec/README.md) module handles this query. But first, there are a few ways `MyQuery` can be created by users. + +### CLI + +The main interface for an application is the command-line interface. Users connect to a full-node and run the CLI directly from their machines - the CLI interacts directly with the full-node. To create `MyQuery` from their terminal, users type the following command: + +```bash +simd query staking delegations +``` + +This query command was defined by the [`staking`](../../x/staking/spec/README.md) module developer and added to the list of subcommands by the application developer when creating the CLI. + +Note that the general format is as follows: + +```bash +simd query [moduleName] [command] --flag +``` + +To provide values such as `--node` (the full-node the CLI connects to), the user can use the [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) config file to set them or provide them as flags. + +The CLI understands a specific set of commands, defined in a hierarchical structure by the application developer: from the [root command](../core/cli.md#root-command) (`simd`), the type of command (`Myquery`), the module that contains the command (`staking`), and command itself (`delegations`). Thus, the CLI knows exactly which module handles this command and directly passes the call there. + +### gRPC + +::: warning +A patch introduced in `go-grpc v1.34.0` made gRPC incompatible with the `gogoproto` library, making some [gRPC queries](https://github.com/cosmos/cosmos-sdk/issues/8426) panic. As such, the SDK requires that `go-grpc <=v1.33.2` is installed in your `go.mod`. + +To make sure that gRPC is working properly, it is **highly recommended** to add the following line in your application's `go.mod`: + +``` +replace google.golang.org/grpc => google.golang.org/grpc v1.33.2 +``` + +Please see [issue #8392](https://github.com/cosmos/cosmos-sdk/issues/8392) for more info. +::: + +Another interface through which users can make queries, introduced in Cosmos SDK v0.40, is [gRPC](https://grpc.io) requests to a [gRPC server](../core/grpc_rest.md#grpc-server). The endpoints are defined as [Protocol Buffers](https://developers.google.com/protocol-buffers) service methods inside `.proto` files, written in Protobuf's own language-agnostic interface definition language (IDL). The Protobuf ecosystem developed tools for code-generation from `*.proto` files into various languages. These tools allow to build gRPC clients easily. + +One such tool is [grpcurl](https://github.com/fullstorydev/grpcurl), and a gRPC request for `MyQuery` using this client looks like: + +```bash +grpcurl \ + -plaintext # We want results in plain test + -import-path ./proto \ # Import these .proto files + -proto ./proto/cosmos/staking/v1beta1/query.proto \ # Look into this .proto file for the Query protobuf service + -d '{"address":"$MY_DELEGATOR"}' \ # Query arguments + localhost:9090 \ # gRPC server endpoint + cosmos.staking.v1beta1.Query/Delegations # Fully-qualified service method name +``` + +### REST + +Another interface through which users can make queries is through HTTP Requests to a [REST server](../core/grpc_rest.md#rest-server). The REST server is fully auto-generated from Protobuf services, using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). + +An example HTTP request for `MyQuery` looks like: + +```bash +GET http://localhost:1317/cosmos/staking/v1beta1/delegators/{delegatorAddr}/delegations +``` + +## How Queries are Handled by the CLI + +The examples above show how an external user can interact with a node by querying its state. To understand more in details the exact lifecycle of a query, let's dig into how the CLI prepares the query, and how the node handles it. The interactions from the users' perspective are a bit different, but the underlying functions are almost identical because they are implementations of the same command defined by the module developer. This step of processing happens within the CLI, gRPC or REST server and heavily involves a `client.Context`. + +### Context + +The first thing that is created in the execution of a CLI command is a `client.Context`. A `client.Context` is an object that stores all the data needed to process a request on the user side. In particular, a `client.Context` stores the following: + +- **Codec**: The [encoder/decoder](../core/encoding.md) used by the application, used to marshal the parameters and query before making the Tendermint RPC request and unmarshal the returned response into a JSON object. The default codec used by the CLI is Protobuf. +- **Account Decoder**: The account decoder from the [`auth`](../..//x/auth/spec/README.md) module, which translates `[]byte`s into accounts. +- **RPC Client**: The Tendermint RPC Client, or node, to which the request will be relayed to. +- **Keyring**: A [Key Manager](../basics/accounts.md#keyring) used to sign transactions and handle other operations with keys. +- **Output Writer**: A [Writer](https://golang.org/pkg/io/#Writer) used to output the response. +- **Configurations**: The flags configured by the user for this command, including `--height`, specifying the height of the blockchain to query and `--indent`, which indicates to add an indent to the JSON response. + +The `client.Context` also contains various functions such as `Query()` which retrieves the RPC Client and makes an ABCI call to relay a query to a full-node. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/client/context.go#L20-L50 + +The `client.Context`'s primary role is to store data used during interactions with the end-user and provide methods to interact with this data - it is used before and after the query is processed by the full-node. Specifically, in handling `MyQuery`, the `client.Context` is utilized to encode the query parameters, retrieve the full-node, and write the output. Prior to being relayed to a full-node, the query needs to be encoded into a `[]byte` form, as full-nodes are application-agnostic and do not understand specific types. The full-node (RPC Client) itself is retrieved using the `client.Context`, which knows which node the user CLI is connected to. The query is relayed to this full-node to be processed. Finally, the `client.Context` contains a `Writer` to write output when the response is returned. These steps are further described in later sections. + +### Arguments and Route Creation + +At this point in the lifecycle, the user has created a CLI command with all of the data they wish to include in their query. A `client.Context` exists to assist in the rest of the `MyQuery`'s journey. Now, the next step is to parse the command or request, extract the arguments, and encode everything. These steps all happen on the user side within the interface they are interacting with. + +#### Encoding + +In our case (querying an address's delegations), `MyQuery` contains an [address](./accounts.md#addresses) `delegatorAddress` as its only argument. However, the request can only contain `[]byte`s, as it will be relayed to a consensus engine (e.g. Tendermint Core) of a full-node that has no inherent knowledge of the application types. Thus, the `codec` of `client.Context` is used to marshal the address. + +Here is what the code looks like for the CLI command: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/staking/client/cli/query.go#L324-L327 + +#### gRPC Query Client Creation + +The SDK leverages code generated from Protobuf services to make queries. The `staking` module's `MyQuery` service generates a `queryClient`, which the CLI will use to make queries. Here is the relevant code: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/x/staking/client/cli/query.go#L318-L342 + +Under the hood, the `client.Context` has a `Query()` function used to retrieve the pre-configured node and relay a query to it; the function takes the query fully-qualified service method name as path (in our case: `/cosmos.staking.v1beta1.Query/Delegations`), and arguments as parameters. It first retrieves the RPC Client (called the [**node**](../core/node.md)) configured by the user to relay this query to, and creates the `ABCIQueryOptions` (parameters formatted for the ABCI call). The node is then used to make the ABCI call, `ABCIQueryWithOptions()`. + +Here is what the code looks like: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/client/query.go#L65-L91 + +## RPC + +With a call to `ABCIQueryWithOptions()`, `MyQuery` is received by a [full-node](../core/encoding.md) which will then process the request. Note that, while the RPC is made to the consensus engine (e.g. Tendermint Core) of a full-node, queries are not part of consensus and will not be broadcasted to the rest of the network, as they do not require anything the network needs to agree upon. + +Read more about ABCI Clients and Tendermint RPC in the Tendermint documentation [here](https://tendermint.com/rpc). + +## Application Query Handling + +When a query is received by the full-node after it has been relayed from the underlying consensus engine, it is now being handled within an environment that understands application-specific types and has a copy of the state. [`baseapp`](../core/baseapp.md) implements the ABCI [`Query()`](../core/baseapp.md#query) function and handles gRPC queries. The query route is parsed, and it it matches the fully-qualified service method name of an existing service method (most likely in one of the modules), then `baseapp` will relay the request to the relevant module. + +Apart from gRPC routes, `baseapp` also handles four different types of queries: `app`, `store`, `p2p`, and `custom`. The first three types (`app`, `store`, `p2p`) are purely application-level and thus directly handled by `baseapp` or the stores, but the `custom` query type requires `baseapp` to route the query to a module's [legacy queriers](../building-modules/query-services.md#legacy-queriers). To learn more about these queries, please refer to [this guide](../core/grpc_rest.md#tendermint-rpc). + +Since `MyQuery` has a Protobuf fully-qualified service method name from the `staking` module (recall `/cosmos.staking.v1beta1.Query/Delegations`), `baseapp` first parses the path, then uses its own internal `GRPCQueryRouter` to retrieve the corresponding gRPC handler, and routes the query to the module. The gRPC handler is responsible for recognizing this query, retrieving the appropriate values from the application's stores, and returning a response. Read more about query services [here](../building-modules/query-services.md). + +Once a result is received from the querier, `baseapp` begins the process of returning a response to the user. + +## Response + +Since `Query()` is an ABCI function, `baseapp` returns the response as an [`abci.ResponseQuery`](https://tendermint.com/docs/spec/abci/abci.html#messages) type. The `client.Context` `Query()` routine receives the response and. + +### CLI Response + +The application [`codec`](../core/encoding.md) is used to unmarshal the response to a JSON and the `client.Context` prints the output to the command line, applying any configurations such as the output type (text, JSON or YAML). + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0/client/context.go#L248-L283 + +And that's a wrap! The result of the query is outputted to the console by the CLI. + +## Next {hide} + +Read more about [accounts](./accounts.md). {hide} diff --git a/versioned_docs/version-0.45/develop/high-level-concepts/tx-lifecycle.md b/versioned_docs/version-0.45/develop/high-level-concepts/tx-lifecycle.md new file mode 100644 index 000000000..fa51eef1c --- /dev/null +++ b/versioned_docs/version-0.45/develop/high-level-concepts/tx-lifecycle.md @@ -0,0 +1,256 @@ + + +# Transaction Lifecycle + +This document describes the lifecycle of a transaction from creation to committed state changes. Transaction definition is described in a [different doc](../core/transactions.md). The transaction will be referred to as `Tx`. {synopsis} + +### Pre-requisite Readings + +- [Anatomy of an SDK Application](./app-anatomy.md) {prereq} + +## Creation + +### Transaction Creation + +One of the main application interfaces is the command-line interface. The transaction `Tx` can be created by the user inputting a command in the following format from the [command-line](../core/cli.md), providing the type of transaction in `[command]`, arguments in `[args]`, and configurations such as gas prices in `[flags]`: + +```bash +[appname] tx [command] [args] [flags] +``` + +This command will automatically **create** the transaction, **sign** it using the account's private key, and **broadcast** it to the specified peer node. + +There are several required and optional flags for transaction creation. The `--from` flag specifies which [account](./accounts.md) the transaction is originating from. For example, if the transaction is sending coins, the funds will be drawn from the specified `from` address. + +#### Gas and Fees + +Additionally, there are several [flags](../core/cli.md) users can use to indicate how much they are willing to pay in [fees](./gas-fees.md): + +- `--gas` refers to how much [gas](./gas-fees.md), which represents computational resources, `Tx` consumes. Gas is dependent on the transaction and is not precisely calculated until execution, but can be estimated by providing `auto` as the value for `--gas`. +- `--gas-adjustment` (optional) can be used to scale `gas` up in order to avoid underestimating. For example, users can specify their gas adjustment as 1.5 to use 1.5 times the estimated gas. +- `--gas-prices` specifies how much the user is willing pay per unit of gas, which can be one or multiple denominations of tokens. For example, `--gas-prices=0.025uatom, 0.025upho` means the user is willing to pay 0.025uatom AND 0.025upho per unit of gas. +- `--fees` specifies how much in fees the user is willing to pay in total. +- `--timeout-height` specifies a block timeout height to prevent the tx from being committed past a certain height. + +The ultimate value of the fees paid is equal to the gas multiplied by the gas prices. In other words, `fees = ceil(gas * gasPrices)`. Thus, since fees can be calculated using gas prices and vice versa, the users specify only one of the two. + +Later, validators decide whether or not to include the transaction in their block by comparing the given or calculated `gas-prices` to their local `min-gas-prices`. `Tx` will be rejected if its `gas-prices` is not high enough, so users are incentivized to pay more. + +#### CLI Example + +Users of application `app` can enter the following command into their CLI to generate a transaction to send 1000uatom from a `senderAddress` to a `recipientAddress`. It specifies how much gas they are willing to pay: an automatic estimate scaled up by 1.5 times, with a gas price of 0.025uatom per unit gas. + +```bash +appd tx send 1000uatom --from --gas auto --gas-adjustment 1.5 --gas-prices 0.025uatom +``` + +#### Other Transaction Creation Methods + +The command-line is an easy way to interact with an application, but `Tx` can also be created using a [gRPC or REST interface](../core/grpc_rest.md) or some other entrypoint defined by the application developer. From the user's perspective, the interaction depends on the web interface or wallet they are using (e.g. creating `Tx` using [Lunie.io](https://lunie.io/#/) and signing it with a Ledger Nano S). + +## Addition to Mempool + +Each full-node (running Tendermint) that receives a `Tx` sends an [ABCI message](https://tendermint.com/docs/spec/abci/abci.html#messages), +`CheckTx`, to the application layer to check for validity, and receives an `abci.ResponseCheckTx`. If the `Tx` passes the checks, it is held in the nodes' +[**Mempool**](https://tendermint.com/docs/tendermint-core/mempool.html#mempool), an in-memory pool of transactions unique to each node) pending inclusion in a block - honest nodes will discard `Tx` if it is found to be invalid. Prior to consensus, nodes continuously check incoming transactions and gossip them to their peers. + +### Types of Checks + +The full-nodes perform stateless, then stateful checks on `Tx` during `CheckTx`, with the goal to +identify and reject an invalid transaction as early on as possible to avoid wasted computation. + +**_Stateless_** checks do not require nodes to access state - light clients or offline nodes can do +them - and are thus less computationally expensive. Stateless checks include making sure addresses +are not empty, enforcing nonnegative numbers, and other logic specified in the definitions. + +**_Stateful_** checks validate transactions and messages based on a committed state. Examples +include checking that the relevant values exist and are able to be transacted with, the address +has sufficient funds, and the sender is authorized or has the correct ownership to transact. +At any given moment, full-nodes typically have [multiple versions](../core/baseapp.md#volatile-states) +of the application's internal state for different purposes. For example, nodes will execute state +changes while in the process of verifying transactions, but still need a copy of the last committed +state in order to answer queries - they should not respond using state with uncommitted changes. + +In order to verify a `Tx`, full-nodes call `CheckTx`, which includes both _stateless_ and _stateful_ +checks. Further validation happens later in the [`DeliverTx`](#delivertx) stage. `CheckTx` goes +through several steps, beginning with decoding `Tx`. + +### Decoding + +When `Tx` is received by the application from the underlying consensus engine (e.g. Tendermint), it is still in its [encoded](../core/encoding.md) `[]byte` form and needs to be unmarshaled in order to be processed. Then, the [`runTx`](../core/baseapp.md#runtx-and-runmsgs) function is called to run in `runTxModeCheck` mode, meaning the function will run all checks but exit before executing messages and writing state changes. + +### ValidateBasic + +Messages ([`sdk.Msg`](../core/transactions.md#messages)) are extracted from transactions (`Tx`). The `ValidateBasic` method of the `sdk.Msg` interface implemented by the module developer is run for each transaction. +To discard obviously invalid messages, the BaseApp` type calls the `ValidateBasic` method very early in the processing of the message in the [`CheckTx`](../core/baseapp.md#checktx) and [`DeliverTx`](../core/baseapp.md#delivertx)) transactions. +`ValidateBasic` can include only **stateless** checks (the checks that do not require access to the state). + +#### Guideline + +Gas is not charged when `ValidateBasic` is executed so we recommend only performing all necessary stateless checks to enable middleware operations (for example, parsing the required signer accounts to validate a signature by a middleware) and stateless sanity checks not impacting performance of the CheckTx phase. +Other validation operations must be performed when [handling a message](../building-modules/msg-services#Validation) in a module Msg Server. + +Example, if the message is to send coins from one address to another, `ValidateBasic` likely checks for non-empty addresses and a non-negative coin amount, but does not require knowledge of state such as the account balance of an address. + +See also [Msg Service Validation](../building-modules/msg-services.md#Validation). + +### AnteHandler + +After the ValidateBasic checks, the `AnteHandler`s are run. Technically, they are optional, but in practice, they are very often present to perform signature verification, gas calculation, fee deduction and other core operations related to blockchain transactions. + +A copy of the cached context is provided to the `AnteHandler`, which performs limited checks specified for the transaction type. Using a copy allows the AnteHandler to do stateful checks for `Tx` without modifying the last committed state, and revert back to the original if the execution fails. + +For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/master/x/auth/spec) module `AnteHandler` checks and increments sequence numbers, checks signatures and account numbers, and deducts fees from the first signer of the transaction - all state changes are made using the `checkState`. + +### Gas + +The [`Context`](../core/context.md), which keeps a `GasMeter` that will track how much gas has been used during the execution of `Tx`, is initialized. The user-provided amount of gas for `Tx` is known as `GasWanted`. If `GasConsumed`, the amount of gas consumed so during execution, ever exceeds `GasWanted`, the execution will stop and the changes made to the cached copy of the state won't be committed. Otherwise, `CheckTx` sets `GasUsed` equal to `GasConsumed` and returns it in the result. After calculating the gas and fee values, validator-nodes check that the user-specified `gas-prices` is greater than their locally defined `min-gas-prices`. + +### Discard or Addition to Mempool + +If at any point during `CheckTx` the `Tx` fails, it is discarded and the transaction lifecycle ends +there. Otherwise, if it passes `CheckTx` successfully, the default protocol is to relay it to peer +nodes and add it to the Mempool so that the `Tx` becomes a candidate to be included in the next block. + +The **mempool** serves the purpose of keeping track of transactions seen by all full-nodes. +Full-nodes keep a **mempool cache** of the last `mempool.cache_size` transactions they have seen, as a first line of +defense to prevent replay attacks. Ideally, `mempool.cache_size` is large enough to encompass all +of the transactions in the full mempool. If the the mempool cache is too small to keep track of all +the transactions, `CheckTx` is responsible for identifying and rejecting replayed transactions. + +Currently existing preventative measures include fees and a `sequence` (nonce) counter to distinguish +replayed transactions from identical but valid ones. If an attacker tries to spam nodes with many +copies of a `Tx`, full-nodes keeping a mempool cache will reject identical copies instead of running +`CheckTx` on all of them. Even if the copies have incremented `sequence` numbers, attackers are +disincentivized by the need to pay fees. + +Validator nodes keep a mempool to prevent replay attacks, just as full-nodes do, but also use it as +a pool of unconfirmed transactions in preparation of block inclusion. Note that even if a `Tx` +passes all checks at this stage, it is still possible to be found invalid later on, because +`CheckTx` does not fully validate the transaction (i.e. it does not actually execute the messages). + +## Inclusion in a Block + +Consensus, the process through which validator nodes come to agreement on which transactions to +accept, happens in **rounds**. Each round begins with a proposer creating a block of the most +recent transactions and ends with **validators**, special full-nodes with voting power responsible +for consensus, agreeing to accept the block or go with a `nil` block instead. Validator nodes +execute the consensus algorithm, such as [Tendermint BFT](https://tendermint.com/docs/spec/consensus/consensus.html#terms), +confirming the transactions using ABCI requests to the application, in order to come to this agreement. + +The first step of consensus is the **block proposal**. One proposer amongst the validators is chosen +by the consensus algorithm to create and propose a block - in order for a `Tx` to be included, it +must be in this proposer's mempool. + +## State Changes + +The next step of consensus is to execute the transactions to fully validate them. All full-nodes +that receive a block proposal from the correct proposer execute the transactions by calling the ABCI functions +[`BeginBlock`](./app-anatomy.md#beginblocker-and-endblocker), `DeliverTx` for each transaction, +and [`EndBlock`](./app-anatomy.md#beginblocker-and-endblocker). While each full-node runs everything +locally, this process yields a single, unambiguous result, since the messages' state transitions are deterministic and transactions are +explicitly ordered in the block proposal. + +``` + ----------------------- + |Receive Block Proposal| + ----------------------- + | + v + ----------------------- + | BeginBlock | + ----------------------- + | + v + ----------------------- + | DeliverTx(tx0) | + | DeliverTx(tx1) | + | DeliverTx(tx2) | + | DeliverTx(tx3) | + | . | + | . | + | . | + ----------------------- + | + v + ----------------------- + | EndBlock | + ----------------------- + | + v + ----------------------- + | Consensus | + ----------------------- + | + v + ----------------------- + | Commit | + ----------------------- +``` + +### DeliverTx + +The `DeliverTx` ABCI function defined in [`BaseApp`](../core/baseapp.md) does the bulk of the +state transitions: it is run for each transaction in the block in sequential order as committed +to during consensus. Under the hood, `DeliverTx` is almost identical to `CheckTx` but calls the +[`runTx`](../core/baseapp.md#runtx) function in deliver mode instead of check mode. +Instead of using their `checkState`, full-nodes use `deliverState`: + +- **Decoding:** Since `DeliverTx` is an ABCI call, `Tx` is received in the encoded `[]byte` form. + Nodes first unmarshal the transaction, using the [`TxConfig`](./app-anatomy#register-codec) defined in the app, then call `runTx` in `runTxModeDeliver`, which is very similar to `CheckTx` but also executes and writes state changes. + +- **Checks:** Full-nodes call `validateBasicMsgs` and the `AnteHandler` again. This second check + happens because they may not have seen the same transactions during the addition to Mempool stage\ + and a malicious proposer may have included invalid ones. One difference here is that the + `AnteHandler` will not compare `gas-prices` to the node's `min-gas-prices` since that value is local + to each node - differing values across nodes would yield nondeterministic results. + +- **`MsgServiceRouter`:** While `CheckTx` would have exited, `DeliverTx` continues to run + [`runMsgs`](../core/baseapp.md#runtx-and-runmsgs) to fully execute each `Msg` within the transaction. + Since the transaction may have messages from different modules, `BaseApp` needs to know which module + to find the appropriate handler. This is achieved using `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's Protobuf [`Msg` service](../building-modules/msg-services.md). + For `LegacyMsg` routing, the `Route` function is called via the [module manager](../building-modules/module-manager.md) to retrieve the route name and find the legacy [`Handler`](../building-modules/msg-services.md#handler-type) within the module. + +- **`Msg` service:** a Protobuf `Msg` service, a step up from `AnteHandler`, is responsible for executing each + message in the `Tx` and causes state transitions to persist in `deliverTxState`. + +- **Gas:** While a `Tx` is being delivered, a `GasMeter` is used to keep track of how much + gas is being used; if execution completes, `GasUsed` is set and returned in the + `abci.ResponseDeliverTx`. If execution halts because `BlockGasMeter` or `GasMeter` has run out or something else goes + wrong, a deferred function at the end appropriately errors or panics. + +If there are any failed state changes resulting from a `Tx` being invalid or `GasMeter` running out, +the transaction processing terminates and any state changes are reverted. Invalid transactions in a +block proposal cause validator nodes to reject the block and vote for a `nil` block instead. + +### Commit + +The final step is for nodes to commit the block and state changes. Validator nodes +perform the previous step of executing state transitions in order to validate the transactions, +then sign the block to confirm it. Full nodes that are not validators do not +participate in consensus - i.e. they cannot vote - but listen for votes to understand whether or +not they should commit the state changes. + +When they receive enough validator votes (2/3+ _precommits_ weighted by voting power), full nodes commit to a new block to be added to the blockchain and +finalize the state transitions in the application layer. A new state root is generated to serve as +a merkle proof for the state transitions. Applications use the [`Commit`](../core/baseapp.md#commit) +ABCI method inherited from [Baseapp](../core/baseapp.md); it syncs all the state transitions by +writing the `deliverState` into the application's internal state. As soon as the state changes are +committed, `checkState` start afresh from the most recently committed state and `deliverState` +resets to `nil` in order to be consistent and reflect the changes. + +Note that not all blocks have the same number of transactions and it is possible for consensus to +result in a `nil` block or one with none at all. In a public blockchain network, it is also possible +for validators to be **byzantine**, or malicious, which may prevent a `Tx` from being committed in +the blockchain. Possible malicious behaviors include the proposer deciding to censor a `Tx` by +excluding it from the block or a validator voting against the block. + +At this point, the transaction lifecycle of a `Tx` is over: nodes have verified its validity, +delivered it by executing its state changes, and committed those changes. The `Tx` itself, +in `[]byte` form, is stored in a block and appended to the blockchain. + +## Next {hide} + +Learn about [accounts](./accounts.md) {hide} diff --git a/versioned_docs/version-0.45/develop/intro/README.md b/versioned_docs/version-0.45/develop/intro/README.md new file mode 100644 index 000000000..1b3365ba2 --- /dev/null +++ b/versioned_docs/version-0.45/develop/intro/README.md @@ -0,0 +1,16 @@ + + +# Introduction + +This folder contains introduction material on the Cosmos SDK. + +1. [Overview](./overview.md) +2. [Application-Specific Blockchains](./why-app-specific.md) +3. [Architecture of an SDK Application](./sdk-app-architecture.md) +4. [Cosmos SDK Design Overview](./sdk-design.md) + +After reading the introduction material, head over to the [basics](../basics/README.md) to learn more. diff --git a/versioned_docs/version-0.45/develop/intro/overview.md b/versioned_docs/version-0.45/develop/intro/overview.md new file mode 100644 index 000000000..4d0212719 --- /dev/null +++ b/versioned_docs/version-0.45/develop/intro/overview.md @@ -0,0 +1,37 @@ + + +# High-level Overview + +## What is the SDK? + +The [Cosmos-SDK](https://github.com/cosmos/cosmos-sdk) is an open-source framework for building multi-asset public Proof-of-Stake (PoS) blockchains, like the Cosmos Hub, as well as permissioned Proof-Of-Authority (PoA) blockchains. Blockchains built with the Cosmos SDK are generally referred to as **application-specific blockchains**. + +The goal of the Cosmos SDK is to allow developers to easily create custom blockchains from scratch that can natively interoperate with other blockchains. We envision the SDK as the npm-like framework to build secure blockchain applications on top of [Tendermint](https://github.com/tendermint/tendermint). SDK-based blockchains are built out of composable [modules](../building-modules/intro.md), most of which are open source and readily available for any developers to use. Anyone can create a module for the Cosmos-SDK, and integrating already-built modules is as simple as importing them into your blockchain application. What's more, the Cosmos SDK is a capabilities-based system, which allows developers to better reason about the security of interactions between modules. For a deeper look at capabilities, jump to [this section](../core/ocap.md). + +## What are Application-Specific Blockchains? + +One development paradigm in the blockchain world today is that of virtual-machine blockchains like Ethereum, where development generally revolves around building a decentralised applications on top of an existing blockchain as a set of smart contracts. While smart contracts can be very good for some use cases like single-use applications (e.g. ICOs), they often fall short for building complex decentralised platforms. More generally, smart contracts can be limiting in terms of flexibility, sovereignty and performance. + +Application-specific blockchains offer a radically different development paradigm than virtual-machine blockchains. An application-specific blockchain is a blockchain customized to operate a single application: developers have all the freedom to make the design decisions required for the application to run optimally. They can also provide better sovereignty, security and performance. + +Learn more about [application-specific blockchains](./why-app-specific.md). + +## Why the Cosmos SDK? + +The Cosmos SDK is the most advanced framework for building custom application-specific blockchains today. Here are a few reasons why you might want to consider building your decentralised application with the Cosmos SDK: + +- The default consensus engine available within the SDK is [Tendermint Core](https://github.com/tendermint/tendermint). Tendermint is the most (and only) mature BFT consensus engine in existence. It is widely used across the industry and is considered the gold standard consensus engine for building Proof-of-Stake systems. +- The SDK is open source and designed to make it easy to build blockchains out of composable [modules](../../x/). As the ecosystem of open source SDK modules grows, it will become increasingly easier to build complex decentralised platforms with it. +- The SDK is inspired by capabilities-based security, and informed by years of wrestling with blockchain state-machines. This makes the Cosmos SDK a very secure environment to build blockchains. +- Most importantly, the Cosmos SDK has already been used to build many application-specific blockchains that are already in production. Among others, we can cite [Cosmos Hub](https://hub.cosmos.network), [IRIS Hub](https://irisnet.org), [Binance Chain](https://docs.binance.org/), [Terra](https://terra.money/) or [Kava](https://www.kava.io/). [Many more](https://cosmos.network/ecosystem) are building on the Cosmos SDK. + +## Getting started with the Cosmos SDK + +- Learn more about the [architecture of an SDK application](./sdk-app-architecture.md) +- Learn how to build an application-specific blockchain from scratch with the [SDK Tutorial](https://cosmos.network/docs/tutorial) + +## Next {hide} + +Learn about [application-specific blockchains](./why-app-specific.md) {hide} diff --git a/versioned_docs/version-0.45/develop/intro/sdk-app-architecture.md b/versioned_docs/version-0.45/develop/intro/sdk-app-architecture.md new file mode 100644 index 000000000..1b3e40e94 --- /dev/null +++ b/versioned_docs/version-0.45/develop/intro/sdk-app-architecture.md @@ -0,0 +1,97 @@ + + +# Blockchain Architecture + +## State machine + +At its core, a blockchain is a [replicated deterministic state machine](https://en.wikipedia.org/wiki/State_machine_replication). + +A state machine is a computer science concept whereby a machine can have multiple states, but only one at any given time. There is a `state`, which describes the current state of the system, and `transactions`, that trigger state transitions. + +Given a state S and a transaction T, the state machine will return a new state S'. + +``` ++--------+ +--------+ +| | | | +| S +---------------->+ S' | +| | apply(T) | | ++--------+ +--------+ +``` + +In practice, the transactions are bundled in blocks to make the process more efficient. Given a state S and a block of transactions B, the state machine will return a new state S'. + +``` ++--------+ +--------+ +| | | | +| S +----------------------------> | S' | +| | For each T in B: apply(T) | | ++--------+ +--------+ +``` + +In a blockchain context, the state machine is deterministic. This means that if a node is started at a given state and replays the same sequence of transactions, it will always end up with the same final state. + +The Cosmos SDK gives developers maximum flexibility to define the state of their application, transaction types and state transition functions. The process of building state-machines with the SDK will be described more in depth in the following sections. But first, let us see how the state-machine is replicated using **Tendermint**. + +## Tendermint + +Thanks to the Cosmos SDK, developers just have to define the state machine, and [*Tendermint*](https://tendermint.com/docs/introduction/what-is-tendermint.html) will handle replication over the network for them. + +``` + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | Tendermint Core + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +[Tendermint](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html) is an application-agnostic engine that is responsible for handling the *networking* and *consensus* layers of a blockchain. In practice, this means that Tendermint is responsible for propagating and ordering transaction bytes. Tendermint Core relies on an eponymous Byzantine-Fault-Tolerant (BFT) algorithm to reach consensus on the order of transactions. + +The Tendermint [consensus algorithm](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html#consensus-overview) works with a set of special nodes called *Validators*. Validators are responsible for adding blocks of transactions to the blockchain. At any given block, there is a validator set V. A validator in V is chosen by the algorithm to be the proposer of the next block. This block is considered valid if more than two thirds of V signed a *[prevote](https://docs.tendermint.com/v0.34/spec/consensus/consensus.html#prevote-step-height-h-round-r)* and a *[precommit](https://docs.tendermint.com/v0.34/spec/consensus/consensus.html#precommit-step-height-h-round-r)* on it, and if all the transactions that it contains are valid. The validator set can be changed by rules written in the state-machine. + +## ABCI + +Tendermint passes transactions to the application through an interface called the [ABCI](https://docs.tendermint.com/v0.34/spec/abci/), which the application must implement. + +``` + +---------------------+ + | | + | Application | + | | + +--------+---+--------+ + ^ | + | | ABCI + | v + +--------+---+--------+ + | | + | | + | Tendermint | + | | + | | + +---------------------+ +``` + +Note that **Tendermint only handles transaction bytes**. It has no knowledge of what these bytes mean. All Tendermint does is order these transaction bytes deterministically. Tendermint passes the bytes to the application via the ABCI, and expects a return code to inform it if the messages contained in the transactions were successfully processed or not. + +Here are the most important messages of the ABCI: + +- `CheckTx`: When a transaction is received by Tendermint Core, it is passed to the application to check if a few basic requirements are met. `CheckTx` is used to protect the mempool of full-nodes against spam transactions. A special handler called the [`AnteHandler`](../basics/gas-fees.md#antehandler) is used to execute a series of validation steps such as checking for sufficient fees and validating the signatures. If the checks are valid, the transaction is added to the [mempool](https://docs.tendermint.com/v0.34/tendermint-core/mempool.html#mempool) and relayed to peer nodes. Note that transactions are not processed (i.e. no modification of the state occurs) with `CheckTx` since they have not been included in a block yet. +- `DeliverTx`: When a [valid block](https://docs.tendermint.com/v0.34/spec/blockchain/blockchain.html#validation) is received by Tendermint Core, each transaction in the block is passed to the application via `DeliverTx` in order to be processed. It is during this stage that the state transitions occur. The `AnteHandler` executes again along with the actual [`Msg` service](../building-modules/msg-services.md) RPC for each message in the transaction. +- `BeginBlock`/`EndBlock`: These messages are executed at the beginning and the end of each block, whether the block contains transaction or not. It is useful to trigger automatic execution of logic. Proceed with caution though, as computationally expensive loops could slow down your blockchain, or even freeze it if the loop is infinite. + +Find a more detailed view of the ABCI methods from the [Tendermint docs](https://docs.tendermint.com/v0.34/spec/abci/abci.html#overview). + +Any application built on Tendermint needs to implement the ABCI interface in order to communicate with the underlying local Tendermint engine. Fortunately, you do not have to implement the ABCI interface. The Cosmos SDK provides a boilerplate implementation of it in the form of [baseapp](./sdk-design.md#baseapp). + +## Next {hide} + +Read about the [high-level design principles of the SDK](./sdk-design.md) {hide} diff --git a/versioned_docs/version-0.45/develop/intro/sdk-design.md b/versioned_docs/version-0.45/develop/intro/sdk-design.md new file mode 100644 index 000000000..5c8c26965 --- /dev/null +++ b/versioned_docs/version-0.45/develop/intro/sdk-design.md @@ -0,0 +1,95 @@ + + +# Main Components of the Cosmos SDK + +The Cosmos SDK is a framework that facilitates the development of secure state-machines on top of Tendermint. At its core, the SDK is a boilerplate implementation of the [ABCI](./sdk-app-architecture.md#abci) in Golang. It comes with a [`multistore`](../core/store.md#multistore) to persist data and a [`router`](../core/baseapp.md#routing) to handle transactions. + +Here is a simplified view of how transactions are handled by an application built on top of the Cosmos SDK when transferred from Tendermint via `DeliverTx`: + +1. Decode `transactions` received from the Tendermint consensus engine (remember that Tendermint only deals with `[]bytes`). +2. Extract `messages` from `transactions` and do basic sanity checks. +3. Route each message to the appropriate module so that it can be processed. +4. Commit state changes. + +## `baseapp` + +`baseapp` is the boilerplate implementation of a Cosmos SDK application. It comes with an implementation of the ABCI to handle the connection with the underlying consensus engine. Typically, a Cosmos SDK application extends `baseapp` by embedding it in [`app.go`](../basics/app-anatomy.md#core-application-file). See an example of this from the SDK application tutorial: + ++++ https://github.com/cosmos/sdk-tutorials/blob/c6754a1e313eb1ed973c5c91dcc606f2fd288811/app.go#L72-L92 + +The goal of `baseapp` is to provide a secure interface between the store and the extensible state machine while defining as little about the state machine as possible (staying true to the ABCI). + +For more on `baseapp`, please click [here](../core/baseapp.md). + +## Multistore + +The Cosmos SDK provides a [`multistore`](../core/store.md#multistore) for persisting state. The multistore allows developers to declare any number of [`KVStores`](../core/store.md#base-layer-kvstores). These `KVStores` only accept the `[]byte` type as value and therefore any custom structure needs to be marshalled using [a codec](../core/encoding.md) before being stored. + +The multistore abstraction is used to divide the state in distinct compartments, each managed by its own module. For more on the multistore, click [here](../core/store.md#multistore) + +## Modules + +The power of the Cosmos SDK lies in its modularity. SDK applications are built by aggregating a collection of interoperable modules. Each module defines a subset of the state and contains its own message/transaction processor, while the SDK is responsible for routing each message to its respective module. + +Here is a simplified view of how a transaction is processed by the application of each full-node when it is received in a valid block: + +``` + + + | + | Transaction relayed from the full-node's + | Tendermint engine to the node's application + | via DeliverTx + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | Message routed to + | the correct module + | to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to Tendermint + | (0=Ok, 1=Err) + v +``` + +Each module can be seen as a little state-machine. Developers need to define the subset of the state handled by the module, as well as custom message types that modify the state (*Note:* `messages` are extracted from `transactions` by `baseapp`). In general, each module declares its own `KVStore` in the `multistore` to persist the subset of the state it defines. Most developers will need to access other 3rd party modules when building their own modules. Given that the Cosmos-SDK is an open framework, some of the modules may be malicious, which means there is a need for security principles to reason about inter-module interactions. These principles are based on [object-capabilities](../core/ocap.md). In practice, this means that instead of having each module keep an access control list for other modules, each module implements special objects called `keepers` that can be passed to other modules to grant a pre-defined set of capabilities. + +SDK modules are defined in the `x/` folder of the SDK. Some core modules include: + +- `x/auth`: Used to manage accounts and signatures. +- `x/bank`: Used to enable tokens and token transfers. +- `x/staking` + `x/slashing`: Used to build Proof-Of-Stake blockchains. + +In addition to the already existing modules in `x/`, that anyone can use in their app, the SDK lets you build your own custom modules. You can check an [example of that in the tutorial](https://cosmos.network/docs/tutorial/keeper.html). + +## Next {hide} + +Learn more about the [anatomy of an SDK application](../basics/app-anatomy.md) {hide} diff --git a/versioned_docs/version-0.45/develop/intro/why-app-specific.md b/versioned_docs/version-0.45/develop/intro/why-app-specific.md new file mode 100644 index 000000000..f7c5f72d7 --- /dev/null +++ b/versioned_docs/version-0.45/develop/intro/why-app-specific.md @@ -0,0 +1,81 @@ + + +# Application-Specific Blockchains + +This document explains what application-specific blockchains are, and why developers would want to build one as opposed to writing Smart Contracts. {synopsis} + +## What are application-specific blockchains? + +Application-specific blockchains are blockchains customized to operate a single application. Instead of building a decentralised application on top of an underlying blockchain like Ethereum, developers build their own blockchain from the ground up. This means building a full-node client, a light-client, and all the necessary interfaces (CLI, REST, ...) to interract with the nodes. + +``` + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | Tendermint Core + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +## What are the shortcomings of Smart Contracts? + +Virtual-machine blockchains like Ethereum addressed the demand for more programmability back in 2014. At the time, the options available for building decentralised applications were quite limited. Most developers would build on top of the complex and limited Bitcoin scripting language, or fork the Bitcoin codebase which was hard to work with and customize. + +Virtual-machine blockchains came in with a new value proposition. Their state-machine incorporates a virtual-machine that is able to interpret turing-complete programs called Smart Contracts. These Smart Contracts are very good for use cases like one-time events (e.g. ICOs), but they can fall short for building complex decentralised platforms. Here is why: + +- Smart Contracts are generally developed with specific programming languages that can be interpreted by the underlying virtual-machine. These programming languages are often immature and inherently limited by the constraints of the virtual-machine itself. For example, the Ethereum Virtual Machine does not allow developers to implement automatic execution of code. Developers are also limited to the account-based system of the EVM, and they can only choose from a limited set of functions for their cryptographic operations. These are examples, but they hint at the lack of **flexibility** that a smart contract environment often entails. +- Smart Contracts are all run by the same virtual machine. This means that they compete for resources, which can severly restrain **performance**. And even if the state-machine were to be split in multiple subsets (e.g. via sharding), Smart Contracts would still need to be interpeted by a virtual machine, which would limit performance compared to a native application implemented at state-machine level (our benchmarks show an improvement on the order of x10 in performance when the virtual-machine is removed). +- Another issue with the fact that Smart Contracts share the same underlying environment is the resulting limitation in **sovereignty**. A decentralised application is an ecosystem that involves multiple players. If the application is built on a general-purpose virtual-machine blockchain, stakeholders have very limited sovereignty over their application, and are ultimately superseded by the governance of the underlying blockchain. If there is a bug in the application, very little can be done about it. + +Application-Specific Blockchains are designed to address these shortcomings. + +## Application-Specific Blockchains Benefits + +### Flexibility + +Application-specific blockchains give maximum flexibility to developers: + +- In Cosmos blockchains, the state-machine is typically connected to the underlying consensus engine via an interface called the [ABCI](https://docs.tendermint.com/v0.34/spec/abci/). This interface can be wrapped in any programming language, meaning developers can build their state-machine in the programming language of their choice. + +- Developers can choose among multiple frameworks to build their state-machine. The most widely used today is the Cosmos SDK, but others exist (e.g. [Lotion](https://github.com/nomic-io/lotion), [Weave](https://github.com/iov-one/weave), ...). The choice will most of the time be done based on the programming language they want to use (Cosmos SDK and Weave are in Golang, Lotion is in Javascript, ...). +- The ABCI also allows developers to swap the consensus engine of their application-specific blockchain. Today, only Tendermint is production-ready, but in the future other consensus engines are expected to emerge. +- Even when they settle for a framework and consensus engine, developers still have the freedom to tweak them if they don't perfectly match their requirements in their pristine forms. +- Developers are free to explore the full spectrum of tradeoffs (e.g. number of validators vs transaction throughput, safety vs availability in asynchrony, ...) and design choices (DB or IAVL tree for storage, UTXO or account model, ...). +- Developers can implement automatic execution of code. In the Cosmos SDK, logic can be automatically triggered at the beginning and the end of each block. They are also free to choose the cryptographic library used in their application, as opposed to being constrained by what is made available by the underlying environment in the case of virtual-machine blockchains. + +The list above contains a few examples that show how much flexibility application-specific blockchains give to developers. The goal of Cosmos and the Cosmos SDK is to make developer tooling as generic and composable as possible, so that each part of the stack can be forked, tweaked and improved without losing compatibility. As the community grows, more alternatives for each of the core building blocks will emerge, giving more options to developers. + +### Performance + +Decentralised applications built with Smart Contracts are inherently capped in performance by the underlying environment. For a decentralised application to optimise performance, it needs to be built as an application-specific blockchains. Next are some of the benefits an application-specific blockchain brings in terms of performance: + +- Developers of application-specific blockchains can choose to operate with a novel consensus engine such as Tendermint BFT. Compared to Proof-of-Work (used by most virtual-machine blockchains today), it offers significant gains in throughput. +- An application-specific blockchain only operates a single application, so that the application does not compete with others for computation and storage. This is the opposite of most non-sharded virtual-machine blockchains today, where smart contracts all compete for computation and storage. +- Even if a virtual-machine blockchain offered application-based sharding coupled with an efficient consensus algorithm, performance would still be limited by the virtual-machine itself. The real throughput bottleneck is the state-machine, and requiring transactions to be interpreted by a virtual-machine significantly increases the computational complexity of processing them. + +### Security + +Security is hard to quantify, and greatly varies from platform to platform. That said here are some important benefits an application-specific blockchain can bring in terms of security: + +- Developers can choose proven programming languages like Golang when building their application-specific blockchains, as opposed to smart contract programming languages that are often more immature. +- Developers are not constrained by the cryptographic functions made available by the underlying virtual-machines. They can use their own custom cryptography, and rely on well-audited crypto libraries. +- Developers do not have to worry about potential bugs or exploitable mechanisms in the underlying virtual-machine, making it easier to reason about the security of the application. + +### Sovereignty + +One of the major benefits of application-specific blockchains is sovereignty. A decentralised application is an ecosystem that involves many actors: users, developers, third-party services, and more. When developers build on virtual-machine blockchain where many decentralised applications coexist, the community of the application is different than the community of the underlying blockchain, and the latter supersedes the former in the governance process. If there is a bug or if a new feature is needed, stakeholders of the application have very little leeway to upgrade the code. If the community of the underlying blockchain refuses to act, nothing can happen. + +The fundamental issue here is that the governance of the application and the governance of the network are not aligned. This issue is solved by application-specific blockchains. Because application-specific blockchains specialize to operate a single application, stakeholders the application has full control over the entire chain. This ensures the community will not be stuck if a bug is discovered, and that it has the entire freedom to choose how it is going to evolve. + +## Next {hide} + +Learn more about the [high-level architecture](./sdk-app-architecture.md) of an SDK application {hide} diff --git a/versioned_docs/version-0.45/integrate/architecture/PROCESS.md b/versioned_docs/version-0.45/integrate/architecture/PROCESS.md new file mode 100644 index 000000000..07008b968 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/PROCESS.md @@ -0,0 +1,56 @@ +# ADR Creation Process + +1. Copy the `adr-template.md` file. Use the following filename pattern: `adr-next_number-title.md` +2. Create a draft Pull Request if you want to get an early feedback. +3. Make sure the context and a solution is clear and well documented. +4. Add an entry to a list in the [README](./README.md) file. +5. Create a Pull Request to propose a new ADR. + +## ADR life cycle + +ADR creation is an **iterative** process. Instead of trying to solve all decisions in a single ADR pull request, we MUST firstly understand the problem and collect feedback through a GitHub Issue. + +1. Every proposal SHOULD start with a new GitHub Issue or be a result of existing Issues. The Issue should contain just a brief proposal summary. + +2. Once the motivation is validated, a GitHub Pull Request (PR) is created with a new document based on the `adr-template.md`. + +3. An ADR doesn't have to arrive to `master` with an _accepted_ status in a single PR. If the motivation is clear and the solution is sound, we SHOULD be able to merge it and keep a _proposed_ status. It's preferable to have an iterative approach rather than long, not merged Pull Requests. + +4. If a _proposed_ ADR is merged, then it should clearly document outstanding issues either in ADR document notes or in a GitHub Issue. + +5. The PR SHOULD always be merged. In the case of a faulty ADR, we still prefer to merge it with a _rejected_ status. The only time the ADR SHOULD NOT be merged is if the author abandons it. + +6. Merged ADRs SHOULD NOT be pruned. + +### ADR status + +Status has two components: + +``` +{CONSENSUS STATUS} {IMPLEMENTATION STATUS} +``` + +IMPLEMENTATION STATUS is either `Implemented` or `Not Implemented`. + +#### Consensus Status + +``` +DRAFT -> PROPOSED -> LAST CALL yyyy-mm-dd -> ACCEPTED | REJECTED -> SUPERSEEDED by ADR-xxx + \ | + \ | + v v + ABANDONED +``` + ++ `DRAFT`: [optional] an ADR which is work in progress, not being ready for a general review. This is to present an early work and get an early feedback in a Draft Pull Request form. ++ `PROPOSED`: an ADR covering a full solution architecture and still in the review - project stakeholders haven't reached an agreed yet. ++ `LAST CALL `: [optional] clear notify that we are close to accept updates. Changing a status to `LAST CALL` means that social consensus (of Cosmos SDK maintainers) has been reached and we still want to give it a time to let the community react or analyze. ++ `ACCEPTED`: ADR which will represent a currently implemented or to be implemented architecture design. ++ `REJECTED`: ADR can go from PROPOSED or ACCEPTED to rejected if the consensus among project stakeholders will decide so. ++ `SUPERSEEDED by ADR-xxx`: ADR which has been superseded by a new ADR. ++ `ABANDONED`: the ADR is no longer pursued by the original authors. + +## Language used in ADR + ++ The context/background should be written in the present tense. ++ Avoid using a first, personal form. diff --git a/versioned_docs/version-0.45/integrate/architecture/README.md b/versioned_docs/version-0.45/integrate/architecture/README.md new file mode 100644 index 000000000..5455df9f8 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/README.md @@ -0,0 +1,79 @@ +--- +order: false +parent: + order: false +--- + +# Architecture Decision Records (ADR) + +This is a location to record all high-level architecture decisions in the Cosmos-SDK. + +An Architectural Decision (**AD**) is a software design choice that addresses a functional or non-functional requirement that is architecturally significant. +An Architecturally Significant Requirement (**ASR**) is a requirement that has a measurable effect on a software system’s architecture and quality. +An Architectural Decision Record (**ADR**) captures a single AD, such as often done when writing personal notes or meeting minutes; the collection of ADRs created and maintained in a project constitute its decision log. All these are within the topic of Architectural Knowledge Management (AKM). + +You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). + +## Rationale + +ADRs are intended to be the primary mechanism for proposing new feature designs and new processes, for collecting community input on an issue, and for documenting the design decisions. +An ADR should provide: + +- Context on the relevant goals and the current state +- Proposed changes to achieve the goals +- Summary of pros and cons +- References +- Changelog + +Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and +justification for a change in architecture, or for the architecture of something +new. The spec is much more compressed and streamlined summary of everything as +it stands today. + +If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match. + +## Creating new ADR + +Read about the [PROCESS](./PROCESS.md). + +#### Use RFC 2119 Keywords + +When writing ADRs, follow the same best practices for writing RFCs. When writing RFCs, key words are used to signify the requirements in the specification. These words are often capitalized: "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL. They are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119). + +## ADR Table of Contents + +### Accepted + +- [ADR 002: SDK Documentation Structure](./adr-002-docs-structure.md) +- [ADR 004: Split Denomination Keys](./adr-004-split-denomination-keys.md) +- [ADR 006: Secret Store Replacement](./adr-006-secret-store-replacement.md) +- [ADR 009: Evidence Module](./adr-009-evidence-module.md) +- [ADR 010: Modular AnteHandler](./adr-010-modular-antehandler.md) +- [ADR 019: Protocol Buffer State Encoding](./adr-019-protobuf-state-encoding.md) +- [ADR 020: Protocol Buffer Transaction Encoding](./adr-020-protobuf-transaction-encoding.md) +- [ADR 021: Protocol Buffer Query Encoding](./adr-021-protobuf-query-encoding.md) +- [ADR 023: Protocol Buffer Naming and Versioning](./adr-023-protobuf-naming.md) +- [ADR 029: Fee Grant Module](./adr-029-fee-grant-module.md) +- [ADR 030: Message Authorization Module](./adr-030-authz-module.md) +- [ADR 031: Protobuf Msg Services](./adr-031-msg-service.md) + +### Proposed + +- [ADR 003: Dynamic Capability Store](./adr-003-dynamic-capability-store.md) +- [ADR 011: Generalize Genesis Accounts](./adr-011-generalize-genesis-accounts.md) +- [ADR 012: State Accessors](./adr-012-state-accessors.md) +- [ADR 013: Metrics](./adr-013-metrics.md) +- [ADR 016: Validator Consensus Key Rotation](./adr-016-validator-consensus-key-rotation.md) +- [ADR 017: Historical Header Module](./adr-017-historical-header-module.md) +- [ADR 018: Extendable Voting Periods](./adr-018-extendable-voting-period.md) +- [ADR 022: Custom baseapp panic handling](./adr-022-custom-panic-handling.md) +- [ADR 024: Coin Metadata](./adr-024-coin-metadata.md) +- [ADR 027: Deterministic Protobuf Serialization](./adr-027-deterministic-protobuf-serialization.md) +- [ADR 028: Public Key Addresses](./adr-028-public-key-addresses.md) +- [ADR 032: Typed Events](./adr-032-typed-events.md) +- [ADR 033: Inter-module RPC](./adr-033-protobuf-inter-module-comm.md) +- [ADR 035: Rosetta API Support](./adr-035-rosetta-api-support.md) +- [ADR 037: Governance Split Votes](./adr-037-gov-split-vote.md) +- [ADR 038: State Listening](./adr-038-state-listening.md) +- [ADR 039: Epoched Staking](./adr-039-epoched-staking.md) +- [ADR 040: Storage and SMT State Commitments](./adr-040-storage-and-smt-state-commitments.md) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-002-docs-structure.md b/versioned_docs/version-0.45/integrate/architecture/adr-002-docs-structure.md new file mode 100644 index 000000000..1c8201890 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-002-docs-structure.md @@ -0,0 +1,86 @@ +# ADR 002: SDK Documentation Structure + +## Context + +There is a need for a scalable structure of the SDK documentation. Current documentation includes a lot of non-related SDK material, is difficult to maintain and hard to follow as a user. + +Ideally, we would have: + +- All docs related to dev frameworks or tools live in their respective github repos (sdk repo would contain sdk docs, hub repo would contain hub docs, lotion repo would contain lotion docs, etc.) +- All other docs (faqs, whitepaper, high-level material about Cosmos) would live on the website. + +## Decision + +Re-structure the `/docs` folder of the SDK github repo as follows: + +``` +docs/ +├── README +├── intro/ +├── concepts/ +│ ├── baseapp +│ ├── types +│ ├── store +│ ├── server +│ ├── modules/ +│ │ ├── keeper +│ │ ├── handler +│ │ ├── cli +│ ├── gas +│ └── commands +├── clients/ +│ ├── lite/ +│ ├── service-providers +├── modules/ +├── spec/ +├── translations/ +└── architecture/ +``` + +The files in each sub-folders do not matter and will likely change. What matters is the sectioning: + +- `README`: Landing page of the docs. +- `intro`: Introductory material. Goal is to have a short explainer of the SDK and then channel people to the resource they need. The [sdk-tutorial](https://github.com/cosmos/sdk-application-tutorial/) will be highlighted, as well as the `godocs`. +- `concepts`: Contains high-level explanations of the abstractions of the SDK. It does not contain specific code implementation and does not need to be updated often. **It is not an API specification of the interfaces**. API spec is the `godoc`. +- `clients`: Contains specs and info about the various SDK clients. +- `spec`: Contains specs of modules, and others. +- `modules`: Contains links to `godocs` and the spec of the modules. +- `architecture`: Contains architecture-related docs like the present one. +- `translations`: Contains different translations of the documentation. + +Website docs sidebar will only include the following sections: + +- `README` +- `intro` +- `concepts` +- `clients` + +`architecture` need not be displayed on the website. + +## Status + +Accepted + +## Consequences + +### Positive + +- Much clearer organisation of the SDK docs. +- The `/docs` folder now only contains SDK and gaia related material. Later, it will only contain SDK related material. +- Developers only have to update `/docs` folder when they open a PR (and not `/examples` for example). +- Easier for developers to find what they need to update in the docs thanks to reworked architecture. +- Cleaner vuepress build for website docs. +- Will help build an executable doc (cf https://github.com/cosmos/cosmos-sdk/issues/2611) + +### Neutral + +- We need to move a bunch of deprecated stuff to `/_attic` folder. +- We need to integrate content in `docs/sdk/docs/core` in `concepts`. +- We need to move all the content that currently lives in `docs` and does not fit in new structure (like `lotion`, intro material, whitepaper) to the website repository. +- Update `DOCS_README.md` + +## References + +- https://github.com/cosmos/cosmos-sdk/issues/1460 +- https://github.com/cosmos/cosmos-sdk/pull/2695 +- https://github.com/cosmos/cosmos-sdk/issues/2611 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-003-dynamic-capability-store.md b/versioned_docs/version-0.45/integrate/architecture/adr-003-dynamic-capability-store.md new file mode 100644 index 000000000..3f5c9387c --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-003-dynamic-capability-store.md @@ -0,0 +1,344 @@ +# ADR 3: Dynamic Capability Store + +## Changelog + +- 12 December 2019: Initial version +- 02 April 2020: Memory Store Revisions + +## Context + +Full implementation of the [IBC specification](https://github.com/cosmos/ibs) requires the ability to create and authenticate object-capability keys at runtime (i.e., during transaction execution), +as described in [ICS 5](https://github.com/cosmos/ibc/tree/master/spec/core/ics-005-port-allocation#technical-specification). In the IBC specification, capability keys are created for each newly initialised +port & channel, and are used to authenticate future usage of the port or channel. Since channels and potentially ports can be initialised during transaction execution, the state machine must be able to create +object-capability keys at this time. + +At present, the Cosmos SDK does not have the ability to do this. Object-capability keys are currently pointers (memory addresses) of `StoreKey` structs created at application initialisation in `app.go` ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L132)) +and passed to Keepers as fixed arguments ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L160)). Keepers cannot create or store capability keys during transaction execution — although they could call `NewKVStoreKey` and take the memory address +of the returned struct, storing this in the Merklised store would result in a consensus fault, since the memory address will be different on each machine (this is intentional — were this not the case, the keys would be predictable and couldn't serve as object capabilities). + +Keepers need a way to keep a private map of store keys which can be altered during transaction execution, along with a suitable mechanism for regenerating the unique memory addresses (capability keys) in this map whenever the application is started or restarted, along with a mechanism to revert capability creation on tx failure. +This ADR proposes such an interface & mechanism. + +## Decision + +The SDK will include a new `CapabilityKeeper` abstraction, which is responsible for provisioning, +tracking, and authenticating capabilities at runtime. During application initialisation in `app.go`, +the `CapabilityKeeper` will be hooked up to modules through unique function references +(by calling `ScopeToModule`, defined below) so that it can identify the calling module when later +invoked. + +When the initial state is loaded from disk, the `CapabilityKeeper`'s `Initialise` function will create +new capability keys for all previously allocated capability identifiers (allocated during execution of +past transactions and assigned to particular modes), and keep them in a memory-only store while the +chain is running. + +The `CapabilityKeeper` will include a persistent `KVStore`, a `MemoryStore`, and an in-memory map. +The persistent `KVStore` tracks which capability is owned by which modules. +The `MemoryStore` stores a forward mapping that map from module name, capability tuples to capability names and +a reverse mapping that map from module name, capability name to the capability index. +Since we cannot marshal the capability into a `KVStore` and unmarshal without changing the memory location of the capability, +the reverse mapping in the KVStore will simply map to an index. This index can then be used as a key in the ephemeral +go-map to retrieve the capability at the original memory location. + +The `CapabilityKeeper` will define the following types & functions: + +The `Capability` is similar to `StoreKey`, but has a globally unique `Index()` instead of +a name. A `String()` method is provided for debugging. + +A `Capability` is simply a struct, the address of which is taken for the actual capability. + +```golang +type Capability struct { + index uint64 +} +``` + +A `CapabilityKeeper` contains a persistent store key, memory store key, and mapping of allocated module names. + +```golang +type CapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleNames map[string]interface{} + sealed bool +} +``` + +The `CapabilityKeeper` provides the ability to create *scoped* sub-keepers which are tied to a +particular module name. These `ScopedCapabilityKeeper`s must be created at application initialisation +and passed to modules, which can then use them to claim capabilities they receive and retrieve +capabilities which they own by name, in addition to creating new capabilities & authenticating capabilities +passed by other modules. + +```golang +type ScopedCapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleName string +} +``` + +`ScopeToModule` is used to create a scoped sub-keeper with a particular name, which must be unique. +It MUST be called before `InitialiseAndSeal`. + +```golang +func (ck CapabilityKeeper) ScopeToModule(moduleName string) ScopedCapabilityKeeper { + if k.sealed { + panic("cannot scope to module via a sealed capability keeper") + } + + if _, ok := k.scopedModules[moduleName]; ok { + panic(fmt.Sprintf("cannot create multiple scoped keepers for the same module name: %s", moduleName)) + } + + k.scopedModules[moduleName] = struct{}{} + + return ScopedKeeper{ + cdc: k.cdc, + storeKey: k.storeKey, + memKey: k.memKey, + capMap: k.capMap, + module: moduleName, + } +} +``` + +`InitialiseAndSeal` MUST be called exactly once, after loading the initial state and creating all +necessary `ScopedCapabilityKeeper`s, in order to populate the memory store with newly-created +capability keys in accordance with the keys previously claimed by particular modules and prevent the +creation of any new `ScopedCapabilityKeeper`s. + +```golang +func (ck CapabilityKeeper) InitialiseAndSeal(ctx Context) { + if ck.sealed { + panic("capability keeper is sealed") + } + + persistentStore := ctx.KVStore(ck.persistentKey) + map := ctx.KVStore(ck.memKey) + + // initialise memory store for all names in persistent store + for index, value := range persistentStore.Iter() { + capability = &CapabilityKey{index: index} + + for moduleAndCapability := range value { + moduleName, capabilityName := moduleAndCapability.Split("/") + memStore.Set(moduleName + "/fwd/" + capability, capabilityName) + memStore.Set(moduleName + "/rev/" + capabilityName, index) + + ck.capMap[index] = capability + } + } + + ck.sealed = true +} +``` + +`NewCapability` can be called by any module to create a new unique, unforgeable object-capability +reference. The newly created capability is automatically persisted; the calling module need not +call `ClaimCapability`. + +```golang +func (sck ScopedCapabilityKeeper) NewCapability(ctx Context, name string) (Capability, error) { + // check name not taken in memory store + if capStore.Get("rev/" + name) != nil { + return nil, errors.New("name already taken") + } + + // fetch the current index + index := persistentStore.Get("index") + + // create a new capability + capability := &CapabilityKey{index: index} + + // set persistent store + persistentStore.Set(index, Set.singleton(sck.moduleName + "/" + name)) + + // update the index + index++ + persistentStore.Set("index", index) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to index + memStore.Set(sck.moduleName + "/rev/" + name, index) + + // set the in-memory mapping from index to capability pointer + capMap[index] = capability + + // return the newly created capability + return capability +} +``` + +`AuthenticateCapability` can be called by any module to check that a capability +does in fact correspond to a particular name (the name can be untrusted user input) +with which the calling module previously associated it. + +```golang +func (sck ScopedCapabilityKeeper) AuthenticateCapability(name string, capability Capability) bool { + // return whether forward mapping in memory store matches name + return memStore.Get(sck.moduleName + "/fwd/" + capability) === name +} +``` + +`ClaimCapability` allows a module to claim a capability key which it has received from another module +so that future `GetCapability` calls will succeed. + +`ClaimCapability` MUST be called if a module which receives a capability wishes to access it by name +in the future. Capabilities are multi-owner, so if multiple modules have a single `Capability` reference, +they will all own it. + +```golang +func (sck ScopedCapabilityKeeper) ClaimCapability(ctx Context, capability Capability, name string) error { + persistentStore := ctx.KVStore(sck.persistentKey) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to capability + memStore.Set(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.add(sck.moduleName + "/" + name) + persistentStore.Set(capability.Index(), owners) +} +``` + +`GetCapability` allows a module to fetch a capability which it has previously claimed by name. +The module is not allowed to retrieve capabilities which it does not own. + +```golang +func (sck ScopedCapabilityKeeper) GetCapability(ctx Context, name string) (Capability, error) { + // fetch the index of capability using reverse mapping in memstore + index := memStore.Get(sck.moduleName + "/rev/" + name) + + // fetch capability from go-map using index + capability := capMap[index] + + // return the capability + return capability +} +``` + +`ReleaseCapability` allows a module to release a capability which it had previously claimed. If no +more owners exist, the capability will be deleted globally. + +```golang +func (sck ScopedCapabilityKeeper) ReleaseCapability(ctx Context, capability Capability) err { + persistentStore := ctx.KVStore(sck.persistentKey) + + name := capStore.Get(sck.moduleName + "/fwd/" + capability) + if name == nil { + return error("capability not owned by module") + } + + // delete forward mapping in memory store + memoryStore.Delete(sck.moduleName + "/fwd/" + capability, name) + + // delete reverse mapping in memory store + memoryStore.Delete(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.remove(sck.moduleName + "/" + name) + if owners.size() > 0 { + // there are still other owners, keep the capability around + persistentStore.Set(capability.Index(), owners) + } else { + // no more owners, delete the capability + persistentStore.Delete(capability.Index()) + delete(capMap[capability.Index()]) + } +} +``` + +### Usage patterns + +#### Initialisation + +Any modules which use dynamic capabilities must be provided a `ScopedCapabilityKeeper` in `app.go`: + +```golang +ck := NewCapabilityKeeper(persistentKey, memoryKey) +mod1Keeper := NewMod1Keeper(ck.ScopeToModule("mod1"), ....) +mod2Keeper := NewMod2Keeper(ck.ScopeToModule("mod2"), ....) + +// other initialisation logic ... + +// load initial state... + +ck.InitialiseAndSeal(initialContext) +``` + +#### Creating, passing, claiming and using capabilities + +Consider the case where `mod1` wants to create a capability, associate it with a resource (e.g. an IBC channel) by name, then pass it to `mod2` which will use it later: + +Module 1 would have the following code: + +```golang +capability := scopedCapabilityKeeper.NewCapability(ctx, "resourceABC") +mod2Keeper.SomeFunction(ctx, capability, args...) +``` + +`SomeFunction`, running in module 2, could then claim the capability: + +```golang +func (k Mod2Keeper) SomeFunction(ctx Context, capability Capability) { + k.sck.ClaimCapability(ctx, capability, "resourceABC") + // other logic... +} +``` + +Later on, module 2 can retrieve that capability by name and pass it to module 1, which will authenticate it against the resource: + +```golang +func (k Mod2Keeper) SomeOtherFunction(ctx Context, name string) { + capability := k.sck.GetCapability(ctx, name) + mod1.UseResource(ctx, capability, "resourceABC") +} +``` + +Module 1 will then check that this capability key is authenticated to use the resource before allowing module 2 to use it: + +```golang +func (k Mod1Keeper) UseResource(ctx Context, capability Capability, resource string) { + if !k.sck.AuthenticateCapability(name, capability) { + return errors.New("unauthenticated") + } + // do something with the resource +} +``` + +If module 2 passed the capability key to module 3, module 3 could then claim it and call module 1 just like module 2 did +(in which case module 1, module 2, and module 3 would all be able to use this capability). + +## Status + +Proposed. + +## Consequences + +### Positive + +- Dynamic capability support. +- Allows CapabilityKeeper to return same capability pointer from go-map while reverting any writes to the persistent `KVStore` and in-memory `MemoryStore` on tx failure. + +### Negative + +- Requires an additional keeper. +- Some overlap with existing `StoreKey` system (in the future they could be combined, since this is a superset functionality-wise). +- Requires an extra level of indirection in the reverse mapping, since MemoryStore must map to index which must then be used as key in a go map to retrieve the actual capability + +### Neutral + +(none known) + +## References + +- [Original discussion](https://github.com/cosmos/cosmos-sdk/pull/5230#discussion_r343978513) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-004-split-denomination-keys.md b/versioned_docs/version-0.45/integrate/architecture/adr-004-split-denomination-keys.md new file mode 100644 index 000000000..ae192c632 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-004-split-denomination-keys.md @@ -0,0 +1,120 @@ +# ADR 004: Split Denomination Keys + +## Changelog + +- 2020-01-08: Initial version +- 2020-01-09: Alterations to handle vesting accounts +- 2020-01-14: Updates from review feedback +- 2020-01-30: Updates from implementation + +### Glossary + +* denom / denomination key -- unique token identifier. + +## Context + +With permissionless IBC, anyone will be able to send arbitrary denominations to any other account. Currently, all non-zero balances are stored along with the account in an `sdk.Coins` struct, which creates a potential denial-of-service concern, as too many denominations will become expensive to load & store each time the account is modified. See issues [5467](https://github.com/cosmos/cosmos-sdk/issues/5467) and [4982](https://github.com/cosmos/cosmos-sdk/issues/4982) for additional context. + +Simply rejecting incoming deposits after a denomination count limit doesn't work, since it opens up a griefing vector: someone could send a user lots of nonsensical coins over IBC, and then prevent the user from receiving real denominations (such as staking rewards). + +## Decision + +Balances shall be stored per-account & per-denomination under a denomination- and account-unique key, thus enabling O(1) read & write access to the balance of a particular account in a particular denomination. + +### Account interface (x/auth) + +`GetCoins()` and `SetCoins()` will be removed from the account interface, since coin balances will +now be stored in & managed by the bank module. + +The vesting account interface will replace `SpendableCoins` in favor of `LockedCoins` which does +not require the account balance anymore. In addition, `TrackDelegation()` will now accept the +account balance of all tokens denominated in the vesting balance instead of loading the entire +account balance. + +Vesting accounts will continue to store original vesting, delegated free, and delegated +vesting coins (which is safe since these cannot contain arbitrary denominations). + +### Bank keeper (x/bank) + +The following APIs will be added to the `x/bank` keeper: + +- `GetAllBalances(ctx Context, addr AccAddress) Coins` +- `GetBalance(ctx Context, addr AccAddress, denom string) Coin` +- `SetBalance(ctx Context, addr AccAddress, coin Coin)` +- `LockedCoins(ctx Context, addr AccAddress) Coins` +- `SpendableCoins(ctx Context, addr AccAddress) Coins` + +Additional APIs may be added to facilitate iteration and auxiliary functionality not essential to +core functionality or persistence. + +Balances will be stored first by the address, then by the denomination (the reverse is also possible, +but retrieval of all balances for a single account is presumed to be more frequent): + +```golang +var BalancesPrefix = []byte("balances") + +func (k Keeper) SetBalance(ctx Context, addr AccAddress, balance Coin) error { + if !balance.IsValid() { + return err + } + + store := ctx.KVStore(k.storeKey) + balancesStore := prefix.NewStore(store, BalancesPrefix) + accountStore := prefix.NewStore(balancesStore, addr.Bytes()) + + bz := Marshal(balance) + accountStore.Set([]byte(balance.Denom), bz) + + return nil +} +``` + +This will result in the balances being indexed by the byte representation of +`balances/{address}/{denom}`. + +`DelegateCoins()` and `UndelegateCoins()` will be altered to only load each individual +account balance by denomination found in the (un)delegation amount. As a result, +any mutations to the account balance by will made by denomination. + +`SubtractCoins()` and `AddCoins()` will be altered to read & write the balances +directly instead of calling `GetCoins()` / `SetCoins()` (which no longer exist). + +`trackDelegation()` and `trackUndelegation()` will be altered to no longer update +account balances. + +External APIs will need to scan all balances under an account to retain backwards-compatibility. It +is advised that these APIs use `GetBalance` and `SetBalance` instead of `GetAllBalances` when +possible as to not load the entire account balance. + +### Supply module + +The supply module, in order to implement the total supply invariant, will now need +to scan all accounts & call `GetAllBalances` using the `x/bank` Keeper, then sum +the balances and check that they match the expected total supply. + +## Status + +Accepted. + +## Consequences + +### Positive + +- O(1) reads & writes of balances (with respect to the number of denominations for +which an account has non-zero balances). Note, this does not relate to the actual +I/O cost, rather the total number of direct reads needed. + +### Negative + +- Slightly less efficient reads/writes when reading & writing all balances of a +single account in a transaction. + +### Neutral + +None in particular. + +## References + +- Ref: https://github.com/cosmos/cosmos-sdk/issues/4982 +- Ref: https://github.com/cosmos/cosmos-sdk/issues/5467 +- Ref: https://github.com/cosmos/cosmos-sdk/issues/5492 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-006-secret-store-replacement.md b/versioned_docs/version-0.45/integrate/architecture/adr-006-secret-store-replacement.md new file mode 100644 index 000000000..8be407727 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-006-secret-store-replacement.md @@ -0,0 +1,54 @@ +# ADR 006: Secret Store Replacement + +## Changelog + +- July 29th, 2019: Initial draft +- September 11th, 2019: Work has started +- November 4th: SDK changes merged in +- November 18th: Gaia changes merged in + +## Context + +Currently, an SDK application's CLI directory stores key material and metadata in a plain text database in the user’s home directory. Key material is encrypted by a passphrase, protected by bcrypt hashing algorithm. Metadata (e.g. addresses, public keys, key storage details) is available in plain text. + +This is not desirable for a number of reasons. Perhaps the biggest reason is insufficient security protection of key material and metadata. Leaking the plain text allows an attacker to surveil what keys a given computer controls via a number of techniques, like compromised dependencies without any privilege execution. This could be followed by a more targeted attack on a particular user/computer. + +All modern desktop computers OS (Ubuntu, Debian, MacOS, Windows) provide a built-in secret store that is designed to allow applications to store information that is isolated from all other applications and requires passphrase entry to access the data. + +We are seeking solution that provides a common abstraction layer to the many different backends and reasonable fallback for minimal platforms that don’t provide a native secret store. + +## Decision + +We recommend replacing the current Keybase backend based on LevelDB with [Keyring](https://github.com/99designs/keyring) by 99 designs. This application is designed to provide a common abstraction and uniform interface between many secret stores and is used by AWS Vault application by 99-designs application. + +This appears to fulfill the requirement of protecting both key material and metadata from rouge software on a user’s machine. + +## Status + +Accepted + +## Consequences + +### Positive + +Increased safety for users. + +### Negative + +Users must manually migrate. + +Testing against all supported backends is difficult. + +Running tests locally on a Mac require numerous repetitive password entries. + +### Neutral + +{neutral consequences} + +## References + +- #4754 Switch secret store to the keyring secret store (original PR by @poldsam) [__CLOSED__] +- #5029 Add support for github.com/99designs/keyring-backed keybases [__MERGED__] +- #5097 Add keys migrate command [__MERGED__] +- #5180 Drop on-disk keybase in favor of keyring [_PENDING_REVIEW_] +- cosmos/gaia#164 Drop on-disk keybase in favor of keyring (gaia's changes) [_PENDING_REVIEW_] diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-007-specialization-groups.md b/versioned_docs/version-0.45/integrate/architecture/adr-007-specialization-groups.md new file mode 100644 index 000000000..8055fc5a2 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-007-specialization-groups.md @@ -0,0 +1,177 @@ +# ADR 007: Specialization Groups + +## Changelog + +- 2019 Jul 31: Initial Draft + +## Context + +This idea was first conceived of in order to fulfill the use case of the +creation of a decentralized Computer Emergency Response Team (dCERT), whose +members would be elected by a governing community and would fulfill the role of +coordinating the community under emergency situations. This thinking +can be further abstracted into the conception of "blockchain specialization +groups". + +The creation of these groups are the beginning of specialization capabilities +within a wider blockchain community which could be used to enable a certain +level of delegated responsibilities. Examples of specialization which could be +beneficial to a blockchain community include: code auditing, emergency response, +code development etc. This type of community organization paves the way for +individual stakeholders to delegate votes by issue type, if in the future +governance proposals include a field for issue type. + +## Decision + +A specialization group can be broadly broken down into the following functions +(herein containing examples): + +- Membership Admittance +- Membership Acceptance +- Membership Revocation + - (probably) Without Penalty + - member steps down (self-Revocation) + - replaced by new member from governance + - (probably) With Penalty + - due to breach of soft-agreement (determined through governance) + - due to breach of hard-agreement (determined by code) +- Execution of Duties + - Special transactions which only execute for members of a specialization + group (for example, dCERT members voting to turn off transaction routes in + an emergency scenario) +- Compensation + - Group compensation (further distribution decided by the specialization group) + - Individual compensation for all constituents of a group from the + greater community + +Membership admittance to a specialization group could take place over a wide +variety of mechanisms. The most obvious example is through a general vote among +the entire community, however in certain systems a community may want to allow +the members already in a specialization group to internally elect new members, +or maybe the community may assign a permission to a particular specialization +group to appoint members to other 3rd party groups. The sky is really the limit +as to how membership admittance can be structured. We attempt to capture +some of these possiblities in a common interface dubbed the `Electionator`. For +its initial implementation as a part of this ADR we recommend that the general +election abstraction (`Electionator`) is provided as well as a basic +implementation of that abstraction which allows for a continuous election of +members of a specialization group. + +``` golang +// The Electionator abstraction covers the concept space for +// a wide variety of election kinds. +type Electionator interface { + + // is the election object accepting votes. + Active() bool + + // functionality to execute for when a vote is cast in this election, here + // the vote field is anticipated to be marshalled into a vote type used + // by an election. + // + // NOTE There are no explicit ids here. Just votes which pertain specifically + // to one electionator. Anyone can create and send a vote to the electionator item + // which will presumably attempt to marshal those bytes into a particular struct + // and apply the vote information in some arbitrary way. There can be multiple + // Electionators within the Cosmos-Hub for multiple specialization groups, votes + // would need to be routed to the Electionator upstream of here. + Vote(addr sdk.AccAddress, vote []byte) + + // here lies all functionality to authenticate and execute changes for + // when a member accepts being elected + AcceptElection(sdk.AccAddress) + + // Register a revoker object + RegisterRevoker(Revoker) + + // No more revokers may be registered after this function is called + SealRevokers() + + // register hooks to call when an election actions occur + RegisterHooks(ElectionatorHooks) + + // query for the current winner(s) of this election based on arbitrary + // election ruleset + QueryElected() []sdk.AccAddress + + // query metadata for an address in the election this + // could include for example position that an address + // is being elected for within a group + // + // this metadata may be directly related to + // voting information and/or privileges enabled + // to members within a group. + QueryMetadata(sdk.AccAddress) []byte +} + +// ElectionatorHooks, once registered with an Electionator, +// trigger execution of relevant interface functions when +// Electionator events occur. +type ElectionatorHooks interface { + AfterVoteCast(addr sdk.AccAddress, vote []byte) + AfterMemberAccepted(addr sdk.AccAddress) + AfterMemberRevoked(addr sdk.AccAddress, cause []byte) +} + +// Revoker defines the function required for a membership revocation rule-set +// used by a specialization group. This could be used to create self revoking, +// and evidence based revoking, etc. Revokers types may be created and +// reused for different election types. +// +// When revoking the "cause" bytes may be arbitrarily marshalled into evidence, +// memos, etc. +type Revoker interface { + RevokeName() string // identifier for this revoker type + RevokeMember(addr sdk.AccAddress, cause []byte) error +} +``` + +Certain level of commonality likely exists between the existing code within +`x/governance` and required functionality of elections. This common +functionality should be abstracted during implementation. Similarly for each +vote implementation client CLI/REST functionality should be abstracted +to be reused for multiple elections. + +The specialization group abstraction firstly extends the `Electionator` +but also further defines traits of the group. + +``` golang +type SpecializationGroup interface { + Electionator + GetName() string + GetDescription() string + + // general soft contract the group is expected + // to fulfill with the greater community + GetContract() string + + // messages which can be executed by the members of the group + Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result + + // logic to be executed at endblock, this may for instance + // include payment of a stipend to the group members + // for participation in the security group. + EndBlocker(ctx sdk.Context) +} +``` + +## Status + +> Proposed + +## Consequences + +### Positive + +- increases specialization capabilities of a blockchain +- improve abstractions in `x/gov/` such that they can be used with specialization groups + +### Negative + +- could be used to increase centralization within a community + +### Neutral + +## References + +- [dCERT ADR](./adr-008-dCERT-group.md) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-008-dCERT-group.md b/versioned_docs/version-0.45/integrate/architecture/adr-008-dCERT-group.md new file mode 100644 index 000000000..a6f0dfb19 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-008-dCERT-group.md @@ -0,0 +1,171 @@ +# ADR 008: Decentralized Computer Emergency Response Team (dCERT) Group + +## Changelog + +- 2019 Jul 31: Initial Draft + +## Context + +In order to reduce the number of parties involved with handling sensitive +information in an emergency scenario, we propose the creation of a +specialization group named The Decentralized Computer Emergency Response Team +(dCERT). Initially this group's role is intended to serve as coordinators +between various actors within a blockchain community such as validators, +bug-hunters, and developers. During a time of crisis, the dCERT group would +aggregate and relay input from a variety of stakeholders to the developers who +are actively devising a patch to the software, this way sensitive information +does not need to be publicly disclosed while some input from the community can +still be gained. + +Additionally, a special privilege is proposed for the dCERT group: the capacity +to "circuit-break" (aka. temporarily disable) a particular message path. Note +that this privilege should be enabled/disabled globally with a governance +parameter such that this privilege could start disabled and later be enabled +through a parameter change proposal, once a dCERT group has been established. + +In the future it is foreseeable that the community may wish to expand the roles +of dCERT with further responsibilities such as the capacity to "pre-approve" a +security update on behalf of the community prior to a full community +wide vote whereby the sensitive information would be revealed prior to a +vulnerability being patched on the live network. + +## Decision + +The dCERT group is proposed to include an implementation of a `SpecializationGroup` +as defined in [ADR 007](./adr-007-specialization-groups.md). This will include the +implementation of: + +- continuous voting +- slashing due to breach of soft contract +- revoking a member due to breach of soft contract +- emergency disband of the entire dCERT group (ex. for colluding maliciously) +- compensation stipend from the community pool or other means decided by + governance + +This system necessitates the following new parameters: + +- blockly stipend allowance per dCERT member +- maximum number of dCERT members +- required staked slashable tokens for each dCERT member +- quorum for suspending a particular member +- proposal wager for disbanding the dCERT group +- stabilization period for dCERT member transition +- circuit break dCERT privileges enabled + +These parameters are expected to be implemented through the param keeper such +that governance may change them at any given point. + +### Continuous Voting Electionator + +An `Electionator` object is to be implemented as continuous voting and with the +following specifications: + +- All delegation addresses may submit votes at any point which updates their + preferred representation on the dCERT group. +- Preferred representation may be arbitrarily split between addresses (ex. 50% + to John, 25% to Sally, 25% to Carol) +- In order for a new member to be added to the dCERT group they must + send a transaction accepting their admission at which point the validity of + their admission is to be confirmed. + - A sequence number is assigned when a member is added to dCERT group. + If a member leaves the dCERT group and then enters back, a new sequence number + is assigned. +- Addresses which control the greatest amount of preferred-representation are + eligible to join the dCERT group (up the _maximum number of dCERT members_). + If the dCERT group is already full and new member is admitted, the existing + dCERT member with the lowest amount of votes is kicked from the dCERT group. + - In the split situation where the dCERT group is full but a vying candidate + has the same amount of vote as an existing dCERT member, the existing + member should maintain its position. + - In the split situation where somebody must be kicked out but the two + addresses with the smallest number of votes have the same number of votes, + the address with the smallest sequence number maintains its position. +- A stabilization period can be optionally included to reduce the + "flip-flopping" of the dCERT membership tail members. If a stabilization + period is provided which is greater than 0, when members are kicked due to + insufficient support, a queue entry is created which documents which member is + to replace which other member. While this entry is in the queue, no new entries + to kick that same dCERT member can be made. When the entry matures at the + duration of the stabilization period, the new member is instantiated, and old + member kicked. + +### Staking/Slashing + +All members of the dCERT group must stake tokens _specifically_ to maintain +eligibility as a dCERT member. These tokens can be staked directly by the vying +dCERT member or out of the good will of a 3rd party (who shall gain no on-chain +benefits for doing so). This staking mechanism should use the existing global +unbonding time of tokens staked for network validator security. A dCERT member +can _only be_ a member if it has the required tokens staked under this +mechanism. If those tokens are unbonded then the dCERT member must be +automatically kicked from the group. + +Slashing of a particular dCERT member due to soft-contract breach should be +performed by governance on a per member basis based on the magnitude of the +breach. The process flow is anticipated to be that a dCERT member is suspended +by the dCERT group prior to being slashed by governance. + +Membership suspension by the dCERT group takes place through a voting procedure +by the dCERT group members. After this suspension has taken place, a governance +proposal to slash the dCERT member must be submitted, if the proposal is not +approved by the time the rescinding member has completed unbonding their +tokens, then the tokens are no longer staked and unable to be slashed. + +Additionally in the case of an emergency situation of a colluding and malicious +dCERT group, the community needs the capability to disband the entire dCERT +group and likely fully slash them. This could be achieved though a special new +proposal type (implemented as a general governance proposal) which would halt +the functionality of the dCERT group until the proposal was concluded. This +special proposal type would likely need to also have a fairly large wager which +could be slashed if the proposal creator was malicious. The reason a large +wager should be required is because as soon as the proposal is made, the +capability of the dCERT group to halt message routes is put on temporarily +suspended, meaning that a malicious actor who created such a proposal could +then potentially exploit a bug during this period of time, with no dCERT group +capable of shutting down the exploitable message routes. + +### dCERT membership transactions + +Active dCERT members + +- change of the description of the dCERT group +- circuit break a message route +- vote to suspend a dCERT member. + +Here circuit-breaking refers to the capability to disable a groups of messages, +This could for instance mean: "disable all staking-delegation messages", or +"disable all distribution messages". This could be accomplished by verifying +that the message route has not been "circuit-broken" at CheckTx time (in +`baseapp/baseapp.go`). + +"unbreaking" a circuit is anticipated only to occur during a hard fork upgrade +meaning that no capability to unbreak a message route on a live chain is +required. + +Note also, that if there was a problem with governance voting (for instance a +capability to vote many times) then governance would be broken and should be +halted with this mechanism, it would be then up to the validator set to +coordinate and hard-fork upgrade to a patched version of the software where +governance is re-enabled (and fixed). If the dCERT group abuses this privilege +they should all be severely slashed. + +## Status + +> Proposed + +## Consequences + +### Positive + +- Potential to reduces the number of parties to coordinate with during an emergency +- Reduction in possibility of disclosing sensitive information to malicious parties + +### Negative + +- Centralization risks + +### Neutral + +## References + + [Specialization Groups ADR](./adr-007-specialization-groups.md) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-009-evidence-module.md b/versioned_docs/version-0.45/integrate/architecture/adr-009-evidence-module.md new file mode 100644 index 000000000..f6f47170c --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-009-evidence-module.md @@ -0,0 +1,182 @@ +# ADR 009: Evidence Module + +## Changelog + +- 2019 July 31: Initial draft +- 2019 October 24: Initial implementation + +## Status + +Accepted + +## Context + +In order to support building highly secure, robust and interoperable blockchain +applications, it is vital for the Cosmos SDK to expose a mechanism in which arbitrary +evidence can be submitted, evaluated and verified resulting in some agreed upon +penalty for any misbehavior committed by a validator, such as equivocation (double-voting), +signing when unbonded, signing an incorrect state transition (in the future), etc. +Furthermore, such a mechanism is paramount for any +[IBC](https://github.com/cosmos/ics/blob/master/ibc/2_IBC_ARCHITECTURE.md) or +cross-chain validation protocol implementation in order to support the ability +for any misbehavior to be relayed back from a collateralized chain to a primary +chain so that the equivocating validator(s) can be slashed. + +## Decision + +We will implement an evidence module in the Cosmos SDK supporting the following +functionality: + +- Provide developers with the abstractions and interfaces necessary to define + custom evidence messages, message handlers, and methods to slash and penalize + accordingly for misbehavior. +- Support the ability to route evidence messages to handlers in any module to + determine the validity of submitted misbehavior. +- Support the ability, through governance, to modify slashing penalties of any + evidence type. +- Querier implementation to support querying params, evidence types, params, and + all submitted valid misbehavior. + +### Types + +First, we define the `Evidence` interface type. The `x/evidence` module may implement +its own types that can be used by many chains (e.g. `CounterFactualEvidence`). +In addition, other modules may implement their own `Evidence` types in a similar +manner in which governance is extensible. It is important to note any concrete +type implementing the `Evidence` interface may include arbitrary fields such as +an infraction time. We want the `Evidence` type to remain as flexible as possible. + +When submitting evidence to the `x/evidence` module, the concrete type must provide +the validator's consensus address, which should be known by the `x/slashing` +module (assuming the infraction is valid), the height at which the infraction +occurred and the validator's power at same height in which the infraction occurred. + +```go +type Evidence interface { + Route() string + Type() string + String() string + Hash() HexBytes + ValidateBasic() error + + // The consensus address of the malicious validator at time of infraction + GetConsensusAddress() ConsAddress + + // Height at which the infraction occurred + GetHeight() int64 + + // The total power of the malicious validator at time of infraction + GetValidatorPower() int64 + + // The total validator set power at time of infraction + GetTotalPower() int64 +} +``` + +### Routing & Handling + +Each `Evidence` type must map to a specific unique route and be registered with +the `x/evidence` module. It accomplishes this through the `Router` implementation. + +```go +type Router interface { + AddRoute(r string, h Handler) Router + HasRoute(r string) bool + GetRoute(path string) Handler + Seal() +} +``` + +Upon successful routing through the `x/evidence` module, the `Evidence` type +is passed through a `Handler`. This `Handler` is responsible for executing all +corresponding business logic necessary for verifying the evidence as valid. In +addition, the `Handler` may execute any necessary slashing and potential jailing. +Since slashing fractions will typically result from some form of static functions, +allow the `Handler` to do this provides the greatest flexibility. An example could +be `k * evidence.GetValidatorPower()` where `k` is an on-chain parameter controlled +by governance. The `Evidence` type should provide all the external information +necessary in order for the `Handler` to make the necessary state transitions. +If no error is returned, the `Evidence` is considered valid. + +```go +type Handler func(Context, Evidence) error +``` + +### Submission + +`Evidence` is submitted through a `MsgSubmitEvidence` message type which is internally +handled by the `x/evidence` module's `SubmitEvidence`. + +```go +type MsgSubmitEvidence struct { + Evidence +} + +func handleMsgSubmitEvidence(ctx Context, keeper Keeper, msg MsgSubmitEvidence) Result { + if err := keeper.SubmitEvidence(ctx, msg.Evidence); err != nil { + return err.Result() + } + + // emit events... + + return Result{ + // ... + } +} +``` + +The `x/evidence` module's keeper is responsible for matching the `Evidence` against +the module's router and invoking the corresponding `Handler` which may include +slashing and jailing the validator. Upon success, the submitted evidence is persisted. + +```go +func (k Keeper) SubmitEvidence(ctx Context, evidence Evidence) error { + handler := keeper.router.GetRoute(evidence.Route()) + if err := handler(ctx, evidence); err != nil { + return ErrInvalidEvidence(keeper.codespace, err) + } + + keeper.setEvidence(ctx, evidence) + return nil +} +``` + +### Genesis + +Finally, we need to represent the genesis state of the `x/evidence` module. The +module only needs a list of all submitted valid infractions and any necessary params +for which the module needs in order to handle submitted evidence. The `x/evidence` +module will naturally define and route native evidence types for which it'll most +likely need slashing penalty constants for. + +```go +type GenesisState struct { + Params Params + Infractions []Evidence +} +``` + +## Consequences + +### Positive + +- Allows the state machine to process misbehavior submitted on-chain and penalize + validators based on agreed upon slashing parameters. +- Allows evidence types to be defined and handled by any module. This further allows + slashing and jailing to be defined by more complex mechanisms. +- Does not solely rely on Tendermint to submit evidence. + +### Negative + +- No easy way to introduce new evidence types through governance on a live chain + due to the inability to introduce the new evidence type's corresponding handler + +### Neutral + +- Should we persist infractions indefinitely? Or should we rather rely on events? + +## References + +- [ICS](https://github.com/cosmos/ics) +- [IBC Architecture](https://github.com/cosmos/ics/blob/master/ibc/1_IBC_ARCHITECTURE.md) +- [Tendermint Fork Accountability](https://github.com/tendermint/spec/blob/7b3138e69490f410768d9b1ffc7a17abc23ea397/spec/consensus/fork-accountability.md) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-010-modular-antehandler.md b/versioned_docs/version-0.45/integrate/architecture/adr-010-modular-antehandler.md new file mode 100644 index 000000000..15d28dbee --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-010-modular-antehandler.md @@ -0,0 +1,285 @@ +# ADR 010: Modular AnteHandler + +## Changelog + +- 2019 Aug 31: Initial draft + +## Context + +The current AnteHandler design allows users to either use the default AnteHandler provided in `x/auth` or to build their own AnteHandler from scratch. Ideally AnteHandler functionality is split into multiple, modular functions that can be chained together along with custom ante-functions so that users do not have to rewrite common antehandler logic when they want to implement custom behavior. + +For example, let's say a user wants to implement some custom signature verification logic. In the current codebase, the user would have to write their own Antehandler from scratch largely reimplementing much of the same code and then set their own custom, monolithic antehandler in the baseapp. Instead, we would like to allow users to specify custom behavior when necessary and combine them with default ante-handler functionality in a way that is as modular and flexible as possible. + +## Proposals + +### Per-Module AnteHandler + +One approach is to use the [ModuleManager](https://godoc.org/github.com/cosmos/cosmos-sdk/types/module) and have each module implement its own antehandler if it requires custom antehandler logic. The ModuleManager can then be passed in an AnteHandler order in the same way it has an order for BeginBlockers and EndBlockers. The ModuleManager returns a single AnteHandler function that will take in a tx and run each module's `AnteHandle` in the specified order. The module manager's AnteHandler is set as the baseapp's AnteHandler. + +Pros: + +1. Simple to implement +2. Utilizes the existing ModuleManager architecture + +Cons: + +1. Improves granularity but still cannot get more granular than a per-module basis. e.g. If auth's `AnteHandle` function is in charge of validating memo and signatures, users cannot swap the signature-checking functionality while keeping the rest of auth's `AnteHandle` functionality. +2. Module AnteHandler are run one after the other. There is no way for one AnteHandler to wrap or "decorate" another. + +### Decorator Pattern + +The [weave project](https://github.com/iov-one/weave) achieves AnteHandler modularity through the use of a decorator pattern. The interface is designed as follows: + +```go +// Decorator wraps a Handler to provide common functionality +// like authentication, or fee-handling, to many Handlers +type Decorator interface { + Check(ctx Context, store KVStore, tx Tx, next Checker) (*CheckResult, error) + Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) (*DeliverResult, error) +} +``` + +Each decorator works like a modularized SDK antehandler function, but it can take in a `next` argument that may be another decorator or a Handler (which does not take in a next argument). These decorators can be chained together, one decorator being passed in as the `next` argument of the previous decorator in the chain. The chain ends in a Router which can take a tx and route to the appropriate msg handler. + +A key benefit of this approach is that one Decorator can wrap its internal logic around the next Checker/Deliverer. A weave Decorator may do the following: + +```go +// Example Decorator's Deliver function +func (example Decorator) Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) { + // Do some pre-processing logic + + res, err := next.Deliver(ctx, store, tx) + + // Do some post-processing logic given the result and error +} +``` + +Pros: + +1. Weave Decorators can wrap over the next decorator/handler in the chain. The ability to both pre-process and post-process may be useful in certain settings. +2. Provides a nested modular structure that isn't possible in the solution above, while also allowing for a linear one-after-the-other structure like the solution above. + +Cons: + +1. It is hard to understand at first glance the state updates that would occur after a Decorator runs given the `ctx`, `store`, and `tx`. A Decorator can have an arbitrary number of nested Decorators being called within its function body, each possibly doing some pre- and post-processing before calling the next decorator on the chain. Thus to understand what a Decorator is doing, one must also understand what every other decorator further along the chain is also doing. This can get quite complicated to understand. A linear, one-after-the-other approach while less powerful, may be much easier to reason about. + +### Chained Micro-Functions + +The benefit of Weave's approach is that the Decorators can be very concise, which when chained together allows for maximum customizability. However, the nested structure can get quite complex and thus hard to reason about. + +Another approach is to split the AnteHandler functionality into tightly scoped "micro-functions", while preserving the one-after-the-other ordering that would come from the ModuleManager approach. + +We can then have a way to chain these micro-functions so that they run one after the other. Modules may define multiple ante micro-functions and then also provide a default per-module AnteHandler that implements a default, suggested order for these micro-functions. + +Users can order the AnteHandlers easily by simply using the ModuleManager. The ModuleManager will take in a list of AnteHandlers and return a single AnteHandler that runs each AnteHandler in the order of the list provided. If the user is comfortable with the default ordering of each module, this is as simple as providing a list with each module's antehandler (exactly the same as BeginBlocker and EndBlocker). + +If however, users wish to change the order or add, modify, or delete ante micro-functions in anyway; they can always define their own ante micro-functions and add them explicitly to the list that gets passed into module manager. + +#### Default Workflow + +This is an example of a user's AnteHandler if they choose not to make any custom micro-functions. + +##### SDK code + +```go +// Chains together a list of AnteHandler micro-functions that get run one after the other. +// Returned AnteHandler will abort on first error. +func Chainer(order []AnteHandler) AnteHandler { + return func(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + for _, ante := range order { + ctx, err := ante(ctx, tx, simulate) + if err != nil { + return ctx, err + } + } + return ctx, err + } +} +``` + +```go +// AnteHandler micro-function to verify signatures +func VerifySignatures(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // verify signatures + // Returns InvalidSignature Result and abort=true if sigs invalid + // Return OK result and abort=false if sigs are valid +} + +// AnteHandler micro-function to validate memo +func ValidateMemo(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // validate memo +} + +// Auth defines its own default ante-handler by chaining its micro-functions in a recommended order +AuthModuleAnteHandler := Chainer([]AnteHandler{VerifySignatures, ValidateMemo}) +``` + +```go +// Distribution micro-function to deduct fees from tx +func DeductFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // Deduct fees from tx + // Abort if insufficient funds in account to pay for fees +} + +// Distribution micro-function to check if fees > mempool parameter +func CheckMempoolFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // If CheckTx: Abort if the fees are less than the mempool's minFee parameter +} + +// Distribution defines its own default ante-handler by chaining its micro-functions in a recommended order +DistrModuleAnteHandler := Chainer([]AnteHandler{CheckMempoolFees, DeductFees}) +``` + +```go +type ModuleManager struct { + // other fields + AnteHandlerOrder []AnteHandler +} + +func (mm ModuleManager) GetAnteHandler() AnteHandler { + retun Chainer(mm.AnteHandlerOrder) +} +``` + +##### User Code + +```go +// Note: Since user is not making any custom modifications, we can just SetAnteHandlerOrder with the default AnteHandlers provided by each module in our preferred order +moduleManager.SetAnteHandlerOrder([]AnteHandler(AuthModuleAnteHandler, DistrModuleAnteHandler)) + +app.SetAnteHandler(mm.GetAnteHandler()) +``` + +#### Custom Workflow + +This is an example workflow for a user that wants to implement custom antehandler logic. In this example, the user wants to implement custom signature verification and change the order of antehandler so that validate memo runs before signature verification. + +##### User Code + +```go +// User can implement their own custom signature verification antehandler micro-function +func CustomSigVerify(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // do some custom signature verification logic +} +``` + +```go +// Micro-functions allow users to change order of when they get executed, and swap out default ante-functionality with their own custom logic. +// Note that users can still chain the default distribution module handler, and auth micro-function along with their custom ante function +moduleManager.SetAnteHandlerOrder([]AnteHandler(ValidateMemo, CustomSigVerify, DistrModuleAnteHandler)) +``` + +Pros: + +1. Allows for ante functionality to be as modular as possible. +2. For users that do not need custom ante-functionality, there is little difference between how antehandlers work and how BeginBlock and EndBlock work in ModuleManager. +3. Still easy to understand + +Cons: + +1. Cannot wrap antehandlers with decorators like you can with Weave. + +### Simple Decorators + +This approach takes inspiration from Weave's decorator design while trying to minimize the number of breaking changes to the SDK and maximizing simplicity. Like Weave decorators, this approach allows one `AnteDecorator` to wrap the next AnteHandler to do pre- and post-processing on the result. This is useful since decorators can do defer/cleanups after an AnteHandler returns as well as perform some setup beforehand. Unlike Weave decorators, these `AnteDecorator` functions can only wrap over the AnteHandler rather than the entire handler execution path. This is deliberate as we want decorators from different modules to perform authentication/validation on a `tx`. However, we do not want decorators being capable of wrapping and modifying the results of a `MsgHandler`. + +In addition, this approach will not break any core SDK API's. Since we preserve the notion of an AnteHandler and still set a single AnteHandler in baseapp, the decorator is simply an additional approach available for users that desire more customization. The API of modules (namely `x/auth`) may break with this approach, but the core API remains untouched. + +Allow Decorator interface that can be chained together to create an SDK AnteHandler. + +This allows users to choose between implementing an AnteHandler by themselves and setting it in the baseapp, or use the decorator pattern to chain their custom decorators with SDK provided decorators in the order they wish. + +```go +// An AnteDecorator wraps an AnteHandler, and can do pre- and post-processing on the next AnteHandler +type AnteDecorator interface { + AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) +} +``` + +```go +// ChainAnteDecorators will recursively link all of the AnteDecorators in the chain and return a final AnteHandler function +// This is done to preserve the ability to set a single AnteHandler function in the baseapp. +func ChainAnteDecorators(chain ...AnteDecorator) AnteHandler { + if len(chain) == 1 { + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, nil) + } + } + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, ChainAnteDecorators(chain[1:])) + } +} +``` + +#### Example Code + +Define AnteDecorator functions + +```go +// Setup GasMeter, catch OutOfGasPanic and handle appropriately +type SetUpContextDecorator struct{} + +func (sud SetUpContextDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + ctx.GasMeter = NewGasMeter(tx.Gas) + + defer func() { + // recover from OutOfGas panic and handle appropriately + } + + return next(ctx, tx, simulate) +} + +// Signature Verification decorator. Verify Signatures and move on +type SigVerifyDecorator struct{} + +func (svd SigVerifyDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // verify sigs. Return error if invalid + + // call next antehandler if sigs ok + return next(ctx, tx, simulate) +} + +// User-defined Decorator. Can choose to pre- and post-process on AnteHandler +type UserDefinedDecorator struct{ + // custom fields +} + +func (udd UserDefinedDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // pre-processing logic + + ctx, err = next(ctx, tx, simulate) + + // post-processing logic +} +``` + +Link AnteDecorators to create a final AnteHandler. Set this AnteHandler in baseapp. + +```go +// Create final antehandler by chaining the decorators together +antehandler := ChainAnteDecorators(NewSetUpContextDecorator(), NewSigVerifyDecorator(), NewUserDefinedDecorator()) + +// Set chained Antehandler in the baseapp +bapp.SetAnteHandler(antehandler) +``` + +Pros: + +1. Allows one decorator to pre- and post-process the next AnteHandler, similar to the Weave design. +2. Do not need to break baseapp API. Users can still set a single AnteHandler if they choose. + +Cons: + +1. Decorator pattern may have a deeply nested structure that is hard to understand, this is mitigated by having the decorator order explicitly listed in the `ChainAnteDecorators` function. +2. Does not make use of the ModuleManager design. Since this is already being used for BeginBlocker/EndBlocker, this proposal seems unaligned with that design pattern. + +## Consequences + +Since pros and cons are written for each approach, it is omitted from this section + +## References + +- [#4572](https://github.com/cosmos/cosmos-sdk/issues/4572): Modular AnteHandler Issue +- [#4582](https://github.com/cosmos/cosmos-sdk/pull/4583): Initial Implementation of Per-Module AnteHandler Approach +- [Weave Decorator Code](https://github.com/iov-one/weave/blob/master/handler.go#L35) +- [Weave Design Videos](https://vimeo.com/showcase/6189877) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-011-generalize-genesis-accounts.md b/versioned_docs/version-0.45/integrate/architecture/adr-011-generalize-genesis-accounts.md new file mode 100644 index 000000000..db323966e --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-011-generalize-genesis-accounts.md @@ -0,0 +1,170 @@ +# ADR 011: Generalize Genesis Accounts + +## Changelog + +- 2019-08-30: initial draft + +## Context + +Currently, the SDK allows for custom account types; the `auth` keeper stores any type fulfilling its `Account` interface. However `auth` does not handle exporting or loading accounts to/from a genesis file, this is done by `genaccounts`, which only handles one of 4 concrete account types (`BaseAccount`, `ContinuousVestingAccount`, `DelayedVestingAccount` and `ModuleAccount`). + +Projects desiring to use custom accounts (say custom vesting accounts) need to fork and modify `genaccounts`. + +## Decision + +In summary, we will (un)marshal all accounts (interface types) directly using amino, rather than converting to `genaccounts`’s `GenesisAccount` type. Since doing this removes the majority of `genaccounts`'s code, we will merge `genaccounts` into `auth`. Marshalled accounts will be stored in `auth`'s genesis state. + +Detailed changes: + +### 1) (Un)Marshal accounts directly using amino + +The `auth` module's `GenesisState` gains a new field `Accounts`. Note these aren't of type `exported.Account` for reasons outlined in section 3. + +```go +// GenesisState - all auth state that must be provided at genesis +type GenesisState struct { + Params Params `json:"params" yaml:"params"` + Accounts []GenesisAccount `json:"accounts" yaml:"accounts"` +} +``` + +Now `auth`'s `InitGenesis` and `ExportGenesis` (un)marshal accounts as well as the defined params. + +```go +// InitGenesis - Init store state from genesis data +func InitGenesis(ctx sdk.Context, ak AccountKeeper, data GenesisState) { + ak.SetParams(ctx, data.Params) + // load the accounts + for _, a := range data.Accounts { + acc := ak.NewAccount(ctx, a) // set account number + ak.SetAccount(ctx, acc) + } +} + +// ExportGenesis returns a GenesisState for a given context and keeper +func ExportGenesis(ctx sdk.Context, ak AccountKeeper) GenesisState { + params := ak.GetParams(ctx) + + var genAccounts []exported.GenesisAccount + ak.IterateAccounts(ctx, func(account exported.Account) bool { + genAccount := account.(exported.GenesisAccount) + genAccounts = append(genAccounts, genAccount) + return false + }) + + return NewGenesisState(params, genAccounts) +} +``` + +### 2) Register custom account types on the `auth` codec + +The `auth` codec must have all custom account types registered to marshal them. We will follow the pattern established in `gov` for proposals. + +An example custom account definition: + +```go +import authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + +// Register the module account type with the auth module codec so it can decode module accounts stored in a genesis file +func init() { + authtypes.RegisterAccountTypeCodec(ModuleAccount{}, "cosmos-sdk/ModuleAccount") +} + +type ModuleAccount struct { + ... +``` + +The `auth` codec definition: + +```go +var ModuleCdc *codec.LegacyAmino + +func init() { + ModuleCdc = codec.NewLegacyAmino() + // register module msg's and Account interface + ... + // leave the codec unsealed +} + +// RegisterAccountTypeCodec registers an external account type defined in another module for the internal ModuleCdc. +func RegisterAccountTypeCodec(o interface{}, name string) { + ModuleCdc.RegisterConcrete(o, name, nil) +} +``` + +### 3) Genesis validation for custom account types + +Modules implement a `ValidateGenesis` method. As `auth` does not know of account implementations, accounts will need to validate themselves. + +We will unmarshal accounts into a `GenesisAccount` interface that includes a `Validate` method. + +```go +type GenesisAccount interface { + exported.Account + Validate() error +} +``` + +Then the `auth` `ValidateGenesis` function becomes: + +```go +// ValidateGenesis performs basic validation of auth genesis data returning an +// error for any failed validation criteria. +func ValidateGenesis(data GenesisState) error { + // Validate params + ... + + // Validate accounts + addrMap := make(map[string]bool, len(data.Accounts)) + for _, acc := range data.Accounts { + + // check for duplicated accounts + addrStr := acc.GetAddress().String() + if _, ok := addrMap[addrStr]; ok { + return fmt.Errorf("duplicate account found in genesis state; address: %s", addrStr) + } + addrMap[addrStr] = true + + // check account specific validation + if err := acc.Validate(); err != nil { + return fmt.Errorf("invalid account found in genesis state; address: %s, error: %s", addrStr, err.Error()) + } + + } + return nil +} +``` + +### 4) Move add-genesis-account cli to `auth` + +The `genaccounts` module contains a cli command to add base or vesting accounts to a genesis file. + +This will be moved to `auth`. We will leave it to projects to write their own commands to add custom accounts. An extensible cli handler, similar to `gov`, could be created but it is not worth the complexity for this minor use case. + +### 5) Update module and vesting accounts + +Under the new scheme, module and vesting account types need some minor updates: + +- Type registration on `auth`'s codec (shown above) +- A `Validate` method for each `Account` concrete type + +## Status + +Proposed + +## Consequences + +### Positive + +- custom accounts can be used without needing to fork `genaccounts` +- reduction in lines of code + +### Negative + +### Neutral + +- `genaccounts` module no longer exists +- accounts in genesis files are stored under `accounts` in `auth` rather than in the `genaccounts` module. +-`add-genesis-account` cli command now in `auth` + +## References diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-012-state-accessors.md b/versioned_docs/version-0.45/integrate/architecture/adr-012-state-accessors.md new file mode 100644 index 000000000..b66e23eb6 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-012-state-accessors.md @@ -0,0 +1,155 @@ +# ADR 012: State Accessors + +## Changelog + +- 2019 Sep 04: Initial draft + +## Context + +SDK modules currently use the `KVStore` interface and `Codec` to access their respective state. While +this provides a large degree of freedom to module developers, it is hard to modularize and the UX is +mediocre. + +First, each time a module tries to access the state, it has to marshal the value and set or get the +value and finally unmarshal. Usually this is done by declaring `Keeper.GetXXX` and `Keeper.SetXXX` functions, +which are repetitive and hard to maintain. + +Second, this makes it harder to align with the object capability theorem: the right to access the +state is defined as a `StoreKey`, which gives full access on the entire Merkle tree, so a module cannot +send the access right to a specific key-value pair (or a set of key-value pairs) to another module safely. + +Finally, because the getter/setter functions are defined as methods of a module's `Keeper`, the reviewers +have to consider the whole Merkle tree space when they reviewing a function accessing any part of the state. +There is no static way to know which part of the state that the function is accessing (and which is not). + +## Decision + +We will define a type named `Value`: + +```go +type Value struct { + m Mapping + key []byte +} +``` + +The `Value` works as a reference for a key-value pair in the state, where `Value.m` defines the key-value +space it will access and `Value.key` defines the exact key for the reference. + +We will define a type named `Mapping`: + +```go +type Mapping struct { + storeKey sdk.StoreKey + cdc *codec.LegacyAmino + prefix []byte +} +``` + +The `Mapping` works as a reference for a key-value space in the state, where `Mapping.storeKey` defines +the IAVL (sub-)tree and `Mapping.prefix` defines the optional subspace prefix. + +We will define the following core methods for the `Value` type: + +```go +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Value) Get(ctx Context, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Value) GetSafe(ctx Context, ptr interface{}) {} + +// Get stored data as raw byte slice +func (Value) GetRaw(ctx Context) []byte {} + +// Marshal and set a raw value +func (Value) Set(ctx Context, o interface{}) {} + +// Check if a raw value exists +func (Value) Exists(ctx Context) bool {} + +// Delete a raw value value +func (Value) Delete(ctx Context) {} +``` + +We will define the following core methods for the `Mapping` type: + +```go +// Constructs key-value pair reference corresponding to the key argument in the Mapping space +func (Mapping) Value(key []byte) Value {} + +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Mapping) Get(ctx Context, key []byte, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Mapping) GetSafe(ctx Context, key []byte, ptr interface{}) + +// Get stored data as raw byte slice +func (Mapping) GetRaw(ctx Context, key []byte) []byte {} + +// Marshal and set a raw value +func (Mapping) Set(ctx Context, key []byte, o interface{}) {} + +// Check if a raw value exists +func (Mapping) Has(ctx Context, key []byte) bool {} + +// Delete a raw value value +func (Mapping) Delete(ctx Context, key []byte) {} +``` + +Each method of the `Mapping` type that is passed the arugments `ctx`, `key`, and `args...` will proxy +the call to `Mapping.Value(key)` with arguments `ctx` and `args...`. + +In addition, we will define and provide a common set of types derived from the `Value` type: + +```go +type Boolean struct { Value } +type Enum struct { Value } +type Integer struct { Value; enc IntEncoding } +type String struct { Value } +// ... +``` + +Where the encoding schemes can be different, `o` arguments in core methods are typed, and `ptr` arguments +in core methods are replaced by explicit return types. + +Finally, we will define a family of types derived from the `Mapping` type: + +```go +type Indexer struct { + m Mapping + enc IntEncoding +} +``` + +Where the `key` argument in core method is typed. + +Some of the properties of the accessor types are: + +- State access happens only when a function which takes a `Context` as an argument is invoked +- Accessor type structs give rights to access the state only that the struct is referring, no other +- Marshalling/Unmarshalling happens implicitly within the core methods + +## Status + +Proposed + +## Consequences + +### Positive + +- Serialization will be done automatically +- Shorter code size, less boilerplate, better UX +- References to the state can be transferred safely +- Explicit scope of accessing + +### Negative + +- Serialization format will be hidden +- Different architecture from the current, but the use of accessor types can be opt-in +- Type-specific types (e.g. `Boolean` and `Integer`) have to be defined manually + +### Neutral + +## References + +- [#4554](https://github.com/cosmos/cosmos-sdk/issues/4554) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-013-metrics.md b/versioned_docs/version-0.45/integrate/architecture/adr-013-metrics.md new file mode 100644 index 000000000..cf27d8964 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-013-metrics.md @@ -0,0 +1,157 @@ +# ADR 013: Observability + +## Changelog + +- 20-01-2020: Initial Draft + +## Status + +Proposed + +## Context + +Telemetry is paramount into debugging and understanding what the application is doing and how it is +performing. We aim to expose metrics from modules and other core parts of the Cosmos SDK. + +In addition, we should aim to support multiple configurable sinks that an operator may choose from. +By default, when telemetry is enabled, the application should track and expose metrics that are +stored in-memory. The operator may choose to enable additional sinks, where we support only +[Prometheus](https://prometheus.io/) for now, as it's battle-tested, simple to setup, open source, +and is rich with ecosystem tooling. + +We must also aim to integrate metrics into the Cosmos SDK in the most seamless way possible such that +metrics may be added or removed at will and without much friction. To do this, we will use the +[go-metrics](https://github.com/armon/go-metrics) library. + +Finally, operators may enable telemetry along with specific configuration options. If enabled, metrics +will be exposed via `/metrics?format={text|prometheus}` via the API server. + +## Decision + +We will add an additional configuration block to `app.toml` that defines telemetry settings: + +```toml +############################################################################### +### Telemetry Configuration ### +############################################################################### + +[telemetry] + +# Prefixed with keys to separate services +service-name = {{ .Telemetry.ServiceName }} + +# Enabled enables the application telemetry functionality. When enabled, +# an in-memory sink is also enabled by default. Operators may also enabled +# other sinks such as Prometheus. +enabled = {{ .Telemetry.Enabled }} + +# Enable prefixing gauge values with hostname +enable-hostname = {{ .Telemetry.EnableHostname }} + +# Enable adding hostname to labels +enable-hostname-label = {{ .Telemetry.EnableHostnameLabel }} + +# Enable adding service to labels +enable-service-label = {{ .Telemetry.EnableServiceLabel }} + +# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. +prometheus-retention-time = {{ .Telemetry.PrometheusRetentionTime }} +``` + +The given configuration allows for two sinks -- in-memory and Prometheus. We create a `Metrics` +type that performs all the bootstrapping for the operator, so capturing metrics becomes seamless. + +```go +// Metrics defines a wrapper around application telemetry functionality. It allows +// metrics to be gathered at any point in time. When creating a Metrics object, +// internally, a global metrics is registered with a set of sinks as configured +// by the operator. In addition to the sinks, when a process gets a SIGUSR1, a +// dump of formatted recent metrics will be sent to STDERR. +type Metrics struct { + memSink *metrics.InmemSink + prometheusEnabled bool +} + +// Gather collects all registered metrics and returns a GatherResponse where the +// metrics are encoded depending on the type. Metrics are either encoded via +// Prometheus or JSON if in-memory. +func (m *Metrics) Gather(format string) (GatherResponse, error) { + switch format { + case FormatPrometheus: + return m.gatherPrometheus() + + case FormatText: + return m.gatherGeneric() + + case FormatDefault: + return m.gatherGeneric() + + default: + return GatherResponse{}, fmt.Errorf("unsupported metrics format: %s", format) + } +} +``` + +In addition, `Metrics` allows us to gather the current set of metrics at any given point in time. An +operator may also choose to send a signal, SIGUSR1, to dump and print formatted metrics to STDERR. + +During an application's bootstrapping and construction phase, if `Telemetry.Enabled` is `true`, the +API server will create an instance of a reference to `Metrics` object and will register a metrics +handler accordingly. + +```go +func (s *Server) Start(cfg config.Config) error { + // ... + + if cfg.Telemetry.Enabled { + m, err := telemetry.New(cfg.Telemetry) + if err != nil { + return err + } + + s.metrics = m + s.registerMetrics() + } + + // ... +} + +func (s *Server) registerMetrics() { + metricsHandler := func(w http.ResponseWriter, r *http.Request) { + format := strings.TrimSpace(r.FormValue("format")) + + gr, err := s.metrics.Gather(format) + if err != nil { + rest.WriteErrorResponse(w, http.StatusBadRequest, fmt.Sprintf("failed to gather metrics: %s", err)) + return + } + + w.Header().Set("Content-Type", gr.ContentType) + _, _ = w.Write(gr.Metrics) + } + + s.Router.HandleFunc("/metrics", metricsHandler).Methods("GET") +} +``` + +Application developers may track counters, gauges, summaries, and key/value metrics. There is no +additional lifting required by modules to leverage profiling metrics. To do so, it's as simple as: + +```go +func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { + defer metrics.MeasureSince(time.Now(), "MintCoins") + // ... +} +``` + +## Consequences + +### Positive + +- Exposure into the performance and behavior of an application + +### Negative + +### Neutral + +## References diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-014-proportional-slashing.md b/versioned_docs/version-0.45/integrate/architecture/adr-014-proportional-slashing.md new file mode 100644 index 000000000..643b022e1 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-014-proportional-slashing.md @@ -0,0 +1,85 @@ +# ADR 14: Proportional Slashing + +## Changelog + +- 2019-10-15: Initial draft +- 2020-05-25: Removed correlation root slashing +- 2020-07-01: Updated to include S-curve function instead of linear + +## Context + +In Proof of Stake-based chains, centralization of consensus power amongst a small set of validators can cause harm to the network due to increased risk of censorship, liveness failure, fork attacks, etc. However, while this centralization causes a negative externality to the network, it is not directly felt by the delegators contributing towards delegating towards already large validators. We would like a way to pass on the negative externality cost of centralization onto those large validators and their delegators. + +## Decision + +### Design + +To solve this problem, we will implement a procedure called Proportional Slashing. The desire is that the larger a validator is, the more they should be slashed. The first naive attempt is to make a validator's slash percent proportional to their share of consensus voting power. + +``` +slash_amount = k * power // power is the faulting validator's voting power and k is some on-chain constant +``` + +However, this will incentivize validators with large amounts of stake to split up their voting power amongst accounts (sybil attack), so that if they fault, they all get slashed at a lower percent. The solution to this is to take into account not just a validator's own voting percentage, but also the voting percentage of all the other validators who get slashed in a specified time frame. + +``` +slash_amount = k * (power_1 + power_2 + ... + power_n) // where power_i is the voting power of the ith validator faulting in the specified time frame and k is some on-chain constant +``` + +Now, if someone splits a validator of 10% into two validators of 5% each which both fault, then they both fault in the same time frame, they both will get slashed at the sum 10% amount. + +However in practice, we likely don't want a linear relation between amount of stake at fault, and the percentage of stake to slash. In particular, solely 5% of stake double signing effectively did nothing to majorly threaten security, whereas 30% of stake being at fault clearly merits a large slashing factor, due to being very close to the point at which Tendermint security is threatened. A linear relation would require a factor of 6 gap between these two, whereas the difference in risk posed to the network is much larger. We propose using S-curves (formally [logistic functions](https://en.wikipedia.org/wiki/Logistic_function) to solve this). S-Curves capture the desired criterion quite well. They allow the slashing factor to be minimal for small values, and then grow very rapidly near some threshold point where the risk posed becomes notable. + +#### Parameterization + +This requires parameterizing a logistic function. It is very well understood how to parameterize this. It has four parameters: + +1) A minimum slashing factor +2) A maximum slashing factor +3) The inflection point of the S-curve (essentially where do you want to center the S) +4) The rate of growth of the S-curve (How elongated is the S) + +#### Correlation across non-sybil validators + +One will note, that this model doesn't differentiate between multiple validators run by the same operators vs validators run by different operators. This can be seen as an additional benefit in fact. It incentivizes validators to differentiate their setups from other validators, to avoid having correlated faults with them or else they risk a higher slash. So for example, operators should avoid using the same popular cloud hosting platforms or using the same Staking as a Service providers. This will lead to a more resilient and decentralized network. + +#### Griefing + +Griefing, the act of intentionally getting oneself slashed in order to make another's slash worse, could be a concern here. However, using the protocol described here, the attacker also gets equally impacted by the grief as the victim, so it would not provide much benefit to the griefer. + +### Implementation + +In the slashing module, we will add two queues that will track all of the recent slash events. For double sign faults, we will define "recent slashes" as ones that have occured within the last `unbonding period`. For liveness faults, we will define "recent slashes" as ones that have occured withing the last `jail period`. + +``` +type SlashEvent struct { + Address sdk.ValAddress + ValidatorVotingPercent sdk.Dec + SlashedSoFar sdk.Dec +} +``` + +These slash events will be pruned from the queue once they are older than their respective "recent slash period". + +Whenever a new slash occurs, a `SlashEvent` struct is created with the faulting validator's voting percent and a `SlashedSoFar` of 0. Because recent slash events are pruned before the unbonding period and unjail period expires, it should not be possible for the same validator to have multiple SlashEvents in the same Queue at the same time. + +We then will iterate over all the SlashEvents in the queue, adding their `ValidatorVotingPercent` to calculate the new percent to slash all the validators in the queue at, using the "Square of Sum of Roots" formula introduced above. + +Once we have the `NewSlashPercent`, we then iterate over all the `SlashEvent`s in the queue once again, and if `NewSlashPercent > SlashedSoFar` for that SlashEvent, we call the `staking.Slash(slashEvent.Address, slashEvent.Power, Math.Min(Math.Max(minSlashPercent, NewSlashPercent - SlashedSoFar), maxSlashPercent)` (we pass in the power of the validator before any slashes occured, so that we slash the right amount of tokens). We then set `SlashEvent.SlashedSoFar` amount to `NewSlashPercent`. + +## Status + +Proposed + +## Consequences + +### Positive + +- Increases decentralization by disincentivizing delegating to large validators +- Incentivizes Decorrelation of Validators +- More severely punishes attacks than accidental faults +- More flexibility in slashing rates parameterization + +### Negative + +- More computationally expensive than current implementation. Will require more data about "recent slashing events" to be stored on chain. diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-016-validator-consensus-key-rotation.md b/versioned_docs/version-0.45/integrate/architecture/adr-016-validator-consensus-key-rotation.md new file mode 100644 index 000000000..9b5d77e7d --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-016-validator-consensus-key-rotation.md @@ -0,0 +1,125 @@ +# ADR 016: Validator Consensus Key Rotation + +## Changelog + +- 2019 Oct 23: Initial draft +- 2019 Nov 28: Add key rotation fee + +## Context + +Validator consensus key rotation feature has been discussed and requested for a long time, for the sake of safer validator key management policy (e.g. https://github.com/tendermint/tendermint/issues/1136). So, we suggest one of the simplest form of validator consensus key rotation implementation mostly onto Cosmos-SDK. + +We don't need to make any update on consensus logic in Tendermint because Tendermint does not have any mapping information of consensus key and validator operator key, meaning that from Tendermint point of view, a consensus key rotation of a validator is simply a replacement of a consensus key to another. + +Also, it should be noted that this ADR includes only the simplest form of consensus key rotation without considering multiple consensus keys concept. Such multiple consensus keys concept shall remain a long term goal of Tendermint and Cosmos-SDK. + +## Decision + +### Pseudo procedure for consensus key rotation + +- create new random consensus key. +- create and broadcast a transaction with a `MsgRotateConsPubKey` that states the new consensus key is now coupled with the validator operator with signature from the validator's operator key. +- old consensus key becomes unable to participate on consensus immediately after the update of key mapping state on-chain. +- start validating with new consensus key. +- validators using HSM and KMS should update the consensus key in HSM to use the new rotated key after the height `h` when `MsgRotateConsPubKey` committed to the blockchain. + +### Considerations + +- consensus key mapping information management strategy + - store history of each key mapping changes in the kvstore. + - the state machine can search corresponding consensus key paired with given validator operator for any arbitrary height in a recent unbonding period. + - the state machine does not need any historical mapping information which is past more than unbonding period. +- key rotation costs related to LCD and IBC + - LCD and IBC will have traffic/computation burden when there exists frequent power changes + - In current Tendermint design, consensus key rotations are seen as power changes from LCD or IBC perspective + - Therefore, to minimize unnecessary frequent key rotation behavior, we limited maximum number of rotation in recent unbonding period and also applied exponentially increasing rotation fee +- limits + - a validator cannot rotate its consensus key more than `MaxConsPubKeyRotations` time for any unbonding period, to prevent spam. + - parameters can be decided by governance and stored in genesis file. +- key rotation fee + - a validator should pay `KeyRotationFee` to rotate the consensus key which is calculated as below + - `KeyRotationFee` = (max(`VotingPowerPercentage` *100, 1)* `InitialKeyRotationFee`) * 2^(number of rotations in `ConsPubKeyRotationHistory` in recent unbonding period) +- evidence module + - evidence module can search corresponding consensus key for any height from slashing keeper so that it can decide which consensus key is supposed to be used for given height. +- abci.ValidatorUpdate + - tendermint already has ability to change a consensus key by ABCI communication(`ValidatorUpdate`). + - validator consensus key update can be done via creating new + delete old by change the power to zero. + - therefore, we expect we even do not need to change tendermint codebase at all to implement this feature. +- new genesis parameters in `staking` module + - `MaxConsPubKeyRotations` : maximum number of rotation can be executed by a validator in recent unbonding period. default value 10 is suggested(11th key rotation will be rejected) + - `InitialKeyRotationFee` : the initial key rotation fee when no key rotation has happened in recent unbonding period. default value 1atom is suggested(1atom fee for the first key rotation in recent unbonding period) + +### Workflow + +1. The validator generates a new consensus keypair. +2. The validator generates and signs a `MsgRotateConsPubKey` tx with their operator key and new ConsPubKey + + ```go + type MsgRotateConsPubKey struct { + ValidatorAddress sdk.ValAddress + NewPubKey crypto.PubKey + } + ``` + +3. `handleMsgRotateConsPubKey` gets `MsgRotateConsPubKey`, calls `RotateConsPubKey` with emits event +4. `RotateConsPubKey` + - checks if `NewPubKey` is not duplicated on `ValidatorsByConsAddr` + - checks if the validator is does not exceed parameter `MaxConsPubKeyRotations` by iterating `ConsPubKeyRotationHistory` + - checks if the signing account has enough balance to pay `KeyRotationFee` + - pays `KeyRotationFee` to community fund + - overwrites `NewPubKey` in `validator.ConsPubKey` + - deletes old `ValidatorByConsAddr` + - `SetValidatorByConsAddr` for `NewPubKey` + - Add `ConsPubKeyRotationHistory` for tracking rotation + + ```go + type ConsPubKeyRotationHistory struct { + OperatorAddress sdk.ValAddress + OldConsPubKey crypto.PubKey + NewConsPubKey crypto.PubKey + RotatedHeight int64 + } + ``` + +5. `ApplyAndReturnValidatorSetUpdates` checks if there is `ConsPubKeyRotationHistory` with `ConsPubKeyRotationHistory.RotatedHeight == ctx.BlockHeight()` and if so, generates 2 `ValidatorUpdate` , one for a remove validator and one for create new validator + + ```go + abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(OldConsPubKey), + Power: 0, + } + + abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(NewConsPubKey), + Power: v.ConsensusPower(), + } + ``` + +6. at `previousVotes` Iteration logic of `AllocateTokens`, `previousVote` using `OldConsPubKey` match up with `ConsPubKeyRotationHistory`, and replace validator for token allocation +7. Migrate `ValidatorSigningInfo` and `ValidatorMissedBlockBitArray` from `OldConsPubKey` to `NewConsPubKey` + +- Note : All above features shall be implemented in `staking` module. + +## Status + +Proposed + +## Consequences + +### Positive + +- Validators can immediately or periodically rotate their consensus key to have better security policy +- improved security against Long-Range attacks (https://nearprotocol.com/blog/long-range-attacks-and-a-new-fork-choice-rule) given a validator throws away the old consensus key(s) + +### Negative + +- Slash module needs more computation because it needs to lookup corresponding consensus key of validators for each height +- frequent key rotations will make light client bisection less efficient + +### Neutral + +## References + +- on tendermint repo : https://github.com/tendermint/tendermint/issues/1136 +- on cosmos-sdk repo : https://github.com/cosmos/cosmos-sdk/issues/5231 +- about multiple consensus keys : https://github.com/tendermint/tendermint/issues/1758#issuecomment-545291698 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-017-historical-header-module.md b/versioned_docs/version-0.45/integrate/architecture/adr-017-historical-header-module.md new file mode 100644 index 000000000..f0cdf4c07 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-017-historical-header-module.md @@ -0,0 +1,61 @@ +# ADR 17: Historical Header Module + +## Changelog + +- 26 November 2019: Start of first version +- 2 December 2019: Final draft of first version + +## Context + +In order for the Cosmos SDK to implement the [IBC specification](https://github.com/cosmos/ics), modules within the SDK must have the ability to introspect recent consensus states (validator sets & commitment roots) as proofs of these values on other chains must be checked during the handshakes. + +## Decision + +The application MUST store the most recent `n` headers in a persistent store. At first, this store MAY be the current Merklised store. A non-Merklised store MAY be used later as no proofs are necessary. + +The application MUST store this information by storing new headers immediately when handling `abci.RequestBeginBlock`: + +```golang +func BeginBlock(ctx sdk.Context, keeper HistoricalHeaderKeeper, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + info := HistoricalInfo{ + Header: ctx.BlockHeader(), + ValSet: keeper.StakingKeeper.GetAllValidators(ctx), // note that this must be stored in a canonical order + } + keeper.SetHistoricalInfo(ctx, ctx.BlockHeight(), info) + n := keeper.GetParamRecentHeadersToStore() + keeper.PruneHistoricalInfo(ctx, ctx.BlockHeight() - n) + // continue handling request +} +``` + +Alternatively, the application MAY store only the hash of the validator set. + +The application MUST make these past `n` committed headers available for querying by SDK modules through the `Keeper`'s `GetHistoricalInfo` function. This MAY be implemented in a new module, or it MAY also be integrated into an existing one (likely `x/staking` or `x/ibc`). + +`n` MAY be configured as a parameter store parameter, in which case it could be changed by `ParameterChangeProposal`s, although it will take some blocks for the stored information to catch up if `n` is increased. + +## Status + +Proposed. + +## Consequences + +Implementation of this ADR will require changes to the Cosmos SDK. It will not require changes to Tendermint. + +### Positive + +- Easy retrieval of headers & state roots for recent past heights by modules anywhere in the SDK. +- No RPC calls to Tendermint required. +- No ABCI alterations required. + +### Negative + +- Duplicates `n` headers data in Tendermint & the application (additional disk usage) - in the long term, an approach such as [this](https://github.com/tendermint/tendermint/issues/4210) might be preferable. + +### Neutral + +(none known) + +## References + +- [ICS 2: "Consensus state introspection"](https://github.com/cosmos/ibc/tree/master/spec/core/ics-002-client-semantics#consensus-state-introspection) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-018-extendable-voting-period.md b/versioned_docs/version-0.45/integrate/architecture/adr-018-extendable-voting-period.md new file mode 100644 index 000000000..edd392b5e --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-018-extendable-voting-period.md @@ -0,0 +1,66 @@ +# ADR 18: Extendable Voting Periods + +## Changelog + +- 1 January 2020: Start of first version + +## Context + +Currently the voting period for all governance proposals is the same. However, this is suboptimal as all governance proposals do not require the same time period. For more non-contentious proposals, they can be dealt with more efficently with a faster period, while more contentious or complex proposals may need a longer period for extended discussion/consideration. + +## Decision + +We would like to design a mechanism for making the voting period of a governance proposal variable based on the demand of voters. We would like it to be based on the view of the governance participants, rather than just the proposer of a governance proposal (thus, allowing the proposer to select the voting period length is not sufficient). + +However, we would like to avoid the creation of an entire second voting process to determine the length of the voting period, as it just pushed the problem to determining the length of that first voting period. + +Thus, we propose the following mechanism: + +### Params + +- The current gov param `VotingPeriod` is to be replaced by a `MinVotingPeriod` param. This is the the default voting period that all governance proposal voting periods start with. +- There is a new gov param called `MaxVotingPeriodExtension`. + +### Mechanism + +There is a new `Msg` type called `MsgExtendVotingPeriod`, which can be sent by any staked account during a proposal's voting period. It allows the sender to unilaterally extend the length of the voting period by `MaxVotingPeriodExtension * sender's share of voting power`. Every address can only call `MsgExtendVotingPeriod` once per proposal. + +So for example, if the `MaxVotingPeriodExtension` is set to 100 Days, then anyone with 1% of voting power can extend the voting power by 1 day. If 33% of voting power has sent the message, the voting period will be extended by 33 days. Thus, if absolutely everyone chooses to extend the voting period, the absolute maximum voting period will be `MinVotingPeriod + MaxVotingPeriodExtension`. + +This system acts as a sort of distributed coordination, where individual stakers choosing to extend or not, allows the system the guage the conentiousness/complexity of the proposal. It is extremely unlikely that many stakers will choose to extend at the exact same time, it allows stakers to view how long others have already extended thus far, to decide whether or not to extend further. + +### Dealing with Unbonding/Redelegation + +There is one thing that needs to be addressed. How to deal with redelegation/unbonding during the voting period. If a staker of 5% calls `MsgExtendVotingPeriod` and then unbonds, does the voting period then decrease by 5 days again? This is not good as it can give people a false sense of how long they have to make their decision. For this reason, we want to design it such that the voting period length can only be extended, not shortened. To do this, the current extension amount is based on the highest percent that voted extension at any time. This is best explained by example: + +1. Let's say 2 stakers of voting power 4% and 3% respectively vote to extend. The voting period will be extended by 7 days. +2. Now the staker of 3% decides to unbond before the end of the voting period. The voting period extension remains 7 days. +3. Now, let's say another staker of 2% voting power decides to extend voting period. There is now 6% of active voting power choosing the extend. The voting power remains 7 days. +4. If a fourth staker of 10% chooses to extend now, there is a total of 16% of active voting power wishing to extend. The voting period will be extended to 16 days. + +### Delegators + +Just like votes in the actual voting period, delegators automatically inherit the extension of their validators. If their validator chooses to extend, their voting power will be used in the validator's extension. However, the delegator is unable to override their validator and "unextend" as that would contradict the "voting power length can only be ratcheted up" principle described in the previous section. However, a delegator may choose the extend using their personal voting power, if their validator has not done so. + +## Status + +Proposed + +## Consequences + +### Positive + +- More complex/contentious governance proposals will have more time to properly digest and deliberate + +### Negative + +- Governance process becomes more complex and requires more understanding to interact with effectively +- Can no longer predict when a governance proposal will end. Can't assume order in which governance proposals will end. + +### Neutral + +- The minimum voting period can be made shorter + +## References + +- [Cosmos Forum post where idea first originated](https://forum.cosmos.network/t/proposal-draft-reduce-governance-voting-period-to-7-days/3032/9) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-019-protobuf-state-encoding.md b/versioned_docs/version-0.45/integrate/architecture/adr-019-protobuf-state-encoding.md new file mode 100644 index 000000000..cddf7092f --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-019-protobuf-state-encoding.md @@ -0,0 +1,379 @@ +# ADR 019: Protocol Buffer State Encoding + +## Changelog + +- 2020 Feb 15: Initial Draft +- 2020 Feb 24: Updates to handle messages with interface fields +- 2020 Apr 27: Convert usages of `oneof` for interfaces to `Any` +- 2020 May 15: Describe `cosmos_proto` extensions and amino compatibility +- 2020 Dec 4: Move and rename `MarshalAny` and `UnmarshalAny` into the `codec.Codec` interface. +- 2021 Feb 24: Remove mentions of `HybridCodec`, which has been abandoned in [#6843](https://github.com/cosmos/cosmos-sdk/pull/6843). + +## Status + +Accepted + +## Context + +Currently, the Cosmos SDK utilizes [go-amino](https://github.com/tendermint/go-amino/) for binary +and JSON object encoding over the wire bringing parity between logical objects and persistence objects. + +From the Amino docs: + +> Amino is an object encoding specification. It is a subset of Proto3 with an extension for interface +> support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) for more +> information on Proto3, which Amino is largely compatible with (but not with Proto2). +> +> The goal of the Amino encoding protocol is to bring parity into logic objects and persistence objects. + +Amino also aims to have the following goals (not a complete list): + +- Binary bytes must be decode-able with a schema. +- Schema must be upgradeable. +- The encoder and decoder logic must be reasonably simple. + +However, we believe that Amino does not fulfill these goals completely and does not fully meet the +needs of a truly flexible cross-language and multi-client compatible encoding protocol in the Cosmos SDK. +Namely, Amino has proven to be a big pain-point in regards to supporting object serialization across +clients written in various languages while providing virtually little in the way of true backwards +compatibility and upgradeability. Furthermore, through profiling and various benchmarks, Amino has +been shown to be an extremely large performance bottleneck in the Cosmos SDK 1. This is +largely reflected in the performance of simulations and application transaction throughput. + +Thus, we need to adopt an encoding protocol that meets the following criteria for state serialization: + +- Language agnostic +- Platform agnostic +- Rich client support and thriving ecosystem +- High performance +- Minimal encoded message size +- Codegen-based over reflection-based +- Supports backward and forward compatibility + +Note, migrating away from Amino should be viewed as a two-pronged approach, state and client encoding. +This ADR focuses on state serialization in the Cosmos SDK state machine. A corresponding ADR will be +made to address client-side encoding. + +## Decision + +We will adopt [Protocol Buffers](https://developers.google.com/protocol-buffers) for serializing +persisted structured data in the Cosmos SDK while providing a clean mechanism and developer UX for +applications wishing to continue to use Amino. We will provide this mechanism by updating modules to +accept a codec interface, `Marshaler`, instead of a concrete Amino codec. Furthermore, the Cosmos SDK +will provide two concrete implementations of the `Marshaler` interface: `AminoCodec` and `ProtoCodec`. + +- `AminoCodec`: Uses Amino for both binary and JSON encoding. +- `ProtoCodec`: Uses Protobuf for both binary and JSON encoding. + +Modules will use whichever codec that is instantiated in the app. By default, the SDK's `simapp` +instantiates a `ProtoCodec` as the concrete implementation of `Marshaler`, inside the `MakeTestEncodingConfig` +function. This can be easily overwritten by app developers if they so desire. + +The ultimate goal will be to replace Amino JSON encoding with Protobuf encoding and thus have +modules accept and/or extend `ProtoCodec`. Until then, Amino JSON is still provided for legacy use-cases. +A handful of places in the SDK still have Amino JSON hardcoded, such as the Legacy API REST endpoints +and the `x/params` store. They are planned to be converted to Protobuf in a gradual manner. + +### Module Codecs + +Modules that do not require the ability to work with and serialize interfaces, the path to Protobuf +migration is pretty straightforward. These modules are to simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf and have their keeper accept a +`Marshaler` that will be a `ProtoCodec`. This migration is simple as things will just work as-is. + +Note, any business logic that needs to encode primitive types like `bool` or `int64` should use +[gogoprotobuf](https://github.com/gogo/protobuf) Value types. + +Example: + +```go + ts, err := gogotypes.TimestampProto(completionTime) + if err != nil { + // ... + } + + bz := cdc.MustMarshal(ts) +``` + +However, modules can vary greatly in purpose and design and so we must support the ability for modules +to be able to encode and work with interfaces (e.g. `Account` or `Content`). For these modules, they +must define their own codec interface that extends `Marshaler`. These specific interfaces are unique +to the module and will contain method contracts that know how to serialize the needed interfaces. + +Example: + +```go +// x/auth/types/codec.go + +type Codec interface { + codec.Codec + + MarshalAccount(acc exported.Account) ([]byte, error) + UnmarshalAccount(bz []byte) (exported.Account, error) + + MarshalAccountJSON(acc exported.Account) ([]byte, error) + UnmarshalAccountJSON(bz []byte) (exported.Account, error) +} +``` + +### Usage of `Any` to encode interfaces + +In general, module-level .proto files should define messages which encode interfaces +using [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). +After [extension discussion](https://github.com/cosmos/cosmos-sdk/issues/6030), +this was chosen as the preferred alternative to application-level `oneof`s +as in our original protobuf design. The arguments in favor of `Any` can be +summarized as follows: + +* `Any` provides a simpler, more consistent client UX for dealing with +interfaces than app-level `oneof`s that will need to be coordinated more +carefully across applications. Creating a generic transaction +signing library using `oneof`s may be cumbersome and critical logic may need +to be reimplemented for each chain +* `Any` provides more resistance against human error than `oneof` +* `Any` is generally simpler to implement for both modules and apps + +The main counter-argument to using `Any` centers around its additional space +and possibly performance overhead. The space overhead could be dealt with using +compression at the persistence layer in the future and the performance impact +is likely to be small. Thus, not using `Any` is seem as a pre-mature optimization, +with user experience as the higher order concern. + +Note, that given the SDK's decision to adopt the `Codec` interfaces described +above, apps can still choose to use `oneof` to encode state and transactions +but it is not the recommended approach. If apps do choose to use `oneof`s +instead of `Any` they will likely lose compatibility with client apps that +support multiple chains. Thus developers should think carefully about whether +they care more about what is possibly a pre-mature optimization or end-user +and client developer UX. + +### Safe usage of `Any` + +By default, the [gogo protobuf implementation of `Any`](https://godoc.org/github.com/gogo/protobuf/types) +uses [global type registration]( https://github.com/gogo/protobuf/blob/master/proto/properties.go#L540) +to decode values packed in `Any` into concrete +go types. This introduces a vulnerability where any malicious module +in the dependency tree could registry a type with the global protobuf registry +and cause it to be loaded and unmarshaled by a transaction that referenced +it in the `type_url` field. + +To prevent this, we introduce a type registration mechanism for decoding `Any` +values into concrete types through the `InterfaceRegistry` interface which +bears some similarity to type registration with Amino: + +```go +type InterfaceRegistry interface { + // RegisterInterface associates protoName as the public name for the + // interface passed in as iface + // Ex: + // registry.RegisterInterface("cosmos_sdk.Msg", (*sdk.Msg)(nil)) + RegisterInterface(protoName string, iface interface{}) + + // RegisterImplementations registers impls as a concrete implementations of + // the interface iface + // Ex: + // registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSend{}, &MsgMultiSend{}) + RegisterImplementations(iface interface{}, impls ...proto.Message) + +} +``` + +In addition to serving as a whitelist, `InterfaceRegistry` can also serve +to communicate the list of concrete types that satisfy an interface to clients. + +In .proto files: + +* fields which accept interfaces should be annotated with `cosmos_proto.accepts_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` +* interface implementations should be annotated with `cosmos_proto.implements_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` + +In the future, `protoName`, `cosmos_proto.accepts_interface`, `cosmos_proto.implements_interface` +may be used via code generation, reflection &/or static linting. + +The same struct that implements `InterfaceRegistry` will also implement an +interface `InterfaceUnpacker` to be used for unpacking `Any`s: + +```go +type InterfaceUnpacker interface { + // UnpackAny unpacks the value in any to the interface pointer passed in as + // iface. Note that the type in any must have been registered with + // RegisterImplementations as a concrete type for that interface + // Ex: + // var msg sdk.Msg + // err := ctx.UnpackAny(any, &msg) + // ... + UnpackAny(any *Any, iface interface{}) error +} +``` + +Note that `InterfaceRegistry` usage does not deviate from standard protobuf +usage of `Any`, it just introduces a security and introspection layer for +golang usage. + +`InterfaceRegistry` will be a member of `ProtoCodec` +described above. In order for modules to register interface types, app modules +can optionally implement the following interface: + +```go +type InterfaceModule interface { + RegisterInterfaceTypes(InterfaceRegistry) +} +``` + +The module manager will include a method to call `RegisterInterfaceTypes` on +every module that implements it in order to populate the `InterfaceRegistry`. + +### Using `Any` to encode state + +The SDK will provide support methods `MarshalInterface` and `UnmarshalInterface` to hide a complexity of wrapping interface types into `Any` and allow easy serialization. + +```go +import "github.com/cosmos/cosmos-sdk/codec" + +// note: eviexported.Evidence is an interface type +func MarshalEvidence(cdc codec.BinaryCodec, e eviexported.Evidence) ([]byte, error) { + return cdc.MarshalInterface(e) +} + +func UnmarshalEvidence(cdc codec.BinaryCodec, bz []byte) (eviexported.Evidence, error) { + var evi eviexported.Evidence + err := cdc.UnmarshalInterface(&evi, bz) + return err, nil +} +``` + +### Using `Any` in `sdk.Msg`s + +A similar concept is to be applied for messages that contain interfaces fields. +For example, we can define `MsgSubmitEvidence` as follows where `Evidence` is +an interface: + +```protobuf +// x/evidence/types/types.proto + +message MsgSubmitEvidence { + bytes submitter = 1 + [ + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress" + ]; + google.protobuf.Any evidence = 2; +} +``` + +Note that in order to unpack the evidence from `Any` we do need a reference to +`InterfaceRegistry`. In order to reference evidence in methods like +`ValidateBasic` which shouldn't have to know about the `InterfaceRegistry`, we +introduce an `UnpackInterfaces` phase to deserialization which unpacks +interfaces before they're needed. + +### Unpacking Interfaces + +To implement the `UnpackInterfaces` phase of deserialization which unpacks +interfaces wrapped in `Any` before they're needed, we create an interface +that `sdk.Msg`s and other types can implement: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +We also introduce a private `cachedValue interface{}` field onto the `Any` +struct itself with a public getter `GetCachedValue() interface{}`. + +The `UnpackInterfaces` method is to be invoked during message deserialization right +after `Unmarshal` and any interface values packed in `Any`s will be decoded +and stored in `cachedValue` for reference later. + +Then unpacked interface values can safely be used in any code afterwards +without knowledge of the `InterfaceRegistry` +and messages can introduce a simple getter to cast the cached value to the +correct interface type. + +This has the added benefit that unmarshaling of `Any` values only happens once +during initial deserialization rather than every time the value is read. Also, +when `Any` values are first packed (for instance in a call to +`NewMsgSubmitEvidence`), the original interface value is cached so that +unmarshaling isn't needed to read it again. + +`MsgSubmitEvidence` could implement `UnpackInterfaces`, plus a convenience getter +`GetEvidence` as follows: + +```go +func (msg MsgSubmitEvidence) UnpackInterfaces(ctx sdk.InterfaceRegistry) error { + var evi eviexported.Evidence + return ctx.UnpackAny(msg.Evidence, *evi) +} + +func (msg MsgSubmitEvidence) GetEvidence() eviexported.Evidence { + return msg.Evidence.GetCachedValue().(eviexported.Evidence) +} +``` + +### Amino Compatibility + +Our custom implementation of `Any` can be used transparently with Amino if used +with the proper codec instance. What this means is that interfaces packed within +`Any`s will be amino marshaled like regular Amino interfaces (assuming they +have been registered properly with Amino). + +In order for this functionality to work: + +- **all legacy code must use `*codec.LegacyAmino` instead of `*amino.Codec` which is + now a wrapper which properly handles `Any`** +- **all new code should use `Marshaler` which is compatible with both amino and + protobuf** +- Also, before v0.39, `codec.LegacyAmino` will be renamed to `codec.LegacyAmino`. + +### Why Wasn't X Chosen Instead + +For a more complete comparison to alternative protocols, see [here](https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f). + +### Cap'n Proto + +While [Cap’n Proto](https://capnproto.org/) does seem like an advantageous alternative to Protobuf +due to it's native support for interfaces/generics and built in canonicalization, it does lack the +rich client ecosystem compared to Protobuf and is a bit less mature. + +### FlatBuffers + +[FlatBuffers](https://google.github.io/flatbuffers/) is also a potentially viable alternative, with the +primary difference being that FlatBuffers does not need a parsing/unpacking step to a secondary +representation before you can access data, often coupled with per-object memory allocation. + +However, it would require great efforts into research and full understanding the scope of the migration +and path forward -- which isn't immediately clear. In addition, FlatBuffers aren't designed for +untrusted inputs. + +## Future Improvements & Roadmap + +In the future we may consider a compression layer right above the persistence +layer which doesn't change tx or merkle tree hashes, but reduces the storage +overhead of `Any`. In addition, we may adopt protobuf naming conventions which +make type URLs a bit more concise while remaining descriptive. + +Additional code generation support around the usage of `Any` is something that +could also be explored in the future to make the UX for go developers more +seamless. + +## Consequences + +### Positive + +- Significant performance gains. +- Supports backward and forward type compatibility. +- Better support for cross-language clients. + +### Negative + +- Learning curve required to understand and implement Protobuf messages. +- Slightly larger message size due to use of `Any`, although this could be offset + by a compression layer in the future + +### Neutral + +## References + +1. https://github.com/cosmos/cosmos-sdk/issues/4977 +2. https://github.com/cosmos/cosmos-sdk/issues/5444 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-020-protobuf-transaction-encoding.md b/versioned_docs/version-0.45/integrate/architecture/adr-020-protobuf-transaction-encoding.md new file mode 100644 index 000000000..2efe583cf --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-020-protobuf-transaction-encoding.md @@ -0,0 +1,464 @@ +# ADR 020: Protocol Buffer Transaction Encoding + +## Changelog + +- 2020 March 06: Initial Draft +- 2020 March 12: API Updates +- 2020 April 13: Added details on interface `oneof` handling +- 2020 April 30: Switch to `Any` +- 2020 May 14: Describe public key encoding +- 2020 June 08: Store `TxBody` and `AuthInfo` as bytes in `SignDoc`; Document `TxRaw` as broadcast and storage type. +- 2020 August 07: Use ADR 027 for serializing `SignDoc`. +- 2020 August 19: Move sequence field from `SignDoc` to `SignerInfo`, as discussed in [#6966](https://github.com/cosmos/cosmos-sdk/issues/6966). +- 2020 September 25: Remove `PublicKey` type in favor of `secp256k1.PubKey`, `ed25519.PubKey` and `multisig.LegacyAminoPubKey`. +- 2020 October 15: Add `GetAccount` and `GetAccountWithHeight` methods to the `AccountRetriever` interface. +- 2021 Feb 24: The SDK does not use Tendermint's `PubKey` interface anymore, but its own `cryptotypes.PubKey`. Updates to reflect this. +- 2021 May 3: Rename `clientCtx.JSONMarshaler` to `clientCtx.JSONCodec`. +- 2021 June 10: Add `clientCtx.Codec: codec.Codec`. + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](./adr-019-protobuf-state-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +Specifically, the client-side migration path primarily includes tx generation and +signing, message construction and routing, in addition to CLI & REST handlers and +business logic (i.e. queriers). + +With this in mind, we will tackle the migration path via two main areas, txs and +querying. However, this ADR solely focuses on transactions. Querying should be +addressed in a future ADR, but it should build off of these proposals. + +Based on detailed discussions ([\#6030](https://github.com/cosmos/cosmos-sdk/issues/6030) +and [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078)), the original +design for transactions was changed substantially from an `oneof` /JSON-signing +approach to the approach described below. + +## Decision + +### Transactions + +Since interface values are encoded with `google.protobuf.Any` in state (see [ADR 019](adr-019-protobuf-state-encoding.md)), +`sdk.Msg`s are encoding with `Any` in transactions. + +One of the main goals of using `Any` to encode interface values is to have a +core set of types which is reused by apps so that +clients can safely be compatible with as many chains as possible. + +It is one of the goals of this specification to provide a flexible cross-chain transaction +format that can serve a wide variety of use cases without breaking client +compatibility. + +In order to facilitate signing, transactions are separated into `TxBody`, +which will be re-used by `SignDoc` below, and `signatures`: + +```proto +// types/types.proto +package cosmos_sdk.v1; + +message Tx { + TxBody body = 1; + AuthInfo auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +// A variant of Tx that pins the signer's exact binary represenation of body and +// auth_info. This is used for signing, broadcasting and verification. The binary +// `serialize(tx: TxRaw)` is stored in Tendermint and the hash `sha256(serialize(tx: TxRaw))` +// becomes the "txhash", commonly used as the transaction ID. +message TxRaw { + // A protobuf serialization of a TxBody that matches the representation in SignDoc. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in SignDoc. + bytes auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +message TxBody { + // A list of messages to be executed. The required signers of those messages define + // the number and order of elements in AuthInfo's signer_infos and Tx's signatures. + // Each required signer address is added to the list only the first time it occurs. + // + // By convention, the first required signer (usually from the first message) is referred + // to as the primary signer and pays the fee for the whole transaction. + repeated google.protobuf.Any messages = 1; + string memo = 2; + int64 timeout_height = 3; + repeated google.protobuf.Any extension_options = 1023; +} + +message AuthInfo { + // This list defines the signing modes for the required signers. The number + // and order of elements must match the required signers from TxBody's messages. + // The first element is the primary signer and the one which pays the fee. + repeated SignerInfo signer_infos = 1; + // The fee can be calculated based on the cost of evaluating the body and doing signature verification of the signers. This can be estimated via simulation. + Fee fee = 2; +} + +message SignerInfo { + // The public key is optional for accounts that already exist in state. If unset, the + // verifier can use the required signer address for this position and lookup the public key. + google.protobuf.Any public_key = 1; + // ModeInfo describes the signing mode of the signer and is a nested + // structure to support nested multisig pubkey's + ModeInfo mode_info = 2; + // sequence is the sequence of the account, which describes the + // number of committed transactions signed by a given address. It is used to prevent + // replay attacks. + uint64 sequence = 3; +} + +message ModeInfo { + oneof sum { + Single single = 1; + Multi multi = 2; + } + + // Single is the mode info for a single signer. It is structured as a message + // to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the future + message Single { + SignMode mode = 1; + } + + // Multi is the mode info for a multisig public key + message Multi { + // bitarray specifies which keys within the multisig are signing + CompactBitArray bitarray = 1; + // mode_infos is the corresponding modes of the signers of the multisig + // which could include nested multisig public keys + repeated ModeInfo mode_infos = 2; + } +} + +enum SignMode { + SIGN_MODE_UNSPECIFIED = 0; + + SIGN_MODE_DIRECT = 1; + + SIGN_MODE_TEXTUAL = 2; + + SIGN_MODE_LEGACY_AMINO_JSON = 127; +} +``` + +As will be discussed below, in order to include as much of the `Tx` as possible +in the `SignDoc`, `SignerInfo` is separated from signatures so that only the +raw signatures themselves live outside of what is signed over. + +Because we are aiming for a flexible, extensible cross-chain transaction +format, new transaction processing options should be added to `TxBody` as soon +those use cases are discovered, even if they can't be implemented yet. + +Because there is coordination overhead in this, `TxBody` includes an +`extension_options` field which can be used for any transaction processing +options that are not already covered. App developers should, nevertheless, +attempt to upstream important improvements to `Tx`. + +### Signing + +All of the signing modes below aim to provide the following guarantees: + +- **No Malleability**: `TxBody` and `AuthInfo` cannot change once the transaction + is signed +- **Predictable Gas**: if I am signing a transaction where I am paying a fee, + the final gas is fully dependent on what I am signing + +These guarantees give the maximum amount confidence to message signers that +manipulation of `Tx`s by intermediaries can't result in any meaningful changes. + +#### `SIGN_MODE_DIRECT` + +The "direct" signing behavior is to sign the raw `TxBody` bytes as broadcast over +the wire. This has the advantages of: + +- requiring the minimum additional client capabilities beyond a standard protocol + buffers implementation +- leaving effectively zero holes for transaction malleability (i.e. there are no + subtle differences between the signing and encoding formats which could + potentially be exploited by an attacker) + +Signatures are structured using the `SignDoc` below which reuses the serialization of +`TxBody` and `AuthInfo` and only adds the fields which are needed for signatures: + +```proto +// types/types.proto +message SignDoc { + // A protobuf serialization of a TxBody that matches the representation in TxRaw. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in TxRaw. + bytes auth_info = 2; + string chain_id = 3; + uint64 account_number = 4; +} +``` + +In order to sign in the default mode, clients take the following steps: + +1. Serialize `TxBody` and `AuthInfo` using any valid protobuf implementation. +2. Create a `SignDoc` and serialize it using [ADR 027](./adr-027-deterministic-protobuf-serialization.md). +3. Sign the encoded `SignDoc` bytes. +4. Build a `TxRaw` and serialize it for broadcasting. + +Signature verification is based on comparing the raw `TxBody` and `AuthInfo` +bytes encoded in `TxRaw` not based on any ["canonicalization"](https://github.com/regen-network/canonical-proto3) +algorithm which creates added complexity for clients in addition to preventing +some forms of upgradeability (to be addressed later in this document). + +Signature verifiers do: + +1. Deserialize a `TxRaw` and pull out `body` and `auth_info`. +2. Create a list of required signer addresses from the messages. +3. For each required signer: + - Pull account number and sequence from the state. + - Obtain the public key either from state or `AuthInfo`'s `signer_infos`. + - Create a `SignDoc` and serialize it using [ADR 027](./adr-027-deterministic-protobuf-serialization.md). + - Verify the signature at the the same list position against the serialized `SignDoc`. + +#### `SIGN_MODE_LEGACY_AMINO` + +In order to support legacy wallets and exchanges, Amino JSON will be temporarily +supported transaction signing. Once wallets and exchanges have had a +chance to upgrade to protobuf based signing, this option will be disabled. In +the meantime, it is foreseen that disabling the current Amino signing would cause +too much breakage to be feasible. Note that this is mainly a requirement of the +Cosmos Hub and other chains may choose to disable Amino signing immediately. + +Legacy clients will be able to sign a transaction using the current Amino +JSON format and have it encoded to protobuf using the REST `/tx/encode` +endpoint before broadcasting. + +#### `SIGN_MODE_TEXTUAL` + +As was discussed extensively in [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078), +there is a desire for a human-readable signing encoding, especially for hardware +wallets like the [Ledger](https://www.ledger.com) which display +transaction contents to users before signing. JSON was an attempt at this but +falls short of the ideal. + +`SIGN_MODE_TEXTUAL` is intended as a placeholder for a human-readable +encoding which will replace Amino JSON. This new encoding should be even more +focused on readability than JSON, possibly based on formatting strings like +[MessageFormat](http://userguide.icu-project.org/formatparse/messages). + +In order to ensure that the new human-readable format does not suffer from +transaction malleability issues, `SIGN_MODE_TEXTUAL` +requires that the _human-readable bytes are concatenated with the raw `SignDoc`_ +to generate sign bytes. + +Multiple human-readable formats (maybe even localized messages) may be supported +by `SIGN_MODE_TEXTUAL` when it is implemented. + +### Unknown Field Filtering + +Unknown fields in protobuf messages should generally be rejected by transaction +processors because: + +- important data may be present in the unknown fields, that if ignored, will + cause unexpected behavior for clients +- they present a malleability vulnerability where attackers can bloat tx size + by adding random uninterpreted data to unsigned content (i.e. the master `Tx`, + not `TxBody`) + +There are also scenarios where we may choose to safely ignore unknown fields +(https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-624400188) to +provide graceful forwards compatibility with newer clients. + +We propose that field numbers with bit 11 set (for most use cases this is +the range of 1024-2047) be considered non-critical fields that can safely be +ignored if unknown. + +To handle this we will need a unknown field filter that: + +- always rejects unknown fields in unsigned content (i.e. top-level `Tx` and + unsigned parts of `AuthInfo` if present based on the signing mode) +- rejects unknown fields in all messages (including nested `Any`s) other than + fields with bit 11 set + +This will likely need to be a custom protobuf parser pass that takes message bytes +and `FileDescriptor`s and returns a boolean result. + +### Public Key Encoding + +Public keys in the Cosmos SDK implement the `cryptotypes.PubKey` interface. +We propose to use `Any` for protobuf encoding as we are doing with other interfaces (for example, in `BaseAccount.PubKey` and `SignerInfo.PublicKey`). +The following public keys are implemented: secp256k1, secp256r1, ed25519 and legacy-multisignature. + +Ex: + +```proto +message PubKey { + bytes key = 1; +} +``` + +`multisig.LegacyAminoPubKey` has an array of `Any`'s member to support any +protobuf public key type. + +Apps should only attempt to handle a registered set of public keys that they +have tested. The provided signature verification ante handler decorators will +enforce this. + +### CLI & REST + +Currently, the REST and CLI handlers encode and decode types and txs via Amino +JSON encoding using a concrete Amino codec. Being that some of the types dealt with +in the client can be interfaces, similar to how we described in [ADR 019](./adr-019-protobuf-state-encoding.md), +the client logic will now need to take a codec interface that knows not only how +to handle all the types, but also knows how to generate transactions, signatures, +and messages. + +```go +type AccountRetriever interface { + GetAccount(clientCtx Context, addr sdk.AccAddress) (client.Account, error) + GetAccountWithHeight(clientCtx Context, addr sdk.AccAddress) (client.Account, int64, error) + EnsureExists(clientCtx client.Context, addr sdk.AccAddress) error + GetAccountNumberSequence(clientCtx client.Context, addr sdk.AccAddress) (uint64, uint64, error) +} + +type Generator interface { + NewTx() TxBuilder + NewFee() ClientFee + NewSignature() ClientSignature + MarshalTx(tx types.Tx) ([]byte, error) +} + +type TxBuilder interface { + GetTx() sdk.Tx + + SetMsgs(...sdk.Msg) error + GetSignatures() []sdk.Signature + SetSignatures(...sdk.Signature) + GetFee() sdk.Fee + SetFee(sdk.Fee) + GetMemo() string + SetMemo(string) +} +``` + +We then update `Context` to have new fields: `Codec`, `TxGenerator`, +and `AccountRetriever`, and we update `AppModuleBasic.GetTxCmd` to take +a `Context` which should have all of these fields pre-populated. + +Each client method should then use one of the `Init` methods to re-initialize +the pre-populated `Context`. `tx.GenerateOrBroadcastTx` can be used to +generate or broadcast a transaction. For example: + +```go +import "github.com/spf13/cobra" +import "github.com/cosmos/cosmos-sdk/client" +import "github.com/cosmos/cosmos-sdk/client/tx" + +func NewCmdDoSomething(clientCtx client.Context) *cobra.Command { + return &cobra.Command{ + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := ctx.InitWithInput(cmd.InOrStdin()) + msg := NewSomeMsg{...} + tx.GenerateOrBroadcastTx(clientCtx, msg) + }, + } +} +``` + +## Future Improvements + +### `SIGN_MODE_TEXTUAL` specification + +A concrete specification and implementation of `SIGN_MODE_TEXTUAL` is intended +as a near-term future improvement so that the ledger app and other wallets +can gracefully transition away from Amino JSON. + +### `SIGN_MODE_DIRECT_AUX` + +(\*Documented as option (3) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933) + +We could add a mode `SIGN_MODE_DIRECT_AUX` +to support scenarios where multiple signatures +are being gathered into a single transaction but the message composer does not +yet know which signatures will be included in the final transaction. For instance, +I may have a 3/5 multisig wallet and want to send a `TxBody` to all 5 +signers to see who signs first. As soon as I have 3 signatures then I will go +ahead and build the full transaction. + +With `SIGN_MODE_DIRECT`, each signer needs +to sign the full `AuthInfo` which includes the full list of all signers and +their signing modes, making the above scenario very hard. + +`SIGN_MODE_DIRECT_AUX` would allow "auxiliary" signers to create their signature +using only `TxBody` and their own `PublicKey`. This allows the full list of +signers in `AuthInfo` to be delayed until signatures have been collected. + +An "auxiliary" signer is any signer besides the primary signer who is paying +the fee. For the primary signer, the full `AuthInfo` is actually needed to calculate gas and fees +because that is dependent on how many signers and which key types and signing +modes they are using. Auxiliary signers, however, do not need to worry about +fees or gas and thus can just sign `TxBody`. + +To generate a signature in `SIGN_MODE_DIRECT_AUX` these steps would be followed: + +1. Encode `SignDocAux` (with the same requirement that fields must be serialized + in order): + +```proto +// types/types.proto +message SignDocAux { + bytes body_bytes = 1; + // PublicKey is included in SignDocAux : + // 1. as a special case for multisig public keys. For multisig public keys, + // the signer should use the top-level multisig public key they are signing + // against, not their own public key. This is to prevent against a form + // of malleability where a signature could be taken out of context of the + // multisig key that was intended to be signed for + // 2. to guard against scenario where configuration information is encoded + // in public keys (it has been proposed) such that two keys can generate + // the same signature but have different security properties + // + // By including it here, the composer of AuthInfo cannot reference the + // a public key variant the signer did not intend to use + PublicKey public_key = 2; + string chain_id = 3; + uint64 account_number = 4; +} +``` + +2. Sign the encoded `SignDocAux` bytes +3. Send their signature and `SignerInfo` to primary signer who will then + sign and broadcast the final transaction (with `SIGN_MODE_DIRECT` and `AuthInfo` + added) once enough signatures have been collected + +### `SIGN_MODE_DIRECT_RELAXED` + +(_Documented as option (1)(a) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933_) + +This is a variation of `SIGN_MODE_DIRECT` where multiple signers wouldn't need to +coordinate public keys and signing modes in advance. It would involve an alternate +`SignDoc` similar to `SignDocAux` above with fee. This could be added in the future +if client developers found the burden of collecting public keys and modes in advance +too burdensome. + +## Consequences + +### Positive + +- Significant performance gains. +- Supports backward and forward type compatibility. +- Better support for cross-language clients. +- Multiple signing modes allow for greater protocol evolution + +### Negative + +- `google.protobuf.Any` type URLs increase transaction size although the effect + may be negligible or compression may be able to mitigate it. + +### Neutral + +## References diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-021-protobuf-query-encoding.md b/versioned_docs/version-0.45/integrate/architecture/adr-021-protobuf-query-encoding.md new file mode 100644 index 000000000..60830de3c --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-021-protobuf-query-encoding.md @@ -0,0 +1,256 @@ +# ADR 021: Protocol Buffer Query Encoding + +## Changelog + +- 2020 March 27: Initial Draft + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](./adr-019-protobuf-state-encoding.md) and +[ARD 020](./adr-019-protobuf-transaction-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +This ADR continues from [ARD 020](./adr-020-protobuf-transaction-encoding.md) +to specify the encoding of queries. + +## Decision + +### Custom Query Definition + +Modules define custom queries through a protocol buffers `service` definition. +These `service` definitions are generally associated with and used by the +GRPC protocol. However, the protocol buffers specification indicates that +they can be used more generically by any request/response protocol that uses +protocol buffer encoding. Thus, we can use `service` definitions for specifying +custom ABCI queries and even reuse a substantial amount of the GRPC infrastructure. + +Each module with custom queries should define a service canonically named `Query`: + +```proto +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { } +} +``` + +#### Handling of Interface Types + +Modules that use interface types and need true polymorphism generally force a +`oneof` up to the app-level that provides the set of concrete implementations of +that interface that the app supports. While app's are welcome to do the same for +queries and implement an app-level query service, it is recommended that modules +provide query methods that expose these interfaces via `google.protobuf.Any`. +There is a concern on the transaction level that the overhead of `Any` is too +high to justify its usage. However for queries this is not a concern, and +providing generic module-level queries that use `Any` does not preclude apps +from also providing app-level queries that return use the app-level `oneof`s. + +A hypothetical example for the `gov` module would look something like: + +```proto +// x/gov/types/types.proto + +import "google/protobuf/any.proto"; + +service Query { + rpc GetProposal(GetProposalParams) returns (AnyProposal) { } +} + +message AnyProposal { + ProposalBase base = 1; + google.protobuf.Any content = 2; +} +``` + +### Custom Query Implementation + +In order to implement the query service, we can reuse the existing [gogo protobuf](https://github.com/gogo/protobuf) +grpc plugin, which for a service named `Query` generates an interface named +`QueryServer` as below: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +The custom queries for our module are implemented by implementing this interface. + +The first parameter in this generated interface is a generic `context.Context`, +whereas querier methods generally need an instance of `sdk.Context` to read +from the store. Since arbitrary values can be attached to `context.Context` +using the `WithValue` and `Value` methods, the SDK should provide a function +`sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +An example implementation of `QueryBalance` for the bank module as above would +look something like: + +```go +type Querier struct { + Keeper +} + +func (q Querier) QueryBalance(ctx context.Context, params *types.QueryBalanceParams) (*sdk.Coin, error) { + balance := q.GetBalance(sdk.UnwrapSDKContext(ctx), params.Address, params.Denom) + return &balance, nil +} +``` + +### Custom Query Registration and Routing + +Query server implementations as above would be registered with `AppModule`s using +a new method `RegisterQueryService(grpc.Server)` which could be implemented simply +as below: + +```go +// x/bank/module.go +func (am AppModule) RegisterQueryService(server grpc.Server) { + types.RegisterQueryServer(server, keeper.Querier{am.keeper}) +} +``` + +Underneath the hood, a new method `RegisterService(sd *grpc.ServiceDesc, handler interface{})` +will be added to the existing `baseapp.QueryRouter` to add the queries to the custom +query routing table (with the routing method being described below). +The signature for this method matches the existing +`RegisterServer` method on the GRPC `Server` type where `handler` is the custom +query server implementation described above. + +GRPC-like requests are routed by the service name (ex. `cosmos_sdk.x.bank.v1.Query`) +and method name (ex. `QueryBalance`) combined with `/`s to form a full +method name (ex. `/cosmos_sdk.x.bank.v1.Query/QueryBalance`). This gets translated +into an ABCI query as `custom/cosmos_sdk.x.bank.v1.Query/QueryBalance`. Service handlers +registered with `QueryRouter.RegisterService` will be routed this way. + +Beyond the method name, GRPC requests carry a protobuf encoded payload, which maps naturally +to `RequestQuery.Data`, and receive a protobuf encoded response or error. Thus +there is a quite natural mapping of GRPC-like rpc methods to the existing +`sdk.Query` and `QueryRouter` infrastructure. + +This basic specification allows us to reuse protocol buffer `service` definitions +for ABCI custom queries substantially reducing the need for manual decoding and +encoding in query methods. + +### GRPC Protocol Support + +In addition to providing an ABCI query pathway, we can easily provide a GRPC +proxy server that routes requests in the GRPC protocol to ABCI query requests +under the hood. In this way, clients could use their host languages' existing +GRPC implementations to make direct queries against Cosmos SDK app's using +these `service` definitions. In order for this server to work, the `QueryRouter` +on `BaseApp` will need to expose the service handlers registered with +`QueryRouter.RegisterService` to the proxy server implementation. Nodes could +launch the proxy server on a separate port in the same process as the ABCI app +with a command-line flag. + +### REST Queries and Swagger Generation + +[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) is a project that +translates REST calls into GRPC calls using special annotations on service +methods. Modules that want to expose REST queries should add `google.api.http` +annotations to their `rpc` methods as in this example below. + +```proto +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { + option (google.api.http) = { + get: "/x/bank/v1/balance/{address}/{denom}" + }; + } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { + option (google.api.http) = { + get: "/x/bank/v1/balances/{address}" + }; + } +} +``` + +grpc-gateway will work direcly against the GRPC proxy described above which will +translate requests to ABCI queries under the hood. grpc-gateway can also +generate Swagger definitions automatically. + +In the current implementation of REST queries, each module needs to implement +REST queries manually in addition to ABCI querier methods. Using the grpc-gateway +approach, there will be no need to generate separate REST query handlers, just +query servers as described above as grpc-gateway handles the translation of protobuf +to REST as well as Swagger definitions. + +The SDK should provide CLI commands for apps to start GRPC gateway either in +a separate process or the same process as the ABCI app, as well as provide a +command for generating grpc-gateway proxy `.proto` files and the `swagger.json` +file. + +### Client Usage + +The gogo protobuf grpc plugin generates client interfaces in addition to server +interfaces. For the `Query` service defined above we would get a `QueryClient` +interface like: + +```go +type QueryClient interface { + QueryBalance(ctx context.Context, in *QueryBalanceParams, opts ...grpc.CallOption) (*types.Coin, error) + QueryAllBalances(ctx context.Context, in *QueryAllBalancesParams, opts ...grpc.CallOption) (*QueryAllBalancesResponse, error) +} +``` + +Via a small patch to gogo protobuf ([gogo/protobuf#675](https://github.com/gogo/protobuf/pull/675)) +we have tweaked the grpc codegen to use an interface rather than concrete type +for the generated client struct. This allows us to also reuse the GRPC infrastructure +for ABCI client queries. + +1Context`will receive a new method`QueryConn`that returns a`ClientConn` +that routes calls to ABCI queries + +Clients (such as CLI methods) will then be able to call query methods like this: + +```go +clientCtx := client.NewContext() +queryClient := types.NewQueryClient(clientCtx.QueryConn()) +params := &types.QueryBalanceParams{addr, denom} +result, err := queryClient.QueryBalance(gocontext.Background(), params) +``` + +### Testing + +Tests would be able to create a query client directly from keeper and `sdk.Context` +references using a `QueryServerTestHelper` as below: + +```go +queryHelper := baseapp.NewQueryServerTestHelper(ctx) +types.RegisterQueryServer(queryHelper, keeper.Querier{app.BankKeeper}) +queryClient := types.NewQueryClient(queryHelper) +``` + +## Future Improvements + +## Consequences + +### Positive + +* greatly simplified querier implementation (no manual encoding/decoding) +* easy query client generation (can use existing grpc and swagger tools) +* no need for REST query implementations +* type safe query methods (generated via grpc plugin) +* going forward, there will be less breakage of query methods because of the +backwards compatibility guarantees provided by buf + +### Negative + +* all clients using the existing ABCI/REST queries will need to be refactored +for both the new GRPC/REST query paths as well as protobuf/proto-json encoded +data, but this is more or less unavoidable in the protobuf refactoring + +### Neutral + +## References diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-022-custom-panic-handling.md b/versioned_docs/version-0.45/integrate/architecture/adr-022-custom-panic-handling.md new file mode 100644 index 000000000..034f2e734 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-022-custom-panic-handling.md @@ -0,0 +1,213 @@ +# ADR 022: Custom BaseApp panic handling + +## Changelog + +- 2020 Apr 24: Initial Draft + +## Context + +The current implementation of BaseApp does not allow developers to write custom error handlers during panic recovery +[runTx()](https://github.com/cosmos/cosmos-sdk/blob/bad4ca75f58b182f600396ca350ad844c18fc80b/baseapp/baseapp.go#L539) +method. We think that this method can be more flexible and can give SDK users more options for customizations without +the need to rewrite whole BaseApp. Also there's one special case for `sdk.ErrorOutOfGas` error handling, that case +might be handled in a "standard" way (middleware) alongside the others. + +We propose middleware-solution, which could help developers implement the following cases: + +* add external logging (let's say sending reports to external services like [Sentry](https://sentry.io)); +* call panic for specific error cases; + +It will also make `OutOfGas` case and `default` case one of the middlewares. +`Default` case wraps recovery object to an error and logs it ([example middleware implementation](#Recovery-middleware)). + +Our project has a sidecar service running alongside the blockchain node (smart contracts virtual machine). It is +essential that node <-> sidecar connectivity stays stable for TXs processing. So when the communication breaks we need +to crash the node and reboot it once the problem is solved. That behaviour makes node's state machine execution +deterministic. As all keeper panics are caught by runTx's `defer()` handler, we have to adjust the BaseApp code +in order to customize it. + +## Decision + +### Design + +#### Overview + +Instead of hardcoding custom error handling into BaseApp we suggest using set of middlewares which can be customized +externally and will allow developers use as many custom error handlers as they want. Implementation with tests +can be found [here](https://github.com/cosmos/cosmos-sdk/pull/6053). + +#### Implementation details + +##### Recovery handler + +New `RecoveryHandler` type added. `recoveryObj` input argument is an object returned by the standard Go function +`recover()` from the `builtin` package. + +```go +type RecoveryHandler func(recoveryObj interface{}) error +``` + +Handler should type assert (or other methods) an object to define if object should be handled. +`nil` should be returned if input object can't be handled by that `RecoveryHandler` (not a handler's target type). +Not `nil` error should be returned if input object was handled and middleware chain execution should be stopped. + +An example: + +```go +func exampleErrHandler(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { return nil } + + if someSpecificError.Is(err) { + panic(customPanicMsg) + } else { + return nil + } +} +``` + +This example breaks the application execution, but it also might enrich the error's context like the `OutOfGas` handler. + +##### Recovery middleware + +We also add a middleware type (decorator). That function type wraps `RecoveryHandler` and returns the next middleware in +execution chain and handler's `error`. Type is used to separate actual `recovery()` object handling from middleware +chain processing. + +```go +type recoveryMiddleware func(recoveryObj interface{}) (recoveryMiddleware, error) + +func newRecoveryMiddleware(handler RecoveryHandler, next recoveryMiddleware) recoveryMiddleware { + return func(recoveryObj interface{}) (recoveryMiddleware, error) { + if err := handler(recoveryObj); err != nil { + return nil, err + } + return next, nil + } +} +``` + +Function receives a `recoveryObj` object and returns: + +* (next `recoveryMiddleware`, `nil`) if object wasn't handled (not a target type) by `RecoveryHandler`; +* (`nil`, not nil `error`) if input object was handled and other middlewares in the chain should not be executed; +* (`nil`, `nil`) in case of invalid behavior. Panic recovery might not have been properly handled; +this can be avoided by always using a `default` as a rightmost middleware in the chain (always returns an `error`'); + +`OutOfGas` middleware example: + +```go +func newOutOfGasRecoveryMiddleware(gasWanted uint64, ctx sdk.Context, next recoveryMiddleware) recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(sdk.ErrorOutOfGas) + if !ok { return nil } + + return sdkerrors.Wrap( + sdkerrors.ErrOutOfGas, fmt.Sprintf( + "out of gas in location: %v; gasWanted: %d, gasUsed: %d", err.Descriptor, gasWanted, ctx.GasMeter().GasConsumed(), + ), + ) + } + + return newRecoveryMiddleware(handler, next) +} +``` + +`Default` middleware example: + +```go +func newDefaultRecoveryMiddleware() recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + return sdkerrors.Wrap( + sdkerrors.ErrPanic, fmt.Sprintf("recovered: %v\nstack:\n%v", recoveryObj, string(debug.Stack())), + ) + } + + return newRecoveryMiddleware(handler, nil) +} +``` + +##### Recovery processing + +Basic chain of middlewares processing would look like: + +```go +func processRecovery(recoveryObj interface{}, middleware recoveryMiddleware) error { + if middleware == nil { return nil } + + next, err := middleware(recoveryObj) + if err != nil { return err } + if next == nil { return nil } + + return processRecovery(recoveryObj, next) +} +``` + +That way we can create a middleware chain which is executed from left to right, the rightmost middleware is a +`default` handler which must return an `error`. + +##### BaseApp changes + +The `default` middleware chain must exist in a `BaseApp` object. `Baseapp` modifications: + +```go +type BaseApp struct { + // ... + runTxRecoveryMiddleware recoveryMiddleware +} + +func NewBaseApp(...) { + // ... + app.runTxRecoveryMiddleware = newDefaultRecoveryMiddleware() +} + +func (app *BaseApp) runTx(...) { + // ... + defer func() { + if r := recover(); r != nil { + recoveryMW := newOutOfGasRecoveryMiddleware(gasWanted, ctx, app.runTxRecoveryMiddleware) + err, result = processRecovery(r, recoveryMW), nil + } + + gInfo = sdk.GasInfo{GasWanted: gasWanted, GasUsed: ctx.GasMeter().GasConsumed()} + }() + // ... +} +``` + +Developers can add their custom `RecoveryHandler`s by providing `AddRunTxRecoveryHandler` as a BaseApp option parameter to the `NewBaseapp` constructor: + +```go +func (app *BaseApp) AddRunTxRecoveryHandler(handlers ...RecoveryHandler) { + for _, h := range handlers { + app.runTxRecoveryMiddleware = newRecoveryMiddleware(h, app.runTxRecoveryMiddleware) + } +} +``` + +This method would prepend handlers to an existing chain. + +## Consequences + +### Positive + +- Developers of Cosmos SDK based projects can add custom panic handlers to: + * add error context for custom panic sources (panic inside of custom keepers); + * emit `panic()`: passthrough recovery object to the Tendermint core; + * other necessary handling; +- Developers can use standard Cosmos SDK `BaseApp` implementation, rather that rewriting it in their projects; +- Proposed solution doesn't break the current "standard" `runTx()` flow; + +### Negative + +- Introduces changes to the execution model design. + +### Neutral + +- `OutOfGas` error handler becomes one of the middlewares; +- Default panic handler becomes one of the middlewares; + +## References + +- [PR-6053 with proposed solution](https://github.com/cosmos/cosmos-sdk/pull/6053) +- [Similar solution. ADR-010 Modular AnteHandler](https://github.com/cosmos/cosmos-sdk/blob/v0.38.3/docs/architecture/adr-010-modular-antehandler.md) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-023-protobuf-naming.md b/versioned_docs/version-0.45/integrate/architecture/adr-023-protobuf-naming.md new file mode 100644 index 000000000..6e9ead13c --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-023-protobuf-naming.md @@ -0,0 +1,263 @@ +# ADR 023: Protocol Buffer Naming and Versioning Conventions + +## Changelog + +- 2020 April 27: Initial Draft +- 2020 August 5: Update guidelines + +## Status + +Accepted + +## Context + +Protocol Buffers provide a basic [style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide) builds upon that. To the +extent possible, we want to follow industry accepted guidelines and wisdom for +the effective usage of protobuf, deviating from those only when there is clear +rationale for our use case. + +### Adoption of `Any` + +The adoption of `google.protobuf.Any` as the recommended approach for encoding +interface types (as opposed to `oneof`) makes package naming a central part +of the encoding as fully-qualified message names now appear in encoded +messages. + +### Current Directory Organization + +Thus far we have mostly followed [Buf's](https://buf.build) [DEFAULT](https://buf.build/docs/lint-checkers#default) +recommendations, with the minor deviation of disabling [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout) +which although being convenient for developing code comes with the warning +from Buf that: + +> you will have a very bad time with many Protobuf plugins across various languages if you do not do this + +### Adoption of gRPC Queries + +In [ADR 021](adr-021-protobuf-query-encoding.md), gRPC was adopted for Protobuf +native queries. The full gRPC service path thus becomes a key part of ABCI query +path. In the future, gRPC queries may be allowed from within persistent scripts +by technologies such as CosmWasm and these query routes would be stored within +script binaries. + +## Decision + +The goal of this ADR is to provide thoughtful naming conventions that: + +* encourage a good user experience for when users interact directly with +.proto files and fully-qualified protobuf names +* balance conciseness against the possibility of either over-optimizing (making +names too short and cryptic) or under-optimizing (just accepting bloated names +with lots of redundant information) + +These guidelines are meant to act as a style guide for both the SDK and +third-party modules. + +As a starting point, we should adopt all of the [DEFAULT](https://buf.build/docs/lint-checkers#default) +checkers in [Buf's](https://buf.build) including [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout), +except: + +* [PACKAGE_VERSION_SUFFIX](https://buf.build/docs/lint-checkers#package_version_suffix) +* [SERVICE_SUFFIX](https://buf.build/docs/lint-checkers#service_suffix) + +Further guidelines to be described below. + +### Principles + +#### Concise and Descriptive Names + +Names should be descriptive enough to convey their meaning and distinguish +them from other names. + +Given that we are using fully-qualifed names within +`google.protobuf.Any` as well as within gRPC query routes, we should aim to +keep names concise, without going overboard. The general rule of thumb should +be if a shorter name would convey more or else the same thing, pick the shorter +name. + +For instance, `cosmos.bank.MsgSend` (19 bytes) conveys roughly the same information +as `cosmos_sdk.x.bank.v1.MsgSend` (28 bytes) but is more concise. + +Such conciseness makes names both more pleasant to work with and take up less +space within transactions and on the wire. + +We should also resist the temptation to over-optimize, by making names +cryptically short with abbreviations. For instance, we shouldn't try to +reduce `cosmos.bank.MsgSend` to `csm.bk.MSnd` just to save a few bytes. + +The goal is to make names **_concise but not cryptic_**. + +#### Names are for Clients First + +Package and type names should be chosen for the benefit of users, not +necessarily because of legacy concerns related to the go code-base. + +#### Plan for Longevity + +In the interests of long-term support, we should plan on the names we do +choose to be in usage for a long time, so now is the opportunity to make +the best choices for the future. + +### Versioning + +#### Guidelines on Stable Package Versions + +In general, schema evolution is the way to update protobuf schemas. That means that new fields, +messages, and RPC methods are _added_ to existing schemas and old fields, messages and RPC methods +are maintained as long as possible. + +Breaking things is often unacceptable in a blockchain scenario. For instance, immutable smart contracts +may depend on certain data schemas on the host chain. If the host chain breaks those schemas, the smart +contract may be irreparably broken. Even when things can be fixed (for instance in client software), +this often comes at a high cost. + +Instead of breaking things, we should make every effort to evolve schemas rather than just breaking them. +[Buf](https://buf.build) breaking change detection should be used on all stable (non-alpha or beta) packages +to prevent such breakage. + +With that in mind, different stable versions (i.e. `v1` or `v2`) of a package should more or less be considered +different packages and this should be last resort approach for upgrading protobuf schemas. Scenarios where creating +a `v2` may make sense are: + +* we want to create a new module with similar functionality to an existing module and adding `v2` is the most natural +way to do this. In that case, there are really just two different, but similar modules with different APIs. +* we want to add a new revamped API for an existing module and it's just too cumbersome to add it to the existing package, +so putting it in `v2` is cleaner for users. In this case, care should be made to not deprecate support for +`v1` if it is actively used in immutable smart contracts. + +#### Guidelines on unstable (alpha and beta) package versions + +The following guidelines are recommended for marking packages as alpha or beta: + +* marking something as `alpha` or `beta` should be a last resort and just putting something in the +stable package (i.e. `v1` or `v2`) should be preferred +* a package *should* be marked as `alpha` *if and only if* there are active discussions to remove +or significantly alter the package in the near future +* a package *should* be marked as `beta` *if and only if* there is an active discussion to +significantly refactor/rework the functionality in the near future but not remove it +* modules *can and should* have types in both stable (i.e. `v1` or `v2`) and unstable (`alpha` or `beta`) packages. + +*`alpha` and `beta` should not be used to avoid responsibility for maintaining compatibility.* +Whenever code is released into the wild, especially on a blockchain, there is a high cost to changing things. In some +cases, for instance with immutable smart contracts, a breaking change may be impossible to fix. + +When marking something as `alpha` or `beta`, maintainers should ask the questions: + +* what is the cost of asking others to change their code vs the benefit of us maintaining the optionality to change it? +* what is the plan for moving this to `v1` and how will that affect users? + +`alpha` or `beta` should really be used to communicate "changes are planned". + +As a case study, gRPC reflection is in the package `grpc.reflection.v1alpha`. It hasn't been changed since +2017 and it is now used in other widely used software like gRPCurl. Some folks probably use it in production services +and so if they actually went and changed the package to `grpc.reflection.v1`, some software would break and +they probably don't want to do that... So now the `v1alpha` package is more or less the de-facto `v1`. Let's not do that. + +The following are guidelines for working with non-stable packages: + +* [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix) +(ex. `v1alpha1`) _should_ be used for non-stable packages +* non-stable packages should generally be excluded from breaking change detection +* immutable smart contract modules (i.e. CosmWasm) _should_ block smart contracts/persistent +scripts from interacting with `alpha`/`beta` packages + +#### Omit v1 suffix + +Instead of using [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix), +we can omit `v1` for packages that don't actually have a second version. This +allows for more concise names for common use cases like `cosmos.bank.Send`. +Packages that do have a second or third version can indicate that with `.v2` +or `.v3`. + +### Package Naming + +#### Adopt a short, unique top-level package name + +Top-level packages should adopt a short name that is known to not collide with +other names in common usage within the Cosmos ecosystem. In the near future, a +registry should be created to reserve and index top-level package names used +within the Cosmos ecosystem. Because the Cosmos SDK is intended to provide +the top-level types for the Cosmos project, the top-level package name `cosmos` +is recommended for usage within the Cosmos SDK instead of the longer `cosmos_sdk`. +[ICS](https://github.com/cosmos/ics) specifications could consider a +short top-level package like `ics23` based upon the standard number. + +#### Limit sub-package depth + +Sub-package depth should be increased with caution. Generally a single +sub-package is needed for a module or a library. Even though `x` or `modules` +is used in source code to denote modules, this is often unnecessary for .proto +files as modules are the primary thing sub-packages are used for. Only items which +are known to be used infrequently should have deep sub-package depths. + +For the Cosmos SDK, it is recommended that that we simply write `cosmos.bank`, +`cosmos.gov`, etc. rather than `cosmos.x.bank`. In practice, most non-module +types can go straight in the `cosmos` package or we can introduce a +`cosmos.base` package if needed. Note that this naming _will not_ change +go package names, i.e. the `cosmos.bank` protobuf package will still live in +`x/bank`. + +### Message Naming + +Message type names should be as concise possible without losing clarity. `sdk.Msg` +types which are used in transactions will retain the `Msg` prefix as that provides +helpful context. + +### Service and RPC Naming + +[ADR 021](adr-021-protobuf-query-encoding.md) specifies that modules should +implement a gRPC query service. We should consider the principle of conciseness +for query service and RPC names as these may be called from persistent script +modules such as CosmWasm. Also, users may use these query paths from tools like +[gRPCurl](https://github.com/fullstorydev/grpcurl). As an example, we can shorten +`/cosmos_sdk.x.bank.v1.QueryService/QueryBalance` to +`/cosmos.bank.Query/Balance` without losing much useful information. + +RPC request and response types _should_ follow the `ServiceNameMethodNameRequest`/ +`ServiceNameMethodNameResponse` naming convention. i.e. for an RPC method named `Balance` +on the `Query` service, the request and response types would be `QueryBalanceRequest` +and `QueryBalanceResponse`. This will be more self-explanatory than `BalanceRequest` +and `BalanceResponse`. + +#### Use just `Query` for the query service + +Instead of [Buf's default service suffix recommendation](https://github.com/cosmos/cosmos-sdk/pull/6033), +we should simply use the shorter `Query` for query services. + +For other types of gRPC services, we should consider sticking with Buf's +default recommendation. + +#### Omit `Get` and `Query` from query service RPC names + +`Get` and `Query` should be omitted from `Query` service names because they are +redundant in the fully-qualified name. For instance, `/cosmos.bank.Query/QueryBalance` +just says `Query` twice without any new information. + +## Future Improvements + +A registry of top-level package names should be created to coordinate naming +across the ecosystem, prevent collisions, and also help developers discover +useful schemas. A simple starting point would be a git repository with +community-based governance. + +## Consequences + +### Positive + +* names will be more concise and easier to read and type +* all transactions using `Any` will be at shorter (`_sdk.x` and `.v1` will be removed) +* `.proto` file imports will be more standard (without `"third_party/proto"` in +the path) +* code generation will be easier for clients because .proto files will be +in a single `proto/` directory which can be copied rather than scattered +throughout the SDK + +### Negative + +### Neutral + +* `.proto` files will need to be reorganized and refactored +* some modules may need to be marked as alpha or beta + +## References diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-024-coin-metadata.md b/versioned_docs/version-0.45/integrate/architecture/adr-024-coin-metadata.md new file mode 100644 index 000000000..5195a9c40 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-024-coin-metadata.md @@ -0,0 +1,139 @@ +# ADR 024: Coin Metadata + +## Changelog + +- 05/19/2020: Initial draft + +## Status + +Proposed + +## Context + +Assets in the Cosmos SDK are represented via a `Coins` type that consists of an `amount` and a `denom`, +where the `amount` can be any arbitrarily large or small value. In addition, the Cosmos SDK uses an +account-based model where there are two types of primary accounts -- basic accounts and module accounts. +All account types have a set of balances that are composed of `Coins`. The `x/bank` module keeps +track of all balances for all accounts and also keeps track of the total supply of balances in an +application. + +With regards to a balance `amount`, the Cosmos SDK assumes a static and fixed unit of denomination, +regardless of the denomination itself. In other words, clients and apps built atop a Cosmos-SDK-based +chain may choose to define and use arbitrary units of denomination to provide a richer UX, however, by +the time a tx or operation reaches the Cosmos SDK state machine, the `amount` is treated as a single +unit. For example, for the Cosmos Hub (Gaia), clients assume 1 ATOM = 10^6 uatom, and so all txs and +operations in the Cosmos SDK work off of units of 10^6. + +This clearly provides a poor and limited UX especially as interoperability of networks increases and +as a result the total amount of asset types increases. We propose to have `x/bank` additionally keep +track of metadata per `denom` in order to help clients, wallet providers, and explorers improve their +UX and remove the requirement for making any assumptions on the unit of denomination. + +## Decision + +The `x/bank` module will be updated to store and index metadata by `denom`, specifically the "base" or +smallest unit -- the unit the Cosmos SDK state-machine works with. + +Metadata may also include a non-zero length list of denominations. Each entry contains the name of +the denomination `denom`, the exponent to the base and a list of aliases. An entry is to be +interpreted as `1 denom = 10^exponent base_denom` (e.g. `1 ETH = 10^18 wei` and `1 uatom = 10^0 uatom`). + +There are two denominations that are of high importance for clients: the `base`, which is the smallest +possible unit and the `display`, which is the unit that is commonly referred to in human communication +and on exchanges. The values in those fields link to an entry in the list of denominations. + +The list in `denom_units` and the `display` entry may be changed via governance. + +As a result, we can define the type as follows: + +```protobuf +message DenomUnit { + string denom = 1; + uint32 exponent = 2; + repeated string aliases = 3; +} + +message Metadata { + string description = 1; + repeated DenomUnit denom_units = 2; + string base = 3; + string display = 4; +} +``` + +As an example, the ATOM's metadata can be defined as follows: + +```json +{ + "description": "The native staking token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "uatom", + "exponent": 0, + "aliases": [ + "microatom" + ], + }, + { + "denom": "matom", + "exponent": 3, + "aliases": [ + "milliatom" + ] + }, + { + "denom": "atom", + "exponent": 6, + } + ], + "base": "uatom", + "display": "atom", +} +``` + +Given the above metadata, a client may infer the following things: + +- 4.3atom = 4.3 * (10^6) = 4,300,000uatom +- The string "atom" can be used as a display name in a list of tokens. +- The balance 4300000 can be displayed as 4,300,000uatom or 4,300matom or 4.3atom. + The `display` denomination 4.3atom is a good default if the authors of the client don't make + an explicit decision to choose a different representation. + +A client should be able to query for metadata by denom both via the CLI and REST interfaces. In +addition, we will add handlers to these interfaces to convert from any unit to another given unit, +as the base framework for this already exists in the Cosmos SDK. + +Finally, we need to ensure metadata exists in the `GenesisState` of the `x/bank` module which is also +indexed by the base `denom`. + +```go +type GenesisState struct { + SendEnabled bool `json:"send_enabled" yaml:"send_enabled"` + Balances []Balance `json:"balances" yaml:"balances"` + Supply sdk.Coins `json:"supply" yaml:"supply"` + DenomMetadata []Metadata `json:"denom_metadata" yaml:"denom_metadata"` +} +``` + +## Future Work + +In order for clients to avoid having to convert assets to the base denomination -- either manually or +via an endpoint, we may consider supporting automatic conversion of a given unit input. + +## Consequences + +### Positive + +- Provides clients, wallet providers and block explorers with additional data on + asset denomination to improve UX and remove any need to make assumptions on + denomination units. + +### Negative + +- A small amount of required additional storage in the `x/bank` module. The amount + of additional storage should be minimal as the amount of total assets should not + be large. + +### Neutral + +## References diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-027-deterministic-protobuf-serialization.md b/versioned_docs/version-0.45/integrate/architecture/adr-027-deterministic-protobuf-serialization.md new file mode 100644 index 000000000..ab303e8d0 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-027-deterministic-protobuf-serialization.md @@ -0,0 +1,314 @@ +# ADR 027: Deterministic Protobuf Serialization + +## Changelog + +- 2020-08-07: Initial Draft +- 2020-09-01: Further clarify rules + +## Status + +Proposed + +## Abstract + +Fully deterministic structure serialization, which works across many languages and clients, +is needed when signing messages. We need to be sure that whenever we serialize +a data structure, no matter in which supported language, the raw bytes +will stay the same. +[Protobuf](https://developers.google.com/protocol-buffers/docs/proto3) +serialization is not bijective (i.e. there exist a practically unlimited number of +valid binary representations for a given protobuf document)1. + +This document describes a deterministic serialization scheme for +a subset of protobuf documents, that covers this use case but can be reused in +other cases as well. + +### Context + +For signature verification in Cosmos SDK, the signer and verifier need to agree on +the same serialization of a `SignDoc` as defined in +[ADR-020](./adr-020-protobuf-transaction-encoding.md) without transmitting the +serialization. + +Currently, for block signatures we are using a workaround: we create a new [TxRaw](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L30) +instance (as defined in [adr-020-protobuf-transaction-encoding](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md#transactions)) +by converting all [Tx](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L13) +fields to bytes on the client side. This adds an additional manual +step when sending and signing transactions. + +### Decision + +The following encoding scheme is to be used by other ADRs, +and in particular for `SignDoc` serialization. + +## Specification + +### Scope + +This ADR defines a protobuf3 serializer. The output is a valid protobuf +serialization, such that every protobuf parser can parse it. + +No maps are supported in version 1 due to the complexity of defining a +deterministic serialization. This might change in future. Implementations must +reject documents containing maps as invalid input. + +### Background - Protobuf3 Encoding + +Most numeric types in protobuf3 are encoded as +[varints](https://developers.google.com/protocol-buffers/docs/encoding#varints). +Varints are at most 10 bytes, and since each varint byte has 7 bits of data, +varints are a representation of `uint70` (70-bit unsigned integer). When +encoding, numeric values are casted from their base type to `uint70`, and when +decoding, the parsed `uint70` is casted to the appropriate numeric type. + +The maximum valid value for a varint that complies with protobuf3 is +`FF FF FF FF FF FF FF FF FF 7F` (i.e. `2**70 -1`). If the field type is +`{,u,s}int64`, the highest 6 bits of the 70 are dropped during decoding, +introducing 6 bits of malleability. If the field type is `{,u,s}int32`, the +highest 38 bits of the 70 are dropped during decoding, introducing 38 bits of +malleability. + +Among other sources of non-determinism, this ADR eliminates the possibility of +encoding malleability. + +### Serialization rules + +The serialization is based on the +[protobuf3 encoding](https://developers.google.com/protocol-buffers/docs/encoding) +with the following additions: + +1. Fields must be serialized only once in ascending order +2. Extra fields or any extra data must not be added +3. [Default values](https://developers.google.com/protocol-buffers/docs/proto3#default) + must be omitted +4. `repeated` fields of scalar numeric types must use + [packed encoding](https://developers.google.com/protocol-buffers/docs/encoding#packed) +5. Varint encoding must not be longer than needed: + * No trailing zero bytes (in little endian, i.e. no leading zeroes in big + endian). Per rule 3 above, the default value of `0` must be omitted, so + this rule does not apply in such cases. + * The maximum value for a varint must be `FF FF FF FF FF FF FF FF FF 01`. + In other words, when decoded, the highest 6 bits of the 70-bit unsigned + integer must be `0`. (10-byte varints are 10 groups of 7 bits, i.e. + 70 bits, of which only the lowest 70-6=64 are useful.) + * The maximum value for 32-bit values in varint encoding must be `FF FF FF FF 0F` + with one exception (below). In other words, when decoded, the highest 38 + bits of the 70-bit unsigned integer must be `0`. + * The one exception to the above is _negative_ `int32`, which must be + encoded using the full 10 bytes for sign extension2. + * The maximum value for Boolean values in varint encoding must be `01` (i.e. + it must be `0` or `1`). Per rule 3 above, the default value of `0` must + be omitted, so if a Boolean is included it must have a value of `1`. + +While rule number 1. and 2. should be pretty straight forward and describe the +default behavior of all protobuf encoders the author is aware of, the 3rd rule +is more interesting. After a protobuf3 deserialization you cannot differentiate +between unset fields and fields set to the default value3. At +serialization level however, it is possible to set the fields with an empty +value or omitting them entirely. This is a significant difference to e.g. JSON +where a property can be empty (`""`, `0`), `null` or undefined, leading to 3 +different documents. + +Omitting fields set to default values is valid because the parser must assign +the default value to fields missing in the serialization4. For scalar +types, omitting defaults is required by the spec5. For `repeated` +fields, not serializing them is the only way to express empty lists. Enums must +have a first element of numeric value 0, which is the default6. And +message fields default to unset7. + +Omitting defaults allows for some amount of forward compatibility: users of +newer versions of a protobuf schema produce the same serialization as users of +older versions as long as newly added fields are not used (i.e. set to their +default value). + +### Implementation + +There are three main implementation strategies, ordered from the least to the +most custom development: + +- **Use a protobuf serializer that follows the above rules by default.** E.g. + [gogoproto](https://pkg.go.dev/github.com/gogo/protobuf/gogoproto) is known to + be compliant by in most cases, but not when certain annotations such as + `nullable = false` are used. It might also be an option to configure an + existing serializer accordingly. +- **Normalize default values before encoding them.** If your serializer follows + rule 1. and 2. and allows you to explicitly unset fields for serialization, + you can normalize default values to unset. This can be done when working with + [protobuf.js](https://www.npmjs.com/package/protobufjs): + + ```js + const bytes = SignDoc.encode({ + bodyBytes: body.length > 0 ? body : null, // normalize empty bytes to unset + authInfoBytes: authInfo.length > 0 ? authInfo : null, // normalize empty bytes to unset + chainId: chainId || null, // normalize "" to unset + accountNumber: accountNumber || null, // normalize 0 to unset + accountSequence: accountSequence || null, // normalize 0 to unset + }).finish(); + ``` + +- **Use a hand-written serializer for the types you need.** If none of the above + ways works for you, you can write a serializer yourself. For SignDoc this + would look something like this in Go, building on existing protobuf utilities: + + ```go + if !signDoc.body_bytes.empty() { + buf.WriteUVarInt64(0xA) // wire type and field number for body_bytes + buf.WriteUVarInt64(signDoc.body_bytes.length()) + buf.WriteBytes(signDoc.body_bytes) + } + + if !signDoc.auth_info.empty() { + buf.WriteUVarInt64(0x12) // wire type and field number for auth_info + buf.WriteUVarInt64(signDoc.auth_info.length()) + buf.WriteBytes(signDoc.auth_info) + } + + if !signDoc.chain_id.empty() { + buf.WriteUVarInt64(0x1a) // wire type and field number for chain_id + buf.WriteUVarInt64(signDoc.chain_id.length()) + buf.WriteBytes(signDoc.chain_id) + } + + if signDoc.account_number != 0 { + buf.WriteUVarInt64(0x20) // wire type and field number for account_number + buf.WriteUVarInt(signDoc.account_number) + } + + if signDoc.account_sequence != 0 { + buf.WriteUVarInt64(0x28) // wire type and field number for account_sequence + buf.WriteUVarInt(signDoc.account_sequence) + } + ``` + +### Test vectors + +Given the protobuf definition `Article.proto` + +```protobuf +package blog; +syntax = "proto3"; + +enum Type { + UNSPECIFIED = 0; + IMAGES = 1; + NEWS = 2; +}; + +enum Review { + UNSPECIFIED = 0; + ACCEPTED = 1; + REJECTED = 2; +}; + +message Article { + string title = 1; + string description = 2; + uint64 created = 3; + uint64 updated = 4; + bool public = 5; + bool promoted = 6; + Type type = 7; + Review review = 8; + repeated string comments = 9; + repeated string backlinks = 10; +}; +``` + +serializing the values + +```yaml +title: "The world needs change 🌳" +description: "" +created: 1596806111080 +updated: 0 +public: true +promoted: false +type: Type.NEWS +review: Review.UNSPECIFIED +comments: ["Nice one", "Thank you"] +backlinks: [] +``` + +must result in the serialization + +``` +0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 +``` + +When inspecting the serialized document, you see that every second field is +omitted: + +``` +$ echo 0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 | xxd -r -p | protoc --decode_raw +1: "The world needs change \360\237\214\263" +3: 1596806111080 +5: 1 +7: 2 +9: "Nice one" +9: "Thank you" +``` + +## Consequences + +Having such an encoding available allows us to get deterministic serialization +for all protobuf documents we need in the context of Cosmos SDK signing. + +### Positive + +- Well defined rules that can be verified independent of a reference + implementation +- Simple enough to keep the barrier to implement transaction signing low +- It allows us to continue to use 0 and other empty values in SignDoc, avoiding + the need to work around 0 sequences. This does not imply the change from + https://github.com/cosmos/cosmos-sdk/pull/6949 should not be merged, but not + too important anymore. + +### Negative + +- When implementing transaction signing, the encoding rules above must be + understood and implemented. +- The need for rule number 3. adds some complexity to implementations. +- Some data structures may require custom code for serialization. Thus + the code is not very portable - it will require additional work for each + client implementing serialization to properly handle custom data structures. + +### Neutral + +### Usage in SDK + +For the reasons mentioned above ("Negative" section) we prefer to keep workarounds +for shared data structure. Example: the aforementioned `TxRaw` is using raw bytes +as a workaround. This allows them to use any valid Protobuf library without +the need of implementing a custom serializer that adheres to this standard (and related risks of bugs). + +## References + +- 1 _When a message is serialized, there is no guaranteed order for + how its known or unknown fields should be written. Serialization order is an + implementation detail and the details of any particular implementation may + change in the future. Therefore, protocol buffer parsers must be able to parse + fields in any order._ from + https://developers.google.com/protocol-buffers/docs/encoding#order +- 2 https://developers.google.com/protocol-buffers/docs/encoding#signed_integers +- 3 _Note that for scalar message fields, once a message is parsed + there's no way of telling whether a field was explicitly set to the default + value (for example whether a boolean was set to false) or just not set at all: + you should bear this in mind when defining your message types. For example, + don't have a boolean that switches on some behavior when set to false if you + don't want that behavior to also happen by default._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +- 4 _When a message is parsed, if the encoded message does not + contain a particular singular element, the corresponding field in the parsed + object is set to the default value for that field._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +- 5 _Also note that if a scalar message field is set to its default, + the value will not be serialized on the wire._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +- 6 _For enums, the default value is the first defined enum value, + which must be 0._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +- 7 _For message fields, the field is not set. Its exact value is + language-dependent._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +- Encoding rules and parts of the reasoning taken from + [canonical-proto3 Aaron Craelius](https://github.com/regen-network/canonical-proto3) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-028-public-key-addresses.md b/versioned_docs/version-0.45/integrate/architecture/adr-028-public-key-addresses.md new file mode 100644 index 000000000..d86a0426f --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-028-public-key-addresses.md @@ -0,0 +1,329 @@ +# ADR 028: Public Key Addresses + +## Changelog + +- 2020/08/18: Initial version +- 2021/01/15: Analysis and algorithm update + +## Status + +Proposed + +## Abstract + +This ADR defines an address format for all addressable SDK accounts. That includes: new public key algorithms, multisig public keys, and module accounts. + +## Context + +Issue [\#3685](https://github.com/cosmos/cosmos-sdk/issues/3685) identified that public key +address spaces are currently overlapping. We confirmed that it significantly decreases security of Cosmos SDK. + +### Problem + +An attacker can control an input for an address generation function. This leads to a birthday attack, which significantly decreases the security space. +To overcome this, we need to separate the inputs for different kind of account types: +a security break of one account type shouldn't impact the security of other account types. + +### Initial proposals + +One initial proposal was extending the address length and +adding prefixes for different types of addresses. + +@ethanfrey explained an alternate approach originally used in https://github.com/iov-one/weave: + +> I spent quite a bit of time thinking about this issue while building weave... The other cosmos Sdk. +> Basically I define a condition to be a type and format as human readable string with some binary data appended. This condition is hashed into an Address (again at 20 bytes). The use of this prefix makes it impossible to find a preimage for a given address with a different condition (eg ed25519 vs secp256k1). +> This is explained in depth here https://weave.readthedocs.io/en/latest/design/permissions.html +> And the code is here, look mainly at the top where we process conditions. https://github.com/iov-one/weave/blob/master/conditions.go + +And explained how this approach should be sufficiently collision resistant: + +> Yeah, AFAIK, 20 bytes should be collision resistance when the preimages are unique and not malleable. A space of 2^160 would expect some collision to be likely around 2^80 elements (birthday paradox). And if you want to find a collision for some existing element in the database, it is still 2^160. 2^80 only is if all these elements are written to state. +> The good example you brought up was eg. a public key bytes being a valid public key on two algorithms supported by the codec. Meaning if either was broken, you would break accounts even if they were secured with the safer variant. This is only as the issue when no differentiating type info is present in the preimage (before hashing into an address). +> I would like to hear an argument if the 20 bytes space is an actual issue for security, as I would be happy to increase my address sizes in weave. I just figured cosmos and ethereum and bitcoin all use 20 bytes, it should be good enough. And the arguments above which made me feel it was secure. But I have not done a deeper analysis. + +This led to the first proposal (which we proved to be not good enough): +we concatenate a key type with a public key, hash it and take the first 20 bytes of that hash, summarized as `sha256(keyTypePrefix || keybytes)[:20]`. + +### Review and Discussions + +In [\#5694](https://github.com/cosmos/cosmos-sdk/issues/5694) we discussed various solutions. +We agreed that 20 bytes it's not future proof, and extending the address length is the only way to allow addresses of different types, various signature types, etc. +This disqualifies the initial proposal. + +In the issue we discussed various modifications: + ++ Choice of the hash function. ++ Move the prefix out of the hash function: `keyTypePrefix + sha256(keybytes)[:20]` [post-hash-prefix-proposal]. ++ Use double hashing: `sha256(keyTypePrefix + sha256(keybytes)[:20])`. ++ Increase to keybytes hash slice from 20 byte to 32 or 40 bytes. We concluded that 32 bytes, produced by a good hash functions is future secure. + +### Requirements + ++ Support currently used tools - we don't want to break an ecosystem, or add a long adaptation period. Ref: https://github.com/cosmos/cosmos-sdk/issues/8041 ++ Try to keep the address length small - addresses are widely used in state, both as part of a key and object value. + +### Scope + +This ADR only defines a process for the generation of address bytes. For end-user interactions with addresses (through the API, or CLI, etc.), we still use bech32 to format these addresses as strings. This ADR doesn't change that. +Using Bech32 for string encoding gives us support for checksum error codes and handling of user typos. + +## Decision + +We define the following account types, for which we define the address function: + +1. simple accounts: represented by a regular public key (ie: secp256k1, sr25519) +2. naive multisig: accounts composed by other addressable objects (ie: naive multisig) +3. composed accounts with a native address key (ie: bls, group module accounts) +4. module accounts: basically any accounts which cannot sign transactions and which are managed internally by modules + +### Legacy Public Key Addresses Don't Change + +Currently (Jan 2021), the only officially supported SDK user accounts are `secp256k1` basic accounts and legacy amino multisig. +They are used in existing Cosmos SDK zones. They use the following address formats: + +- secp256k1: `ripemd160(sha256(pk_bytes))[:20]` +- legacy amino multisig: `sha256(aminoCdc.Marshal(pk))[:20]` + +We don't want to change existing addresses. So the addresses for these two key types will remain the same. + +The current multisig public keys use amino serialization to generate the address. We will retain +those public keys and their address formatting, and call them "legacy amino" multisig public keys +in protobuf. We will also create multisig public keys without amino addresses to be described below. + +### Hash Function Choice + +As in other parts of the Cosmos SDK, we will use `sha256`. + +### Basic Address + +We start with defining a base hash algorithm for generating addresses. Notably, it's used for accounts represented by a single key pair. For each public key schema we have to have an associated `typ` string, which we discuss in a section below. `hash` is the cryptographic hash function defined in the previous section. + +```go +const A_LEN = 32 + +func Hash(typ string, key []byte) []byte { + return hash(hash(typ) + key)[:A_LEN] +} +``` + +The `+` is bytes concatenation, which doesn't use any separator. + +This algorithm is the outcome of a consultation session with a professional cryptographer. +Motivation: this algorithm keeps the address relatively small (length of the `typ` doesn't impact the length of the final address) +and it's more secure than [post-hash-prefix-proposal] (which uses the first 20 bytes of a pubkey hash, significantly reducing the address space). +Moreover the cryptographer motivated the choice of adding `typ` in the hash to protect against a switch table attack. + +We use the `address.Hash` function for generating addresses for all accounts represented by a single key: + +* simple public keys: `address.Hash(keyType, pubkey)` + ++ aggregated keys (eg: BLS): `address.Hash(keyType, aggregatedPubKey)` ++ modules: `address.Hash("module", moduleName)` + +### Composed Addresses + +For simple composed accounts (like new naive multisig), we generalize the `address.Hash`. The address is constructed by recursively creating addresses for the sub accounts, sorting the addresses and composing them into a single address. It ensures that the ordering of keys doesn't impact the resulting address. + +```go +// We don't need a PubKey interface - we need anything which is addressable. +type Addressable interface { + Address() []byte +} + +func Composed(typ string, subaccounts []Addressable) []byte { + addresses = map(subaccounts, \a -> LengthPrefix(a.Address())) + addresses = sort(addresses) + return address.Hash(typ, addresses[0] + ... + addresses[n]) +} +``` + +The `typ` parameter should be a schema descriptor, containing all significant attributes with deterministic serialization (eg: utf8 string). +`LengthPrefix` is a function which prepends 1 byte to the address. The value of that byte is the length of the address bits before prepending. The address must be at most 255 bits long. +We are using `LengthPrefix` to eliminate conflicts - it assures, that for 2 lists of addresses: `as = {a1, a2, ..., an}` and `bs = {b1, b2, ..., bm}` such that every `bi` and `ai` is at most 255 long, `concatenate(map(as, \a -> LengthPrefix(a))) = map(bs, \b -> LengthPrefix(b))` iff `as = bs`. + +Implementation Tip: account implementations should cache addresses. + +#### Multisig Addresses + +For new multisig public keys, we define the `typ` parameter not based on any encoding scheme (amino or protobuf). This avoids issues with non-determinism in the encoding scheme. + +Example: + +```proto +package cosmos.crypto.multisig; + +message PubKey { + uint32 threshold = 1; + repeated google.protobuf.Any pubkeys = 2; +} +``` + +```go +func (multisig PubKey) Address() { + // first gather all nested pub keys + var keys []address.Addressable // cryptotypes.PubKey implements Addressable + for _, _key := range multisig.Pubkeys { + keys = append(keys, key.GetCachedValue().(cryptotypes.PubKey)) + } + + // form the type from the message name (cosmos.crypto.multisig.PubKey) and the threshold joined together + prefix := fmt.Sprintf("%s/%d", proto.MessageName(multisig), multisig.Threshold) + + // use the Composed function defined above + return address.Composed(prefix, keys) +} +``` + +#### Module Account Addresses + +NOTE: this section is not finalize and it's in active discussion. + +In Basic Address section we defined a module account address as: + +```go +address.Hash("module", moduleName) +``` + +We use `"module"` as a schema type for all module derived addresses. Module accounts can have sub accounts. The derivation process has a defined order: module name, submodule key, subsubmodule key. +Module account addresses are heavily used in the SDK so it makes sense to optimize the derivation process: instead of using of using `LengthPrefix` for the module name, we use a null byte (`'\x00'`) as a separator. This works, because null byte is not a part of a valid module name. + +```go +func Module(moduleName string, key []byte) []byte{ + return Hash("module", []byte(moduleName) + 0 + key) +} +``` + +**Example** A lending BTC pool address would be: + +``` +btcPool := address.Module("lending", btc.Addrress()}) +``` + +If we want to create an address for a module account depending on more than one key, we can concatenate them: + +``` +btcAtomAMM := address.Module("amm", btc.Addrress() + atom.Address()}) +``` + +#### Derived Addresses + +We must be able to cryptographically derive one address from another one. The derivation process must guarantee hash properties, hence we use the already defined `Hash` function: + +```go +func Derive(address []byte, derivationKey []byte) []byte { + return Hash(addres, derivationKey) +} +``` + +Note: `Module` is a special case of the more general _derived_ address, where we set the `"module"` string for the _from address_. + +**Example** For a cosmwasm smart-contract address we could use the following construction: + +``` +smartContractAddr := Derived(Module("cosmwasm", smartContractsNamespace), []{smartContractKey}) +``` + +### Schema Types + +A `typ` parameter used in `Hash` function SHOULD be unique for each account type. +Since all SDK account types are serialized in the state, we propose to use the protobuf message name string. + +Example: all public key types have a unique protobuf message type similar to: + +```proto +package cosmos.crypto.sr25519; + +message PubKey { + bytes key = 1; +} +``` + +All protobuf messages have unique fully qualified names, in this example `cosmos.crypto.sr25519.PubKey`. +These names are derived directly from .proto files in a standardized way and used +in other places such as the type URL in `Any`s. We can easily obtain the name using +`proto.MessageName(msg)`. + +## Consequences + +### Backwards Compatibility + +This ADR is compatible with what was committed and directly supported in the SDK repository. + +### Positive + +- a simple algorithm for generating addresses for new public keys, complex accounts and modules +- the algorithm generalizes _native composed keys_ +- increased security and collision resistance of addresses +- the approach is extensible for future use-cases - one can use other address types, as long as they don't conflict with the address length specified here (20 or 32 bytes). +- support new account types. + +### Negative + +- addresses do not communicate key type, a prefixed approach would have done this +- addresses are 60% longer and will consume more storage space +- requires a refactor of KVStore store keys to handle variable length addresses + +### Neutral + +- protobuf message names are used as key type prefixes + +## Further Discussions + +Some accounts can have a fixed name or may be constructed in other way (eg: modules). We were discussing an idea of an account with a predefined name (eg: `me.regen`), which could be used by institutions. +Without going into details, these kinds of addresses are compatible with the hash based addresses described here as long as they don't have the same length. +More specifically, any special account address must not have a length equal to 20 or 32 bytes. + +## Appendix: Consulting session + +End of Dec 2020 we had a session with [Alan Szepieniec](https://scholar.google.be/citations?user=4LyZn8oAAAAJ&hl=en) to consult the approach presented above. + +Alan general observations: + ++ we don’t need 2-preimage resistance ++ we need 32bytes address space for collision resistance ++ when an attacker can control an input for object with an address then we have a problem with birthday attack ++ there is an issue with smart-contracts for hashing ++ sha2 mining can be use to breaking address pre-image + +Hashing algorithm + ++ any attack breaking blake3 will break blake2 ++ Alan is pretty confident about the current security analysis of the blake hash algorithm. It was a finalist, and the author is well known in security analysis. + +Algorithm: + ++ Alan recommends to hash the prefix: `address(pub_key) = hash(hash(key_type) + pub_key)[:32]`, main benefits: + + we are free to user arbitrary long prefix names + + we still don’t risk collisions + + switch tables ++ discussion about penalization -> about adding prefix post hash ++ Aaron asked about post hash prefixes (`address(pub_key) = key_type + hash(pub_key)`) and differences. Alan noted that this approach has longer address space and it’s stronger. + +Algorithm for complex / composed keys: + ++ merging tree like addresses with same algorithm are fine + +Module addresses: Should module addresses have different size to differentiate it? + ++ we will need to set a pre-image prefix for module addresse to keept them in 32-byte space: `hash(hash('module') + module_key)` ++ Aaron observation: we already need to deal with variable length (to not break secp256k1 keys). + +Discssion about arithmetic hash function for ZKP + ++ Posseidon / Rescue ++ Problem: much bigger risk because we don’t know much techniques and history of crypto-analysis of arithmetic constructions. It’s still a new ground and area of active research. + +Post quantum signature size + ++ Alan suggestion: Falcon: speed / size ration - very good. ++ Aaron - should we think about it? + Alan: based on early extrapolation this thing will get able to break EC cryptography in 2050 . But that’s a lot of uncertainty. But there is magic happening with recurions / linking / simulation and that can speedup the progress. + +Other ideas + ++ Let’s say we use same key and two different address algorithms for 2 different use cases. Is it still safe to use it? Alan: if we want to hide the public key (which is not our use case), then it’s less secure but there are fixes. + +### References + ++ [Notes](https://hackmd.io/_NGWI4xZSbKzj1BkCqyZMw) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-029-fee-grant-module.md b/versioned_docs/version-0.45/integrate/architecture/adr-029-fee-grant-module.md new file mode 100644 index 000000000..f6e9a4883 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-029-fee-grant-module.md @@ -0,0 +1,153 @@ +# ADR 029: Fee Grant Module + +## Changelog + +- 2020/08/18: Initial Draft +- 2021/05/05: Removed height based expiration support and simplified naming. + +## Status + +Accepted + +## Context + +In order to make blockchain transactions, the signing account must possess a sufficient balance of the right denomination +in order to pay fees. There are classes of transactions where needing to maintain a wallet with sufficient fees is a +barrier to adoption. + +For instance, when proper permissions are setup, someone may temporarily delegate the ability to vote on proposals to +a "burner" account that is stored on a mobile phone with only minimal security. + +Other use cases include workers tracking items in a supply chain or farmers submitting field data for analytics +or compliance purposes. + +For all of these use cases, UX would be significantly enhanced by obviating the need for these accounts to always +maintain the appropriate fee balance. This is especially true if we wanted to achieve enterprise adoption for something +like supply chain tracking. + +While one solution would be to have a service that fills up these accounts automatically with the appropriate fees, a better UX +would be provided by allowing these accounts to pull from a common fee pool account with proper spending limits. +A single pool would reduce the churn of making lots of small "fill up" transactions and also more effectively leverages +the resources of the organization setting up the pool. + +## Decision + +As a solution we propose a module, `x/feegrant` which allows one account, the "granter" to grant another account, the "grantee" +an allowance to spend the granter's account balance for fees within certain well-defined limits. + +Fee allowances are defined by the extensible `FeeAllowanceI` interface: + +```go +type FeeAllowanceI { + // Accept can use fee payment requested as well as timestamp of the current block + // to determine whether or not to process this. This is checked in + // Keeper.UseGrantedFees and the return values should match how it is handled there. + // + // If it returns an error, the fee payment is rejected, otherwise it is accepted. + // The FeeAllowance implementation is expected to update it's internal state + // and will be saved again after an acceptance. + // + // If remove is true (regardless of the error), the FeeAllowance will be deleted from storage + // (eg. when it is used up). (See call to RevokeFeeAllowance in Keeper.UseGrantedFees) + Accept(ctx sdk.Context, fee sdk.Coins, msgs []sdk.Msg) (remove bool, err error) + + // ValidateBasic should evaluate this FeeAllowance for internal consistency. + // Don't allow negative amounts, or negative periods for example. + ValidateBasic() error +} +``` + +Two basic fee allowance types, `BasicAllowance` and `PeriodicAllowance` are defined to support known use cases: + +```proto +// BasicAllowance implements FeeAllowanceI with a one-time grant of tokens +// that optionally expires. The delegatee can use up to SpendLimit to cover fees. +message BasicAllowance { + // spend_limit specifies the maximum amount of tokens that can be spent + // by this allowance and will be updated as tokens are spent. If it is + // empty, there is no spend limit and any amount of coins can be spent. + repeated cosmos_sdk.v1.Coin spend_limit = 1; + + // expiration specifies an optional time when this allowance expires + google.protobuf.Timestamp expiration = 2; +} + +// PeriodicAllowance extends FeeAllowanceI to allow for both a maximum cap, +// as well as a limit per time period. +message PeriodicAllowance { + BasicAllowance basic = 1; + + // period specifies the time duration in which period_spend_limit coins can + // be spent before that allowance is reset + google.protobuf.Duration period = 2; + + // period_spend_limit specifies the maximum number of coins that can be spent + // in the period + repeated cosmos_sdk.v1.Coin period_spend_limit = 3; + + // period_can_spend is the number of coins left to be spent before the period_reset time + repeated cosmos_sdk.v1.Coin period_can_spend = 4; + + // period_reset is the time at which this period resets and a new one begins, + // it is calculated from the start time of the first transaction after the + // last period ended + google.protobuf.Timestamp period_reset = 5; +} + +``` + +Allowances can be granted and revoked using `MsgGrantAllowance` and `MsgRevokeAllowance`: + +```proto +// MsgGrantAllowance adds permission for Grantee to spend up to Allowance +// of fees from the account of Granter. +message MsgGrantAllowance { + string granter = 1; + string grantee = 2; + google.protobuf.Any allowance = 3; + } + + // MsgRevokeAllowance removes any existing FeeAllowance from Granter to Grantee. + message MsgRevokeAllowance { + string granter = 1; + string grantee = 2; + } +``` + +In order to use allowances in transactions, we add a new field `granter` to the transaction `Fee` type: + +```proto +package cosmos.tx.v1beta1; + +message Fee { + repeated cosmos.base.v1beta1.Coin amount = 1; + uint64 gas_limit = 2; + string payer = 3; + string granter = 4; +} +``` + +`granter` must either be left empty or must correspond to an account which has granted +a fee allowance to fee payer (either the first signer or the value of the `payer` field). + +A new `AnteDecorator` named `DeductGrantedFeeDecorator` will be created in order to process transactions with `fee_payer` +set and correctly deduct fees based on fee allowances. + +## Consequences + +### Positive + +- improved UX for use cases where it is cumbersome to maintain an account balance just for fees + +### Negative + +### Neutral + +- a new field must be added to the transaction `Fee` message and a new `AnteDecorator` must be +created to use it + +## References + +- Blog article describing initial work: https://medium.com/regen-network/hacking-the-cosmos-cosmwasm-and-key-management-a08b9f561d1b +- Initial public specification: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56 +- Original subkeys proposal from B-harvest which influenced this design: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-030-authz-module.md b/versioned_docs/version-0.45/integrate/architecture/adr-030-authz-module.md new file mode 100644 index 000000000..eccbabf16 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-030-authz-module.md @@ -0,0 +1,249 @@ +# ADR 030: Authorization Module + +## Changelog + +- 2019-11-06: Initial Draft +- 2020-10-12: Updated Draft +- 2020-11-13: Accepted +- 2020-05-06: proto API updates, use `sdk.Msg` instead of `sdk.ServiceMsg` (the latter concept was removed from SDK) + +## Status + +Accepted + +## Abstract + +This ADR defines the `x/authz` module which allows accounts to grant authorizations to perform actions +on behalf of that account to other accounts. + +## Context + +The concrete use cases which motivated this module include: + +- the desire to delegate the ability to vote on proposals to other accounts besides the account which one has +delegated stake +- "sub-keys" functionality, as originally proposed in [\#4480](https://github.com/cosmos/cosmos-sdk/issues/4480) which +is a term used to describe the functionality provided by this module together with +the `fee_grant` module from [ADR 029](./adr-029-fee-grant-module.md) and the [group module](https://github.com/regen-network/cosmos-modules/tree/master/incubator/group). + +The "sub-keys" functionality roughly refers to the ability for one account to grant some subset of its capabilities to +other accounts with possibly less robust, but easier to use security measures. For instance, a master account representing +an organization could grant the ability to spend small amounts of the organization's funds to individual employee accounts. +Or an individual (or group) with a multisig wallet could grant the ability to vote on proposals to any one of the member +keys. + +The current +implementation is based on work done by the [Gaian's team at Hackatom Berlin 2019](https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation). + +## Decision + +We will create a module named `authz` which provides functionality for +granting arbitrary privileges from one account (the _granter_) to another account (the _grantee_). Authorizations +must be granted for a particular `Msg` service methods one by one using an implementation +of `Authorization` interface. + +### Types + +Authorizations determine exactly what privileges are granted. They are extensible +and can be defined for any `Msg` service method even outside of the module where +the `Msg` method is defined. `Authorization`s reference `Msg`s using their TypeURL. + +#### Authorization + +```go +type Authorization interface { + proto.Message + + // MsgTypeURL returns the fully-qualified Msg TypeURL (as described in ADR 020), + // which will process and accept or reject a request. + MsgTypeURL() string + + // Accept determines whether this grant permits the provided sdk.Msg to be performed, and if + // so provides an upgraded authorization instance. + Accept(ctx sdk.Context, msg sdk.Msg) (AcceptResponse, error) + + // ValidateBasic does a simple validation check that + // doesn't require access to any other information. + ValidateBasic() error +} + +// AcceptResponse instruments the controller of an authz message if the request is accepted +// and if it should be updated or deleted. +type AcceptResponse struct { + // If Accept=true, the controller can accept and authorization and handle the update. + Accept bool + // If Delete=true, the controller must delete the authorization object and release + // storage resources. + Delete bool + // Controller, who is calling Authorization.Accept must check if `Updated != nil`. If yes, + // it must use the updated version and handle the update on the storage level. + Updated Authorization +} +``` + +For example a `SendAuthorization` like this is defined for `MsgSend` that takes +a `SpendLimit` and updates it down to zero: + +```go +type SendAuthorization struct { + // SpendLimit specifies the maximum amount of tokens that can be spent + // by this authorization and will be updated as tokens are spent. If it is + // empty, there is no spend limit and any amount of coins can be spent. + SpendLimit sdk.Coins +} + +func (a SendAuthorization) MsgTypeURL() string { + return sdk.MsgTypeURL(&MsgSend{}) +} + +func (a SendAuthorization) Accept(ctx sdk.Context, msg sdk.Msg) (authz.AcceptResponse, error) { + mSend, ok := msg.(*MsgSend) + if !ok { + return authz.AcceptResponse{}, sdkerrors.ErrInvalidType.Wrap("type mismatch") + } + limitLeft, isNegative := a.SpendLimit.SafeSub(mSend.Amount) + if isNegative { + return authz.AcceptResponse{}, sdkerrors.ErrInsufficientFunds.Wrapf("requested amount is more than spend limit") + } + if limitLeft.IsZero() { + return authz.AcceptResponse{Accept: true, Delete: true}, nil + } + + return authz.AcceptResponse{Accept: true, Delete: false, Updated: &SendAuthorization{SpendLimit: limitLeft}}, nil +} +``` + +A different type of capability for `MsgSend` could be implemented +using the `Authorization` interface with no need to change the underlying +`bank` module. + +### `Msg` Service + +```proto +service Msg { + // Grant grants the provided authorization to the grantee on the granter's + // account with the provided expiration time. + rpc Grant(MsgGrant) returns (MsgGrantResponse); + + // Exec attempts to execute the provided messages using + // authorizations granted to the grantee. Each message should have only + // one signer corresponding to the granter of the authorization. + rpc Exec(MsgExec) returns (MsgExecResponse); + + // Revoke revokes any authorization corresponding to the provided method name on the + // granter's account that has been granted to the grantee. + rpc Revoke(MsgRevoke) returns (MsgRevokeResponse); +} + +// Grant gives permissions to execute +// the provided method with expiration time. +message Grant { + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "Authorization"]; + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; +} + +message MsgGrant { + string granter = 1; + string grantee = 2; + + Grant grant = 3 [(gogoproto.nullable) = false]; +} + +message MsgExecResponse { + cosmos.base.abci.v1beta1.Result result = 1; +} + +message MsgExec { + string grantee = 1; + // Authorization Msg requests to execute. Each msg must implement Authorization interface + repeated google.protobuf.Any msgs = 2 [(cosmos_proto.accepts_interface) = "sdk.Msg"];; +} +``` + +### Router Middleware + +The `authz` `Keeper` will expose a `DispatchActions` method which allows other modules to send `Msg`s +to the router based on `Authorization` grants: + +```go +type Keeper interface { + // DispatchActions routes the provided msgs to their respective handlers if the grantee was granted an authorization + // to send those messages by the first (and only) signer of each msg. + DispatchActions(ctx sdk.Context, grantee sdk.AccAddress, msgs []sdk.Msg) sdk.Result` +} +``` + +### CLI + +#### `tx exec` Method + +When a CLI user wants to run a transaction on behalf of another account using `MsgExec`, they +can use the `exec` method. For instance `gaiacli tx gov vote 1 yes --from --generate-only | gaiacli tx authz exec --send-as --from ` +would send a transaction like this: + +```go +MsgExec { + Grantee: mykey, + Msgs: []sdk.Msg{ + MsgVote { + ProposalID: 1, + Voter: cosmos3thsdgh983egh823 + Option: Yes + } + } +} +``` + +#### `tx grant --from ` + +This CLI command will send a `MsgGrant` transaction. `authorization` should be encoded as +JSON on the CLI. + +#### `tx revoke --from ` + +This CLI command will send a `MsgRevoke` transaction. + +### Built-in Authorizations + +#### `SendAuthorization` + +```proto +// SendAuthorization allows the grantee to spend up to spend_limit coins from +// the granter's account. +message SendAuthorization { + repeated cosmos.base.v1beta1.Coin spend_limit = 1; +} +``` + +#### `GenericAuthorization` + +```proto +// GenericAuthorization gives the grantee unrestricted permissions to execute +// the provided method on behalf of the granter's account. +message GenericAuthorization { + option (cosmos_proto.implements_interface) = "Authorization"; + + // Msg, identified by it's type URL, to grant unrestricted permissions to execute + string msg = 1; +} +``` + +## Consequences + +### Positive + +- Users will be able to authorize arbitrary actions on behalf of their accounts to other +users, improving key management for many use cases +- The solution is more generic than previously considered approaches and the +`Authorization` interface approach can be extended to cover other use cases by +SDK users + +### Negative + +### Neutral + +## References + +- Initial Hackatom implementation: https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation +- Post-Hackatom spec: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#delegation-module +- B-Harvest subkeys spec: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-031-msg-service.md b/versioned_docs/version-0.45/integrate/architecture/adr-031-msg-service.md new file mode 100644 index 000000000..e11813c73 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-031-msg-service.md @@ -0,0 +1,202 @@ +# ADR 031: Protobuf Msg Services + +## Changelog + +- 2020-10-05: Initial Draft +- 2021-04-21: Remove `ServiceMsg`s to follow Protobuf `Any`'s spec, see [#9063](https://github.com/cosmos/cosmos-sdk/issues/9063). + +## Status + +Accepted + +## Abstract + +We want to leverage protobuf `service` definitions for defining `Msg`s which will give us significant developer UX +improvements in terms of the code that is generated and the fact that return types will now be well defined. + +## Context + +Currently `Msg` handlers in the Cosmos SDK do have return values that are placed in the `data` field of the response. +These return values, however, are not specified anywhere except in the golang handler code. + +In early conversations [it was proposed](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc/edit) +that `Msg` return types be captured using a protobuf extension field, ex: + +```protobuf +package cosmos.gov; + +message MsgSubmitProposal + option (cosmos_proto.msg_return) = “uint64”; + string delegator_address = 1; + string validator_address = 2; + repeated sdk.Coin amount = 3; +} +``` + +This was never adopted, however. + +Having a well-specified return value for `Msg`s would improve client UX. For instance, +in `x/gov`, `MsgSubmitProposal` returns the proposal ID as a big-endian `uint64`. +This isn’t really documented anywhere and clients would need to know the internals +of the SDK to parse that value and return it to users. + +Also, there may be cases where we want to use these return values programatically. +For instance, https://github.com/cosmos/cosmos-sdk/issues/7093 proposes a method for +doing inter-module Ocaps using the `Msg` router. A well-defined return type would +improve the developer UX for this approach. + +In addition, handler registration of `Msg` types tends to add a bit of +boilerplate on top of keepers and is usually done through manual type switches. +This isn't necessarily bad, but it does add overhead to creating modules. + +## Decision + +We decide to use protobuf `service` definitions for defining `Msg`s as well as +the code generated by them as a replacement for `Msg` handlers. + +Below we define how this will look for the `SubmitProposal` message from `x/gov` module. +We start with a `Msg` `service` definition: + +```proto +package cosmos.gov; + +service Msg { + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); +} + +// Note that for backwards compatibility this uses MsgSubmitProposal as the request +// type instead of the more canonical MsgSubmitProposalRequest +message MsgSubmitProposal { + google.protobuf.Any content = 1; + string proposer = 2; +} + +message MsgSubmitProposalResponse { + uint64 proposal_id; +} +``` + +While this is most commonly used for gRPC, overloading protobuf `service` definitions like this does not violate +the intent of the [protobuf spec](https://developers.google.com/protocol-buffers/docs/proto3#services) which says: +> If you don’t want to use gRPC, it’s also possible to use protocol buffers with your own RPC implementation. +With this approach, we would get an auto-generated `MsgServer` interface: + +In addition to clearly specifying return types, this has the benefit of generating client and server code. On the server +side, this is almost like an automatically generated keeper method and could maybe be used intead of keepers eventually +(see [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093)): + +```go +package gov + +type MsgServer interface { + SubmitProposal(context.Context, *MsgSubmitProposal) (*MsgSubmitProposalResponse, error) +} +``` + +On the client side, developers could take advantage of this by creating RPC implementations that encapsulate transaction +logic. Protobuf libraries that use asynchronous callbacks, like [protobuf.js](https://github.com/protobufjs/protobuf.js#using-services) +could use this to register callbacks for specific messages even for transactions that include multiple `Msg`s. + +Each `Msg` service method should have exactly one request parameter: its corresponding `Msg` type. For example, the `Msg` service method `/cosmos.gov.v1beta1.Msg/SubmitProposal` above has exactly one request parameter, namely the `Msg` type `/cosmos.gov.v1beta1.MsgSubmitProposal`. It is important the reader understands clearly the nomenclature difference between a `Msg` service (a Protobuf service) and a `Msg` type (a Protobuf message), and the differences in their fully-qualified name. + +This convention has been decided over the more canonical `Msg...Request` names mainly for backwards compatibility, but also for better readability in `TxBody.messages` (see [Encoding section](#encoding) below): transactions containing `/cosmos.gov.MsgSubmitProposal` read better than those containing `/cosmos.gov.v1beta1.MsgSubmitProposalRequest`. + +One consequence of this convention is that each `Msg` type can be the request parameter of only one `Msg` service method. However, we consider this limitation a good practice in explicitness. + +### Encoding + +Encoding of transactions generated with `Msg` services do not differ from current Protobuf transaction encoding as defined in [ADR-020](./adr-020-protobuf-transaction-encoding.md). We are encoding `Msg` types (which are exactly `Msg` service methods' request parameters) as `Any` in `Tx`s which involves packing the +binary-encoded `Msg` with its type URL. + +### Decoding + +Since `Msg` types are packed into `Any`, decoding transactions messages are done by unpacking `Any`s into `Msg` types. For more information, please refer to [ADR-020](./adr-020-protobuf-transaction-encoding.md#transactions). + +### Routing + +We propose to add a `msg_service_router` in BaseApp. This router is a key/value map which maps `Msg` types' `type_url`s to their corresponding `Msg` service method handler. Since there is a 1-to-1 mapping between `Msg` types and `Msg` service method, the `msg_service_router` has exactly one entry per `Msg` service method. + +When a transaction is processed by BaseApp (in CheckTx or in DeliverTx), its `TxBody.messages` are decoded as `Msg`s. Each `Msg`'s `type_url` is matched against an entry in the `msg_service_router`, and the respective `Msg` service method handler is called. + +For backward compatability, the old handlers are not removed yet. If BaseApp receives a legacy `Msg` with no correspoding entry in the `msg_service_router`, it will be routed via its legacy `Route()` method into the legacy handler. + +### Module Configuration + +In [ADR 021](./adr-021-protobuf-query-encoding.md), we introduced a method `RegisterQueryService` +to `AppModule` which allows for modules to register gRPC queriers. + +To register `Msg` services, we attempt a more extensible approach by converting `RegisterQueryService` +to a more generic `RegisterServices` method: + +```go +type AppModule interface { + RegisterServices(Configurator) + ... +} + +type Configurator interface { + QueryServer() grpc.Server + MsgServer() grpc.Server +} + +// example module: +func (am AppModule) RegisterServices(cfg Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper) +} +``` + +The `RegisterServices` method and the `Configurator` interface are intended to +evolve to satisfy the use cases discussed in [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) +and [\#7122](https://github.com/cosmos/cosmos-sdk/issues/7421). + +When `Msg` services are registered, the framework _should_ verify that all `Msg` types +implement the `sdk.Msg` interface and throw an error during initialization rather +than later when transactions are processed. + +### `Msg` Service Implementation + +Just like query services, `Msg` service methods can retrieve the `sdk.Context` +from the `context.Context` parameter method using the `sdk.UnwrapSDKContext` +method: + +```go +package gov + +func (k Keeper) SubmitProposal(goCtx context.Context, params *types.MsgSubmitProposal) (*MsgSubmitProposalResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + ... +} +``` + +The `sdk.Context` should have an `EventManager` already attached by BaseApp's `msg_service_router`. + +Separate handler definition is no longer needed with this approach. + +## Consequences + +This design changes how a module functionality is exposed and accessed. It deprecates the existing `Handler` interface and `AppModule.Route` in favor of [Protocol Buffer Services](https://developers.google.com/protocol-buffers/docs/proto3#services) and Service Routing described above. This dramatically simplifies the code. We don't need to create handlers and keepers any more. Use of Protocol Buffer auto-generated clients clearly separates the communication interfaces between the module and a modules user. The control logic (aka handlers and keepers) is not exposed any more. A module interface can be seen as a black box accessible through a client API. It's worth to note that the client interfaces are also generated by Protocol Buffers. + +This also allows us to change how we perform functional tests. Instead of mocking AppModules and Router, we will mock a client (server will stay hidden). More specifically: we will never mock `moduleA.MsgServer` in `moduleB`, but rather `moduleA.MsgClient`. One can think about it as working with external services (eg DBs, or online servers...). We assume that the transmission between clients and servers is correctly handled by generated Protocol Buffers. + +Finally, closing a module to client API opens desirable OCAP patterns discussed in ADR-033. Since server implementation and interface is hidden, nobody can hold "keepers"/servers and will be forced to relay on the client interface, which will drive developers for correct encapsulation and software engineering patterns. + +### Pros + +- communicates return type clearly +- manual handler registration and return type marshaling is no longer needed, just implement the interface and register it +- communication interface is automatically generated, the developer can now focus only on the state transition methods - this would improve the UX of [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) approach (1) if we chose to adopt that +- generated client code could be useful for clients and tests +- dramatically reduces and simplifies the code + +### Cons + +- using `service` definitions outside the context of gRPC could be confusing (but doesn’t violate the proto3 spec) + +## References + +- [Initial Github Issue \#7122](https://github.com/cosmos/cosmos-sdk/issues/7122) +- [proto 3 Language Guide: Defining Services](https://developers.google.com/protocol-buffers/docs/proto3#services) +- [Initial pre-`Any` `Msg` designs](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc) +- [ADR 020](./adr-020-protobuf-transaction-encoding.md) +- [ADR 021](./adr-021-protobuf-query-encoding.md) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-032-typed-events.md b/versioned_docs/version-0.45/integrate/architecture/adr-032-typed-events.md new file mode 100644 index 000000000..a85126b72 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-032-typed-events.md @@ -0,0 +1,319 @@ +# ADR 032: Typed Events + +## Changelog + +- 28-Sept-2020: Initial Draft + +## Authors + +- Anil Kumar (@anilcse) +- Jack Zampolin (@jackzampolin) +- Adam Bozanich (@boz) + +## Status + +Proposed + +## Abstract + +Currently in the SDK, events are defined in the handlers for each message as well as `BeginBlock` and `EndBlock`. Each module doesn't have types defined for each event, they are implemented as `map[string]string`. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +## Context + +Currently in the SDK, events are defined in the handlers for each message, meaning each module doesn't have a cannonical set of types for each event. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +[Our platform](http://github.com/ovrclk/akash) requires a number of programatic on chain interactions both on the provider (datacenter - to bid on new orders and listen for leases created) and user (application developer - to send the app manifest to the provider) side. In addition the Akash team is now maintaining the IBC [`relayer`](https://github.com/ovrclk/relayer), another very event driven process. In working on these core pieces of infrastructure, and integrating lessons learned from Kubernetes developement, our team has developed a standard method for defining and consuming typed events in SDK modules. We have found that it is extremely useful in building this type of event driven application. + +As the SDK gets used more extensively for apps like `peggy`, other peg zones, IBC, DeFi, etc... there will be an exploding demand for event driven applications to support new features desired by users. We propose upstreaming our findings into the SDK to enable all SDK applications to quickly and easily build event driven apps to aid their core application. Wallets, exchanges, explorers, and defi protocols all stand to benefit from this work. + +If this proposal is accepted, users will be able to build event driven SDK apps in go by just writing `EventHandler`s for their specific event types and passing them to `EventEmitters` that are defined in the SDK. + +The end of this proposal contains a detailed example of how to consume events after this refactor. + +This proposal is specifically about how to consume these events as a client of the blockchain, not for intermodule communication. + +## Decision + +__Step-1__: Implement additional functionality in the `types` package: `EmitTypedEvent` and `ParseTypedEvent` functions + +```go +// types/events.go + +// EmitTypedEvent takes typed event and emits converting it into sdk.Event +func (em *EventManager) EmitTypedEvent(event proto.Message) error { + evtType := proto.MessageName(event) + evtJSON, err := codec.ProtoMarshalJSON(event) + if err != nil { + return err + } + + var attrMap map[string]json.RawMessage + err = json.Unmarshal(evtJSON, &attrMap) + if err != nil { + return err + } + + var attrs []abci.EventAttribute + for k, v := range attrMap { + attrs = append(attrs, abci.EventAttribute{ + Key: []byte(k), + Value: v, + }) + } + + em.EmitEvent(Event{ + Type: evtType, + Attributes: attrs, + }) + + return nil +} + +// ParseTypedEvent converts abci.Event back to typed event +func ParseTypedEvent(event abci.Event) (proto.Message, error) { + concreteGoType := proto.MessageType(event.Type) + if concreteGoType == nil { + return nil, fmt.Errorf("failed to retrieve the message of type %q", event.Type) + } + + var value reflect.Value + if concreteGoType.Kind() == reflect.Ptr { + value = reflect.New(concreteGoType.Elem()) + } else { + value = reflect.Zero(concreteGoType) + } + + protoMsg, ok := value.Interface().(proto.Message) + if !ok { + return nil, fmt.Errorf("%q does not implement proto.Message", event.Type) + } + + attrMap := make(map[string]json.RawMessage) + for _, attr := range event.Attributes { + attrMap[string(attr.Key)] = attr.Value + } + + attrBytes, err := json.Marshal(attrMap) + if err != nil { + return nil, err + } + + err = jsonpb.Unmarshal(strings.NewReader(string(attrBytes)), protoMsg) + if err != nil { + return nil, err + } + + return protoMsg, nil +} +``` + +Here, the `EmitTypedEvent` is a method on `EventManager` which takes typed event as input and apply json serialization on it. Then it maps the JSON key/value pairs to `event.Attributes` and emits it in form of `sdk.Event`. `Event.Type` will be the type URL of the proto message. + +When we subscribe to emitted events on the tendermint websocket, they are emitted in the form of an `abci.Event`. `ParseTypedEvent` parses the event back to it's original proto message. + +__Step-2__: Add proto definitions for typed events for msgs in each module: + +For example, let's take `MsgSubmitProposal` of `gov` module and implement this event's type. + +```protobuf +// proto/cosmos/gov/v1beta1/gov.proto +// Add typed event definition + +package cosmos.gov.v1beta1; + +message EventSubmitProposal { + string from_address = 1; + uint64 proposal_id = 2; + TextProposal proposal = 3; +} +``` + +__Step-3__: Refactor event emission to use the typed event created and emit using `sdk.EmitTypedEvent`: + +```go +// x/gov/handler.go +func handleMsgSubmitProposal(ctx sdk.Context, keeper keeper.Keeper, msg types.MsgSubmitProposalI) (*sdk.Result, error) { + ... + types.Context.EventManager().EmitTypedEvent( + &EventSubmitProposal{ + FromAddress: fromAddress, + ProposalId: id, + Proposal: proposal, + }, + ) + ... +} +``` + +#### How to subscribe to these typed events in `Client` + +> NOTE: Full code example below + +Users will be able to subscribe using `client.Context.Client.Subscribe` and consume events which are emitted using `EventHandler`s. + +Akash Network has built a simple [`pubsub`](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/pubsub/bus.go#L20). This can be used to subscribe to `abci.Events` and [publish](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L21) them as typed events. + +Please see the below code sample for more detail on this flow looks for clients. + +## Consequences + +### Positive + +* Improves consistency of implementation for the events currently in the sdk +* Provides a much more ergonomic way to handle events and facilitates writing event driven applications +* This implementation will support a middleware ecosystem of `EventHandler`s + +### Negative + +## Detailed code example of publishing events + +This ADR also proposes adding affordances to emit and consume these events. This way developers will only need to write +`EventHandler`s which define the actions they desire to take. + +```go +// EventEmitter is a type that describes event emitter functions +// This should be defined in `types/events.go` +type EventEmitter func(context.Context, client.Context, ...EventHandler) error + +// EventHandler is a type of function that handles events coming out of the event bus +// This should be defined in `types/events.go` +type EventHandler func(proto.Message) error + +// Sample use of the functions below +func main() { + ctx, cancel := context.WithCancel(context.Background()) + + if err := TxEmitter(ctx, client.Context{}.WithNodeURI("tcp://localhost:26657"), SubmitProposalEventHandler); err != nil { + cancel() + panic(err) + } + + return +} + +// SubmitProposalEventHandler is an example of an event handler that prints proposal details +// when any EventSubmitProposal is emitted. +func SubmitProposalEventHandler(ev proto.Message) (err error) { + switch event := ev.(type) { + // Handle governance proposal events creation events + case govtypes.EventSubmitProposal: + // Users define business logic here e.g. + fmt.Println(ev.FromAddress, ev.ProposalId, ev.Proposal) + return nil + default: + return nil + } +} + +// TxEmitter is an example of an event emitter that emits just transaction events. This can and +// should be implemented somewhere in the SDK. The SDK can include an EventEmitters for tm.event='Tx' +// and/or tm.event='NewBlock' (the new block events may contain typed events) +func TxEmitter(ctx context.Context, cliCtx client.Context, ehs ...EventHandler) (err error) { + // Instantiate and start tendermint RPC client + client, err := cliCtx.GetNode() + if err != nil { + return err + } + + if err = client.Start(); err != nil { + return err + } + + // Start the pubsub bus + bus := pubsub.NewBus() + defer bus.Close() + + // Initialize a new error group + eg, ctx := errgroup.WithContext(ctx) + + // Publish chain events to the pubsub bus + eg.Go(func() error { + return PublishChainTxEvents(ctx, client, bus, simapp.ModuleBasics) + }) + + // Subscribe to the bus events + subscriber, err := bus.Subscribe() + if err != nil { + return err + } + + // Handle all the events coming out of the bus + eg.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + return nil + case <-subscriber.Done(): + return nil + case ev := <-subscriber.Events(): + for _, eh := range ehs { + if err = eh(ev); err != nil { + break + } + } + } + } + return nil + }) + + return group.Wait() +} + +// PublishChainTxEvents events using tmclient. Waits on context shutdown signals to exit. +func PublishChainTxEvents(ctx context.Context, client tmclient.EventsClient, bus pubsub.Bus, mb module.BasicManager) (err error) { + // Subscribe to transaction events + txch, err := client.Subscribe(ctx, "txevents", "tm.event='Tx'", 100) + if err != nil { + return err + } + + // Unsubscribe from transaction events on function exit + defer func() { + err = client.UnsubscribeAll(ctx, "txevents") + }() + + // Use errgroup to manage concurrency + g, ctx := errgroup.WithContext(ctx) + + // Publish transaction events in a goroutine + g.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + break + case ed := <-ch: + switch evt := ed.Data.(type) { + case tmtypes.EventDataTx: + if !evt.Result.IsOK() { + continue + } + // range over events, parse them using the basic manager and + // send them to the pubsub bus + for _, abciEv := range events { + typedEvent, err := sdk.ParseTypedEvent(abciEv) + if err != nil { + return er + } + if err := bus.Publish(typedEvent); err != nil { + bus.Close() + return + } + continue + } + } + } + } + return err + }) + + // Exit on error or context cancelation + return g.Wait() +} +``` + +## References + +- [Publish Custom Events via a bus](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L19-L58) +- [Consuming the events in `Client`](https://github.com/ovrclk/deploy/blob/bf6c633ab6c68f3026df59efd9982d6ca1bf0561/cmd/event-handlers.go#L57) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-033-protobuf-inter-module-comm.md b/versioned_docs/version-0.45/integrate/architecture/adr-033-protobuf-inter-module-comm.md new file mode 100644 index 000000000..6234c3d10 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-033-protobuf-inter-module-comm.md @@ -0,0 +1,400 @@ +# ADR 033: Protobuf-based Inter-Module Communication + +## Changelog + +- 2020-10-05: Initial Draft + +## Status + +Proposed + +## Abstract + +This ADR introduces a system for permissioned inter-module communication leveraging the protobuf `Query` and `Msg` +service definitions defined in [ADR 021](./adr-021-protobuf-query-encoding.md) and +[ADR 031](./adr-031-msg-service.md) which provides: + +- stable protobuf based module interfaces to potentially later replace the keeper paradigm +- stronger inter-module object capabilities (OCAPs) guarantees +- module accounts and sub-account authorization + +## Context + +In the current Cosmos SDK documentation on the [Object-Capability Model](../core/ocap.md), it is stated that: + +> We assume that a thriving ecosystem of Cosmos-SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +There is currently not a thriving ecosystem of Cosmos SDK modules. We hypothesize that this is in part due to: + +1. lack of a stable v1.0 Cosmos SDK to build modules off of. Module interfaces are changing, sometimes dramatically, from +point release to point release, often for good reasons, but this does not create a stable foundation to build on. +2. lack of a properly implemented object capability or even object-oriented encapsulation system which makes refactors +of module keeper interfaces inevitable because the current interfaces are poorly constrained. + +### `x/bank` Case Study + +Currently the `x/bank` keeper gives pretty much unrestricted access to any module which references it. For instance, the +`SetBalance` method allows the caller to set the balance of any account to anything, bypassing even proper tracking of supply. + +There appears to have been some later attempts to implement some semblance of OCAPs using module-level minting, staking +and burning permissions. These permissions allow a module to mint, burn or delegate tokens with reference to the module’s +own account. These permissions are actually stored as a `[]string` array on the `ModuleAccount` type in state. + +However, these permissions don’t really do much. They control what modules can be referenced in the `MintCoins`, +`BurnCoins` and `DelegateCoins***` methods, but for one there is no unique object capability token that controls access — +just a simple string. So the `x/upgrade` module could mint tokens for the `x/staking` module simple by calling +`MintCoins(“staking”)`. Furthermore, all modules which have access to these keeper methods, also have access to +`SetBalance` negating any other attempt at OCAPs and breaking even basic object-oriented encapsulation. + +## Decision + +Based on [ADR-021](./adr-021-protobuf-query-encoding.md) and [ADR-031](./adr-031-msg-service.md), we introduce the +Inter-Module Communication framework for secure module authorization and OCAPs. +When implemented, this could also serve as an alternative to the existing paradigm of passing keepers between +modules. The approach outlined here-in is intended to form the basis of a Cosmos SDK v1.0 that provides the necessary +stability and encapsulation guarantees that allow a thriving module ecosystem to emerge. + +Of particular note — the decision is to _enable_ this functionality for modules to adopt at their own discretion. +Proposals to migrate existing modules to this new paradigm will have to be a separate conversation, potentially +addressed as amendments to this ADR. + +### New "Keeper" Paradigm + +In [ADR 021](./adr-021-protobuf-query-encoding.md), a mechanism for using protobuf service definitions to define queriers +was introduced and in [ADR 31](./adr-031-msg-service.md), a mechanism for using protobuf service to define `Msg`s was added. +Protobuf service definitions generate two golang interfaces representing the client and server sides of a service plus +some helper code. Here is a minimal example for the bank `cosmos.bank.Msg/Send` message type: + +```go +package bank + +type MsgClient interface { + Send(context.Context, *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) +} + +type MsgServer interface { + Send(context.Context, *MsgSend) (*MsgSendResponse, error) +} +``` + +[ADR 021](./adr-021-protobuf-query-encoding.md) and [ADR 31](./adr-031-msg-service.md) specifies how modules can implement the generated `QueryServer` +and `MsgServer` interfaces as replacements for the legacy queriers and `Msg` handlers respectively. + +In this ADR we explain how modules can make queries and send `Msg`s to other modules using the generated `QueryClient` +and `MsgClient` interfaces and propose this mechanism as a replacement for the existing `Keeper` paradigm. To be clear, +this ADR does not necessitate the creation of new protobuf definitions or services. Rather, it leverages the same proto +based service interfaces already used by clients for inter-module communication. + +Using this `QueryClient`/`MsgClient` approach has the following key benefits over exposing keepers to external modules: + +1. Protobuf types are checked for breaking changes using [buf](https://buf.build/docs/breaking-overview) and because of +the way protobuf is designed this will give us strong backwards compatibility guarantees while allowing for forward +evolution. +2. The separation between the client and server interfaces will allow us to insert permission checking code in between +the two which checks if one module is authorized to send the specified `Msg` to the other module providing a proper +object capability system (see below). +3. The router for inter-module communication gives us a convenient place to handle rollback of transactions, +enabling atomicy of operations ([currently a problem](https://github.com/cosmos/cosmos-sdk/issues/8030)). Any failure within a module-to-module call would result in a failure of the entire +transaction + +This mechanism has the added benefits of: + +- reducing boilerplate through code generation, and +- allowing for modules in other languages either via a VM like CosmWasm or sub-processes using gRPC + +### Inter-module Communication + +To use the `Client` generated by the protobuf compiler we need a `grpc.ClientConn` [interface](https://github.com/regen-network/protobuf/blob/cosmos/grpc/types.go#L12) +implementation. For this we introduce +a new type, `ModuleKey`, which implements the `grpc.ClientConn` interface. `ModuleKey` can be thought of as the "private +key" corresponding to a module account, where authentication is provided through use of a special `Invoker()` function, +described in more detail below. + +Blockchain users (external clients) use their account's private key to sign transactions containing `Msg`s where they are listed as signers (each +message specifies required signers with `Msg.GetSigner`). The authentication checks is performed by `AnteHandler`. + +Here, we extend this process, by allowing modules to be identified in `Msg.GetSigners`. When a module wants to trigger the execution a `Msg` in another module, +its `ModuleKey` acts as the sender (through the `ClientConn` interface we describe below) and is set as a sole "signer". It's worth to note +that we don't use any cryptographic signature in this case. +For example, module `A` could use its `A.ModuleKey` to create `MsgSend` object for `/cosmos.bank.Msg/Send` transaction. `MsgSend` validation +will assure that the `from` account (`A.ModuleKey` in this case) is the signer. + +Here's an example of a hypothetical module `foo` interacting with `x/bank`: + +```go +package foo + + +type FooMsgServer { + // ... + + bankQuery bank.QueryClient + bankMsg bank.MsgClient +} + +func NewFooMsgServer(moduleKey RootModuleKey, ...) FooMsgServer { + // ... + + return FooMsgServer { + // ... + modouleKey: moduleKey, + bankQuery: bank.NewQueryClient(moduleKey), + bankMsg: bank.NewMsgClient(moduleKey), + } +} + +func (foo *FooMsgServer) Bar(ctx context.Context, req *MsgBarRequest) (*MsgBarResponse, error) { + balance, err := foo.bankQuery.Balance(&bank.QueryBalanceRequest{Address: fooMsgServer.moduleKey.Address(), Denom: "foo"}) + + ... + + res, err := foo.bankMsg.Send(ctx, &bank.MsgSendRequest{FromAddress: fooMsgServer.moduleKey.Address(), ...}) + + ... +} +``` + +This design is also intended to be extensible to cover use cases of more fine grained permissioning like minting by +denom prefix being restricted to certain modules (as discussed in +[#7459](https://github.com/cosmos/cosmos-sdk/pull/7459#discussion_r529545528)). + +### `ModuleKey`s and `ModuleID`s + +A `ModuleKey` can be thought of as a "private key" for a module account and a `ModuleID` can be thought of as the +corresponding "public key". From the [ADR 028](./adr-028-public-key-addresses.md), modules can have both a root module account and any number of sub-accounts +or derived accounts that can be used for different pools (ex. staking pools) or managed accounts (ex. group +accounts). We can also think of module sub-accounts as similar to derived keys - there is a root key and then some +derivation path. `ModuleID` is a simple struct which contains the module name and optional "derivation" path, +and forms its address based on the `AddressHash` method from [the ADR-028](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-028-public-key-addresses.md): + +```go +type ModuleID struct { + ModuleName string + Path []byte +} + +func (key ModuleID) Address() []byte { + return AddressHash(key.ModuleName, key.Path) +} +``` + +In addition to being able to generate a `ModuleID` and address, a `ModuleKey` contains a special function called +`Invoker` which is the key to safe inter-module access. The `Invoker` creates an `InvokeFn` closure which is used as an `Invoke` method in +the `grpc.ClientConn` interface and under the hood is able to route messages to the appropriate `Msg` and `Query` handlers +performing appropriate security checks on `Msg`s. This allows for even safer inter-module access than keeper's whose +private member variables could be manipulated through reflection. Golang does not support reflection on a function +closure's captured variables and direct manipulation of memory would be needed for a truly malicious module to bypass +the `ModuleKey` security. + +The two `ModuleKey` types are `RootModuleKey` and `DerivedModuleKey`: + +```go +type Invoker func(callInfo CallInfo) func(ctx context.Context, request, response interface{}, opts ...interface{}) error + +type CallInfo { + Method string + Caller ModuleID +} + +type RootModuleKey struct { + moduleName string + invoker Invoker +} + +func (rm RootModuleKey) Derive(path []byte) DerivedModuleKey { /* ... */} + +type DerivedModuleKey struct { + moduleName string + path []byte + invoker Invoker +} +``` + +A module can get access to a `DerivedModuleKey`, using the `Derive(path []byte)` method on `RootModuleKey` and then +would use this key to authenticate `Msg`s from a sub-account. Ex: + +```go +package foo + +func (fooMsgServer *MsgServer) Bar(ctx context.Context, req *MsgBar) (*MsgBarResponse, error) { + derivedKey := fooMsgServer.moduleKey.Derive(req.SomePath) + bankMsgClient := bank.NewMsgClient(derivedKey) + res, err := bankMsgClient.Balance(ctx, &bank.MsgSend{FromAddress: derivedKey.Address(), ...}) + ... +} +``` + +In this way, a module can gain permissioned access to a root account and any number of sub-accounts and send +authenticated `Msg`s from these accounts. The `Invoker` `callInfo.Caller` parameter is used under the hood to +distinguish between different module accounts, but either way the function returned by `Invoker` only allows `Msg`s +from either the root or a derived module account to pass through. + +Note that `Invoker` itself returns a function closure based on the `CallInfo` passed in. This will allow client implementations +in the future that cache the invoke function for each method type avoiding the overhead of hash table lookup. +This would reduce the performance overhead of this inter-module communication method to the bare minimum required for +checking permissions. + +To re-iterate, the closure only allows access to authorized calls. There is no access to anything else regardless of any +name impersonation. + +Below is a rough sketch of the implementation of `grpc.ClientConn.Invoke` for `RootModuleKey`: + +```go +func (key RootModuleKey) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...grpc.CallOption) error { + f := key.invoker(CallInfo {Method: method, Caller: ModuleID {ModuleName: key.moduleName}}) + return f(ctx, args, reply) +} +``` + +### `AppModule` Wiring and Requirements + +In [ADR 031](./adr-031-msg-service.md), the `AppModule.RegisterService(Configurator)` method was introduced. To support +inter-module communication, we extend the `Configurator` interface to pass in the `ModuleKey` and to allow modules to +specify their dependencies on other modules using `RequireServer()`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + + ModuleKey() ModuleKey + RequireServer(msgServer interface{}) +} +``` + +The `ModuleKey` is passed to modules in the `RegisterService` method itself so that `RegisterServices` serves as a single +entry point for configuring module services. This is intended to also have the side-effect of greatly reducing boilerplate in +`app.go`. For now, `ModuleKey`s will be created based on `AppModuleBasic.Name()`, but a more flexible system may be +introduced in the future. The `ModuleManager` will handle creation of module accounts behind the scenes. + +Because modules do not get direct access to each other anymore, modules may have unfulfilled dependencies. To make sure +that module dependencies are resolved at startup, the `Configurator.RequireServer` method should be added. The `ModuleManager` +will make sure that all dependencies declared with `RequireServer` can be resolved before the app starts. An example +module `foo` could declare it's dependency on `x/bank` like this: + +```go +package foo + +func (am AppModule) RegisterServices(cfg Configurator) { + cfg.RequireServer((*bank.QueryServer)(nil)) + cfg.RequireServer((*bank.MsgServer)(nil)) +} +``` + +### Security Considerations + +In addition to checking for `ModuleKey` permissions, a few additional security precautions will need to be taken by +the underlying router infrastructure. + +#### Recursion and Re-entry + +Recursive or re-entrant method invocations pose a potential security threat. This can be a problem if Module A +calls Module B and Module B calls module A again in the same call. + +One basic way for the router system to deal with this is to maintain a call stack which prevents a module from +being referenced more than once in the call stack so that there is no re-entry. A `map[string]interface{}` table +in the router could be used to perform this security check. + +#### Queries + +Queries in Cosmos SDK are generally un-permissioned so allowing one module to query another module should not pose +any major security threats assuming basic precautions are taken. The basic precaution that the router system will +need to take is making sure that the `sdk.Context` passed to query methods does not allow writing to the store. This +can be done for now with a `CacheMultiStore` as is currently done for `BaseApp` queries. + +### Internal Methods + +In many cases, we may wish for modules to call methods on other modules which are not exposed to clients at all. For this +purpose, we add the `InternalServer` method to `Configurator`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + InternalServer() grpc.Server +} +``` + +As an example, x/slashing's Slash must call x/staking's Slash, but we don't want to expose x/staking's Slash to end users +and clients. + +Internal protobuf services will be defined in a corresponding `internal.proto` file in the given module's +proto package. + +Services registered against `InternalServer` will be callable from other modules but not by external clients. + +An alternative solution to internal-only methods could involve hooks / plugins as discussed [here](https://github.com/cosmos/cosmos-sdk/pull/7459#issuecomment-733807753). +A more detailed evaluation of a hooks / plugin system will be addressed later in follow-ups to this ADR or as a separate +ADR. + +### Authorization + +By default, the inter-module router requires that messages are sent by the first signer returned by `GetSigners`. The +inter-module router should also accept authorization middleware such as that provided by [ADR 030](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-030-authz-module.md). +This middleware will allow accounts to otherwise specific module accounts to perform actions on their behalf. +Authorization middleware should take into account the need to grant certain modules effectively "admin" privileges to +other modules. This will be addressed in separate ADRs or updates to this ADR. + +### Future Work + +Other future improvements may include: + +* custom code generation that: + * simplifies interfaces (ex. generates code with `sdk.Context` instead of `context.Context`) + * optimizes inter-module calls - for instance caching resolved methods after first invocation +* combining `StoreKey`s and `ModuleKey`s into a single interface so that modules have a single OCAPs handle +* code generation which makes inter-module communication more performant +* decoupling `ModuleKey` creation from `AppModuleBasic.Name()` so that app's can override root module account names +* inter-module hooks and plugins + +## Alternatives + +### MsgServices vs `x/capability` + +The `x/capability` module does provide a proper object-capability implementation that can be used by any module in the +SDK and could even be used for inter-module OCAPs as described in [\#5931](https://github.com/cosmos/cosmos-sdk/issues/5931). + +The advantages of the approach described in this ADR are mostly around how it integrates with other parts of the SDK, +specifically: + +* protobuf so that: + * code generation of interfaces can be leveraged for a better dev UX + * module interfaces are versioned and checked for breakage using [buf](https://docs.buf.build/breaking-overview) +* sub-module accounts as per ADR 028 +* the general `Msg` passing paradigm and the way signers are specified by `GetSigners` + +Also, this is a complete replacement for keepers and could be applied to _all_ inter-module communication whereas the +`x/capability` approach in #5931 would need to be applied method by method. + +## Consequences + +### Backwards Compatibility + +This ADR is intended to provide a pathway to a scenario where there is greater long term compatibility between modules. +In the short-term, this will likely result in breaking certain `Keeper` interfaces which are too permissive and/or +replacing `Keeper` interfaces altogether. + +### Positive + +- an alternative to keepers which can more easily lead to stable inter-module interfaces +- proper inter-module OCAPs +- improved module developer DevX, as commented on by several particpants on + [Architecture Review Call, Dec 3](https://hackmd.io/E0wxxOvRQ5qVmTf6N_k84Q) +- lays the groundwork for what can be a greatly simplified `app.go` +- router can be setup to enforce atomic transactions for moule-to-module calls + +### Negative + +- modules which adopt this will need significant refactoring + +### Neutral + +## Test Cases [optional] + +## References + +- [ADR 021](./adr-021-protobuf-query-encoding.md) +- [ADR 031](./adr-031-msg-service.md) +- [ADR 028](./adr-028-public-key-addresses.md) +- [ADR 030 draft](https://github.com/cosmos/cosmos-sdk/pull/7105) +- [Object-Capability Model](../docs/core/ocap.md) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-034-account-rekeying.md b/versioned_docs/version-0.45/integrate/architecture/adr-034-account-rekeying.md new file mode 100644 index 000000000..d3b54d17f --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-034-account-rekeying.md @@ -0,0 +1,76 @@ +# ADR 034: Account Rekeying + +## Changelog + +- 30-09-2020: Initial Draft + +## Status + +PROPOSED + +## Abstract + +Account rekeying is a process hat allows an account to replace its authentication pubkey with a new one. + +## Context + +Currently, in the Cosmos SDK, the address of an auth `BaseAccount` is based on the hash of the public key. Once an account is created, the public key for the account is set in stone, and cannot be changed. This can be a problem for users, as key rotation is a useful security practice, but is not possible currently. Furthermore, as multisigs are a type of pubkey, once a multisig for an account is set, it can not be updated. This is problematic, as multisigs are often used by organizations or companies, who may need to change their set of multisig signers for internal reasons. + +Transferring all the assets of an account to a new account with the updated pubkey is not sufficient, because some "engagements" of an account are not easily transferable. For example, in staking, to transfer bonded Atoms, an account would have to unbond all delegations and wait the three week unbonding period. Even more significantly, for validator operators, ownership over a validator is not transferrable at all, meaning that the operator key for a validator can never be updated, leading to poor operational security for validators. + +## Decision + +We propose the addition of a new feature to `x/auth` that allows accounts to update the public key associated with their account, while keeping the address the same. + +This is possible because the Cosmos SDK `BaseAccount` stores the public key for an account in state, instead of making the assumption that the public key is included in the transaction (whether explicitly or implicitly through the signature) as in other blockchains such as Bitcoin and Ethereum. Because the public key is stored on chain, it is okay for the public key to not hash to the address of an account, as the address is not pertinent to the signature checking process. + +To build this system, we design a new Msg type as follows: + +```protobuf +service Msg { + rpc ChangePubKey(MsgChangePubKey) returns (MsgChangePubKeyResponse); +} + +message MsgChangePubKey { + string address = 1; + google.protobuf.Any pub_key = 2; +} + +message MsgChangePubKeyResponse {} +``` + +The MsgChangePubKey transaction needs to be signed by the existing pubkey in state. + +Once, approved, the handler for this message type, which takes in the AccountKeeper, will update the in-state pubkey for the account and replace it with the pubkey from the Msg. + +An account that has had its pubkey changed cannot be automatically pruned from state. This is because if pruned, the original pubkey of the account would be needed to recreate the same address, but the owner of the address may not have the original pubkey anymore. Currently, we do not automatically prune any accounts anyways, but we would like to keep this option open the road (this is the purpose of account numbers). To resolve this, we charge an additional gas fee for this operation to compensate for this this externality (this bound gas amount is configured as parameter `PubKeyChangeCost`). The bonus gas is charged inside the handler, using the `ConsumeGas` function. Furthermore, in the future, we can allow accounts that have rekeyed manually prune themselves using a new Msg type such as `MsgDeleteAccount`. Manually pruning accounts can give a gas refund as an incentive for performing the action. + +```go + amount := ak.GetParams(ctx).PubKeyChangeCost + ctx.GasMeter().ConsumeGas(amount, "pubkey change fee") +``` + +Everytime a key for an address is changed, we will store a log of this change in the state of the chain, thus creating a stack of all previous keys for an address and the time intervals for which they were active. This allows dapps and clients to easily query past keys for an account which may be useful for features such as verifying timestamped off-chain signed messages. + +## Consequences + +### Positive + +* Will allow users and validator operators to employ better operational security practices with key rotation. +* Will allow organizations or groups to easily change and add/remove multisig signers. + +### Negative + +Breaks the current assumed relationship between address and pubkeys as H(pubkey) = address. This has a couple of consequences. + +* This makes wallets that support this feature more complicated. For example, if an address on chain was updated, the corresponding key in the CLI wallet also needs to be updated. +* Cannot automatically prune accounts with 0 balance that have had their pubkey changed. + +### Neutral + +* While the purpose of this is intended to allow the owner of an account to update to a new pubkey they own, this could technically also be used to transfer ownership of an account to a new owner. For example, this could be use used to sell a staked position without unbonding or an account that has vesting tokens. However, the friction of this is very high as this would essentially have to be done as a very specific OTC trade. Furthermore, additional constraints could be added to prevent accouns with Vesting tokens to use this feature. +* Will require that PubKeys for an account are included in the genesis exports. + +## References + ++ https://www.algorand.com/resources/blog/announcing-rekeying diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-035-rosetta-api-support.md b/versioned_docs/version-0.45/integrate/architecture/adr-035-rosetta-api-support.md new file mode 100644 index 000000000..fe85405a5 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-035-rosetta-api-support.md @@ -0,0 +1,211 @@ +# ADR 035: Rosetta API Support + +## Authors + +- Jonathan Gimeno (@jgimeno) +- David Grierson (@senormonito) +- Alessio Treglia (@alessio) +- Frojdy Dymylja (@fdymylja) + +## Changelog + +- 2021-05-12: the external library [cosmos-rosetta-gateway](https://github.com/tendermint/cosmos-rosetta-gateway) has been moved within the SDK. + +## Context + +[Rosetta API](https://www.rosetta-api.org/) is an open-source specification and set of tools developed by Coinbase to +standardise blockchain interactions. + +Through the use of a standard API for integrating blockchain applications it will + +* Be easier for a user to interact with a given blockchain +* Allow exchanges to integrate new blockchains quickly and easily +* Enable application developers to build cross-blockchain applications such as block explorers, wallets and dApps at + considerably lower cost and effort. + +## Decision + +It is clear that adding Rosetta API support to the Cosmos SDK will bring value to all the developers and +Cosmos SDK based chains in the ecosystem. How it is implemented is key. + +The driving principles of the proposed design are: + +1. **Extensibility:** it must be as riskless and painless as possible for application developers to set-up network + configurations to expose Rosetta API-compliant services. +2. **Long term support:** This proposal aims to provide support for all the supported Cosmos SDK release series. +3. **Cost-efficiency:** Backporting changes to Rosetta API specifications from `master` to the various stable + branches of Cosmos SDK is a cost that needs to be reduced. + +We will achieve these delivering on these principles by the following: + +1. There will be a package `rosetta/lib` + for the implementation of the core Rosetta API features, particularly: + a. The types and interfaces (`Client`, `OfflineClient`...), this separates design from implementation detail. + b. The `Server` functionality as this is independent of the Cosmos SDK version. + c. The `Online/OfflineNetwork`, which is not exported, and implements the rosetta API using the `Client` interface to query the node, build tx and so on. + d. The `errors` package to extend rosetta errors. +2. Due to differences between the Cosmos release series, each series will have its own specific implementation of `Client` interface. +3. There will be two options for starting an API service in applications: + a. API shares the application process + b. API-specific process. + +## Architecture + +### The External Repo + +As section will describe the proposed external library, including the service implementation, plus the defined types and interfaces. + +#### Server + +`Server` is a simple `struct` that is started and listens to the port specified in the settings. This is meant to be used across all the Cosmos SDK versions that are actively supported. + +The constructor follows: + +`func NewServer(settings Settings) (Server, error)` + +`Settings`, which are used to construct a new server, are the following: + +```go +// Settings define the rosetta server settings +type Settings struct { + // Network contains the information regarding the network + Network *types.NetworkIdentifier + // Client is the online API handler + Client crgtypes.Client + // Listen is the address the handler will listen at + Listen string + // Offline defines if the rosetta service should be exposed in offline mode + Offline bool + // Retries is the number of readiness checks that will be attempted when instantiating the handler + // valid only for online API + Retries int + // RetryWait is the time that will be waited between retries + RetryWait time.Duration +} +``` + +#### Types + +Package types uses a mixture of rosetta types and custom defined type wrappers, that the client must parse and return while executing operations. + +##### Interfaces + +Every SDK version uses a different format to connect (rpc, gRPC, etc), query and build transactions, we have abstracted this in what is the `Client` interface. +The client uses rosetta types, whilst the `Online/OfflineNetwork` takes care of returning correctly parsed rosetta responses and errors. + +Each Cosmos SDK release series will have their own `Client` implementations. +Developers can implement their own custom `Client`s as required. + +```go +// Client defines the API the client implementation should provide. +type Client interface { + // Needed if the client needs to perform some action before connecting. + Bootstrap() error + // Ready checks if the servicer constraints for queries are satisfied + // for example the node might still not be ready, it's useful in process + // when the rosetta instance might come up before the node itself + // the servicer must return nil if the node is ready + Ready() error + + // Data API + + // Balances fetches the balance of the given address + // if height is not nil, then the balance will be displayed + // at the provided height, otherwise last block balance will be returned + Balances(ctx context.Context, addr string, height *int64) ([]*types.Amount, error) + // BlockByHashAlt gets a block and its transaction at the provided height + BlockByHash(ctx context.Context, hash string) (BlockResponse, error) + // BlockByHeightAlt gets a block given its height, if height is nil then last block is returned + BlockByHeight(ctx context.Context, height *int64) (BlockResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHash(ctx context.Context, hash string) (BlockTransactionsResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHeight(ctx context.Context, height *int64) (BlockTransactionsResponse, error) + // GetTx gets a transaction given its hash + GetTx(ctx context.Context, hash string) (*types.Transaction, error) + // GetUnconfirmedTx gets an unconfirmed Tx given its hash + // NOTE(fdymylja): NOT IMPLEMENTED YET! + GetUnconfirmedTx(ctx context.Context, hash string) (*types.Transaction, error) + // Mempool returns the list of the current non confirmed transactions + Mempool(ctx context.Context) ([]*types.TransactionIdentifier, error) + // Peers gets the peers currently connected to the node + Peers(ctx context.Context) ([]*types.Peer, error) + // Status returns the node status, such as sync data, version etc + Status(ctx context.Context) (*types.SyncStatus, error) + + // Construction API + + // PostTx posts txBytes to the node and returns the transaction identifier plus metadata related + // to the transaction itself. + PostTx(txBytes []byte) (res *types.TransactionIdentifier, meta map[string]interface{}, err error) + // ConstructionMetadataFromOptions + ConstructionMetadataFromOptions(ctx context.Context, options map[string]interface{}) (meta map[string]interface{}, err error) + OfflineClient +} + +// OfflineClient defines the functionalities supported without having access to the node +type OfflineClient interface { + NetworkInformationProvider + // SignedTx returns the signed transaction given the tx bytes (msgs) plus the signatures + SignedTx(ctx context.Context, txBytes []byte, sigs []*types.Signature) (signedTxBytes []byte, err error) + // TxOperationsAndSignersAccountIdentifiers returns the operations related to a transaction and the account + // identifiers if the transaction is signed + TxOperationsAndSignersAccountIdentifiers(signed bool, hexBytes []byte) (ops []*types.Operation, signers []*types.AccountIdentifier, err error) + // ConstructionPayload returns the construction payload given the request + ConstructionPayload(ctx context.Context, req *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) + // PreprocessOperationsToOptions returns the options given the preprocess operations + PreprocessOperationsToOptions(ctx context.Context, req *types.ConstructionPreprocessRequest) (options map[string]interface{}, err error) + // AccountIdentifierFromPublicKey returns the account identifier given the public key + AccountIdentifierFromPublicKey(pubKey *types.PublicKey) (*types.AccountIdentifier, error) +} +``` + +### 2. Cosmos SDK Implementation + +The cosmos sdk implementation, based on version, takes care of satisfying the `Client` interface. +In Stargate, Launchpad and 0.37, we have introduced the concept of rosetta.Msg, this message is not in the shared repository as the sdk.Msg type differs between cosmos-sdk versions. + +The rosetta.Msg interface follows: + +```go +// Msg represents a cosmos-sdk message that can be converted from and to a rosetta operation. +type Msg interface { + sdk.Msg + ToOperations(withStatus, hasError bool) []*types.Operation + FromOperations(ops []*types.Operation) (sdk.Msg, error) +} +``` + +Hence developers who want to extend the rosetta set of supported operations just need to extend their module's sdk.Msgs with the `ToOperations` and `FromOperations` methods. + +### 3. API service invocation + +As stated at the start, application developers will have two methods for invocation of the Rosetta API service: + +1. Shared process for both application and API +2. Standalone API service + +#### Shared Process (Only Stargate) + +Rosetta API service could run within the same execution process as the application. This would be enabled via app.toml settings, and if gRPC is not enabled the rosetta instance would be spinned in offline mode (tx building capabilities only). + +#### Separate API service + +Client application developers can write a new command to launch a Rosetta API server as a separate process too, using the rosetta command contained in the `/server/rosetta` package. Construction of the command depends on cosmos sdk version. Examples can be found inside `simd` for stargate, and `contrib/rosetta/simapp` for other release series. + +## Status + +Proposed + +## Consequences + +### Positive + +- Out-of-the-box Rosetta API support within Cosmos SDK. +- Blockchain interface standardisation + +## References + +- https://www.rosetta-api.org/ diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-036-arbitrary-signature.md b/versioned_docs/version-0.45/integrate/architecture/adr-036-arbitrary-signature.md new file mode 100644 index 000000000..0d0737bff --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-036-arbitrary-signature.md @@ -0,0 +1,132 @@ +# ADR 036: Arbitrary Message Signature Specification + +## Changelog + +- 28/10/2020 - Initial draft + +## Authors + +- Antoine Herzog (@antoineherzog) +- Zaki Manian (@zmanian) +- Aleksandr Bezobchuk (alexanderbez) [1] +- Frojdi Dymylja (@fdymylja) + +## Status + +Draft + +## Abstract + +Currently, in the SDK, there is no convention to sign arbitrary message like on Ethereum. We propose with this specification, for Cosmos SDK ecosystem, a way to sign and validate off-chain arbitrary messages. + +This specification serves the purpose of covering every use case, this means that cosmos-sdk applications developers decide how to serialize and represent `Data` to users. + +## Context + +Having the ability to sign messages off-chain has proven to be a fundamental aspect of nearly any blockchain. The notion of signing messages off-chain has many added benefits such as saving on computational costs and reducing transaction throughput and overhead. Within the context of the Cosmos, some of the major applications of signing such data includes, but is not limited to, providing a cryptographic secure and verifiable means of proving validator identity and possibly associating it with some other framework or organization. In addition, having the ability to sign Cosmos messages with a Ledger or similar HSM device. + +Further context and use cases can be found in the references links. + +## Decision + +The aim is being able to sign arbitrary messages, even using Ledger or similar HSM devices. + +As a result signed messages should look roughly like Cosmos SDK messages but **must not** be a valid on-chain transaction. `chain-id`, `account_number` and `sequence` can all be assigned invalid values. + +Cosmos SDK 0.40 also introduces a concept of “auth_info” this can specify SIGN_MODES. + +A spec should include an `auth_info` that supports SIGN_MODE_DIRECT and SIGN_MODE_LEGACY_AMINO. + +Create the `offchain` proto definitions, we extend the auth module with `offchain` package to offer functionalities to verify and sign offline messages. + +An offchain transaction follows these rules: + +- the memo must be empty +- nonce, sequence number must be equal to 0 +- chain-id must be equal to “” +- fee gas must be equal to 0 +- fee amount must be an empty array + +Verification of an offchain transaction follows the same rules as an onchain one, except for the spec differences highlighted above. + +The first message added to the `offchain` package is `MsgSignData`. + +`MsgSignData` allows developers to sign arbitrary bytes valid offchain only. Where `Signer` is the account address of the signer. `Data` is arbitrary bytes which can represent `text`, `files`, `object`s. It's applications developers decision how `Data` should be deserialized, serialized and the object it can represent in their context. + +It's applications developers decision how `Data` should be treated, by treated we mean the serialization and deserialization process and the Object `Data` should represent. + +Proto definition: + +```proto +// MsgSignData defines an arbitrary, general-purpose, off-chain message +message MsgSignData { + // Signer is the sdk.AccAddress of the message signer + bytes Signer = 1 [(gogoproto.jsontag) = "signer", (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; + // Data represents the raw bytes of the content that is signed (text, json, etc) + bytes Data = 2 [(gogoproto.jsontag) = "data"]; +} +``` + +Signed MsgSignData json example: + +```json +{ + "type": "cosmos-sdk/StdTx", + "value": { + "msg": [ + { + "type": "sign/MsgSignData", + "value": { + "signer": "cosmos1hftz5ugqmpg9243xeegsqqav62f8hnywsjr4xr", + "data": "cmFuZG9t" + } + } + ], + "fee": { + "amount": [], + "gas": "0" + }, + "signatures": [ + { + "pub_key": { + "type": "tendermint/PubKeySecp256k1", + "value": "AqnDSiRoFmTPfq97xxEb2VkQ/Hm28cPsqsZm9jEVsYK9" + }, + "signature": "8y8i34qJakkjse9pOD2De+dnlc4KvFgh0wQpes4eydN66D9kv7cmCEouRrkka9tlW9cAkIL52ErB+6ye7X5aEg==" + } + ], + "memo": "" + } +} +``` + +## Consequences + +There is a specification on how messages, that are not meant to be broadcast to a live chain, should be formed. + +### Backwards Compatibility + +Backwards compatibility is maintained as this is a new message spec definition. + +### Positive + +- A common format that can be used by multiple applications to sign and verify off-chain messages. +- The specification is primitive which means it can cover every use case without limiting what is possible to fit inside it. +- It gives room for other off-chain messages specifications that aim to target more specific and common use cases such as off-chain-based authN/authZ layers [2]. + +### Negative + +- Current proposal requires a fixed relationship between an account address and a public key. +- Doesn't work with multisig accounts. + +## Further discussion + +- Regarding security in `MsgSignData`, the developer using `MsgSignData` is in charge of making the content laying in `Data` non-replayable when, and if, needed. +- the offchain package will be further extended with extra messages that target specific use cases such as, but not limited to, authentication in applications, payment channels, L2 solutions in general. + +## References + +1. https://github.com/cosmos/ics/pull/33 +2. https://github.com/cosmos/cosmos-sdk/pull/7727#discussion_r515668204 +3. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-722478477 +4. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-721062923 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-037-gov-split-vote.md b/versioned_docs/version-0.45/integrate/architecture/adr-037-gov-split-vote.md new file mode 100644 index 000000000..742fdd108 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-037-gov-split-vote.md @@ -0,0 +1,111 @@ +# ADR 037: Governance split votes + +## Changelog + +- 2020/10/28: Intial draft + +## Status + +Accepted + +## Abstract + +This ADR defines a modification to the the governance module that would allow a staker to split their votes into several voting options. For example, it could use 70% of its voting power to vote Yes and 30% of its voting power to vote No. + +## Context + +Currently, an address can cast a vote with only one options (Yes/No/Abstain/NoWithVeto) and use their full voting power behind that choice. + +However, often times the entity owning that address might not be a single individual. For example, a company might have different stakeholders who want to vote differently, and so it makes sense to allow them to split their voting power. Another example use case is exchanges. Many centralized exchanges often stake a portion of their users' tokens in their custody. Currently, it is not possible for them to do "passthrough voting" and giving their users voting rights over their tokens. However, with this system, exchanges can poll their users for voting preferences, and then vote on-chain proportionally to the results of the poll. + +## Decision + +We modify the vote structs to be + +``` +type WeightedVoteOption struct { + Option string + Weight sdk.Dec +} + +type Vote struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +And for backwards compatibility, we introduce `MsgVoteWeighted` while keeping `MsgVote`. + +``` +type MsgVote struct { + ProposalID int64 + Voter sdk.Address + Option Option +} + +type MsgVoteWeighted struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +The `ValidateBasic` of a `MsgVoteWeighted` struct would require that + +1. The sum of all the Rates is equal to 1.0 +2. No Option is repeated + +The governance tally function will iterate over all the options in a vote and add to the tally the result of the voter's voting power * the rate for that option. + +``` +tally() { + results := map[types.VoteOption]sdk.Dec + + for _, vote := range votes { + for i, weightedOption := range vote.Options { + results[weightedOption.Option] += getVotingPower(vote.voter) * weightedOption.Weight + } + } +} +``` + +The CLI command for creating a multi-option vote would be as such: + +```sh +simd tx gov vote 1 "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05" --from mykey +``` + +To create a single-option vote a user can do either + +``` +simd tx gov vote 1 "yes=1" --from mykey +``` + +or + +```sh +simd tx gov vote 1 yes --from mykey +``` + +to maintain backwards compatibility. + +## Consequences + +### Backwards Compatibility + +- Previous VoteMsg types will remain the same and so clients will not have to update their procedure unless they want to support the WeightedVoteMsg feature. +- When querying a Vote struct from state, its structure will be different, and so clients wanting to display all voters and their respective votes will have to handle the new format and the fact that a single voter can have split votes. +- The result of querying the tally function should have the same API for clients. + +### Positive + +- Can make the voting process more accurate for addresses representing multiple stakeholders, often some of the largest addresses. + +### Negative + +- Is more complex than simple voting, and so may be harder to explain to users. However, this is mostly mitigated because the feature is opt-in. + +### Neutral + +- Relatively minor change to governance tally function. diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-038-state-listening.md b/versioned_docs/version-0.45/integrate/architecture/adr-038-state-listening.md new file mode 100644 index 000000000..74f92d2f6 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-038-state-listening.md @@ -0,0 +1,569 @@ +# ADR 038: KVStore state listening + +## Changelog + +* 11/23/2020: Initial draft +* 10/14/2022: + * Add `ListenCommit`, flatten the state writes in a block to a single batch. + * Remove listeners from cache stores, should only listen to `rootmulti.Store`. + * Remove `HaltAppOnDeliveryError()`, the errors are propogated by default, the implementations should return nil if don't want to propogate errors. + + +## Status + +Proposed + +## Abstract + +This ADR defines a set of changes to enable listening to state changes of individual KVStores and exposing these data to consumers. + +## Context + +Currently, KVStore data can be remotely accessed through [Queries](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/messages-and-queries.md#queries) +which proceed either through Tendermint and the ABCI, or through the gRPC server. +In addition to these request/response queries, it would be beneficial to have a means of listening to state changes as they occur in real time. + +## Decision + +We will modify the `CommitMultiStore` interface and its concrete (`rootmulti`) implementations and introduce a new `listenkv.Store` to allow listening to state changes in underlying KVStores. We don't need to listen to cache stores, because we can't be sure that the writes will be committed eventually, and the writes are duplicated in `rootmulti.Store` eventually, so we should only listen to `rootmulti.Store`. +We will introduce a plugin system for configuring and running streaming services that write these state changes and their surrounding ABCI message context to different destinations. + +### Listening interface + +In a new file, `store/types/listening.go`, we will create a `WriteListener` interface for streaming out state changes from a KVStore. + +```go +// WriteListener interface for streaming data out from a listenkv.Store +type WriteListener interface { + // if value is nil then it was deleted + // storeKey indicates the source KVStore, to facilitate using the same WriteListener across separate KVStores + // delete bool indicates if it was a delete; true: delete, false: set + OnWrite(storeKey StoreKey, key []byte, value []byte, delete bool) error +} +``` + +### Listener type + +We will create two concrete implementations of the `WriteListener` interface in `store/types/listening.go`, that writes out protobuf +encoded KV pairs to an underlying `io.Writer`, and simply accumulate them in memory. + +This will include defining a simple protobuf type for the KV pairs. In addition to the key and value fields this message +will include the StoreKey for the originating KVStore so that we can write out from separate KVStores to the same stream/file +and determine the source of each KV pair. + +```protobuf +message StoreKVPair { + optional string store_key = 1; // the store key for the KVStore this pair originates from + required bool set = 2; // true indicates a set operation, false indicates a delete operation + required bytes key = 3; + required bytes value = 4; +} +``` + +```go +// StoreKVPairWriteListener is used to configure listening to a KVStore by writing out length-prefixed +// protobuf encoded StoreKVPairs to an underlying io.Writer +type StoreKVPairWriteListener struct { + writer io.Writer + marshaller codec.BinaryCodec +} + +// NewStoreKVPairWriteListener wraps creates a StoreKVPairWriteListener with a provdied io.Writer and codec.BinaryCodec +func NewStoreKVPairWriteListener(w io.Writer, m codec.BinaryCodec) *StoreKVPairWriteListener { + return &StoreKVPairWriteListener{ + writer: w, + marshaller: m, + } +} + +// OnWrite satisfies the WriteListener interface by writing length-prefixed protobuf encoded StoreKVPairs +func (wl *StoreKVPairWriteListener) OnWrite(storeKey types.StoreKey, key []byte, value []byte, delete bool) error error { + kvPair := new(types.StoreKVPair) + kvPair.StoreKey = storeKey.Name() + kvPair.Delete = Delete + kvPair.Key = key + kvPair.Value = value + by, err := wl.marshaller.MarshalBinaryLengthPrefixed(kvPair) + if err != nil { + return err + } + if _, err := wl.writer.Write(by); err != nil { + return err + } + return nil +} +``` + +```golang +// MemoryListener listens to the state writes and accumulate the records in memory. +type MemoryListener struct { + key StoreKey + stateCache []StoreKVPair +} + +// NewMemoryListener creates a listener that accumulate the state writes in memory. +func NewMemoryListener(key StoreKey) *MemoryListener { + return &MemoryListener{key: key} +} + +// OnWrite implements WriteListener interface +func (fl *MemoryListener) OnWrite(storeKey StoreKey, key []byte, value []byte, delete bool) error { + fl.stateCache = append(fl.stateCache, StoreKVPair{ + StoreKey: storeKey.Name(), + Delete: delete, + Key: key, + Value: value, + }) + return nil +} + +// PopStateCache returns the current state caches and set to nil +func (fl *MemoryListener) PopStateCache() []StoreKVPair { + res := fl.stateCache + fl.stateCache = nil + return res +} + +// StoreKey returns the storeKey it listens to +func (fl *MemoryListener) StoreKey() StoreKey { + return fl.key +} +``` + +### ListenKVStore + +We will create a new `Store` type `listenkv.Store` that the `MultiStore` wraps around a `KVStore` to enable state listening. +We can configure the `Store` with a set of `WriteListener`s which stream the output to specific destinations. + +```go +// Store implements the KVStore interface with listening enabled. +// Operations are traced on each core KVStore call and written to any of the +// underlying listeners with the proper key and operation permissions +type Store struct { + parent types.KVStore + listeners []types.WriteListener + parentStoreKey types.StoreKey +} + +// NewStore returns a reference to a new traceKVStore given a parent +// KVStore implementation and a buffered writer. +func NewStore(parent types.KVStore, psk types.StoreKey, listeners []types.WriteListener) *Store { + return &Store{parent: parent, listeners: listeners, parentStoreKey: psk} +} + +// Set implements the KVStore interface. It traces a write operation and +// delegates the Set call to the parent KVStore. +func (s *Store) Set(key []byte, value []byte) { + types.AssertValidKey(key) + s.parent.Set(key, value) + s.onWrite(false, key, value) +} + +// Delete implements the KVStore interface. It traces a write operation and +// delegates the Delete call to the parent KVStore. +func (s *Store) Delete(key []byte) { + s.parent.Delete(key) + s.onWrite(true, key, nil) +} + +// onWrite writes a KVStore operation to all the WriteListeners +func (s *Store) onWrite(delete bool, key, value []byte) { + for _, l := range s.listeners { + if err := l.OnWrite(s.parentStoreKey, key, value, delete); err != nil { + // log error + } + } +} +``` + +### MultiStore interface updates + +We will update the `CommitMultiStore` interface to allow us to wrap a set of listeners around a specific `KVStore`. + +```go +type CommitMultiStore interface { + ... + + // ListeningEnabled returns if listening is enabled for the KVStore belonging the provided StoreKey + ListeningEnabled(key StoreKey) bool + + // AddListeners adds WriteListeners for the KVStore belonging to the provided StoreKey + // It appends the listeners to a current set, if one already exists + AddListeners(key StoreKey, listeners []WriteListener) +} +``` + +### MultiStore implementation updates + +We will modify all of the `CommitMultiStore` implementations to satisfy these new interfaces, and adjust the `rootmulti` `GetKVStore` method +to wrap the returned `KVStore` with a `listenkv.Store` if listening is turned on for that `Store`. + +```go +func (rs *Store) GetKVStore(key types.StoreKey) types.KVStore { + store := rs.stores[key].(types.KVStore) + + if rs.TracingEnabled() { + store = tracekv.NewStore(store, rs.traceWriter, rs.traceContext) + } + if rs.ListeningEnabled(key) { + store = listenkv.NewStore(key, store, rs.listeners[key]) + } + + return store +} +``` + +We will also adjust the `rootmulti` `CacheMultiStore` method to wrap the stores with `listenkv.Store` to enable listening when the cache layer writes. + +```go +func (rs *Store) CacheMultiStore() types.CacheMultiStore { + stores := make(map[types.StoreKey]types.CacheWrapper) + for k, v := range rs.stores { + store := v.(types.KVStore) + // Wire the listenkv.Store to allow listeners to observe the writes from the cache store, + // set same listeners on cache store will observe duplicated writes. + if rs.ListeningEnabled(k) { + store = listenkv.NewStore(store, k, rs.listeners[k]) + } + stores[k] = store + } + return cachemulti.NewStore(rs.db, stores, rs.keysByName, rs.traceWriter, rs.getTracingContext()) +} +``` + +### Exposing the data + +#### Streaming service + +We will introduce a new `StreamingService` interface for exposing `WriteListener` data streams to external consumers. +In addition to streaming state changes as `StoreKVPair`s, the interface satisfies an `ABCIListener` interface that plugs +into the BaseApp and relays ABCI requests and responses so that the service can observe those block metadatas as well. + +The `WriteListener`s of `StreamingService` listens to the `rootmulti.Store`, which is only written into at commit event by the cache store of `deliverState`. + +```go +// ABCIListener interface used to hook into the ABCI message processing of the BaseApp +type ABCIListener interface { + // ListenBeginBlock updates the streaming service with the latest BeginBlock messages + ListenBeginBlock(ctx types.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error + // ListenEndBlock updates the steaming service with the latest EndBlock messages + ListenEndBlock(ctx types.Context, req abci.RequestEndBlock, res abci.ResponseEndBlock) error + // ListenDeliverTx updates the steaming service with the latest DeliverTx messages + ListenDeliverTx(ctx types.Context, req abci.RequestDeliverTx, res abci.ResponseDeliverTx) error + // ListenCommit updates the steaming service with the latest Commit message, + // All the state writes of current block should have notified before this message. + ListenCommit(ctx types.Context, res abci.ResponseCommit) error +} + +// StreamingService interface for registering WriteListeners with the BaseApp and updating the service with the ABCI messages using the hooks +type StreamingService interface { + // Stream is the streaming service loop, awaits kv pairs and writes them to a destination stream or file + Stream(wg *sync.WaitGroup) error + // Listeners returns the streaming service's listeners for the BaseApp to register + Listeners() map[types.StoreKey][]store.WriteListener + // ABCIListener interface for hooking into the ABCI messages from inside the BaseApp + ABCIListener + // Closer interface + io.Closer +} +``` + +#### BaseApp registration + +We will add a new method to the `BaseApp` to enable the registration of `StreamingService`s: + +```go +// SetStreamingService is used to set a streaming service into the BaseApp hooks and load the listeners into the multistore +func (app *BaseApp) SetStreamingService(s StreamingService) { + // add the listeners for each StoreKey + for key, lis := range s.Listeners() { + app.cms.AddListeners(key, lis) + } + // register the StreamingService within the BaseApp + // BaseApp will pass BeginBlock, DeliverTx, and EndBlock requests and responses to the streaming services to update their ABCI context + app.abciListeners = append(app.abciListeners, s) +} +``` + +We will also modify the `BeginBlock`, `EndBlock`, and `DeliverTx` methods to pass ABCI requests and responses to any streaming service hooks registered +with the `BaseApp`. + +```go +func (app *BaseApp) BeginBlock(req abci.RequestBeginBlock) (res abci.ResponseBeginBlock) { + + ... + + defer func() { + // call the hooks with the BeginBlock messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenBeginBlock(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrapf(err, "BeginBlock listening hook failed, height: %d", req.Header.Height)) + } + } + }() + + return res +} +``` + +```go +func (app *BaseApp) EndBlock(req abci.RequestEndBlock) (res abci.ResponseEndBlock) { + + ... + + defer func() { + // Call the streaming service hooks with the EndBlock messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenEndBlock(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrapf(err, "EndBlock listening hook failed, height: %d", req.Height)) + } + } + }() + + return res +} +``` + +```go +func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) (res abci.ResponseDeliverTx) { + + defer func() { + // call the hooks with the DeliverTx messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenDeliverTx(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrap(err, "DeliverTx listening hook failed")) + } + } + }() + + ... + + return res +} +``` + +```golang +func (app *BaseApp) Commit() abci.ResponseCommit { + header := app.deliverState.ctx.BlockHeader() + retainHeight := app.GetBlockRetentionHeight(header.Height) + + // Write the DeliverTx state into branched storage and commit the MultiStore. + // The write to the DeliverTx state writes all state transitions to the root + // MultiStore (app.cms) so when Commit() is called is persists those values. + app.deliverState.ms.Write() + commitID := app.cms.Commit() + + res := abci.ResponseCommit{ + Data: commitID.Hash, + RetainHeight: retainHeight, + } + + // call the hooks with the Commit message + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenCommit(app.deliverState.ctx, res); err != nil { + panic(sdkerrors.Wrapf(err, "Commit listening hook failed, height: %d", header.Height)) + } + } + + app.logger.Info("commit synced", "commit", fmt.Sprintf("%X", commitID)) + ... +} +``` + +#### Error Handling And Async Consumers + +`ABCIListener`s are called synchronously inside the consensus state machine, the returned error causes panic which in turn halt the consensus state machine. The implementer should be careful not to break consensus unexpectedly or slow down it too much. + +For some async use cases, one can spawn a go-routine internanlly to avoid slow down consensus state machine, and handle the errors internally and always returns `nil` to avoid halting consensus state machine on error. + +Furthermore, for most of the cases, we only need to use the builtin file streamer to listen to state changes directly inside cosmos-sdk, the other consumers should subscribe to the file streamer output externally. + +#### File Streamer + +We provide a minimal filesystem based implementation inside cosmos-sdk, and provides options to write output files reliably, the output files can be further consumed by external consumers, so most of the state listeners actually don't need to live inside the sdk and node, which improves the node robustness and simplify sdk internals. + +The file streamer can be wired in app like this: +```golang +exposeStoreKeys := ... // decide the key list to listen +service, err := file.NewStreamingService(streamingDir, "", exposeStoreKeys, appCodec, logger) +bApp.SetStreamingService(service) +``` + +#### Plugin system + +We propose a plugin architecture to load and run `StreamingService` implementations. We will introduce a plugin +loading/preloading system that is used to load, initialize, inject, run, and stop Cosmos-SDK plugins. Each plugin +must implement the following interface: + +```go +// Plugin is the base interface for all kinds of cosmos-sdk plugins +// It will be included in interfaces of different Plugins +type Plugin interface { + // Name should return unique name of the plugin + Name() string + + // Version returns current version of the plugin + Version() string + + // Init is called once when the Plugin is being loaded + // The plugin is passed the AppOptions for configuration + // A plugin will not necessarily have a functional Init + Init(env serverTypes.AppOptions) error + + // Closer interface for shutting down the plugin process + io.Closer +} +``` + +The `Name` method returns a plugin's name. +The `Version` method returns a plugin's version. +The `Init` method initializes a plugin with the provided `AppOptions`. +The io.Closer is used to shut down the plugin service. + +For the purposes of this ADR we introduce a single kind of plugin- a state streaming plugin. +We will define a `StateStreamingPlugin` interface which extends the above `Plugin` interface to support a state streaming service. + +```go +// StateStreamingPlugin interface for plugins that load a baseapp.StreamingService onto a baseapp.BaseApp +type StateStreamingPlugin interface { + // Register configures and registers the plugin streaming service with the BaseApp + Register(bApp *baseapp.BaseApp, marshaller codec.BinaryCodec, keys map[string]*types.KVStoreKey) error + + // Start starts the background streaming process of the plugin streaming service + Start(wg *sync.WaitGroup) error + + // Plugin is the base Plugin interface + Plugin +} +``` + +The `Register` method is used during App construction to register the plugin's streaming service with an App's BaseApp using the BaseApp's `SetStreamingService` method. +The `Start` method is used during App construction to start the registered plugin streaming services and maintain synchronization with them. + +e.g. in `NewSimApp`: + +```go +func NewSimApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + loadLatest bool, + appOpts servertypes.AppOptions, + baseAppOptions ...func(*baseapp.BaseApp), +) *SimApp { + + ... + + keys := sdk.NewKVStoreKeys( + authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, + ) + + pluginsOnKey := fmt.Sprintf("%s.%s", plugin.PLUGINS_TOML_KEY, plugin.PLUGINS_ON_TOML_KEY) + if cast.ToBool(appOpts.Get(pluginsOnKey)) { + // this loads the preloaded and any plugins found in `plugins.dir` + pluginLoader, err := loader.NewPluginLoader(appOpts, logger) + if err != nil { + // handle error + } + + // initialize the loaded plugins + if err := pluginLoader.Initialize(); err != nil { + // handle error + } + + // register the plugin(s) with the BaseApp + if err := pluginLoader.Inject(bApp, appCodec, keys); err != nil { + // handle error + } + + // start the plugin services, optionally use wg to synchronize shutdown using io.Closer + wg := new(sync.WaitGroup) + if err := pluginLoader.Start(wg); err != nil { + // handler error + } + } + + ... + + return app +} +``` + + +#### Configuration + +The plugin system will be configured within an app's app.toml file. + +```toml +[plugins] + on = false # turn the plugin system, as a whole, on or off + enabled = ["list", "of", "plugin", "names", "to", "enable"] + dir = "the directory to load non-preloaded plugins from; defaults to cosmos-sdk/plugin/plugins" +``` + +There will be three parameters for configuring the plugin system: `plugins.on`, `plugins.enabled` and `plugins.dir`. +`plugins.on` is a bool that turns on or off the plugin system at large, `plugins.dir` directs the system to a directory +to load plugins from, and `plugins.enabled` provides `opt-in` semantics to plugin names to enable (including preloaded plugins). + +Configuration of a given plugin is ultimately specific to the plugin, but we will introduce some standards here: + +Plugin TOML configuration should be split into separate sub-tables for each kind of plugin (e.g. `plugins.streaming`). + +Within these sub-tables, the parameters for a specific plugin of that kind are included in another sub-table (e.g. `plugins.streaming.file`). +It is generally expected, but not required, that a streaming service plugin can be configured with a set of store keys +(e.g. `plugins.streaming.file.keys`) for the stores it listens to and a flag (e.g. `plugins.streaming.file.halt_app_on_delivery_error`) +that signifies whether the service operates in a fire-and-forget capacity, or stop the BaseApp when an error occurs in +any of `ListenBeginBlock`, `ListenEndBlock` and `ListenDeliverTx`. + +e.g. + +```toml +[plugins] + on = false # turn the plugin system, as a whole, on or off + enabled = ["list", "of", "plugin", "names", "to", "enable"] + dir = "the directory to load non-preloaded plugins from; defaults to " + [plugins.streaming] # a mapping of plugin-specific streaming service parameters, mapped to their plugin name + [plugins.streaming.file] # the specific parameters for the file streaming service plugin + keys = ["list", "of", "store", "keys", "we", "want", "to", "expose", "for", "this", "streaming", "service"] + write_dir = "path to the write directory" + prefix = "optional prefix to prepend to the generated file names" + halt_app_on_delivery_error = "false" # false == fire-and-forget; true == stop the application + [plugins.streaming.kafka] + keys = [] + topic_prefix = "block" # Optional prefix for topic names where data will be stored. + flush_timeout_ms = 5000 # Flush and wait for outstanding messages and requests to complete delivery when calling `StreamingService.Close(). (milliseconds) + halt_app_on_delivery_error = true # Whether or not to halt the application when plugin fails to deliver message(s). + ... +``` + +#### Encoding and decoding streams + +ADR-038 introduces the interfaces and types for streaming state changes out from KVStores, associating this +data with their related ABCI requests and responses, and registering a service for consuming this data and streaming it to some destination in a final format. +Instead of prescribing a final data format in this ADR, it is left to a specific plugin implementation to define and document this format. +We take this approach because flexibility in the final format is necessary to support a wide range of streaming service plugins. For example, +the data format for a streaming service that writes the data out to a set of files will differ from the data format that is written to a Kafka topic. + +## Consequences + +These changes will provide a means of subscribing to KVStore state changes in real time. + +### Backwards Compatibility + +* This ADR changes the `CommitMultiStore` interface, implementations supporting the previous version of these interfaces will not support the new ones + +### Positive + +* Ability to listen to KVStore state changes in real time and expose these events to external consumers + +### Negative + +* Changes `CommitMultiStore`interface + +### Neutral + +* Introduces additional- but optional- complexity to configuring and running a cosmos application +* If an application developer opts to use these features to expose data, they need to be aware of the ramifications/risks of that data exposure as it pertains to the specifics of their application diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-039-epoched-staking.md b/versioned_docs/version-0.45/integrate/architecture/adr-039-epoched-staking.md new file mode 100644 index 000000000..44c1f1408 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-039-epoched-staking.md @@ -0,0 +1,122 @@ +# ADR 039: Epoched Staking + +## Changelog + +- 10-Feb-2021: Initial Draft + +## Authors + +- Dev Ojha (@valardragon) +- Sunny Aggarwal (@sunnya97) + +## Status + +Proposed + +## Abstract + +This ADR updates the proof of stake module to buffer the staking weight updates for a number of blocks before updating the consensus' staking weights. The length of the buffer is dubbed an epoch. The prior functionality of the staking module is then a special case of the abstracted module, with the epoch being set to 1 block. + +## Context + +The current proof of stake module takes the design decision to apply staking weight changes to the consensus engine immediately. This means that delegations and unbonds get applied immediately to the validator set. This decision was primarily done as it was implementationally simplest, and because we at the time believed that this would lead to better UX for clients. + +An alternative design choice is to allow buffering staking updates (delegations, unbonds, validators joining) for a number of blocks. This 'epoch'd proof of stake consensus provides the guarantee that the consensus weights for validators will not change mid-epoch, except in the event of a slash condition. + +Additionally, the UX hurdle may not be as significant as was previously thought. This is because it is possible to provide users immediate acknowledgement that their bond was recorded and will be executed. + +Furthermore, it has become clearer over time that immediate execution of staking events comes with limitations, such as: + +* Threshold based cryptography. One of the main limitations is that because the validator set can change so regularly, it makes the running of multiparty computation by a fixed validator set difficult. Many threshold-based cryptographic features for blockchains such as randomness beacons and threshold decryption require a computationally-expensive DKG process (will take much longer than 1 block to create). To productively use these, we need to guarantee that the result of the DKG will be used for a reasonably long time. It wouldn't be feasible to rerun the DKG every block. By epoching staking, it guarantees we'll only need to run a new DKG once every epoch. + +* Light client efficiency. This would lessen the overhead for IBC when there is high churn in the validator set. In the Tendermint light client bisection algorithm, the number of headers you need to verify is related to bounding the difference in validator sets between a trusted header and the latest header. If the difference is too great, you verify more header in between the two. By limiting the frequency of validator set changes, we can reduce the worst case size of IBC lite client proofs, which occurs when a validator set has high churn. + +* Fairness of deterministic leader election. Currently we have no ways of reasoning of fairness of deterministic leader election in the presence of staking changes without epochs (tendermint/spec#217). Breaking fairness of leader election is profitable for validators, as they earn additional rewards from being the proposer. Adding epochs at least makes it easier for our deterministic leader election to match something we can prove secure. (Albeit, we still haven’t proven if our current algorithm is fair with > 2 validators in the presence of stake changes) + +* Staking derivative design. Currently, reward distribution is done lazily using the F1 fee distribution. While saving computational complexity, lazy accounting requires a more stateful staking implementation. Right now, each delegation entry has to track the time of last withdrawal. Handling this can be a challenge for some staking derivatives designs that seek to provide fungibility for all tokens staked to a single validator. Force-withdrawing rewards to users can help solve this, however it is infeasible to force-withdraw rewards to users on a per block basis. With epochs, a chain could more easily alter the design to have rewards be forcefully withdrawn (iterating over delegator accounts only once per-epoch), and can thus remove delegation timing from state. This may be useful for certain staking derivative designs. + +## Design considerations + +### Slashing + +There is a design consideration for whether to apply a slash immediately or at the end of an epoch. A slash event should apply to only members who are actually staked during the time of the infraction, namely during the epoch the slash event occured. + +Applying it immediately can be viewed as offering greater consensus layer security, at potential costs to the aforementioned usecases. The benefits of immediate slashing for consensus layer security can be all be obtained by executing the validator jailing immediately (thus removing it from the validator set), and delaying the actual slash change to the validator's weight until the epoch boundary. For the use cases mentioned above, workarounds can be integrated to avoid problems, as follows: + +- For threshold based cryptography, this setting will have the threshold cryptography use the original epoch weights, while consensus has an update that lets it more rapidly benefit from additional security. If the threshold based cryptography blocks liveness of the chain, then we have effectively raised the liveness threshold of the remaining validators for the rest of the epoch. (Alternatively, jailed nodes could still contribute shares) This plan will fail in the extreme case that more than 1/3rd of the validators have been jailed within a single epoch. For such an extreme scenario, the chain already have its own custom incident response plan, and defining how to handle the threshold cryptography should be a part of that. +- For light client efficiency, there can be a bit included in the header indicating an intra-epoch slash (ala https://github.com/tendermint/spec/issues/199). +- For fairness of deterministic leader election, applying a slash or jailing within an epoch would break the guarantee we were seeking to provide. This then re-introduces a new (but significantly simpler) problem for trying to provide fairness guarantees. Namely, that validators can adversarially elect to remove themself from the set of proposers. From a security perspective, this could potentially be handled by two different mechanisms (or prove to still be too difficult to achieve). One is making a security statement acknowledging the ability for an adversary to force an ahead-of-time fixed threshold of users to drop out of the proposer set within an epoch. The second method would be to parameterize such that the cost of a slash within the epoch far outweights benefits due to being a proposer. However, this latter criterion is quite dubious, since being a proposer can have many advantageous side-effects in chains with complex state machines. (Namely, DeFi games such as Fomo3D) +- For staking derivative design, there is no issue introduced. This does not increase the state size of staking records, since whether a slash has occured is fully queryable given the validator address. + +### Token lockup + +When someone makes a transaction to delegate, even though they are not immediately staked, their tokens should be moved into a pool managed by the staking module which will then be used at the end of an epoch. This prevents concerns where they stake, and then spend those tokens not realizing they were already allocated for staking, and thus having their staking tx fail. + +### Pipelining the epochs + +For threshold based cryptography in particular, we need a pipeline for epoch changes. This is because when we are in epoch N, we want the epoch N+1 weights to be fixed so that the validator set can do the DKG accordingly. So if we are currently in epoch N, the stake weights for epoch N+1 should already be fixed, and new stake changes should be getting applied to epoch N + 2. + +This can be handled by making a parameter for the epoch pipeline length. This parameter should not be alterable except during hard forks, to mitigate implementation complexity of switching the pipeline length. + +With pipeline length 1, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+1. +With pipeline length 2, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+2. + +### Rewards + +Even though all staking updates are applied at epoch boundaries, rewards can still be distributed immediately when they are claimed. This is because they do not affect the current stake weights, as we do not implement auto-bonding of rewards. If such a feature were to be implemented, it would have to be setup so that rewards are auto-bonded at the epoch boundary. + +### Parameterizing the epoch length + +When choosing the epoch length, there is a trade-off queued state/computation buildup, and countering the previously discussed limitations of immediate execution if they apply to a given chain. + +Until an ABCI mechanism for variable block times is introduced, it is ill-advised to be using high epoch lengths due to the computation buildup. This is because when a block's execution time is greater than the expected block time from Tendermint, rounds may increment. + +## Decision + +__Step-1__: Implement buffering of all staking and slashing messages. + +First we create a pool for storing tokens that are being bonded, but should be applied at the epoch boundary called the `EpochDelegationPool`. Then, we have two separate queues, one for staking, one for slashing. We describe what happens on each message being delivered below: + +### Staking messages + +- **MsgCreateValidator**: Move user's self-bond to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the self-bond, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +- **MsgEditValidator**: Validate message and if valid queue the message for execution at the end of the Epoch. +- **MsgDelegate**: Move user's funds to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the delegation, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +- **MsgBeginRedelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. +- **MsgUndelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. + +### Slashing messages + +- **MsgUnjail**: Validate message and if valid queue the message for execution at the end of the Epoch. +- **Slash Event**: Whenever a slash event is created, it gets queued in the slashing module to apply at the end of the epoch. The queues should be setup such that this slash applies immediately. + +### Evidence Messages + +- **MsgSubmitEvidence**: This gets executed immediately, and the validator gets jailed immediately. However in slashing, the actual slash event gets queued. + +Then we add methods to the end blockers, to ensure that at the epoch boundary the queues are cleared and delegation updates are applied. + +__Step-2__: Implement querying of queued staking txs. + +When querying the staking activity of a given address, the status should return not only the amount of tokens staked, but also if there are any queued stake events for that address. This will require more work to be done in the querying logic, to trace the queued upcoming staking events. + +As an initial implementation, this can be implemented as a linear search over all queued staking events. However, for chains that need long epochs, they should eventually build additional support for nodes that support querying to be able to produce results in constant time. (This is do-able by maintaining an auxilliary hashmap for indexing upcoming staking events by address) + +__Step-3__: Adjust gas + +Currently gas represents the cost of executing a transaction when its done immediately. (Merging together costs of p2p overhead, state access overhead, and computational overhead) However, now a transaction can cause computation in a future block, namely at the epoch boundary. + +To handle this, we should initially include parameters for estimating the amount of future computation (denominated in gas), and add that as a flat charge needed for the message. +We leave it as out of scope for how to weight future computation versus current computation in gas pricing, and have it set such that the are weighted equally for now. + +## Consequences + +### Positive + +* Abstracts the proof of stake module that allows retaining the existing functionality +* Enables new features such as validator-set based threshold cryptography + +### Negative + +* Increases complexity of integrating more complex gas pricing mechanisms, as they now have to consider future execution costs as well. +* When epoch > 1, validators can no longer leave the network immediately, and must wait until an epoch boundary. diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-040-storage-and-smt-state-commitments.md b/versioned_docs/version-0.45/integrate/architecture/adr-040-storage-and-smt-state-commitments.md new file mode 100644 index 000000000..115723576 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-040-storage-and-smt-state-commitments.md @@ -0,0 +1,164 @@ +# ADR 040: Storage and SMT State Commitments + +## Changelog + +- 2020-01-15: Draft + +## Status + +DRAFT Not Implemented + +## Abstract + +Sparse Merke Tree ([SMT](https://osf.io/8mcnh/)) is a version of a Merkle Tree with various storage and performance optimizations. This ADR defines a separation of state commitments from data storage and the SDK transition from IAVL to SMT. + +## Context + +Currently, Cosmos SDK uses IAVL for both state [commitments](https://cryptography.fandom.com/wiki/Commitment_scheme) and data storage. + +IAVL has effectively become an orphaned project within the Cosmos ecosystem and it's proven to be an inefficient state commitment data structure. +In the current design, IAVL is used for both data storage and as a Merkle Tree for state commitments. IAVL is meant to be a standalone Merkelized key/value database, however it's using a KV DB engine to store all tree nodes. So, each node is stored in a separate record in the KV DB. This causes many inefficiencies and problems: + ++ Each object query requires a tree traversal from the root. Subsequent queries for the same object are cached on the SDK level. ++ Each edge traversal requires a DB query. ++ Creating snapshots is [expensive](https://github.com/cosmos/cosmos-sdk/issues/7215#issuecomment-684804950). It takes about 30 seconds to export less than 100 MB of state (as of March 2020). ++ Updates in IAVL may trigger tree reorganization and possible O(log(n)) hashes re-computation, which can become a CPU bottleneck. ++ The node structure is pretty expensive - it contains a standard tree node elements (key, value, left and right element) and additional metadata such as height, version (which is not required by the SDK). The entire node is hashed, and that hash is used as the key in the underlying database, [ref](https://github.com/cosmos/iavl/blob/master/docs/node/node.md +). + +Moreover, the IAVL project lacks support and a maintainer and we already see better and well-established alternatives. Instead of optimizing the IAVL, we are looking into other solutions for both storage and state commitments. + +## Decision + +We propose to separate the concerns of state commitment (**SC**), needed for consensus, and state storage (**SS**), needed for state machine. Finally we replace IAVL with [LazyLedgers' SMT](https://github.com/lazyledger/smt). LazyLedger SMT is based on Diem (called jellyfish) design [*] - it uses a compute-optimised SMT by replacing subtrees with only default values with a single node (same approach is used by Ethereum2) and implements compact proofs. + +The storage model presented here doesn't deal with data structure nor serialization. It's a Key-Value database, where both key and value are binaries. The storage user is responsible for data serialization. + +### Decouple state commitment from storage + +Separation of storage and commitment (by the SMT) will allow the optimization of different components according to their usage and access patterns. + +`SS` (SMT) is used to commit to a data and compute merkle proofs. `SC` is used to directly access data. To avoid collisions, both `SS` and `SC` will use a separate storage namespace (they could use the same database underneath). `SC` will store each `(key, value)` pair directly (map key -> value). + +SMT is a merkle tree structure: we don't store keys directly. For every `(key, value)` pair, `hash(key)` is stored in a path (we hash a key to evenly distribute keys in the tree) and `hash(key, value)` in a leaf. Since we don't know a structure of a value (in particular if it contains the key) we hash both the key and the value in the `SC` leaf. + +For data access we propose 2 additional KV buckets (namespaces for the key-value pairs, sometimes called [column family](https://github.com/facebook/rocksdb/wiki/Terminology)): + +1. B1: `key → value`: the principal object storage, used by a state machine, behind the SDK `KVStore` interface: provides direct access by key and allows prefix iteration (KV DB backend must support it). +2. B2: `hash(key, value) → key`: a reverse index to get a key from an SMT path. Recall that SMT will store `(k, v)` as `(hash(k), hash(key, value))`. So, we can get an object value by composing `SMT_path → B2 → B1`. +3. we could use more buckets to optimize the app usage if needed. + +Above, we propose to use a KV DB. However, for the state machine, we could use an RDBMS, which we discuss below. + +### Requirements + +State Storage requirements: + ++ range queries ++ quick (key, value) access ++ creating a snapshot ++ historical versioning ++ pruning (garbage collection) + +State Commitment requirements: + ++ fast updates ++ tree path should be short ++ pruning (garbage collection) + +### LazyLedger SMT for State Commitment + +A Sparse Merkle tree is based on the idea of a complete Merkle tree of an intractable size. The assumption here is that as the size of the tree is intractable, there would only be a few leaf nodes with valid data blocks relative to the tree size, rendering a sparse tree. + +### Snapshots for storage sync and state versioning + +Below, with simple _snapshot_ we refer to a database snapshot mechanism, not to a _ABCI snapshot sync_. The latter will be referred as _snapshot sync_ (which will directly use DB snapshot as described below). + +Database snapshot is a view of DB state at a certain time or transaction. It's not a full copy of a database (it would be too big), usually a snapshot mechanism is based on a _copy on write_ and it allows to efficiently deliver DB state at a certain stage. +Some DB engines support snapshotting. Hence, we propose to reuse that functionality for the state sync and versioning (described below). It will the supported DB engines to ones which efficiently implement snapshots. In a final section we will discuss evaluated DBs. + +One of the Stargate core features is a _snapshot sync_ delivered in the `/snapshot` package. It provides a way to trustlessly sync a blockchain without repeating all transactions from the genesis. This feature is implemented in SDK and requires storage support. Currently IAVL is the only supported backend. It works by streaming to a client a snapshot of a `SS` at a certain version together with a header chain. + +A new `SS` snapshot will be created in every `EndBlocker` and identified by a block height. The `rootmulti.Store` keeps track of the available snapshots to offer `SS` at a certain version. The `rootmulti.Store` implements the `CommitMultiStore` interface, which encapsulates a `Committer` interface. `Committer` has a `Commit`, `SetPruning`, `GetPruning` functions which will be used for creating and removing snapshots. The `rootStore.Commit` function creates a new snapshot and increments the version on each call, and checks if it needs to remove old versions. We will need to update the SMT interface to implement the `Committer` interface. +NOTE: `Commit` must be called exactly once per block. Otherwise we risk going out of sync for the version number and block height. +NOTE: For the SDK storage, we may consider splitting that interface into `Committer` and `PruningCommitter` - only the multiroot should implement `PruningCommitter` (cache and prefix store don't need pruning). + +Number of historical versions for `abci.Query` and state sync snapshots is part of a node configuration, not a chain configuration (configuration implied by the blockchain consensus). A configuration should allow to specify number of past blocks and number of past blocks modulo some number (eg: 100 past blocks and one snapshot every 100 blocks for past 2000 blocks). Archival nodes can keep all past versions. + +Pruning old snapshots is effectively done by a database. Whenever we update a record in `SC`, SMT won't update nodes - instead it creates new nodes on the update path, without removing the old one. Since we are snapshoting each block, we need to update that mechanism to immediately remove orphaned nodes from the storage. This is a safe operation - snapshots will keep track of the records which should be available for past versions. + +To manage the active snapshots we will either us a DB _max number of snapshots_ option (if available), or will remove snapshots in the `EndBlocker`. The latter option can be done efficiently by identifying snapshots with block height. + +#### Accessing old state versions + +One of the functional requirements is to access old state. This is done through `abci.Query` structure. The version is specified by a block height (so we query for an object by a key `K` at block height `H`). The number of old versions supported for `abci.Query` is configurable. Accessing an old state is done by using available snapshots. +`abci.Query` doesn't need old state of `SC`. So, for efficiency, we should keep `SC` and `SS` in different databases (however using the same DB engine). + +Moreover, SDK could provide a way to directly access the state. However, a state machine shouldn't do that - since the number of snapshots is configurable, it would lead to nondeterministic execution. + +We positively [validated](https://github.com/cosmos/cosmos-sdk/discussions/8297) a versioning and snapshot mechanism for querying old state with regards to the database we evaluated. + +### State Proofs + +For any object stored in State Store (SS), we have corresponding object in `SC`. A proof for object `V` identified by a key `K` is a branch of `SC`, where the path corresponds to the key `hash(K)`, and the leaf is `hash(K, V)`. + +### Rollbacks + +We need to be able to process transactions and roll-back state updates if a transaction fails. This can be done in the following way: during transaction processing, we keep all state change requests (writes) in a `CacheWrapper` abstraction (as it's done today). Once we finish the block processing, in the `Endblocker`, we commit a root store - at that time, all changes are written to the SMT and to the `SS` and a snapshot is created. + +### Committing to an object without saving it + +We identified use-cases, where modules will need to save an object commitment without storing an object itself. Sometimes clients are receiving complex objects, and they have no way to prove a correctness of that object without knowing the storage layout. For those use cases it would be easier to commit to the object without storing it directly. + +## Consequences + +### Backwards Compatibility + +This ADR doesn't introduce any SDK level API changes. + +We change the storage layout of the state machine, a storage hard fork and network upgrade is required to incorporate these changes. SMT provides a merkle proof functionality, however it is not compatible with ICS23. Updating the proofs for ICS23 compatibility is required. + +### Positive + ++ Decoupling state from state commitment introduce better engineering opportunities for further optimizations and better storage patterns. ++ Performance improvements. ++ Joining SMT based camp which has wider and proven adoption than IAVL. Example projects which decided on SMT: Ethereum2, Diem (Libra), Trillan, Tezos, LazyLedger. + +### Negative + ++ Storage migration ++ LL SMT doesn't support pruning - we will need to add and test that functionality. + +### Neutral + ++ Deprecating IAVL, which is one of the core proposals of Cosmos Whitepaper. + +## Alternative designs + +Most of the alternative designs were evaluated in [state commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h). + +Ethereum research published [Verkle Tire](https://notes.ethereum.org/_N1mutVERDKtqGIEYc-Flw#fnref1) - an idea of combining polynomial commitments with merkle tree in order to reduce the tree height. This concept has a very good potential, but we think it's too early to implement it. The current, SMT based design could be easily updated to the Verkle Tire once other research implement all necessary libraries. The main advantage of the design described in this ADR is the separation of state commitments from the data storage and designing a more powerful interface. + +## Further Discussions + +### Evaluated KV Databases + +We verified existing databases KV databases for evaluating snapshot support. The following databases provide efficient snapshot mechanism: Badger, RocksDB, [Pebble](https://github.com/cockroachdb/pebble). Databases which don't provide such support or are not production ready: boltdb, leveldb, goleveldb, membdb, lmdb. + +### RDBMS + +Use of RDBMS instead of simple KV store for state. Use of RDBMS will require an SDK API breaking change (`KVStore` interface), will allow better data extraction and indexing solutions. Instead of saving an object as a single blob of bytes, we could save it as record in a table in the state storage layer, and as a `hash(key, protobuf(object))` in the SMT as outlined above. To verify that an object registered in RDBMS is same as the one committed to SMT, one will need to load it from RDBMS, marshal using protobuf, hash and do SMT search. + +### Off Chain Store + +We were discussing use case where modules can use a support database, which is not automatically committed. Module will responsible for having a sound storage model and can optionally use the feature discussed in __Committing to an object without saving it_ section. + +## References + ++ [IAVL What's Next?](https://github.com/cosmos/cosmos-sdk/issues/7100) ++ [IAVL overview](https://docs.google.com/document/d/16Z_hW2rSAmoyMENO-RlAhQjAG3mSNKsQueMnKpmcBv0/edit#heading=h.yd2th7x3o1iv) of it's state v0.15 ++ [State commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h) ++ [LazyLedger SMT](https://github.com/lazyledger/smt) ++ Facebook Diem (Libra) SMT [design](https://developers.diem.com/papers/jellyfish-merkle-tree/2021-01-14.pdf) ++ [Trillian Revocation Transparency](https://github.com/google/trillian/blob/master/docs/papers/RevocationTransparency.pdf), [Trillian Verifiable Data Structures](https://github.com/google/trillian/blob/master/docs/papers/VerifiableDataStructures.pdf). ++ Design and implementation [discussion](https://github.com/cosmos/cosmos-sdk/discussions/8297). diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-041-in-place-store-migrations.md b/versioned_docs/version-0.45/integrate/architecture/adr-041-in-place-store-migrations.md new file mode 100644 index 000000000..1cc9ef901 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-041-in-place-store-migrations.md @@ -0,0 +1,167 @@ +# ADR 041: In-Place Store Migrations + +## Changelog + +- 17.02.2021: Initial Draft + +## Status + +Accepted + +## Abstract + +This ADR introduces a mechanism to perform in-place state store migrations during chain software upgrades. + +## Context + +When a chain upgrade introduces state-breaking changes inside modules, the current procedure consists of exporting the whole state into a JSON file (via the `simd export` command), running migration scripts on the JSON file (`simd migrate` command), clearing the stores (`simd unsafe-reset-all` command), and starting a new chain with the migrated JSON file as new genesis (optionally with a custom initial block height). An example of such a procedure can be seen [in the Cosmos Hub 3->4 migration guide](https://github.com/cosmos/gaia/blob/v4.0.3/docs/migration/cosmoshub-3.md#upgrade-procedure). + +This procedure is cumbersome for multiple reasons: + +- The procedure takes time. It can take hours to run the `export` command, plus some additional hours to run `InitChain` on the fresh chain using the migrated JSON. +- The exported JSON file can be heavy (~100MB-1GB), making it difficult to view, edit and transfer, which in turn introduces additional work to solve these problems (such as [streaming genesis](https://github.com/cosmos/cosmos-sdk/issues/6936)). + +## Decision + +We propose a migration procedure based on modifying the KV store in-place without involving the JSON export-process-import flow described above. + +### Module `ConsensusVersion` + +We introduce a new method on the `AppModule` interface: + +```go +type AppModule interface { + // --snip-- + ConsensusVersion() uint64 +} +``` + +This methods returns an `uint64` which serves as state-breaking version of the module. It MUST be incremented on each consensus-breaking change introduced by the module. To avoid potential errors with default values, the initial version of a module MUST be set to 1. In the SDK, version 1 corresponds to the modules in the v0.41 series. + +### Module-Specific Migration Functions + +For each consensus-breaking change introduced by the module, a migration script from ConsensusVersion `N` to version `N+1` MUST be registered in the `Configurator` using its newly-added `RegisterMigration` method. All modules receive a reference to the configurator in their `RegisterServices` method on `AppModule`, and this is where the migration functions should be registered. The migration functions should be registered in increasing order. + +```go +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) + // etc. +} +``` + +For example, if the new ConsensusVersion of a module is `N` , then `N-1` migration functions MUST be registered in the configurator. + +In the SDK, the migration functions are handled by each module's keeper, because the keeper holds the `sdk.StoreKey` used to perform in-place store migrations. To not overload the keeper, a `Migrator` wrapper is used by each module to handle the migration functions: + +```go +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + BaseKeeper +} +``` + +Since migration functions manipulate legacy code, they should live inside the `legacy/` folder of each module, and be called by the Migrator's methods. We propose the format `Migrate{M}to{N}` for method names. + +```go +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v043bank.MigrateStore(ctx, m.keeper.storeKey) // v043bank is package `x/bank/legacy/v043`. +} +``` + +Each module's migration functions are specific to the module's store evolutions, and are not described in this ADR. An example of x/bank store key migrations after the introduction of ADR-028 length-prefixed addresses can be seen in this [store.go code](https://github.com/cosmos/cosmos-sdk/blob/36f68eb9e041e20a5bb47e216ac5eb8b91f95471/x/bank/legacy/v043/store.go#L41-L62). + +### Tracking Module Versions in `x/upgrade` + +We introduce a new prefix store in `x/upgrade`'s store. This store will track each module's current version, it can be modelized as a `map[string]uint64` of module name to module ConsensusVersion, and will be used when running the migrations (see next section for details). The key prefix used is `0x1`, and the key/value format is: + +``` +0x2 | {bytes(module_name)} => BigEndian(module_consensus_version) +``` + +The initial state of the store is set from `app.go`'s `InitChainer` method. + +The UpgradeHandler signature needs to be updated to take a `VersionMap`, as well as return an upgraded `VersionMap` and an error: + +```diff +- type UpgradeHandler func(ctx sdk.Context, plan Plan) ++ type UpgradeHandler func(ctx sdk.Context, plan Plan, versionMap VersionMap) (VersionMap, error) +``` + +To apply an upgrade, we query the `VersionMap` from the `x/upgrade` store and pass it into the handler. The handler runs the actual migration functions (see next section), and if successful, returns an updated `VersionMap` to be stored in state. + +```diff +func (k UpgradeKeeper) ApplyUpgrade(ctx sdk.Context, plan types.Plan) { + // --snip-- +- handler(ctx, plan) ++ updatedVM, err := handler(ctx, plan, k.GetModuleVersionMap(ctx)) // k.GetModuleVersionMap() fetches the VersionMap stored in state. ++ if err != nil { ++ return err ++ } ++ ++ // Set the updated consensus versions to state ++ k.SetModuleVersionMap(ctx, updatedVM) +} +``` + +A gRPC query endpoint to query the `VersionMap` stored in `x/upgrade`'s state will also be added, so that app developers can double-check the `VersionMap` before the upgrade handler runs. + +### Running Migrations + +Once all the migration handlers are registered inside the configurator (which happens at startup), running migrations can happen by calling the `RunMigrations` method on `module.Manager`. This function will loop through all modules, and for each module: + +- Get the old ConsensusVersion of the module from its `VersionMap` argument (let's call it `M`). +- Fetch the new ConsensusVersion of the module from the `ConsensusVersion()` method on `AppModule` (call it `N`). +- If `N>M`, run all registered migrations for the module sequentially `M -> M+1 -> M+2...` until `N`. + - There is a special case where there is no ConsensusVersion for the module, as this means that the module has been newly added during the upgrade. In this case, no migration function is run, and the module's current ConsensusVersion is saved to `x/upgrade`'s store. + +If a required migration is missing (e.g. if it has not been registered in the `Configurator`), then the `RunMigrations` function will error. + +In practice, the `RunMigrations` method should be called from inside an `UpgradeHandler`. + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + return app.mm.RunMigrations(ctx, vm) +}) +``` + +Assuming a chain upgrades at block `n`, the procedure should run as follows: + +- the old binary will halt in `BeginBlock` when starting block `N`. In its store, the ConsensusVersions of the old binary's modules are stored. +- the new binary will start at block `N`. The UpgradeHandler is set in the new binary, so will run at `BeginBlock` of the new binary. Inside `x/upgrade`'s `ApplyUpgrade`, the `VersionMap` will be retrieved from the (old binary's) store, and passed into the `RunMigrations` functon, migrating all module stores in-place before the modules' own `BeginBlock`s. + +## Consequences + +### Backwards Compatibility + +This ADR introduces a new method `ConsensusVersion()` on `AppModule`, which all modules need to implement. It also alters the UpgradeHandler function signature. As such, it is not backwards-compatible. + +While modules MUST register their migration functions when bumping ConsensusVersions, running those scripts using an upgrade handler is optional. An application may perfectly well decide to not call the `RunMigrations` inside its upgrade handler, and continue using the legacy JSON migration path. + +### Positive + +- Perform chain upgrades without manipulating JSON files. +- While no benchmark has been made yet, it is probable that in-place store migrations will take less time than JSON migrations. The main reason supporting this claim is that both the `simd export` command on the old binary and the `InitChain` function on the new binary will be skipped. + +### Negative + +- Module developers MUST correctly track consensus-breaking changes in their modules. If a consensus-breaking change is introduced in a module without its corresponding `ConsensusVersion()` bump, then the `RunMigrations` function won't detect the migration, and the chain upgrade might be unsuccessful. Documentation should clearly reflect this. + +### Neutral + +- The SDK will continue to support JSON migrations via the existing `simd export` and `simd migrate` commands. +- The current ADR does not allow creating, renaming or deleting stores, only modifying existing store keys and values. The SDK already has the `StoreLoader` for those operations. + +## Further Discussions + +## References + +- Initial discussion: https://github.com/cosmos/cosmos-sdk/discussions/8429 +- Implementation of `ConsensusVersion` and `RunMigrations`: https://github.com/cosmos/cosmos-sdk/pull/8485 +- Issue discussing `x/upgrade` design: https://github.com/cosmos/cosmos-sdk/issues/8514 diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-042-group-module.md b/versioned_docs/version-0.45/integrate/architecture/adr-042-group-module.md new file mode 100644 index 000000000..7d863f958 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-042-group-module.md @@ -0,0 +1,279 @@ +# ADR 042: Group Module + +## Changelog + +- 2020/04/09: Initial Draft + +## Status + +Draft + +## Abstract + +This ADR defines the `x/group` module which allows the creation and management of on-chain multi-signature accounts and enables voting for message execution based on configurable decision policies. + +## Context + +The legacy amino multi-signature mechanism of the Cosmos SDK has certain limitations: + +- Key rotation is not possible, although this can be solved with [account rekeying](adr-034-account-rekeying.md). +- Thresholds can't be changed. +- UX is cumbersome for non-technical users ([#5661](https://github.com/cosmos/cosmos-sdk/issues/5661)). +- It requires `legacy_amino` sign mode ([#8141](https://github.com/cosmos/cosmos-sdk/issues/8141)). + +While the group module is not meant to be a total replacement for the current multi-signature accounts, it provides a solution to the limitations described above, with a more flexible key management system where keys can be added, updated or removed, as well as configurable thresholds. +It's meant to be used with other access control modules such as [`x/feegrant`](./adr-029-fee-grant-module.md) ans [`x/authz`](adr-030-authz-module.md) to simplify key management for individuals and organizations. + +The proof of concept of the group module can be found in https://github.com/regen-network/regen-ledger/tree/master/proto/regen/group/v1alpha1 and https://github.com/regen-network/regen-ledger/tree/master/x/group. + +## Decision + +We propose merging the `x/group` module with its supporting [ORM/Table Store package](https://github.com/regen-network/regen-ledger/tree/master/orm) ([#7098](https://github.com/cosmos/cosmos-sdk/issues/7098)) into the Cosmos SDK and continuing development here. There will be a dedicated ADR for the ORM package. + +### Group + +A group is a composition of accounts with associated weights. It is not +an account and doesn't have a balance. It doesn't in and of itself have any +sort of voting or decision weight. +Group members can create proposals and vote on them through group accounts using different decision policies. + +It has an `admin` account which can manage members in the group, update the group +metadata and set a new admin. + +```proto +message GroupInfo { + + // group_id is the unique ID of this group. + uint64 group_id = 1; + + // admin is the account address of the group's admin. + string admin = 2; + + // metadata is any arbitrary metadata to attached to the group. + bytes metadata = 3; + + // version is used to track changes to a group's membership structure that + // would break existing proposals. Whenever a member weight has changed, + // or any member is added or removed, the version is incremented and will + // invalidate all proposals from older versions. + uint64 version = 4; + + // total_weight is the sum of the group members' weights. + string total_weight = 5; +} +``` + +```proto +message GroupMember { + + // group_id is the unique ID of the group. + uint64 group_id = 1; + + // member is the member data. + Member member = 2; +} + +// Member represents a group member with an account address, +// non-zero weight and metadata. +message Member { + + // address is the member's account address. + string address = 1; + + // weight is the member's voting weight that should be greater than 0. + string weight = 2; + + // metadata is any arbitrary metadata to attached to the member. + bytes metadata = 3; +} +``` + +### Group Account + +A group account is an account associated with a group and a decision policy. +A group account does have a balance. + +Group accounts are abstracted from groups because a single group may have +multiple decision policies for different types of actions. Managing group +membership separately from decision policies results in the least overhead +and keeps membership consistent across different policies. The pattern that +is recommended is to have a single master group account for a given group, +and then to create separate group accounts with different decision policies +and delegate the desired permissions from the master account to +those "sub-accounts" using the [`x/authz` module](adr-030-authz-module.md). + +```proto +message GroupAccountInfo { + + // address is the group account address. + string address = 1; + + // group_id is the ID of the Group the GroupAccount belongs to. + uint64 group_id = 2; + + // admin is the account address of the group admin. + string admin = 3; + + // metadata is any arbitrary metadata of this group account. + bytes metadata = 4; + + // version is used to track changes to a group's GroupAccountInfo structure that + // invalidates active proposal from old versions. + uint64 version = 5; + + // decision_policy specifies the group account's decision policy. + google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "DecisionPolicy"]; +} +``` + +Similarly to a group admin, a group account admin can update its metadata, decision policy or set a new group account admin. + +A group account can also be an admin or a member of a group. +For instance, a group admin could be another group account which could "elects" the members or it could be the same group that elects itself. + +### Decision Policy + +A decision policy is the mechanism by which members of a group can vote on +proposals. + +All decision policies should have a minimum and maximum voting window. +The minimum voting window is the minimum duration that must pass in order +for a proposal to potentially pass, and it may be set to 0. The maximum voting +window is the maximum time that a proposal may be voted on and executed if +it reached enough support before it is closed. +Both of these values must be less than a chain-wide max voting window parameter. + +We define the `DecisionPolicy` interface that all decision policies must implement: + +```go +type DecisionPolicy interface { + codec.ProtoMarshaler + + ValidateBasic() error + GetTimeout() types.Duration + Allow(tally Tally, totalPower string, votingDuration time.Duration) (DecisionPolicyResult, error) + Validate(g GroupInfo) error +} + +type DecisionPolicyResult struct { + Allow bool + Final bool +} +``` + +#### Threshold decision policy + +A threshold decision policy defines a minimum support votes (_yes_), based on a tally +of voter weights, for a proposal to pass. For +this decision policy, abstain and veto are treated as no support (_no_). + +```proto +message ThresholdDecisionPolicy { + + // threshold is the minimum weighted sum of support votes for a proposal to succeed. + string threshold = 1; + + // voting_period is the duration from submission of a proposal to the end of voting period + // Within this period, votes and exec messages can be submitted. + google.protobuf.Duration voting_period = 2 [(gogoproto.nullable) = false]; +} +``` + +### Proposal + +Any member of a group can submit a proposal for a group account to decide upon. +A proposal consists of a set of `sdk.Msg`s that will be executed if the proposal +passes as well as any metadata associated with the proposal. These `sdk.Msg`s get validated as part of the `Msg/CreateProposal` request validation. They should also have their signer set as the group account. + +Internally, a proposal also tracks: + +- its current `Status`: submitted, closed or aborted +- its `Result`: unfinalized, accepted or rejected +- its `VoteState` in the form of a `Tally`, which is calculated on new votes and when executing the proposal. + +```proto +// Tally represents the sum of weighted votes. +message Tally { + option (gogoproto.goproto_getters) = false; + + // yes_count is the weighted sum of yes votes. + string yes_count = 1; + + // no_count is the weighted sum of no votes. + string no_count = 2; + + // abstain_count is the weighted sum of abstainers. + string abstain_count = 3; + + // veto_count is the weighted sum of vetoes. + string veto_count = 4; +} +``` + +### Voting + +Members of a group can vote on proposals. There are four choices to choose while voting - yes, no, abstain and veto. Not +all decision policies will support them. Votes can contain some optional metadata. +In the current implementation, the voting window begins as soon as a proposal +is submitted. + +Voting internally updates the proposal `VoteState` as well as `Status` and `Result` if needed. + +### Executing Proposals + +Proposals will not be automatically executed by the chain in this current design, +but rather a user must submit a `Msg/Exec` transaction to attempt to execute the +proposal based on the current votes and decision policy. A future upgrade could +automate this and have the group account (or a fee granter) pay. + +#### Changing Group Membership + +In the current implementation, updating a group or a group account after submitting a proposal will make it invalid. It will simply fail if someone calls `Msg/Exec` and will eventually be garbage collected. + +### Notes on current implementation + +This section outlines the current implementation used in the proof of concept of the group module but this could be subject to changes and iterated on. + +#### ORM + +The [ORM package](https://github.com/cosmos/cosmos-sdk/discussions/9156) defines tables, sequences and secondary indexes which are used in the group module. + +Groups are stored in state as part of a `groupTable`, the `group_id` being an auto-increment integer. Group members are stored in a `groupMemberTable`. + +Group accounts are stored in a `groupAccountTable`. The group account address is generated based on an auto-increment integer which is used to derive the group module `RootModuleKey` into a `DerivedModuleKey`, as stated in [ADR-033](adr-033-protobuf-inter-module-comm.md#modulekeys-and-moduleids). The group account is added as a new `ModuleAccount` through `x/auth`. + +Proposals are stored as part of the `proposalTable` using the `Proposal` type. The `proposal_id` is an auto-increment integer. + +Votes are stored in the `voteTable`. The primary key is based on the vote's `proposal_id` and `voter` account address. + +#### ADR-033 to route proposal messages + +Inter-module communication introduced by [ADR-033](adr-033-protobuf-inter-module-comm.md) can be used to route a proposal's messages using the `DerivedModuleKey` corresponding to the proposal's group account. + +## Consequences + +### Positive + +- Improved UX for multi-signature accounts allowing key rotation and custom decision policies. + +### Negative + +### Neutral + +- It uses ADR 033 so it will need to be implemented within the Cosmos SDK, but this doesn't imply necessarily any large refactoring of existing Cosmos SDK modules. +- The current implementation of the group module uses the ORM package. + +## Further Discussions + +- Convergence of `/group` and `x/gov` as both support proposals and voting: https://github.com/cosmos/cosmos-sdk/discussions/9066 +- `x/group` possible future improvements: + - Execute proposals on submission (https://github.com/regen-network/regen-ledger/issues/288) + - Withdraw a proposal (https://github.com/regen-network/cosmos-modules/issues/41) + - Make `Tally` more flexible and support non-binary choices + +## References + +- Initial specification: + - https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#group-module + - [#5236](https://github.com/cosmos/cosmos-sdk/pull/5236) +- Proposal to add `x/group` into the SDK: [#7633](https://github.com/cosmos/cosmos-sdk/issues/7633) diff --git a/versioned_docs/version-0.45/integrate/architecture/adr-template.md b/versioned_docs/version-0.45/integrate/architecture/adr-template.md new file mode 100644 index 000000000..191cd8e95 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/architecture/adr-template.md @@ -0,0 +1,60 @@ +# ADR {ADR-NUMBER}: {TITLE} + +## Changelog + +- {date}: {changelog} + +## Status + +{DRAFT | PROPOSED} Not Implemented + +> Please have a look at the [PROCESS](./PROCESS.md#adr-status) page. +> Use DRAFT if the ADR is in a draft stage (draft PR) or PROPOSED if it's in review. + +## Abstract + +> "If you can't explain it simply, you don't understand it well enough." Provide a simplified and layman-accessible explanation of the ADR. +> A short (~200 word) description of the issue being addressed. + +## Context + +> This section describes the forces at play, including technological, political, social, and project local. These forces are probably in tension, and should be called out as such. The language in this section is value-neutral. It is simply describing facts. It should clearly explain the problem and motivation that the proposal aims to resolve. +> {context body} + +## Decision + +> This section describes our response to these forces. It is stated in full sentences, with active voice. "We will ..." +> {decision body} + +## Consequences + +> This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ADR must explain how the author proposes to deal with these incompatibilities. ADR submissions without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +{positive consequences} + +### Negative + +{negative consequences} + +### Neutral + +{neutral consequences} + +## Further Discussions + +While an ADR is in the DRAFT or PROPOSED stage, this section should contain a summary of issues to be solved in future iterations (usually referencing comments from a pull-request discussion). +Later, this section can optionally list ideas or improvements the author or reviewers found during the analysis of this ADR. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +- {reference link} diff --git a/versioned_docs/version-0.45/integrate/building-modules/README.md b/versioned_docs/version-0.45/integrate/building-modules/README.md new file mode 100644 index 000000000..411c3e8d3 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/README.md @@ -0,0 +1,23 @@ + + +# Building Modules + +This repository contains documentation on concepts developers need to know in order to build modules for Cosmos SDK applications. + +1. [Introduction to Cosmos SDK Modules](./intro.md) +2. [`AppModule` Interface and Module Manager](./module-manager.md) +3. [Messages and Queries](./messages-and-queries.md) +4. [`Msg` services - Processing Messages](./msg-services.md) +5. [Query Services - Processing Queries](./query-services.md) +6. [BeginBlocker and EndBlocker](./beginblock-endblock.md) +7. [`Keeper`s](./keeper.md) +8. [Invariants](./invariants.md) +9. [Genesis](./genesis.md) +10. [Module Interfaces](./module-interfaces.md) +11. [Standard Module Structure](./structure.md) +12. [Errors](./errors.md) +13. [In-Place Store Migrations](./upgrade.md) diff --git a/versioned_docs/version-0.45/integrate/building-modules/beginblock-endblock.md b/versioned_docs/version-0.45/integrate/building-modules/beginblock-endblock.md new file mode 100644 index 000000000..2814c0ae9 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/beginblock-endblock.md @@ -0,0 +1,39 @@ + + +# BeginBlocker and EndBlocker + +`BeginBlocker` and `EndBlocker` are optional methods module developers can implement in their module. They will be triggered at the beginning and at the end of each block respectively, when the [`BeginBlock`](../core/baseapp.md#beginblock) and [`EndBlock`](../core/baseapp.md#endblock) ABCI messages are received from the underlying consensus engine. {synopsis} + +## Pre-requisite Readings + +- [Module Manager](./module-manager.md) {prereq} + +## BeginBlocker and EndBlocker + +`BeginBlocker` and `EndBlocker` are a way for module developers to add automatic execution of logic to their module. This is a powerful tool that should be used carefully, as complex automatic functions can slow down or even halt the chain. + +When needed, `BeginBlocker` and `EndBlocker` are implemented as part of the [`AppModule` interface](./module-manager.md#appmodule). The `BeginBlock` and `EndBlock` methods of the interface implemented in `module.go` generally defer to `BeginBlocker` and `EndBlocker` methods respectively, which are usually implemented in `abci.go`. + +The actual implementation of `BeginBlocker` and `EndBlocker` in `abci.go` are very similar to that of a [`Msg` service](./msg-services.md): + +- They generally use the [`keeper`](./keeper.md) and [`ctx`](../core/context.md) to retrieve information about the latest state. +- If needed, they use the `keeper` and `ctx` to trigger state-transitions. +- If needed, they can emit [`events`](../core/events.md) via the `ctx`'s `EventManager`. + +A specificity of the `EndBlocker` is that it can return validator updates to the underlying consensus engine in the form of an [`[]abci.ValidatorUpdates`](https://tendermint.com/docs/app-dev/abci-spec.html#validatorupdate). This is the preferred way to implement custom validator changes. + +It is possible for developers to define the order of execution between the `BeginBlocker`/`EndBlocker` functions of each of their application's modules via the module's manager `SetOrderBeginBlocker`/`SetOrderEndBlocker` methods. For more on the module manager, click [here](./module-manager.md#manager). + +See an example implementation of `BeginBlocker` from the `distr` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/f33749263f4ecc796115ad6e789cb0f7cddf9148/x/distribution/abci.go#L14-L38 + +and an example implementation of `EndBlocker` from the `staking` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/f33749263f4ecc796115ad6e789cb0f7cddf9148/x/staking/abci.go#L22-L27 + +## Next {hide} + +Learn about [`keeper`s](./keeper.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/errors.md b/versioned_docs/version-0.45/integrate/building-modules/errors.md new file mode 100644 index 000000000..d1bc36824 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/errors.md @@ -0,0 +1,50 @@ + + +# Errors + +This document outlines the recommended usage and APIs for error handling in Cosmos SDK modules. {synopsis} + +Modules are encouraged to define and register their own errors to provide better +context on failed message or handler execution. Typically, these errors should be +common or general errors which can be further wrapped to provide additional specific +execution context. + +## Registration + +Modules should define and register their custom errors in `x/{module}/errors.go`. Registration +of errors is handled via the `types/errors` package. + +Example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.38.1/x/distribution/types/errors.go#L1-L21 + +Each custom module error must provide the codespace, which is typically the module name +(e.g. "distribution") and is unique per module, and a uint32 code. Together, the codespace and code +provide a globally unique SDK error. Typically, the code is monotonically increasing but does not +necessarily have to be. The only restrictions on error codes are the following: + +* Must be greater than one, as a code value of one is reserved for internal errors. +* Must be unique within the module. + +Note, the SDK provides a core set of *common* errors. These errors are defined in `types/errors/errors.go`. + +## Wrapping + +The custom module errors can be returned as their concrete type as they already fulfill the `error` +interface. However, module errors can be wrapped to provide further context and meaning to failed +execution. + +Example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/b2d48a9e815fe534a7faeec6ca2adb0874252b81/x/bank/keeper/keeper.go#L85-L122 + +Regardless if an error is wrapped or not, the SDK's `errors` package provides an API to determine if +an error is of a particular kind via `Is`. + +## ABCI + +If a module error is registered, the SDK `errors` package allows ABCI information to be extracted +through the `ABCIInfo` API. The package also provides `ResponseCheckTx` and `ResponseDeliverTx` as +auxiliary APIs to automatically get `CheckTx` and `DeliverTx` responses from an error. diff --git a/versioned_docs/version-0.45/integrate/building-modules/genesis.md b/versioned_docs/version-0.45/integrate/building-modules/genesis.md new file mode 100644 index 000000000..7ad32b4d4 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/genesis.md @@ -0,0 +1,60 @@ + + +# Module Genesis + +Modules generally handle a subset of the state and, as such, they need to define the related subset of the genesis file as well as methods to initialize, verify and export it. {synopsis} + +## Pre-requisite Readings + +- [Module Manager](./module-manager.md) {prereq} +- [Keepers](./keeper.md) {prereq} + +## Type Definition + +The subset of the genesis state defined from a given module is generally defined in a `genesis.proto` file ([more info](../core/encoding.md#gogoproto) on how to define protobuf messages). The struct defining the module's subset of the genesis state is usually called `GenesisState` and contains all the module-related values that need to be initialized during the genesis process. + +See an example of `GenesisState` protobuf message definition from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/a9547b54ffac9729fe1393651126ddfc0d236cff/proto/cosmos/auth/v1beta1/genesis.proto + +Next we present the main genesis-related methods that need to be implemented by module developers in order for their module to be used in Cosmos SDK applications. + +### `DefaultGenesis` + +The `DefaultGenesis()` method is a simple method that calls the constructor function for `GenesisState` with the default value for each parameter. See an example from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/64b6bb5270e1a3b688c2d98a8f481ae04bb713ca/x/auth/module.go#L48-L52 + +### `ValidateGenesis` + +The `ValidateGenesis(genesisState GenesisState)` method is called to verify that the provided `genesisState` is correct. It should perform validity checks on each of the parameters listed in `GenesisState`. See an example from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/64b6bb5270e1a3b688c2d98a8f481ae04bb713ca/x/auth/types/genesis.go#L57-L70 + +## Other Genesis Methods + +Other than the methods related directly to `GenesisState`, module developers are expected to implement two other methods as part of the [`AppModuleGenesis` interface](./module-manager.md#appmodulegenesis) (only if the module needs to initialize a subset of state in genesis). These methods are [`InitGenesis`](#initgenesis) and [`ExportGenesis`](#exportgenesis). + +### `InitGenesis` + +The `InitGenesis` method is executed during [`InitChain`](../core/baseapp.md#initchain) when the application is first started. Given a `GenesisState`, it initializes the subset of the state managed by the module by using the module's [`keeper`](./keeper.md) setter function on each parameter within the `GenesisState`. + +The [module manager](./module-manager.md#manager) of the application is responsible for calling the `InitGenesis` method of each of the application's modules in order. This order is set by the application developer via the manager's `SetOrderGenesisMethod`, which is called in the [application's constructor function](../basics/app-anatomy.md#constructor-function). + +See an example of `InitGenesis` from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/64b6bb5270e1a3b688c2d98a8f481ae04bb713ca/x/auth/genesis.go#L13-L28 + +### `ExportGenesis` + +The `ExportGenesis` method is executed whenever an export of the state is made. It takes the latest known version of the subset of the state managed by the module and creates a new `GenesisState` out of it. This is mainly used when the chain needs to be upgraded via a hard fork. + +See an example of `ExportGenesis` from the `auth` module. + ++++ https://github.com/cosmos/cosmos-sdk/blob/64b6bb5270e1a3b688c2d98a8f481ae04bb713ca/x/auth/genesis.go#L31-L42 + +## Next {hide} + +Learn about [modules interfaces](module-interfaces.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/intro.md b/versioned_docs/version-0.45/integrate/building-modules/intro.md new file mode 100644 index 000000000..b486176bc --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/intro.md @@ -0,0 +1,92 @@ + + +# Introduction to SDK Modules + +Modules define most of the logic of SDK applications. Developers compose modules together using the Cosmos SDK to build their custom application-specific blockchains. This document outlines the basic concepts behind SDK modules and how to approach module management. {synopsis} + +## Pre-requisite Readings + +- [Anatomy of an SDK application](../basics/app-anatomy.md) {prereq} +- [Lifecycle of an SDK transaction](../basics/tx-lifecycle.md) {prereq} + +## Role of Modules in an SDK Application + +The Cosmos SDK can be thought of as the Ruby-on-Rails of blockchain development. It comes with a core that provides the basic functionalities every blockchain application needs, like a [boilerplate implementation of the ABCI](../core/baseapp.md) to communicate with the underlying consensus engine, a [`multistore`](../core/store.md#multistore) to persist state, a [server](../core/node.md) to form a full-node and [interfaces](./module-interfaces.md) to handle queries. + +On top of this core, the Cosmos SDK enables developers to build modules that implement the business logic of their application. In other words, SDK modules implement the bulk of the logic of applications, while the core does the wiring and enables modules to be composed together. The end goal is to build a robust ecosystem of open-source SDK modules, making it increasingly easier to build complex blockchain applications. + +SDK modules can be seen as little state-machines within the state-machine. They generally define a subset of the state using one or more `KVStore`s in the [main multistore](../core/store.md), as well as a subset of [message types](./messages-and-queries.md#messages). These messages are routed by one of the main components of SDK core, [`BaseApp`](../core/baseapp.md), to a module Protobuf [`Msg` service](./msg-services.md) that defines them. + +``` + + + | + | Transaction relayed from the full-node's consensus engine + | to the node's application via DeliverTx + | + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | + | Message routed to the correct + | module to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to the underlying consensus engine (e.g. Tendermint) + | (0=Ok, 1=Err) + v +``` + +As a result of this architecture, building an SDK application usually revolves around writing modules to implement the specialized logic of the application, and composing them with existing modules to complete the application. Developers will generally work on modules that implement logic needed for their specific use case that do not exist yet, and will use existing modules for more generic functionalities like staking, accounts or token management. + +## How to Approach Building Modules as a Developer + +While there are no definitive guidelines for writing modules, here are some important design principles developers should keep in mind when building them: + +- **Composability**: SDK applications are almost always composed of multiple modules. This means developers need to carefully consider the integration of their module not only with the core of the Cosmos SDK, but also with other modules. The former is achieved by following standard design patterns outlined [here](#main-components-of-sdk-modules), while the latter is achieved by properly exposing the store(s) of the module via the [`keeper`](./keeper.md). +- **Specialization**: A direct consequence of the **composability** feature is that modules should be **specialized**. Developers should carefully establish the scope of their module and not batch multiple functionalities into the same module. This separation of concerns enables modules to be re-used in other projects and improves the upgradability of the application. **Specialization** also plays an important role in the [object-capabilities model](../core/ocap.md) of the Cosmos SDK. +- **Capabilities**: Most modules need to read and/or write to the store(s) of other modules. However, in an open-source environment, it is possible for some modules to be malicious. That is why module developers need to carefully think not only about how their module interacts with other modules, but also about how to give access to the module's store(s). The Cosmos SDK takes a capabilities-oriented approach to inter-module security. This means that each store defined by a module is accessed by a `key`, which is held by the module's [`keeper`](./keeper.md). This `keeper` defines how to access the store(s) and under what conditions. Access to the module's store(s) is done by passing a reference to the module's `keeper`. + +## Main Components of SDK Modules + +Modules are by convention defined in the `./x/` subfolder (e.g. the `bank` module will be defined in the `./x/bank` folder). They generally share the same core components: + +- A [`keeper`](./keeper.md), used to access the module's store(s) and update the state. +- A [`Msg` service](./messages-and-queries.md#messages), used to process messages when they are routed to the module by [`BaseApp`](../core/baseapp.md#message-routing) and trigger state-transitions. +- A [query service](./query-services.md), used to process user queries when they are routed to the module by [`BaseApp`](../core/baseapp.md#query-routing). +- Interfaces, for end users to query the subset of the state defined by the module and create `message`s of the custom types defined in the module. + +In addition to these components, modules implement the `AppModule` interface in order to be managed by the [`module manager`](./module-manager.md). + +Please refer to the [structure document](./structure.md) to learn about the recommended structure of a module's directory. + +## Next {hide} + +Read more on the [`AppModule` interface and the `module manager`](./module-manager.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/invariants.md b/versioned_docs/version-0.45/integrate/building-modules/invariants.md new file mode 100644 index 000000000..0adce4dc1 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/invariants.md @@ -0,0 +1,88 @@ + + +# Invariants + +An invariant is a property of the application that should always be true. In the context of the Cosmos SDK, an `Invariant` is a function that checks for a particular invariant. These functions are useful to detect bugs early on and act upon them to limit their potential consequences (e.g. by halting the chain). They are also useful in the development process of the application to detect bugs via simulations. {synopsis} + +## Pre-requisite Readings + +- [Keepers](./keeper.md) {prereq} + +## Implementing `Invariant`s + +An `Invariant` is a function that checks for a particular invariant within a module. Module `Invariant`s must follow the `Invariant` type: + ++++ https://github.com/cosmos/cosmos-sdk/blob/7d7821b9af132b0f6131640195326aa02b6751db/types/invariant.go#L9 + +The `string` return value is the invariant message, which can be used when printing logs, and the `bool` return value is the actual result of the invariant check. + +In practice, each module implements `Invariant`s in a `./keeper/invariants.go` file within the module's folder. The standard is to implement one `Invariant` function per logical grouping of invariants with the following model: + +```go +// Example for an Invariant that checks balance-related invariants + +func BalanceInvariants(k Keeper) sdk.Invariant { + return func(ctx sdk.Context) (string, bool) { + // Implement checks for balance-related invariants + } +} +``` + +Additionally, module developers should generally implement an `AllInvariants` function that runs all the `Invariant`s functions of the module: + +```go +// AllInvariants runs all invariants of the module. +// In this example, the module implements two Invariants: BalanceInvariants and DepositsInvariants + +func AllInvariants(k Keeper) sdk.Invariant { + + return func(ctx sdk.Context) (string, bool) { + res, stop := BalanceInvariants(k)(ctx) + if stop { + return res, stop + } + + return DepositsInvariant(k)(ctx) + } +} +``` + +Finally, module developers need to implement the `RegisterInvariants` method as part of the [`AppModule` interface](./module-manager.md#appmodule). Indeed, the `RegisterInvariants` method of the module, implemented in the `module/module.go` file, typically only defers the call to a `RegisterInvariants` method implemented in the `keeper/invariants.go` file. The `RegisterInvariants` method registers a route for each `Invariant` function in the [`InvariantRegistry`](#invariant-registry): + +```go +// RegisterInvariants registers all staking invariants +func RegisterInvariants(ir sdk.InvariantRegistry, k Keeper) { + ir.RegisterRoute(types.ModuleName, "module-accounts", + BalanceInvariants(k)) + ir.RegisterRoute(types.ModuleName, "nonnegative-power", + DepositsInvariant(k)) +} +``` + +For more, see an example of [`Invariant`s implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/7d7821b9af132b0f6131640195326aa02b6751db/x/staking/keeper/invariants.go). + +## Invariant Registry + +The `InvariantRegistry` is a registry where the `Invariant`s of all the modules of an application are registered. There is only one `InvariantRegistry` per **application**, meaning module developers need not implement their own `InvariantRegistry` when building a module. **All module developers need to do is to register their modules' invariants in the `InvariantRegistry`, as explained in the section above**. The rest of this section gives more information on the `InvariantRegistry` itself, and does not contain anything directly relevant to module developers. + +At its core, the `InvariantRegistry` is defined in the SDK as an interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/7d7821b9af132b0f6131640195326aa02b6751db/types/invariant.go#L14-L17 + +Typically, this interface is implemented in the `keeper` of a specific module. The most used implementation of an `InvariantRegistry` can be found in the `crisis` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/x/crisis/keeper/keeper.go#L50-L54 + + The `InvariantRegistry` is therefore typically instantiated by instantiating the `keeper` of the `crisis` module in the [application's constructor function](../basics/app-anatomy.md#constructor-function). + +`Invariant`s can be checked manually via [`message`s](./messages-and-queries.md), but most often they are checked automatically at the end of each block. Here is an example from the `crisis` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/7d7821b9af132b0f6131640195326aa02b6751db/x/crisis/abci.go#L7-L14 + +In both cases, if one of the `Invariant`s returns false, the `InvariantRegistry` can trigger special logic (e.g. have the application panic and print the `Invariant`s message in the log). + +## Next {hide} + +Learn about [genesis functionalities](./genesis.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/keeper.md b/versioned_docs/version-0.45/integrate/building-modules/keeper.md new file mode 100644 index 000000000..0f82ccd2e --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/keeper.md @@ -0,0 +1,85 @@ + + +# Keepers + +`Keeper`s refer to a Cosmos SDK abstraction whose role is to manage access to the subset of the state defined by various modules. `Keeper`s are module-specific, i.e. the subset of state defined by a module can only be accessed by a `keeper` defined in said module. If a module needs to access the subset of state defined by another module, a reference to the second module's internal `keeper` needs to be passed to the first one. This is done in `app.go` during the instantiation of module keepers. {synopsis} + +## Pre-requisite Readings + +- [Introduction to SDK Modules](./intro.md) {prereq} + +## Motivation + +The Cosmos SDK is a framework that makes it easy for developers to build complex decentralised applications from scratch, mainly by composing modules together. As the ecosystem of open source modules for the Cosmos SDK expands, it will become increasingly likely that some of these modules contain vulnerabilities, as a result of the negligence or malice of their developer. + +The Cosmos SDK adopts an [object-capabilities-based approach](../core/ocap.md) to help developers better protect their application from unwanted inter-module interactions, and `keeper`s are at the core of this approach. A `keeper` can be thought of quite literally as the gatekeeper of a module's store(s). Each store (typically an [`IAVL` Store](../core/store.md#iavl-store)) defined within a module comes with a `storeKey`, which grants unlimited access to it. The module's `keeper` holds this `storeKey` (which should otherwise remain unexposed), and defines [methods](#implementing-methods) for reading and writing to the store(s). + +The core idea behind the object-capabilities approach is to only reveal what is necessary to get the work done. In practice, this means that instead of handling permissions of modules through access-control lists, module `keeper`s are passed a reference to the specific instance of the other modules' `keeper`s that they need to access (this is done in the [application's constructor function](../basics/app-anatomy.md#constructor-function)). As a consequence, a module can only interact with the subset of state defined in another module via the methods exposed by the instance of the other module's `keeper`. This is a great way for developers to control the interactions that their own module can have with modules developed by external developers. + +## Type Definition + +`keeper`s are generally implemented in a `/keeper/keeper.go` file located in the module's folder. By convention, the type `keeper` of a module is simply named `Keeper` and usually follows the following structure: + +```go +type Keeper struct { + // External keepers, if any + + // Store key(s) + + // codec +} +``` + +For example, here is the type definition of the `keeper` from the `staking` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/3bafd8255a502e5a9cee07391cf8261538245dfd/x/staking/keeper/keeper.go#L23-L33 + +Let us go through the different parameters: + +- An expected `keeper` is a `keeper` external to a module that is required by the internal `keeper` of said module. External `keeper`s are listed in the internal `keeper`'s type definition as interfaces. These interfaces are themselves defined in an `expected_keepers.go` file in the root of the module's folder. In this context, interfaces are used to reduce the number of dependencies, as well as to facilitate the maintenance of the module itself. +- `storeKey`s grant access to the store(s) of the [multistore](../core/store.md) managed by the module. They should always remain unexposed to external modules. +- `cdc` is the [codec](../core/encoding.md) used to marshall and unmarshall structs to/from `[]byte`. The `cdc` can be any of `codec.BinaryCodec`, `codec.JSONCodec` or `codec.Codec` based on your requirements. It can be either a proto or amino codec as long as they implement these interfaces. + +Of course, it is possible to define different types of internal `keeper`s for the same module (e.g. a read-only `keeper`). Each type of `keeper` comes with its own constructor function, which is called from the [application's constructor function](../basics/app-anatomy.md). This is where `keeper`s are instantiated, and where developers make sure to pass correct instances of modules' `keeper`s to other modules that require them. + +## Implementing Methods + +`Keeper`s primarily expose getter and setter methods for the store(s) managed by their module. These methods should remain as simple as possible and strictly be limited to getting or setting the requested value, as validity checks should have already been performed via the `ValidateBasic()` method of the [`message`](./messages-and-queries.md#messages) and the [`Msg` server](./msg-services.md) when `keeper`s' methods are called. + +Typically, a *getter* method will have the following signature + +```go +func (k Keeper) Get(ctx sdk.Context, key string) returnType +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. Then it's prefered to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. If it exists, get the `[]byte` value stored at location `[]byte(key)` using the `Get(key []byte)` method of the store. +3. Unmarshall the retrieved value from `[]byte` to `returnType` using the codec `cdc`. Return the value. + +Similarly, a *setter* method will have the following signature + +```go +func (k Keeper) Set(ctx sdk.Context, key string, value valueType) +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. It's preferred to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. Marshal `value` to `[]byte` using the codec `cdc`. +3. Set the encoded value in the store at location `key` using the `Set(key []byte, value []byte)` method of the store. + +For more, see an example of `keeper`'s [methods implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/3bafd8255a502e5a9cee07391cf8261538245dfd/x/staking/keeper/keeper.go). + +The [module `KVStore`](../core/store.md#kvstore-and-commitkvstore-interfaces) also provides an `Iterator()` method which returns an `Iterator` object to iterate over a domain of keys. + +This is an example from the `auth` module to iterate accounts: + ++++ https://github.com/cosmos/cosmos-sdk/blob/bf8809ef9840b4f5369887a38d8345e2380a567f/x/auth/keeper/account.go#L70-L83 + +## Next {hide} + +Learn about [invariants](./invariants.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/messages-and-queries.md b/versioned_docs/version-0.45/integrate/building-modules/messages-and-queries.md new file mode 100644 index 000000000..6b5db1a72 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/messages-and-queries.md @@ -0,0 +1,115 @@ + + +# Messages and Queries + +`Msg`s and `Queries` are the two primary objects handled by modules. Most of the core components defined in a module, like `Msg` services, `keeper`s and `Query` services, exist to process `message`s and `queries`. {synopsis} + +## Pre-requisite Readings + +- [Introduction to SDK Modules](./intro.md) {prereq} + +## Messages + +`Msg`s are objects whose end-goal is to trigger state-transitions. They are wrapped in [transactions](../core/transactions.md), which may contain one or more of them. + +When a transaction is relayed from the underlying consensus engine to the SDK application, it is first decoded by [`BaseApp`](../core/baseapp.md). Then, each message contained in the transaction is extracted and routed to the appropriate module via `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's [`Msg` service](./msg-services.md). For a more detailed explanation of the lifecycle of a transaction, click [here](../basics/tx-lifecycle.md). + +### `Msg` Services + +Starting from v0.40, defining Protobuf `Msg` services is the recommended way to handle messages. A Protobuf `Msg` service should be created for each module, typically in `tx.proto` (see more info about [conventions and naming](../core/encoding.md#faq)). It must have an RPC service method defined for each message in the module. + +See an example of a `Msg` service definition from `x/bank` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L10-L17 + +Each `Msg` service method must have exactly one argument, which must implement the `sdk.Msg` interface, and a Protobuf response. The naming convention is to call the RPC argument `Msg` and the RPC response `MsgResponse`. For example: + +``` + rpc Send(MsgSend) returns (MsgSendResponse); +``` + +`sdk.Msg` interface is a simplified version of the Amino `LegacyMsg` interface described [below](#legacy-amino-msgs) with only `ValidateBasic()` and `GetSigners()` methods. For backwards compatibility with [Amino `LegacyMsg`s](#legacy-amino-msgs), existing `LegacyMsg` types should be used as the request parameter for `service` RPC definitions. Newer `sdk.Msg` types, which only support `service` definitions, should use canonical `Msg...` name. + +Cosmos SDK uses Protobuf definitions to generate client and server code: + +* `MsgServer` interface defines the server API for the `Msg` service and its implementation is described as part of the [`Msg` services](./msg-services.md) documentation. +* Structures are generated for all RPC request and response types. + +A `RegisterMsgServer` method is also generated and should be used to register the module's `MsgServer` implementation in `RegisterServices` method from the [`AppModule` interface](./module-manager.md#appmodule). + +In order for clients (CLI and grpc-gateway) to have these URLs registered, the SDK provides the function `RegisterMsgServiceDesc(registry codectypes.InterfaceRegistry, sd *grpc.ServiceDesc)` that should be called inside module's [`RegisterInterfaces`](module-manager.md#appmodulebasic) method, using the proto-generated `&_Msg_serviceDesc` as `*grpc.ServiceDesc` argument. + +### Legacy Amino `LegacyMsg`s + +The following way of defining messages is deprecated and using [`Msg` services](#msg-services) is preferred. + +Amino `LegacyMsg`s can be defined as protobuf messages. The messages definition usually includes a list of parameters needed to process the message that will be provided by end-users when they want to create a new transaction containing said message. + +A `LegacyMsg` is typically accompanied by a standard constructor function, that is called from one of the [module's interface](./module-interfaces.md). `message`s also need to implement the `sdk.Msg` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/4a1b2fba43b1052ca162b3a1e0b6db6db9c26656/types/tx_msg.go#L10-L33 + +It extends `proto.Message` and contains the following methods: + +- `Route() string`: Name of the route for this message. Typically all `message`s in a module have the same route, which is most often the module's name. +- `Type() string`: Type of the message, used primarly in [events](../core/events.md). This should return a message-specific `string`, typically the denomination of the message itself. +- [`ValidateBasic() error`](../basics/tx-lifecycle.md#ValidateBasic). +- `GetSignBytes() []byte`: Return the canonical byte representation of the message. Used to generate a signature. +- `GetSigners() []AccAddress`: Return the list of signers. The SDK will make sure that each `message` contained in a transaction is signed by all the signers listed in the list returned by this method. + +See an example implementation of a `message` from the `gov` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/x/gov/types/msgs.go#L77-L125 + +## Queries + +A `query` is a request for information made by end-users of applications through an interface and processed by a full-node. A `query` is received by a full-node through its consensus engine and relayed to the application via the ABCI. It is then routed to the appropriate module via `BaseApp`'s `queryrouter` so that it can be processed by the module's query service (./query-services.md). For a deeper look at the lifecycle of a `query`, click [here](../basics/query-lifecycle.md). + +### gRPC Queries + +Starting from v0.40, the prefered way to define queries is by using [Protobuf services](https://developers.google.com/protocol-buffers/docs/proto#services). A `Query` service should be created per module in `query.proto`. This service lists endpoints starting with `rpc`. + +Here's an example of such a `Query` service definition: + ++++ https://github.com/cosmos/cosmos-sdk/blob/d55c1a26657a0af937fa2273b38dcfa1bb3cff9f/proto/cosmos/auth/v1beta1/query.proto#L12-L23 + +As `proto.Message`s, generated `Response` types implement by default `String()` method of [`fmt.Stringer`](https://golang.org/pkg/fmt/#Stringer). + +A `RegisterQueryServer` method is also generated and should be used to register the module's query server in the `RegisterServices` method from the [`AppModule` interface](./module-manager.md#appmodule). + +### Legacy Queries + +Before the introduction of Protobuf and gRPC in the SDK, there was usually no specific `query` object defined by module developers, contrary to `message`s. Instead, the SDK took the simpler approach of using a simple `path` to define each `query`. The `path` contains the `query` type and all the arguments needed in order to process it. For most module queries, the `path` should look like the following: + +``` +queryCategory/queryRoute/queryType/arg1/arg2/... +``` + +where: + +- `queryCategory` is the category of the `query`, typically `custom` for module queries. It is used to differentiate between different kinds of queries within `BaseApp`'s [`Query` method](../core/baseapp.md#query). +- `queryRoute` is used by `BaseApp`'s [`queryRouter`](../core/baseapp.md#query-routing) to map the `query` to its module. Usually, `queryRoute` should be the name of the module. +- `queryType` is used by the module's [`querier`](./query-services.md#legacy-queriers) to map the `query` to the appropriate `querier function` within the module. +- `args` are the actual arguments needed to process the `query`. They are filled out by the end-user. Note that for bigger queries, you might prefer passing arguments in the `Data` field of the request `req` instead of the `path`. + +The `path` for each `query` must be defined by the module developer in the module's [command-line interface file](./module-interfaces.md#query-commands).Overall, there are 3 mains components module developers need to implement in order to make the subset of the state defined by their module queryable: + +- A [`querier`](./query-services.md#legacy-queriers), to process the `query` once it has been [routed to the module](../core/baseapp.md#query-routing). +- [Query commands](./module-interfaces.md#query-commands) in the module's CLI file, where the `path` for each `query` is specified. +- `query` return types. Typically defined in a file `types/querier.go`, they specify the result type of each of the module's `queries`. These custom types must implement the `String()` method of [`fmt.Stringer`](https://golang.org/pkg/fmt/#Stringer). + +### Store Queries + +Store queries query directly for store keys. They use `clientCtx.QueryABCI(req abci.RequestQuery)` to return the full `abci.ResponseQuery` with inclusion Merkle proofs. + +See following examples: + ++++ https://github.com/cosmos/cosmos-sdk/blob/080fcf1df25ccdf97f3029b6b6f83caaf5a235e4/x/ibc/core/client/query.go#L36-L46 + ++++ https://github.com/cosmos/cosmos-sdk/blob/080fcf1df25ccdf97f3029b6b6f83caaf5a235e4/baseapp/abci.go#L722-L749 + +## Next {hide} + +Learn about [`Msg` services](./msg-services.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/module-interfaces.md b/versioned_docs/version-0.45/integrate/building-modules/module-interfaces.md new file mode 100644 index 000000000..161d9f455 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/module-interfaces.md @@ -0,0 +1,139 @@ + + +# Module Interfaces + +This document details how to build CLI and REST interfaces for a module. Examples from various SDK modules are included. {synopsis} + +## Prerequisite Readings + +- [Building Modules Intro](./intro.md) {prereq} + +## CLI + +One of the main interfaces for an application is the [command-line interface](../core/cli.md). This entrypoint adds commands from the application's modules enabling end-users to create [**messages**](./messages-and-queries.md#messages) wrapped in transactions and [**queries**](./messages-and-queries.md#queries). The CLI files are typically found in the module's `./client/cli` folder. + +### Transaction Commands + + In order to create messages that trigger state changes, end-users must create [transactions](../core/transactions.md) that wrap and deliver the messages. A transaction command creates a transaction that includes one or more messages. + + Transaction commands typically have their own `tx.go` file that lives within the module's `./client/cli` folder. The commands are specified in getter functions and the name of the function should include the name of the command. + +Here is an example from the `x/bank` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/x/bank/client/cli/tx.go#L28-L63 + +In the example, `NewSendTxCmd()` creates and returns the transaction command for a transaction that wraps and delivers `MsgSend`. `MsgSend` is the message used to send tokens from one account to another. + +In general, the getter function does the following: + +- **Constructs the command:** Read the [Cobra Documentation](https://godoc.org/github.com/spf13/cobra) for more detailed information on how to create commands. + - **Use:** Specifies the format of the user input required to invoke the command. In the example above, `send` is the name of the transaction command and `[from_key_or_address]`, `[to_address]`, and `[amount]` are the arguments. + - **Args:** The number of arguments the user provides. In this case, there are exactly three: `[from_key_or_address]`, `[to_address]`, and `[amount]`. + - **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + - **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new transaction. + - The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientTxContext(cmd)`. The `clientCtx` contains information relevant to transaction handling, including information about the user. In this example, the `clientCtx` is used to retrieve the address of the sender by calling `clientCtx.GetFromAddress()`. + - If applicable, the command's arguments are parsed. In this example, the arguments `[to_address]` and `[amount]` are both parsed. + - A [message](./messages-and-queries.md) is created using the parsed arguments and information from the `clientCtx`. The constructor function of the message type is called directly. In this case, `types.NewMsgSend(fromAddr, toAddr, amount)`. Its good practice to call [`msg.ValidateBasic()`](../basics/tx-lifecycle.md#ValidateBasic) and other validation methods before broadcasting the message. + - Depending on what the user wants, the transaction is either generated offline or signed and broadcasted to the preconfigured node using `tx.GenerateOrBroadcastTxCLI(clientCtx, flags, msg)`. +- **Adds transaction flags:** All transaction commands must add a set of transaction [flags](#flags). The transaction flags are used to collect additional information from the user (e.g. the amount of fees the user is willing to pay). The transaction flags are added to the constructed command using `AddTxFlagsToCmd(cmd)`. +- **Returns the command:** Finally, the transaction command is returned. + +Each module must implement `NewTxCmd()`, which aggregates all of the transaction commands of the module. Here is an example from the `x/bank` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/x/bank/client/cli/tx.go#L13-L26 + +Each module must also implement the `GetTxCmd()` method for `AppModuleBasic` that simply returns `NewTxCmd()`. This allows the root command to easily aggregate all of the transaction commands for each module. Here is an example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/x/bank/module.go#L75-L78 + +### Query Commands + +[Queries](./messages-and-queries.md#queries) allow users to gather information about the application or network state; they are routed by the application and processed by the module in which they are defined. Query commands typically have their own `query.go` file in the module's `./client/cli` folder. Like transaction commands, they are specified in getter functions. Here is an example of a query command from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/x/auth/client/cli/query.go#L75-L105 + +In the example, `GetAccountCmd()` creates and returns a query command that returns the state of an account based on the provided account address. + +In general, the getter function does the following: + +- **Constructs the command:** Read the [Cobra Documentation](https://godoc.org/github.com/spf13/cobra) for more detailed information on how to create commands. + - **Use:** Specifies the format of the user input required to invoke the command. In the example above, `account` is the name of the query command and `[address]` is the argument. + - **Args:** The number of arguments the user provides. In this case, there is exactly one: `[address]`. + - **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + - **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new query. + - The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientQueryContext(cmd)`. The `clientCtx` contains information relevant to query handling. + - If applicable, the command's arguments are parsed. In this example, the argument `[address]` is parsed. + - A new `queryClient` is initialized using `NewQueryClient(clientCtx)`. The `queryClient` is then used to call the appropriate [query](./messages-and-queries.md#grpc-queries). + - The `clientCtx.PrintProto` method is used to format the `proto.Message` object so that the results can be printed back to the user. +- **Adds query flags:** All query commands must add a set of query [flags](#flags). The query flags are added to the constructed command using `AddQueryFlagsToCmd(cmd)`. +- **Returns the command:** Finally, the query command is returned. + +Each module must implement `GetQueryCmd()`, which aggregates all of the query commands of the module. Here is an example from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/x/auth/client/cli/query.go#L25-L42 + +Each module must also implement the `GetQueryCmd()` method for `AppModuleBasic` that returns the `GetQueryCmd()` function. This allows for the root command to easily aggregate all of the query commands for each module. Here is an example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/x/auth/module.go#L80-L83 + +### Flags + +[Flags](../core/cli.md#flags) allow users to customize commands. `--fees` and `--gas-prices` are examples of flags that allow users to set the [fees](../basics/gas-fees.md) and gas prices for their transactions. + +Flags that are specific to a module are typically created in a `flags.go` file in the module's `./client/cli` folder. When creating a flag, developers set the value type, the name of the flag, the default value, and a description about the flag. Developers also have the option to mark flags as _required_ so that an error is thrown if the user does not include a value for the flag. + +Here is an example that adds the `--from` flag to a command: + +```go +cmd.Flags().String(FlagFrom, "", "Name or address of private key with which to sign") +``` + +In this example, the value of the flag is a `String`, the name of the flag is `from` (the value of the `FlagFrom` constant), the default value of the flag is `""`, and there is a description that will be displayed when a user adds `--help` to the command. + +Here is an example that marks the `--from` flag as _required_: + +```go +cmd.MarkFlagRequired(FlagFrom) +``` + +For more detailed information on creating flags, visit the [Cobra Documentation](https://github.com/spf13/cobra). + +As mentioned in [transaction commands](#transaction-commands), there is a set of flags that all transaction commands must add. This is done with the `AddTxFlagsToCmd` method defined in the SDK's `./client/flags` package. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/client/flags/flags.go#L94-L120 + +Since `AddTxFlagsToCmd(cmd *cobra.Command)` includes all of the basic flags required for a transaction command, module developers may choose not to add any of their own (specifying arguments instead may often be more appropriate). + +Similarly, there is a `AddQueryFlagsToCmd(cmd *cobra.Command)` to add common flags to a module query command. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/client/flags/flags.go#L85-L92 + +## gRPC + +[gRPC](https://grpc.io/) is a Remote Procedure Call (RPC) framework. RPC is the preferred way for external clients like wallets and exchanges to interact with a blockchain. + +In addition to providing an ABCI query pathway, the Cosmos SDK provides a gRPC proxy server that routes gRPC query requests to ABCI query requests. + +In order to do that, modules must implement `RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux)` on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. + +Here's an example from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/x/auth/module.go#L68-L73 + +## gRPC-gateway REST + +Applications need to support web services that use HTTP requests (e.g. a web wallet like [Keplr](https://keplr.xyz)). [grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) translates REST calls into gRPC calls, which might be useful for clients that do not use gRPC. + +Modules that want to expose REST queries should add `google.api.http` annotations to their `rpc` methods, such as in the example below from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.43.0-beta1/proto/cosmos/auth/v1beta1/query.proto#L13-L29 + +gRPC gateway is started in-process along with the application and Tendermint. It can be enabled or disabled by setting gRPC Configuration `enable` in [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). + +The SDK provides a command for generating [Swagger](https://swagger.io/) documentation (`protoc-gen-swagger`). Setting `swagger` in [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) defines if swagger documentation should be automatically registered. + +## Next {hide} + +Read about the recommended [module structure](./structure.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/module-manager.md b/versioned_docs/version-0.45/integrate/building-modules/module-manager.md new file mode 100644 index 000000000..334d252e6 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/module-manager.md @@ -0,0 +1,150 @@ + + +# Module Manager + +Cosmos SDK modules need to implement the [`AppModule` interfaces](#application-module-interfaces), in order to be managed by the application's [module manager](#module-manager). The module manager plays an important role in [`message` and `query` routing](../core/baseapp.md#routing), and allows application developers to set the order of execution of a variety of functions like [`BeginBlocker` and `EndBlocker`](../basics/app-anatomy.md#begingblocker-and-endblocker). {synopsis} + +## Pre-requisite Readings + +- [Introduction to SDK Modules](./intro.md) {prereq} + +## Application Module Interfaces + +Application module interfaces exist to facilitate the composition of modules together to form a functional SDK application. There are 3 main application module interfaces: + +- [`AppModuleBasic`](#appmodulebasic) for independent module functionalities. +- [`AppModule`](#appmodule) for inter-dependent module functionalities (except genesis-related functionalities). +- [`AppModuleGenesis`](#appmodulegenesis) for inter-dependent genesis-related module functionalities. + +The `AppModuleBasic` interface exists to define independent methods of the module, i.e. those that do not depend on other modules in the application. This allows for the construction of the basic application structure early in the application definition, generally in the `init()` function of the [main application file](../basics/app-anatomy.md#core-application-file). + +The `AppModule` interface exists to define inter-dependent module methods. Many modules need to interract with other modules, typically through [`keeper`s](./keeper.md), which means there is a need for an interface where modules list their `keeper`s and other methods that require a reference to another module's object. `AppModule` interface also enables the module manager to set the order of execution between module's methods like `BeginBlock` and `EndBlock`, which is important in cases where the order of execution between modules matters in the context of the application. + +Lastly the interface for genesis functionality `AppModuleGenesis` is separated out from full module functionality `AppModule` so that modules which +are only used for genesis can take advantage of the `Module` patterns without having to define many placeholder functions. + +### `AppModuleBasic` + +The `AppModuleBasic` interface defines the independent methods modules need to implement. + ++++ https://github.com/cosmos/cosmos-sdk/blob/325be6ff215db457c6fc7668109640cd7fdac461/types/module/module.go#L49-L63 + +Let us go through the methods: + +- `Name()`: Returns the name of the module as a `string`. +- `RegisterLegacyAminoCodec(*codec.LegacyAmino)`: 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`. +- `RegisterInterfaces(codectypes.InterfaceRegistry)`: Registers a module's interface types and their concrete implementations as `proto.Message`. +- `DefaultGenesis(codec.JSONCodec)`: Returns a default [`GenesisState`](./genesis.md#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. +- `ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`: Used to validate the `GenesisState` defined by a module, given in its `json.RawMessage` form. It will usually unmarshall the `json` before running a custom [`ValidateGenesis`](./genesis.md#validategenesis) function defined by the module developer. +- `RegisterRESTRoutes(client.Context, *mux.Router)`: Registers the REST routes for the module. These routes will be used to map REST request to the module in order to process them. See [gRPC and REST](../core/grpc_rest.md) for more. +- `RegisterGRPCGatewayRoutes(client.Context, *runtime.ServeMux)`: Registers gRPC routes for the module. +- `GetTxCmd()`: Returns the root [`Tx` command](./module-interfaces.md#tx) for the module. The subcommands of this root command are used by end-users to generate new transactions containing [`message`s](./messages-and-queries.md#queries) defined in the module. +- `GetQueryCmd()`: Return the root [`query` command](./module-interfaces.md#query) for the module. The subcommands of this root command are used by end-users to generate new queries to the subset of the state defined by the module. + +All the `AppModuleBasic` of an application are managed by the [`BasicManager`](#basicmanager). + +### `AppModuleGenesis` + +The `AppModuleGenesis` interface is a simple embedding of the `AppModuleBasic` interface with two added methods. + ++++ https://github.com/cosmos/cosmos-sdk/blob/325be6ff215db457c6fc7668109640cd7fdac461/types/module/module.go#L152-L158 + +Let us go through the two added methods: + +- `InitGenesis(sdk.Context, codec.JSONCodec, json.RawMessage)`: Initializes the subset of the state managed by the module. It is called at genesis (i.e. when the chain is first started). +- `ExportGenesis(sdk.Context, codec.JSONCodec)`: Exports the latest subset of the state managed by the module to be used in a new genesis file. `ExportGenesis` is called for each module when a new chain is started from the state of an existing chain. + +It does not have its own manager, and exists separately from [`AppModule`](#appmodule) only for modules that exist only to implement genesis functionalities, so that they can be managed without having to implement all of `AppModule`'s methods. If the module is not only used during genesis, `InitGenesis(sdk.Context, codec.JSONCodec, json.RawMessage)` and `ExportGenesis(sdk.Context, codec.JSONCodec)` will generally be defined as methods of the concrete type implementing the `AppModule` interface. + +### `AppModule` + +The `AppModule` interface defines the inter-dependent methods that modules need to implement. + ++++ https://github.com/cosmos/cosmos-sdk/blob/b4cce159bcc6a32ac78245c6866dd87c73f3720d/types/module/module.go#L160-L182 + +`AppModule`s are managed by the [module manager](#manager). This interface embeds the `AppModuleGenesis` interface so that the manager can access all the independent and genesis inter-dependent methods of the module. This means that a concrete type implementing the `AppModule` interface must either implement all the methods of `AppModuleGenesis` (and by extension `AppModuleBasic`), or include a concrete type that does as parameter. + +Let us go through the methods of `AppModule`: + +- `RegisterInvariants(sdk.InvariantRegistry)`: Registers the [`invariants`](./invariants.md) of the module. If an invariant deviates from its predicted value, the [`InvariantRegistry`](./invariants.md#registry) triggers appropriate logic (most often the chain will be halted). +- `Route()`: Returns the route for [`message`s](./messages-and-queries.md#messages) to be routed to the module by [`BaseApp`](../core/baseapp.md#message-routing). +- `QuerierRoute()` (deprecated): Returns the name of the module's query route, for [`queries`](./messages-and-queries.md#queries) to be routes to the module by [`BaseApp`](../core/baseapp.md#query-routing). +- `LegacyQuerierHandler(*codec.LegacyAmino)` (deprecated): Returns a [`querier`](./query-services.md#legacy-queriers) given the query `path`, in order to process the `query`. +- `RegisterServices(Configurator)`: Allows a module to register services. +- `BeginBlock(sdk.Context, abci.RequestBeginBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the beginning of each block. Implement empty if no logic needs to be triggered at the beginning of each block for this module. +- `EndBlock(sdk.Context, abci.RequestEndBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the end of each block. This is also where the module can inform the underlying consensus engine of validator set changes (e.g. the `staking` module). Implement empty if no logic needs to be triggered at the end of each block for this module. + +### Implementing the Application Module Interfaces + +Typically, the various application module interfaces are implemented in a file called `module.go`, located in the module's folder (e.g. `./x/module/module.go`). + +Almost every module needs to implement the `AppModuleBasic` and `AppModule` interfaces. If the module is only used for genesis, it will implement `AppModuleGenesis` instead of `AppModule`. The concrete type that implements the interface can add parameters that are required for the implementation of the various methods of the interface. For example, the `Route()` function often calls a `NewMsgServerImpl(k keeper)` function defined in `keeper/msg_server.go` and therefore needs to pass the module's [`keeper`](./keeper.md) as a parameter. + +```go +// example +type AppModule struct { + AppModuleBasic + keeper Keeper +} +``` + +In the example above, you can see that the `AppModule` concrete type references an `AppModuleBasic`, and not an `AppModuleGenesis`. That is because `AppModuleGenesis` only needs to be implemented in modules that focus on genesis-related functionalities. In most modules, the concrete `AppModule` type will have a reference to an `AppModuleBasic` and implement the two added methods of `AppModuleGenesis` directly in the `AppModule` type. + +If no parameter is required (which is often the case for `AppModuleBasic`), just declare an empty concrete type like so: + +```go +type AppModuleBasic struct{} +``` + +## Module Managers + +Module managers are used to manage collections of `AppModuleBasic` and `AppModule`. + +### `BasicManager` + +The `BasicManager` is a structure that lists all the `AppModuleBasic` of an application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/325be6ff215db457c6fc7668109640cd7fdac461/types/module/module.go#L65-L66 + +It implements the following methods: + +- `NewBasicManager(modules ...AppModuleBasic)`: Constructor function. It takes a list of the application's `AppModuleBasic` and builds a new `BasicManager`. This function is generally called in the `init()` function of [`app.go`](../basics/app-anatomy.md#core-application-file) to quickly initialize the independent elements of the application's modules (click [here](https://github.com/cosmos/gaia/blob/master/app/app.go#L59-L74) to see an example). +- `RegisterLegacyAminoCodec(cdc *codec.LegacyAmino)`: Registers the [`codec.LegacyAmino`s](../core/encoding.md#amino) of each of the application's `AppModuleBasic`. This function is usually called early on in the [application's construction](../basics/app-anatomy.md#constructor). +- `RegisterInterfaces(registry codectypes.InterfaceRegistry)`: Registers interface types and implementations of each of the application's `AppModuleBasic`. +- `DefaultGenesis(cdc codec.JSONCodec)`: Provides default genesis information for modules in the application by calling the [`DefaultGenesis(cdc codec.JSONCodec)`](./genesis.md#defaultgenesis) function of each module. It is used to construct a default genesis file for the application. +- `ValidateGenesis(cdc codec.JSONCodec, txEncCfg client.TxEncodingConfig, genesis map[string]json.RawMessage)`: Validates the genesis information modules by calling the [`ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`](./genesis.md#validategenesis) function of each module. +- `RegisterRESTRoutes(ctx client.Context, rtr *mux.Router)`: Registers REST routes for modules by calling the [`RegisterRESTRoutes`](./module-interfaces.md#register-routes) function of each module. This function is usually called function from the `main.go` function of the [application's command-line interface](../core/cli.md). +- `RegisterGRPCGatewayRoutes(clientCtx client.Context, rtr *runtime.ServeMux)`: Registers gRPC routes for modules. +- `AddTxCommands(rootTxCmd *cobra.Command)`: Adds modules' transaction commands to the application's [`rootTxCommand`](../core/cli.md#transaction-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../core/cli.md). +- `AddQueryCommands(rootQueryCmd *cobra.Command)`: Adds modules' query commands to the application's [`rootQueryCommand`](../core/cli.md#query-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../core/cli.md). + +### `Manager` + +The `Manager` is a structure that holds all the `AppModule` of an application, and defines the order of execution between several key components of these modules: + ++++ https://github.com/cosmos/cosmos-sdk/blob/325be6ff215db457c6fc7668109640cd7fdac461/types/module/module.go#L223-L231 + +The module manager is used throughout the application whenever an action on a collection of modules is required. It implements the following methods: + +- `NewManager(modules ...AppModule)`: Constructor function. It takes a list of the application's `AppModule`s and builds a new `Manager`. It is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +- `SetOrderInitGenesis(moduleNames ...string)`: Sets the order in which the [`InitGenesis`](./genesis.md#initgenesis) function of each module will be called when the application is first started. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +- `SetOrderExportGenesis(moduleNames ...string)`: Sets the order in which the [`ExportGenesis`](./genesis.md#exportgenesis) function of each module will be called in case of an export. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +- `SetOrderBeginBlockers(moduleNames ...string)`: Sets the order in which the `BeginBlock()` function of each module will be called at the beginning of each block. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +- `SetOrderEndBlockers(moduleNames ...string)`: Sets the order in which the `EndBlock()` function of each module will be called at the end of each block. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +- `RegisterInvariants(ir sdk.InvariantRegistry)`: Registers the [invariants](./invariants.md) of each module. +- `RegisterRoutes(router sdk.Router, queryRouter sdk.QueryRouter, legacyQuerierCdc *codec.LegacyAmino)`: Registers legacy [`Msg`](./messages-and-queries.md#messages) and [`querier`](./query-services.md#legacy-queriers) routes. +- `RegisterServices(cfg Configurator)`: Registers all module services. +- `InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, genesisData map[string]json.RawMessage)`: Calls the [`InitGenesis`](./genesis.md#initgenesis) function of each module when the application is first started, in the order defined in `OrderInitGenesis`. Returns an `abci.ResponseInitChain` to the underlying consensus engine, which can contain validator updates. +- `ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec)`: Calls the [`ExportGenesis`](./genesis.md#exportgenesis) function of each module, in the order defined in `OrderExportGenesis`. The export constructs a genesis file from a previously existing state, and is mainly used when a hard-fork upgrade of the chain is required. +- `BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock)`: At the beginning of each block, this function is called from [`BaseApp`](../core/baseapp.md#beginblock) and, in turn, calls the [`BeginBlock`](./beginblock-endblock.md) function of each module, in the order defined in `OrderBeginBlockers`. It creates a child [context](../core/context.md) with an event manager to aggregate [events](../core/events.md) emitted from all modules. The function returns an `abci.ResponseBeginBlock` which contains the aforementioned events. +- `EndBlock(ctx sdk.Context, req abci.RequestEndBlock)`: At the end of each block, this function is called from [`BaseApp`](../core/baseapp.md#endblock) and, in turn, calls the [`EndBlock`](./beginblock-endblock.md) function of each module, in the order defined in `OrderEndBlockers`. It creates a child [context](../core/context.md) with an event manager to aggregate [events](../core/events.md) emitted from all modules. The function returns an `abci.ResponseEndBlock` which contains the aforementioned events, as well as validator set updates (if any). + +Here's an example of a concrete integration within an application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/2323f1ac0e9a69a0da6b43693061036134193464/simapp/app.go#L315-L362 + +## Next {hide} + +Learn more about [`message`s and `queries`](./messages-and-queries.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/msg-services.md b/versioned_docs/version-0.45/integrate/building-modules/msg-services.md new file mode 100644 index 000000000..de7107b92 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/msg-services.md @@ -0,0 +1,134 @@ + + +# `Msg` Services + +A Protobuf `Msg` service processes [messages](./messages-and-queries.md#messages). Protobuf `Msg` services are specific to the module in which they are defined, and only process messages defined within the said module. They are called from `BaseApp` during [`DeliverTx`](../core/baseapp.md#delivertx). {synopsis} + +## Pre-requisite Readings + +- [Module Manager](./module-manager.md) {prereq} +- [Messages and Queries](./messages-and-queries.md) {prereq} + +## Implementation of a module `Msg` service + +Each module should define a Protobuf `Msg` service, which will be responsible for processing requests (implementing `sdk.Msg`) and returning responses. + +As further described in [ADR 031](../architecture/adr-031-msg-service.md), this approach has the advantage of clearly specifying return types and generating server and client code. + +Protobuf generates a `MsgServer` interface based on a definition of `Msg` service. It is the role of the module developer to implement this interface, by implementing the state transition logic that should happen upon receival of each `sdk.Msg`. As an example, here is the generated `MsgServer` interface for `x/bank`, which exposes two `sdk.Msg`s: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/x/bank/types/tx.pb.go#L285-L291 + +When possible, the existing module's [`Keeper`](keeper.md) should implement `MsgServer`, otherwise a `msgServer` struct that embeds the `Keeper` can be created, typically in `./keeper/msg_server.go`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/x/bank/keeper/msg_server.go#L14-L16 + +`msgServer` methods can retrieve the `sdk.Context` from the `context.Context` parameter method using the `sdk.UnwrapSDKContext`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/x/bank/keeper/msg_server.go#L27-L28 + +`sdk.Msg` processing usually follows these 3 steps: + +### Validation + +Before a `msgServer` method is executed, the message's [`ValidateBasic()`](../basics/tx-lifecycle.md#ValidateBasic) method has already been called. Since `msg.ValidateBasic()` performs only the most basic checks, this stage must perform all other validation (both *stateful* and *stateless*) to make sure the `message` is valid. Checks performed in the `msgServer` method can be more expensive and the signer is charged gas for these operations. +For example, a `msgServer` method for a `transfer` message might check that the sending account has enough funds to actually perform the transfer. + +It is recommended to implement all validation checks in a separate function that passes state values as arguments. This implementation simplifies testing. As expected, expensive validation functions charge additional gas. Example: + +```go +ValidateMsgA(msg MsgA, now Time, gm GasMeter) error { + if now.Before(msg.Expire) { + return sdkerrrors.ErrInvalidRequest.Wrap("msg expired") + } + gm.ConsumeGas(1000, "signature verification") + return signatureVerificaton(msg.Prover, msg.Data) +} +``` + +### State Transition + +After the validation is successful, the `msgServer` method uses the [`keeper`](./keeper.md) functions to access the state and perform a state transition. + +### Events + +Before returning, `msgServer` methods generally emit one or more [events](../core/events.md) by using the `EventManager` held in the `ctx`. Use the new `EmitTypedEvent` function that uses protobuf-based event types: + +``` +ctx.EventManager().EmitTypedEvent( + &group.EventABC{Key1: Value1, Key2, Value2}) +``` + +or the older `EmitEvent` function: + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, // e.g. sdk.EventTypeMessage for a message, types.CustomEventType for a custom event defined in the module + sdk.NewAttribute(key1, value1), + sdk.NewAttribute(key2, value2), + ), +) +``` + +These events are relayed back to the underlying consensus engine and can be used by service providers to implement services around the application. Click [here](../core/events.md) to learn more about events. + +The invoked `msgServer` method returns a `proto.Message` response and an `error`. These return values are then wrapped into an `*sdk.Result` or an `error` using `sdk.WrapServiceResult(ctx sdk.Context, res proto.Message, err error)`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc2/baseapp/msg_service_router.go#L104-L104 + +This method takes care of marshaling the `res` parameter to protobuf and attaching any events on the `ctx.EventManager()` to the `sdk.Result`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/d55c1a26657a0af937fa2273b38dcfa1bb3cff9f/proto/cosmos/base/abci/v1beta1/abci.proto#L81-L95 + +This diagram shows a typical structure of a Protobuf `Msg` service, and how the message propagates through the module. + +![Transaction flow](transaction_flow.svg) + +## Amino `LegacyMsg`s + +### `handler` type + +The `handler` type defined in the Cosmos SDK will be deprecated in favor of [`Msg` Services](#implementation-of-a-module-msg-service). + +Here is the typical structure of a `handler` function: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc2/types/handler.go#L4-L4 + +Let us break it down: + +- The [`LegacyMsg`](./messages-and-queries.md#messages) is the actual object being processed. +- The [`Context`](../core/context.md) contains all the necessary information needed to process the `msg`, as well as a branch of the latest state. If the `msg` is successfully processed, the branched version of the state contained in the `ctx` will be written to the main state (branch). +- The `*Result` returned to `BaseApp` contains (among other things) information on the execution of the `handler` and [events](../core/events.md). + +Module `handler`s are typically implemented in a `./handler.go` file inside the module's folder. The [module manager](./module-manager.md) is used to add the module's `handler`s to the +[application's `router`](../core/baseapp.md#message-routing) via the `Route()` method. Typically, +the manager's `Route()` method simply constructs a Route that calls a `NewHandler()` method defined in `handler.go`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/228728cce2af8d494c8b4e996d011492139b04ab/x/gov/module.go#L143-L146 + +### Implementation + +`NewHandler` function dispatches a `LegacyMsg` to appropriate handler function, usually by using a switch statement: + ++++ https://github.com/cosmos/cosmos-sdk/blob/d55c1a26657a0af937fa2273b38dcfa1bb3cff9f/x/bank/handler.go#L13-L29 + +First, `NewHandler` function sets a new `EventManager` to the context to isolate events per `msg`. +Then, a simple switch calls the appropriate `handler` based on the `LegacyMsg` type. + +In this regard, `handler`s functions need to be implemented for each module `LegacyMsg`. This will also involve manual handler registration of `LegacyMsg` types. +`handler`s functions should return a `*Result` and an `error`. + +## Telemetry + +New [telemetry metrics](../core/telemetry.md) can be created from `msgServer` methods when handling messages. + +This is an example from the `x/auth/vesting` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc1/x/auth/vesting/msg_server.go#L73-L85 + +## Next {hide} + +Learn about [query services](./query-services.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/query-services.md b/versioned_docs/version-0.45/integrate/building-modules/query-services.md new file mode 100644 index 000000000..4113e099e --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/query-services.md @@ -0,0 +1,77 @@ + + +# Query Services + +A Protobuf Query service processes [`queries`](./messages-and-queries.md#queries). Query services are specific to the module in which they are defined, and only process `queries` defined within said module. They are called from `BaseApp`'s [`Query` method](../core/baseapp.md#query). {synopsis} + +## Pre-requisite Readings + +- [Module Manager](./module-manager.md) {prereq} +- [Messages and Queries](./messages-and-queries.md) {prereq} + +## `Querier` type + +The `querier` type defined in the Cosmos SDK will be deprecated in favor of [gRPC Services](#grpc-service). It specifies the typical structure of a `querier` function: + ++++ https://github.com/cosmos/cosmos-sdk/blob/9a183ffbcc0163c8deb71c7fd5f8089a83e58f05/types/queryable.go#L9 + +Let us break it down: + +- The `path` is an array of `string`s that contains the type of the query, and that can also contain `query` arguments. See [`queries`](./messages-and-queries.md#queries) for more information. +- The `req` itself is primarily used to retrieve arguments if they are too large to fit in the `path`. This is done using the `Data` field of `req`. +- The [`Context`](../core/context.md) contains all the necessary information needed to process the `query`, as well as a branch of the latest state. It is primarily used by the [`keeper`](./keeper.md) to access the state. +- The result `res` returned to `BaseApp`, marshalled using the application's [`codec`](../core/encoding.md). + +## Implementation of a module query service + +### gRPC Service + +When defining a Protobuf `Query` service, a `QueryServer` interface is generated for each module with all the service methods: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +These custom queries methods should be implemented by a module's keeper, typically in `./keeper/grpc_query.go`. The first parameter of these methods is a generic `context.Context`, whereas querier methods generally need an instance of `sdk.Context` to read +from the store. Therefore, the SDK provides a function `sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +Here's an example implementation for the bank module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/d55c1a26657a0af937fa2273b38dcfa1bb3cff9f/x/bank/keeper/grpc_query.go + +### Legacy Queriers + +Module legacy `querier`s are typically implemented in a `./keeper/querier.go` file inside the module's folder. The [module manager](./module-manager.md) is used to add the module's `querier`s to the [application's `queryRouter`](../core/baseapp.md#query-routing) via the `NewQuerier()` method. Typically, the manager's `NewQuerier()` method simply calls a `NewQuerier()` method defined in `keeper/querier.go`, which looks like the following: + +```go +func NewQuerier(keeper Keeper) sdk.Querier { + return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { + switch path[0] { + case QueryType1: + return queryType1(ctx, path[1:], req, keeper) + + case QueryType2: + return queryType2(ctx, path[1:], req, keeper) + + default: + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0]) + } + } +} +``` + +This simple switch returns a `querier` function specific to the type of the received `query`. At this point of the [query lifecycle](../basics/query-lifecycle.md), the first element of the `path` (`path[0]`) contains the type of the query. The following elements are either empty or contain arguments needed to process the query. + +The `querier` functions themselves are pretty straighforward. They generally fetch a value or values from the state using the [`keeper`](./keeper.md). Then, they marshall the value(s) using the [`codec`](../core/encoding.md) and return the `[]byte` obtained as result. + +For a deeper look at `querier`s, see this [example implementation of a `querier` function](https://github.com/cosmos/cosmos-sdk/blob/7f59723d889b69ca19966167f0b3a7fec7a39e53/x/gov/keeper/querier.go) from the bank module. + +## Next {hide} + +Learn about [`BeginBlocker` and `EndBlocker`](./beginblock-endblock.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/simulator.md b/versioned_docs/version-0.45/integrate/building-modules/simulator.md new file mode 100644 index 000000000..e6f07fbb6 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/simulator.md @@ -0,0 +1,123 @@ +# Module Simulation + +## Prerequisites + +* [Cosmos Blockchain Simulator](./../using-the-sdk/simulation.md) + +## Synopsis + +This document details how to define each module simulation functions to be +integrated with the application `SimulationManager`. + +* [Simulation package](#simulation-package) + * [Store decoders](#store-decoders) + * [Randomized genesis](#randomized-genesis) + * [Randomized parameters](#randomized-parameters) + * [Random weighted operations](#random-weighted-operations) + * [Random proposal contents](#random-proposal-contents) +* [Registering the module simulation functions](#registering-simulation-functions) +* [App simulator manager](#app-simulator-manager) +* [Simulation tests](#simulation-tests) + +## Simulation package + +Every module that implements the SDK simulator needs to have a `x//simulation` +package which contains the primary functions required by the fuzz tests: store +decoders, randomized genesis state and parameters, weighted operations and proposal +contents. + +### Store decoders + +Registering the store decoders is required for the `AppImportExport`. This allows +for the key-value pairs from the stores to be decoded (_i.e_ unmarshalled) +to their corresponding types. In particular, it matches the key to a concrete type +and then unmarshals the value from the `KVPair` to the type provided. + +You can use the example [here](https://github.com/cosmos/cosmos-sdk/blob/v0.42.0/x/distribution/simulation/decoder.go) from the distribution module to implement your store decoders. + +### Randomized genesis + +The simulator tests different scenarios and values for genesis parameters +in order to fully test the edge cases of specific modules. The `simulator` package from each module must expose a `RandomizedGenState` function to generate the initial random `GenesisState` from a given seed. + +Once the module genesis parameter are generated randomly (or with the key and +values defined in a `params` file), they are marshaled to JSON format and added +to the app genesis JSON to use it on the simulations. + +You can check an example on how to create the randomized genesis [here](https://github.com/cosmos/cosmos-sdk/blob/v0.42.0/x/staking/simulation/genesis.go). + +### Randomized parameter changes + +The simulator is able to test parameter changes at random. The simulator package from each module must contain a `RandomizedParams` func that will simulate parameter changes of the module throughout the simulations lifespan. + +You can see how an example of what is needed to fully test parameter changes [here](https://github.com/cosmos/cosmos-sdk/blob/v0.42.0/x/staking/simulation/params.go) + +### Random weighted operations + +Operations are one of the crucial parts of the SDK simulation. They are the transactions +(`Msg`) that are simulated with random field values. The sender of the operation +is also assigned randomly. + +Operations on the simulation are simulated using the full [transaction cycle](../core/transactions.md) of a +`ABCI` application that exposes the `BaseApp`. + +Shown below is how weights are set: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.1/x/staking/simulation/operations.go#L18-L68 + +As you can see, the weights are predefined in this case. Options exist to override this behavior with different weights. One option is to use `*rand.Rand` to define a random weight for the operation, or you can inject your own predefined weights. + +Here is how one can override the above package `simappparams`. + ++++ https://github.com/cosmos/gaia/blob/master/sims.mk#L9-L22 + +For the last test a tool called runsim is used, this is used to parallelize go test instances, provide info to Github and slack integrations to provide information to your team on how the simulations are running. + +### Random proposal contents + +Randomized governance proposals are also supported on the SDK simulator. Each +module must define the governance proposal `Content`s that they expose and register +them to be used on the parameters. + +## Registering simulation functions + +Now that all the required functions are defined, we need to integrate them into the module pattern within the `module.go`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.42.0/x/distribution/module.go + +## App Simulator manager + +The following step is setting up the `SimulatorManager` at the app level. This +is required for the simulation test files on the next step. + +```go +type CustomApp struct { + ... + sm *module.SimulationManager +} +``` + +Then at the instantiation of the application, we create the `SimulationManager` +instance in the same way we create the `ModuleManager` but this time we only pass +the modules that implement the simulation functions from the `AppModuleSimulation` +interface described above. + +```go +func NewCustomApp(...) { + // create the simulation manager and define the order of the modules for deterministic simulations + app.sm = module.NewSimulationManager( + auth.NewAppModule(app.accountKeeper), + bank.NewAppModule(app.bankKeeper, app.accountKeeper), + supply.NewAppModule(app.supplyKeeper, app.accountKeeper), + ov.NewAppModule(app.govKeeper, app.accountKeeper, app.supplyKeeper), + mint.NewAppModule(app.mintKeeper), + distr.NewAppModule(app.distrKeeper, app.accountKeeper, app.supplyKeeper, app.stakingKeeper), + staking.NewAppModule(app.stakingKeeper, app.accountKeeper, app.supplyKeeper), + slashing.NewAppModule(app.slashingKeeper, app.accountKeeper, app.stakingKeeper), + ) + + // register the store decoders for simulation tests + app.sm.RegisterStoreDecoders() + ... +} +``` diff --git a/versioned_docs/version-0.45/integrate/building-modules/structure.md b/versioned_docs/version-0.45/integrate/building-modules/structure.md new file mode 100644 index 000000000..549cd634f --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/structure.md @@ -0,0 +1,99 @@ + + +# Recommended Folder Structure + +This document outlines the recommended structure of Cosmos SDK modules. These ideas are meant to be applied as suggestions. Application developers are encouraged to improve upon and contribute to module structure and development design. {synopsis} + +## Structure + +A typical Cosmos SDK module can be structured as follows: + +```shell +proto +└── {project_name} +    └── {module_name} +    └── {proto_version} +       ├── {module_name}.proto +       ├── event.proto +       ├── genesis.proto +       ├── query.proto +       └── tx.proto +``` + +- `{module_name}.proto`: The module's common message type definitions. +- `event.proto`: The module's message type definitions related to events. +- `genesis.proto`: The module's message type definitions related to genesis state. +- `query.proto`: The module's Query service and related message type definitions. +- `tx.proto`: The module's Msg service and related message type definitions. + +```shell +x/{module_name} +├── client +│   ├── cli +│   │ ├── query.go +│   │   └── tx.go +│   └── testutil +│   ├── cli_test.go +│   └── suite.go +├── exported +│   └── exported.go +├── keeper +│   ├── genesis.go +│   ├── grpc_query.go +│   ├── hooks.go +│   ├── invariants.go +│   ├── keeper.go +│   ├── keys.go +│   ├── msg_server.go +│   └── querier.go +├── module +│   └── module.go +├── simulation +│   ├── decoder.go +│   ├── genesis.go +│   ├── operations.go +│   └── params.go +├── spec +│   ├── 01_concepts.md +│   ├── 02_state.md +│   ├── 03_messages.md +│   └── 04_events.md +├── {module_name}.pb.go +├── abci.go +├── codec.go +├── errors.go +├── events.go +├── events.pb.go +├── expected_keepers.go +├── genesis.go +├── genesis.pb.go +├── keys.go +├── msgs.go +├── params.go +├── query.pb.go +└── tx.pb.go +``` + +- `client/`: The module's CLI client functionality implementation and the module's integration testing suite. +- `exported/`: The module's exported types - typically interface types. If a module relies on keepers from another module, it is expected to receive the keepers as interface contracts through the `expected_keepers.go` file (see below) in order to avoid a direct dependency on the module implementing the keepers. However, these interface contracts can define methods that operate on and/or return types that are specific to the module that is implementing the keepers and this is where `exported/` comes into play. The interface types that are defined in `exported/` use canonical types, allowing for the module to receive the keepers as interface contracts through the `expected_keepers.go` file. This pattern allows for code to remain DRY and also alleviates import cycle chaos. +- `keeper/`: The module's `Keeper` and `MsgServer` implementation. +- `module/`: The module's `AppModule` and `AppModuleBasic` implementation. +- `simulation/`: The module's [simulation](./simulator.html) package defines functions used by the blockchain simulator application (`simapp`). +- `spec/`: The module's specification documents outlining important concepts, state storage structure, and message and event type definitions. +- The root directory includes type definitions for messages, events, and genesis state, including the type definitions generated by Protocol Buffers. + - `abci.go`: The module's `BeginBlocker` and `EndBlocker` implementations (this file is only required if `BeginBlocker` and/or `EndBlocker` need to be defined). + - `codec.go`: The module's registry methods for interface types. + - `errors.go`: The module's sentinel errors. + - `events.go`: The module's event types and constructors. + - `expected_keepers.go`: The module's [expected keeper](./keeper.html#type-definition) interfaces. + - `genesis.go`: The module's genesis state methods and helper functions. + - `keys.go`: The module's store keys and associated helper functions. + - `msgs.go`: The module's message type definitions and associated methods. + - `params.go`: The module's parameter type definitions and associated methods. + - `*.pb.go`: The module's type definitions generated by Protocol Buffers (as defined in the respective `*.proto` files above). + +## Next {hide} + +Learn about [Errors](./errors.md) {hide} diff --git a/versioned_docs/version-0.45/integrate/building-modules/transaction_flow.svg b/versioned_docs/version-0.45/integrate/building-modules/transaction_flow.svg new file mode 100644 index 000000000..1ae962de3 --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/transaction_flow.svg @@ -0,0 +1,48 @@ +UserUserbaseAppbaseApprouterrouterhandlerhandlermsgServermsgServerkeeperkeeperContext.EventManagerContext.EventManagerTransaction Type<Tx>Route(ctx, msgRoute)handlerMsg<Tx>(Context, Msg(...))<Tx>(Context, Msg)alt[addresses invalid, denominations wrong, etc.]errorperform action, update contextresults, error codeEmit relevant eventsmaybe wrap results in more structureresult, error coderesults, error code \ No newline at end of file diff --git a/versioned_docs/version-0.45/integrate/building-modules/upgrade.md b/versioned_docs/version-0.45/integrate/building-modules/upgrade.md new file mode 100644 index 000000000..f1c37930c --- /dev/null +++ b/versioned_docs/version-0.45/integrate/building-modules/upgrade.md @@ -0,0 +1,57 @@ + + +# Upgrading Modules + +[In-Place Store Migrations](../core/upgrade.html) allow your modules to upgrade to new versions that include breaking changes. This document outlines how to build modules to take advantage of this functionality. {synopsis} + +## Prerequisite Readings + +- [In-Place Store Migration](../core/upgrade.md) {prereq} + +## Consensus Version + +Successful upgrades of existing modules require each `AppModule` to implement the function `ConsensusVersion() uint64`. + +- The versions must be hard-coded by the module developer. +- The initial version **must** be set to 1. + +Consensus versions serve as state-breaking versions of app modules and must be incremented when the module introduces breaking changes. + +## Registering Migrations + +To register the functionality that takes place during a module upgrade, you must register which migrations you want to take place. + +Migration registration takes place in the `Configurator` using the `RegisterMigration` method. The `AppModule` reference to the configurator is in the `RegisterServices` method. + +You can register one or more migrations. If you register more than one migration script, list the migrations in increasing order and ensure there are enough migrations that lead to the desired consensus version. For example, to migrate to version 3 of a module, register separate migrations for version 1 and version 2 as shown in the following example: + +```golang +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) +} +``` + +Since these migrations are functions that need access to a Keeper's store, use a wrapper around the keepers called `Migrator` as shown in this example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/6ac8898fec9bd7ea2c1e5c79e0ed0c3f827beb55/x/bank/keeper/migrations.go#L8-L21 + +## Writing Migration Scripts + +To define the functionality that takes place during an upgrade, write a migration script. Since migration scripts manipulate legacy code, place these functions in a `legacy/` directory. For example, to write migration scripts for the bank module, place the functions in `x/bank/legacy/`. Use the recommended naming convention for these functions. For example, `v043bank` is the script that migrates this legacy package `x/bank/legacy/v043`: + +```golang +// Migrating bank module from version 1 to 2 +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v043bank.MigrateStore(ctx, m.keeper.storeKey) // v043bank is package `x/bank/legacy/v043`. +} +``` + +To see example code of changes that were implemented in a migration of balance keys, check out [migrateBalanceKeys](https://github.com/cosmos/cosmos-sdk/blob/36f68eb9e041e20a5bb47e216ac5eb8b91f95471/x/bank/legacy/v043/store.go#L41-L62). For context, this code introduced migrations of the bank store that updated addresses to be prefixed by their length in bytes as outlined in [ADR-028](../architecture/adr-028-public-key-addresses.md). diff --git a/versioned_docs/version-0.45/integrate/ibc/README.md b/versioned_docs/version-0.45/integrate/ibc/README.md index 8caf30f1b..8be696391 100644 --- a/versioned_docs/version-0.45/integrate/ibc/README.md +++ b/versioned_docs/version-0.45/integrate/ibc/README.md @@ -8,13 +8,13 @@ parent: This repository contains reference documentation for the IBC protocol integration and concepts: -1. [Overview](overview.md) -2. [Integration](integration.md) -3. [Customization](custom.md) -4. [Relayer](relayer.md) -5. [Governance Proposals](proposals.md) +1. [Overview](./overview.md) +2. [Integration](./integration.md) +3. [Customization](./custom.md) +4. [Relayer](./relayer.md) +5. [Governance Proposals](./proposals.md) **NOTE**: The IBC module has been moved to its [own repository](https://github.com/cosmos/ibc-go). After reading about IBC, head on to the [Building Modules -documentation](../building-modules/) to learn more about the process of building modules. +documentation](../building-modules/README.md) to learn more about the process of building modules. diff --git a/versioned_docs/version-0.45/integrate/ibc/custom.md b/versioned_docs/version-0.45/integrate/ibc/custom.md index b521868cc..36de3085c 100644 --- a/versioned_docs/version-0.45/integrate/ibc/custom.md +++ b/versioned_docs/version-0.45/integrate/ibc/custom.md @@ -23,8 +23,8 @@ module correctly. ## Pre-requisites Readings -- [IBC Overview](overview.md)) {prereq} -- [IBC default integration](integration.md) {prereq} +- [IBC Overview](./overview.md)) {prereq} +- [IBC default integration](./integration.md) {prereq} ## Create a custom IBC application module diff --git a/versioned_docs/version-0.45/integrate/ibc/integration.md b/versioned_docs/version-0.45/integrate/ibc/integration.md index 6364c8275..ec48126fd 100644 --- a/versioned_docs/version-0.45/integrate/ibc/integration.md +++ b/versioned_docs/version-0.45/integrate/ibc/integration.md @@ -165,7 +165,7 @@ func NewApp(...args) *App { ### Module Managers -In order to use IBC, we need to add the new modules to the module `Manager` and to the `SimulationManager` in case your application supports [simulations](../building-modules/simulator). +In order to use IBC, we need to add the new modules to the module `Manager` and to the `SimulationManager` in case your application supports [simulations](./../building-modules/simulator.md). ```go // app.go @@ -249,4 +249,4 @@ different chains. If you want to have a broader view of the changes take a look ## Next {hide} -Learn about how to create [custom IBC modules](custom.md) for your application {hide} +Learn about how to create [custom IBC modules](./custom.md) for your application {hide} diff --git a/versioned_docs/version-0.45/integrate/ibc/overview.md b/versioned_docs/version-0.45/integrate/ibc/overview.md index 82ccddf15..6aca66899 100644 --- a/versioned_docs/version-0.45/integrate/ibc/overview.md +++ b/versioned_docs/version-0.45/integrate/ibc/overview.md @@ -50,7 +50,7 @@ In IBC, blockchains do not directly pass messages to each other over the network - The proof format that all implementations must produce and verify is defined in [ICS-23 implementation](https://github.com/confio/ics23). -### Capabilities +### [Capabilities](./ocap.md) IBC is intended to work in execution environments where modules do not necessarily trust each other. IBC must authenticate module actions on ports and channels so that only modules with the appropriate permissions can use the channels. This security is accomplished using [dynamic capabilities](../architecture/adr-003-dynamic-capability-store.md). Upon binding to a port or creating a channel for a module, IBC returns a dynamic capability that the module must claim to use that port or channel. This binding strategy prevents other modules from using that port or channel since those modules do not own the appropriate capability. @@ -148,4 +148,4 @@ To learn more about IBC, check out the following specifications: ## Next {hide} -Learn about how to [integrate](integration.md) IBC to your application {hide} +Learn about how to [integrate](./integration.md) IBC to your application {hide} diff --git a/versioned_docs/version-0.45/integrate/ibc/relayer.md b/versioned_docs/version-0.45/integrate/ibc/relayer.md index 10fbdfc07..0e59885c8 100644 --- a/versioned_docs/version-0.45/integrate/ibc/relayer.md +++ b/versioned_docs/version-0.45/integrate/ibc/relayer.md @@ -6,7 +6,7 @@ order: 4 ## Prerequisites Readings -- [IBC Overview](overview.md) {prereq} +- [IBC Overview](./overview.md) {prereq} - [Events](https://github.com/cosmos/cosmos-sdk/blob/master/docs/core/events.md) {prereq} ## Events diff --git a/versioned_docs/version-0.45/integrate/ibc/upgrades/README.md b/versioned_docs/version-0.45/integrate/ibc/upgrades/README.md index d43ab3980..bc7c88966 100644 --- a/versioned_docs/version-0.45/integrate/ibc/upgrades/README.md +++ b/versioned_docs/version-0.45/integrate/ibc/upgrades/README.md @@ -10,5 +10,5 @@ This directory contains information on how to upgrade an IBC chain without break IBC-connnected chains must be able to upgrade without breaking connections to other chains. Otherwise there would be a massive disincentive towards upgrading and disrupting high-value IBC connections, thus preventing chains in the IBC ecosystem from evolving and improving. Many chain upgrades may be irrelevant to IBC, however some upgrades could potentially break counterparty clients if not handled correctly. Thus, any IBC chain that wishes to perform a IBC-client-breaking upgrade must perform an IBC upgrade in order to allow counterparty clients to securely upgrade to the new light client. -1. The [quick-guide](quick-guide.md) describes how IBC-connected chains can perform client-breaking upgrades and how relayers can securely upgrade counterparty clients using the SDK. -2. The [developer-guide](developer-guide.md) is a guide for developers intending to develop IBC client implementations with upgrade functionality. +1. The [quick-guide](./quick-guide.md) describes how IBC-connected chains can perform client-breaking upgrades and how relayers can securely upgrade counterparty clients using the SDK. +2. The [developer-guide](./developer-guide.md) is a guide for developers intending to develop IBC client implementations with upgrade functionality. diff --git a/versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md b/versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md index f48f0d8c8..d41b3346d 100644 --- a/versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md +++ b/versioned_docs/version-0.45/integrate/ibc/upgrades/developer-guide.md @@ -6,7 +6,7 @@ order: 2 Learn how to implement upgrade functionality for your custom IBC client. {synopsis} -As mentioned in the [README](README.md), it is vital that high-value IBC clients can upgrade along with their underlying chains to avoid disruption to the IBC ecosystem. Thus, IBC client developers will want to implement upgrade functionality to enable clients to maintain connections and channels even across chain upgrades. +As mentioned in the [README](./README.md), it is vital that high-value IBC clients can upgrade along with their underlying chains to avoid disruption to the IBC ecosystem. Thus, IBC client developers will want to implement upgrade functionality to enable clients to maintain connections and channels even across chain upgrades. The IBC protocol allows client implementations to provide a path to upgrading clients given the upgraded client state, upgraded consensus state and proofs for each. diff --git a/versioned_docs/version-0.45/user/run-node/interact-node.md b/versioned_docs/version-0.45/user/run-node/interact-node.md new file mode 100644 index 000000000..b1e375e6c --- /dev/null +++ b/versioned_docs/version-0.45/user/run-node/interact-node.md @@ -0,0 +1,227 @@ +# Interacting with the Node + +There are multiple ways to interact with a node: using the CLI, using gRPC or using the REST endpoints. {synopsis} + +## Pre-requisite Readings + +- [gRPC, REST and Tendermint Endpoints](../core/grpc_rest.md) {prereq} +- [Running a Node](./run-node.md) {prereq} + +## Using the CLI + +Now that your chain is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command: + +```bash +simd query bank balances $MY_VALIDATOR_ADDRESS --chain-id my-test-chain +``` + +You should see the current balance of the account you created, equal to the original balance of `stake` you granted it minus the amount you delegated via the `gentx`. Now, create a second account: + +```bash +simd keys add recipient --keyring-backend test + +# Put the generated address in a variable for later use. +RECIPIENT=$(simd keys show recipient -a --keyring-backend test) +``` + +The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000000stake --chain-id my-test-chain --keyring-backend test + +# Check that the recipient account did receive the tokens. +simd query bank balances $RECIPIENT --chain-id my-test-chain +``` + +Finally, delegate some of the stake tokens sent to the `recipient` account to the validator: + +```bash +simd tx staking delegate $(simd keys show my_validator --bech val -a --keyring-backend test) 500stake --from recipient --chain-id my-test-chain --keyring-backend test + +# Query the total delegations to `validator`. +simd query staking delegations-to $(simd keys show my_validator --bech val -a --keyring-backend test) --chain-id my-test-chain +``` + +You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account. + +## Using gRPC + +The Protobuf ecosystem developed tools for different use cases, including code-generation from `*.proto` files into various languages. These tools allow the building of clients easily. Often, the client connection (i.e. the transport) can be plugged and replaced very easily. Let's explore one of the most popular transport: [gRPC](../core/grpc_rest.md). + +Since the code generation library largely depends on your own tech stack, we will only present three alternatives: + +- `grpcurl` for generic debugging and testing, +- programmatically via Go, +- CosmJS for JavaScript/TypeScript developers. + +### grpcurl + +[grpcurl](https://github.com/fullstorydev/grpcurl) is like `curl` but for gRPC. It is also available as a Go library, but we will use it only as a CLI command for debugging and testing purposes. Follow the instructions in the previous link to install it. + +Assuming you have a local node running (either a localnet, or connected a live network), you should be able to run the following command to list the Protobuf services available (you can replace `localhost:9000` by the gRPC server endpoint of another node, which is configured under the `grpc.address` field inside [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml)): + +```bash +grpcurl -plaintext localhost:9090 list +``` + +You should see a list of gRPC services, like `cosmos.bank.v1beta1.Query`. This is called reflection, which is a Protobuf endpoint returning a description of all available endpoints. Each of these represents a different Protobuf service, and each service exposes multiple RPC methods you can query against. + +In order to get a description of the service you can run the following command: + +```bash +grpcurl \ + localhost:9090 \ + describe cosmos.bank.v1beta1.Query # Service we want to inspect +``` + +It's also possible to execute an RPC call to query the node for information: + +```bash +grpcurl \ + -plaintext + -d '{"address":"$MY_VALIDATOR"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using grpcurl + +You may also query for historical data by passing some [gRPC metadata](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) to the query: the `x-cosmos-block-height` metadata should contain the block to query. Using grpcurl as above, the command looks like: + +```bash +grpcurl \ + -plaintext \ + -H "x-cosmos-block-height: 279256" \ + -d '{"address":"$MY_VALIDATOR"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Programmatically via Go + +The following snippet shows how to query the state using gRPC inside a Go program. The idea is to create a gRPC connection, and use the Protobuf-generated client code to query the gRPC server. + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func queryState() error { + myAddress, err := sdk.AccAddressFromBech32("cosmos1...") + if err != nil { + return err + } + + // Create a connection to the gRPC server. + grpcConn := grpc.Dial( + "127.0.0.1:9090", // your gRPC server address. + grpc.WithInsecure(), // The SDK doesn't support any transport security mechanism. + ) + defer grpcConn.Close() + + // This creates a gRPC client to query the x/bank service. + bankClient := banktypes.NewQueryClient(grpcConn) + bankRes, err := bankClient.Balance( + context.Background(), + &banktypes.QueryBalanceRequest{Address: myAddress, Denom: "atom"}, + ) + if err != nil { + return err + } + + fmt.Println(bankRes.GetBalance()) // Prints the account balance + + return nil +} +``` + +You can replace the query client (here we are using `x/bank`'s) with one generated from any other Protobuf service. The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using Go + +Querying for historical blocks is done by adding the block height metadata in the gRPC request. + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func queryState() error { + // --snip-- + + var header metadata.MD + bankRes, err = bankClient.Balance( + metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // Add metadata to request + &banktypes.QueryBalanceRequest{Address: myAddress, Denom: denom}, + grpc.Header(&header), // Retrieve header from response + ) + if err != nil { + return err + } + blockHeight = header.Get(grpctypes.GRPCBlockHeightHeader) + + fmt.Println(blockHeight) // Prints the block height (12) + + return nil +} +``` + +### CosmJS + +CosmJS documentation can be found at [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs). As of January 2021, CosmJS documentation is still work in progress. + +## Using the REST Endpoints + +As described in the [gRPC guide](../core/grpc_rest.md), all gRPC services on the Cosmos SDK are made available for more convenient REST-based queries through gRPC-gateway. The format of the URL path is based on the Protobuf service method's full-qualified name, but may contain small customizations so that final URLs look more idiomatic. For example, the REST endpoint for the `cosmos.bank.v1beta1.Query/AllBalances` method is `GET /cosmos/bank/v1beta1/balances/{address}`. Request arguments are passed as query parameters. + +As a concrete example, the `curl` command to make balances request is: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR +``` + +Make sure to replace `localhost:1317` with the REST endpoint of your node, configured under the `api.address` field. + +The list of all available REST endpoints is available as a Swagger specification file, it can be viewed at `localhost:1317/swagger`. Make sure that the `api.swagger` field is set to true in your [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) file. + +### Query for historical state using REST + +Querying for historical state is done using the HTTP header `x-cosmos-block-height`. For example, a curl command would look like: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + -H "x-cosmos-block-height: 279256" + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Cross-Origin Resource Sharing (CORS) + +[CORS policies](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) are not enabled by default to help with security. If you would like to use the rest-server in a public environment we recommend you provide a reverse proxy, this can be done with [nginx](https://www.nginx.com/). For testing and development purposes there is an `enabled-unsafe-cors` field inside [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). + +## Next {hide} + +Sending transactions using gRPC and REST requires some additional steps: generating the transaction, signing it, and finally broadcasting it. Read about [generating and signing transactions](./txs.md). {hide} diff --git a/versioned_docs/version-0.45/user/run-node/keyring.md b/versioned_docs/version-0.45/user/run-node/keyring.md new file mode 100644 index 000000000..711dccbd0 --- /dev/null +++ b/versioned_docs/version-0.45/user/run-node/keyring.md @@ -0,0 +1,132 @@ +# Setting up the keyring + +This document describes how to configure and use the keyring and its various backends for an [**application**](../basics/app-anatomy.md). {synopsis} + +The keyring holds the private/public keypairs used to interact with a node. For instance, a validator key needs to be set up before running the blockchain node, so that blocks can be correctly signed. The private key can be stored in different locations, called "backends", such as a file or the operating system's own key storage. + +## Available backends for the keyring + +Starting with the v0.38.0 release, Cosmos SDK comes with a new keyring implementation +that provides a set of commands to manage cryptographic keys in a secure fashion. The +new keyring supports multiple storage backends, some of which may not be available on +all operating systems. + +### The `os` backend + +The `os` backend relies on operating system-specific defaults to handle key storage +securely. Typically, an operating system's credential sub-system handles password prompts, +private keys storage, and user sessions according to the user's password policies. Here +is a list of the most popular operating systems and their respective passwords manager: + +- macOS (since Mac OS 8.6): [Keychain](https://support.apple.com/en-gb/guide/keychain-access/welcome/mac) +- Windows: [Credentials Management API](https://docs.microsoft.com/en-us/windows/win32/secauthn/credentials-management) +- GNU/Linux: + - [libsecret](https://gitlab.gnome.org/GNOME/libsecret) + - [kwallet](https://api.kde.org/frameworks/kwallet/html/index.html) + +GNU/Linux distributions that use GNOME as default desktop environment typically come with +[Seahorse](https://wiki.gnome.org/Apps/Seahorse). Users of KDE based distributions are +commonly provided with [KDE Wallet Manager](https://userbase.kde.org/KDE_Wallet_Manager). +Whilst the former is in fact a `libsecret` convenient frontend, the latter is a `kwallet` +client. + +`os` is the default option since operating system's default credentials managers are +designed to meet users' most common needs and provide them with a comfortable +experience without compromising on security. + +The recommended backends for headless environments are `file` and `pass`. + +### The `file` backend + +The `file` backend more closely resembles the keybase implementation used prior to +v0.38.1. It stores the keyring encrypted within the app's configuration directory. This +keyring will request a password each time it is accessed, which may occur multiple +times in a single command resulting in repeated password prompts. If using bash scripts +to execute commands using the `file` option you may want to utilize the following format +for multiple prompts: + +```sh +# assuming that KEYPASSWD is set in the environment +$ gaiacli config keyring-backend file # use file backend +$ (echo $KEYPASSWD; echo $KEYPASSWD) | gaiacli keys add me # multiple prompts +$ echo $KEYPASSWD | gaiacli keys show me # single prompt +``` + +::: tip +The first time you add a key to an empty keyring, you will be prompted to type the password twice. +::: + +### The `pass` backend + +The `pass` backend uses the [pass](https://www.passwordstore.org/) utility to manage on-disk +encryption of keys' sensitive data and metadata. Keys are stored inside `gpg` encrypted files +within app-specific directories. `pass` is available for the most popular UNIX +operating systems as well as GNU/Linux distributions. Please refer to its manual page for +information on how to download and install it. + +::: tip +**pass** uses [GnuPG](https://gnupg.org/) for encryption. `gpg` automatically invokes the `gpg-agent` +daemon upon execution, which handles the caching of GnuPG credentials. Please refer to `gpg-agent` +man page for more information on how to configure cache parameters such as credentials TTL and +passphrase expiration. +::: + +The password store must be set up prior to first use: + +```sh +pass init +``` + +Replace `` with your GPG key ID. You can use your personal GPG key or an alternative +one you may want to use specifically to encrypt the password store. + +### The `kwallet` backend + +The `kwallet` backend uses `KDE Wallet Manager`, which comes installed by default on the +GNU/Linux distributions that ships KDE as default desktop environment. Please refer to +[KWallet Handbook](https://docs.kde.org/stable5/en/kdeutils/kwallet5/index.html) for more +information. + +### The `test` backend + +The `test` backend is a password-less variation of the `file` backend. Keys are stored +unencrypted on disk. + +**Provided for testing purposes only. The `test` backend is not recommended for use in production environments**. + +### The `memory` backend + +The `memory` backend stores keys in memory. The keys are immediately deleted after the program has exited. + +**Provided for testing purposes only. The `memory` backend is not recommended for use in production environments**. + +## Adding keys to the keyring + +::: warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Applications developed using the Cosmos SDK come with the `keys` subcommand. For the purpose of this tutorial, we're running the `simd` CLI, which is an application built using the Cosmos SDK for testing and educational purposes. For more information, see [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/v0.40.0-rc3/simapp). + +You can use `simd keys` for help about the keys command and `simd keys [command] --help` for more information about a particular subcommand. + +::: tip +You can also enable auto-completion with the `simd completion` command. For example, at the start of a bash session, run `. <(simd completion)`, and all `simd` subcommands will be auto-completed. +::: + +To create a new key in the keyring, run the `add` subcommand with a `` argument. For the purpose of this tutorial, we will solely use the `test` backend, and call our new key `my_validator`. This key will be used in the next section. + +```bash +$ simd keys add my_validator --keyring-backend test + +# Put the generated address in a variable for later use. +MY_VALIDATOR_ADDRESS=$(simd keys show my_validator -a --keyring-backend test) +``` + +This command generates a new 24-word mnemonic phrase, persists it to the relevant backend, and outputs information about the keypair. If this keypair will be used to hold value-bearing tokens, be sure to write down the mnemonic phrase somewhere safe! + +By default, the keyring generates a `secp256k1` keypair. The keyring also supports `ed25519` keys, which may be created by passing the `--algo ed25519` flag. A keyring can of course hold both types of keys simultaneously, and the Cosmos SDK's `x/auth` module (in particular its [AnteHandlers](../core/baseapp.md#antehandler)) supports natively these two public key algorithms. + +## Next {hide} + +Read about [running a node](./run-node.md) {hide} diff --git a/versioned_docs/version-0.45/user/run-node/rosetta.md b/versioned_docs/version-0.45/user/run-node/rosetta.md new file mode 100644 index 000000000..49f648665 --- /dev/null +++ b/versioned_docs/version-0.45/user/run-node/rosetta.md @@ -0,0 +1,133 @@ +# Rosetta + +The `rosetta` package implements Coinbase's [Rosetta API](https://www.rosetta-api.org). This document provides instructions on how to use the Rosetta API integration. For information about the motivation and design choices, refer to [ADR 035](../architecture/adr-035-rosetta-api-support.md). + +## Add Rosetta Command + +The Rosetta API server is a stand-alone server that connects to a node of a chain developed with Cosmos SDK. + +To enable Rosetta API support, it's required to add the `RosettaCommand` to your application's root command file (e.g. `appd/cmd/root.go`). + +Import the `server` package: + +```go + "github.com/cosmos/cosmos-sdk/server" +``` + +Find the following line: + +```go +initRootCmd(rootCmd, encodingConfig) +``` + +After that line, add the following: + +```go +rootCmd.AddCommand( + server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler) +) +``` + +The `RosettaCommand` function builds the `rosetta` root command and is defined in the `server` package within Cosmos SDK. + +Since we’ve updated the Cosmos SDK to work with the Rosetta API, updating the application's root command file is all you need to do. + +An implementation example can be found in `simapp` package. + +## Use Rosetta Command + +To run Rosetta in your application CLI, use the following command: + +``` +appd rosetta --help +``` + +To test and run Rosetta API endpoints for applications that are running and exposed, use the following command: + +``` +appd rosetta + --blockchain "your application name (ex: gaia)" + --network "your chain identifier (ex: testnet-1)" + --tendermint "tendermint endpoint (ex: localhost:26657)" + --grpc "gRPC endpoint (ex: localhost:9090)" + --addr "rosetta binding address (ex: :8080)" +``` + +## Extension + +There are two ways in which you can customize and extend the implementation with your custom settings. + +### Message extension + +In order to make an `sdk.Msg` understandable by rosetta the only thing which is required is adding the methods to your message that satisfy the `rosetta.Msg` interface. +Examples on how to do so can be found in the staking types such as `MsgDelegate`, or in bank types such as `MsgSend`. + +### Client interface override + +In case more customization is required, it's possible to embed the Client type and override the methods which require customizations. + +Example: + +```go +package custom_client +import ( + +"context" +"github.com/coinbase/rosetta-sdk-go/types" +"github.com/cosmos/cosmos-sdk/server/rosetta/lib" +) + +// CustomClient embeds the standard cosmos client +// which means that it implements the cosmos-rosetta-gateway Client +// interface while at the same time allowing to customize certain methods +type CustomClient struct { + *rosetta.Client +} + +func (c *CustomClient) ConstructionPayload(_ context.Context, request *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) { + // provide custom signature bytes + panic("implement me") +} +``` + +### Error extension + +Since rosetta requires to provide 'returned' errors to network options. In order to declare a new rosetta error, we use the `errors` package in cosmos-rosetta-gateway. + +Example: + +```go +package custom_errors +import crgerrs "github.com/cosmos/cosmos-sdk/server/rosetta/lib/errors" + +var customErrRetriable = true +var CustomError = crgerrs.RegisterError(100, "custom message", customErrRetriable, "description") +``` + +Note: errors must be registered before cosmos-rosetta-gateway's `Server`.`Start` method is called. Otherwise the registration will be ignored. Errors with same code will be ignored too. + +## Integration in app.go + +To integrate rosetta as a command in your application, in app.go, in your root command simply use the `server.RosettaCommand` method. + +Example: + +```go +package app +import ( + +"github.com/cosmos/cosmos-sdk/server" +"github.com/spf13/cobra" +) + +func buildAppCommand(rootCmd *cobra.Command) { + // more app.go init stuff + // ... + // add rosetta command + rootCmd.AddCommand(server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler)) +} +``` + +A full implementation example can be found in `simapp` package. + +NOTE: when using a customized client, the command cannot be used as the constructors required **may** differ, so it's required to create a new one. We intend to provide a way to init a customized client without writing extra code in the future. diff --git a/versioned_docs/version-0.45/user/run-node/run-node.md b/versioned_docs/version-0.45/user/run-node/run-node.md new file mode 100644 index 000000000..d044ce763 --- /dev/null +++ b/versioned_docs/version-0.45/user/run-node/run-node.md @@ -0,0 +1,124 @@ +# Running a Node + +Now that the application is ready and the keyring populated, it's time to see how to run the blockchain node. In this section, the application we are running is called [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/v0.40.0-rc3/simapp), and its corresponding CLI binary `simd`. {synopsis} + +## Pre-requisite Readings + +- [Anatomy of an SDK Application](../basics/app-anatomy.md) {prereq} +- [Setting up the keyring](./keyring.md) {prereq} + +## Initialize the Chain + +::: warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Before actually running the node, we need to initialize the chain, and most importantly its genesis file. This is done with the `init` subcommand: + +```bash +# The argument is the custom username of your node, it should be human-readable. +simd init --chain-id my-test-chain +``` + +The command above creates all the configuration files needed for your node to run, as well as a default genesis file, which defines the initial state of the network. All these configuration files are in `~/.simapp` by default, but you can overwrite the location of this folder by passing the `--home` flag. + +The `~/.simapp` folder has the following structure: + +```bash +. # ~/.simapp + |- data # Contains the databases used by the node. + |- config/ + |- app.toml # Application-related configuration file. + |- config.toml # Tendermint-related configuration file. + |- genesis.json # The genesis file. + |- node_key.json # Private key to use for node authentication in the p2p protocol. + |- priv_validator_key.json # Private key to use as a validator in the consensus protocol. +``` + +## Updating Some Default Settings + +If you want to change any field values in configuration files (for ex: genesis.json) you can use `jq` ([installation](https://stedolan.github.io/jq/download/) & [docs](https://stedolan.github.io/jq/manual/#Assignment)) & `sed` commands to do that. Few examples are listed here. + +```bash +# to change the chain-id +jq '.chain_id = "testing"' genesis.json > temp.json && mv temp.json genesis.json + +# to enable the api server +sed -i '/\[api\]/,+3 s/enable = false/enable = true/' app.toml + +# to change the voting_period +jq '.app_state.gov.voting_params.voting_period = "600s"' genesis.json > temp.json && mv temp.json genesis.json + +# to change the inflation +jq '.app_state.mint.minter.inflation = "0.300000000000000000"' genesis.json > temp.json && mv temp.json genesis.json +``` + +## Adding Genesis Accounts + +Before starting the chain, you need to populate the state with at least one account. To do so, first [create a new account in the keyring](./keyring.md#adding-keys-to-the-keyring) named `my_validator` under the `test` keyring backend (feel free to choose another name and another backend). + +Now that you have created a local account, go ahead and grant it some `stake` tokens in your chain's genesis file. Doing so will also make sure your chain is aware of this account's existence: + +```bash +simd add-genesis-account $MY_VALIDATOR_ADDRESS 100000000000stake +``` + +Recall that `$MY_VALIDATOR_ADDRESS` is a variable that holds the address of the `my_validator` key in the [keyring](./keyring.md#adding-keys-to-the-keyring). Also note that the tokens in the SDK have the `{amount}{denom}` format: `amount` is is a 18-digit-precision decimal number, and `denom` is the unique token identifier with its denomination key (e.g. `atom` or `uatom`). Here, we are granting `stake` tokens, as `stake` is the token identifier used for staking in [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/v0.40.0-rc3/simapp). For your own chain with its own staking denom, that token identifier should be used instead. + +Now that your account has some tokens, you need to add a validator to your chain. Validators are special full-nodes that participate in the consensus process (implemented in the [underlying consensus engine](../intro/sdk-app-architecture.md#tendermint)) in order to add new blocks to the chain. Any account can declare its intention to become a validator operator, but only those with sufficient delegation get to enter the active set (for example, only the top 125 validator candidates with the most delegation get to be validators in the Cosmos Hub). For this guide, you will add your local node (created via the `init` command above) as a validator of your chain. Validators can be declared before a chain is first started via a special transaction included in the genesis file called a `gentx`: + +```bash +# Create a gentx. +simd gentx my_validator 100000000stake --chain-id my-test-chain --keyring-backend test + +# Add the gentx to the genesis file. +simd collect-gentxs +``` + +A `gentx` does three things: + +1. Registers the `validator` account you created as a validator operator account (i.e. the account that controls the validator). +2. Self-delegates the provided `amount` of staking tokens. +3. Link the operator account with a Tendermint node pubkey that will be used for signing blocks. If no `--pubkey` flag is provided, it defaults to the local node pubkey created via the `simd init` command above. + +For more information on `gentx`, use the following command: + +```bash +simd gentx --help +``` + +## Configuring the Node Using `app.toml` and `config.toml` + +The Cosmos SDK automatically generates two configuration files inside `~/.simapp/config`: + +- `config.toml`: used to configure the Tendermint, learn more on [Tendermint's documentation](https://docs.tendermint.com/master/nodes/configuration.html), +- `app.toml`: generated by the Cosmos SDK, and used to configure your app, such as state pruning strategies, telemetry, gRPC and REST servers configuration, state sync... + +Both files are heavily commented, please refer to them directly to tweak your node. + +One example config to tweak is the `minimum-gas-prices` field inside `app.toml`, which defines the minimum gas prices the validator node is willing to accept for processing a transaction. Depending on the chain, it might be an empty string or not. If it's empty, make sure to edit the field with some value, for example `10token`, or else the node will halt on startup. For the purpose of this tutorial, let's set the minimum gas price to 0: + +```toml + # The minimum gas prices a validator is willing to accept for processing a + # transaction. A transaction's fees must meet the minimum of any denomination + # specified in this config (e.g. 0.25token1;0.0001token2). + minimum-gas-prices = "0stake" +``` + +## Run a Localnet + +Now that everything is set up, you can finally start your node: + +```bash +simd start +``` + +You should see blocks come in. + +The previous command allow you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time, and see how consensus happens between them. + +The naive way would be to run the same commands again in separate terminal windows. This is possible, however in the SDK, we leverage the power of [Docker Compose](https://docs.docker.com/compose/) to run a localnet. If you need inspiration on how to set up your own localnet with Docker Compose, you can have a look at the SDK's [`docker-compose.yml`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc3/docker-compose.yml). + +## Next {hide} + +Read about the [Interacting with your Node](./interact-node.md) {hide} diff --git a/versioned_docs/version-0.45/user/run-node/run-testnet.md b/versioned_docs/version-0.45/user/run-node/run-testnet.md new file mode 100644 index 000000000..868a8a33b --- /dev/null +++ b/versioned_docs/version-0.45/user/run-node/run-testnet.md @@ -0,0 +1,95 @@ +# Running a Testnet + +The `simd testnet` subcommand makes it easy to initialize and start a simulated test network for testing purposes. {synopsis} + +In addition to the commands for [running a node](./run-node.html), the `simd` binary also includes a `testnet` command that allows you to start a simulated test network in-process or to initialize files for a simulated test network that runs in a separate process. + +## Initialize Files + +First, let's take a look at the `init-files` subcommand. + +This is similar to the `init` command when initializing a single node, but in this case we are initializing multiple nodes, generating the genesis transactions for each node, and then collecting those transactions. + +The `init-files` subcommand initializes the necessary files to run a test network in a separate process (i.e. using a Docker container). Running this command is not a prerequisite for the `start` subcommand ([see below](#start-testnet)). + +In order to initialize the files for a test network, run the following command: + +```bash +simd testnet init-files +``` + +You should see the following output in your terminal: + +```bash +Successfully initialized 4 node directories +``` + +The default output directory is a relative `.testnets` directory. Let's take a look at the files created within the `.testnets` directory. + +### gentxs + +The `gentxs` directory includes a genesis transaction for each validator node. Each file includes a JSON encoded genesis transaction used to register a validator node at the time of genesis. The genesis transactions are added to the `genesis.json` file within each node directory during the initilization process. + +### nodes + +A node directory is created for each validator node. Within each node directory is a `simd` directory. The `simd` directory is the home directory for each node, which includes the configuration and data files for that node (i.e. the same files included in the default `~/.simapp` directory when running a single node). + +## Start Testnet + +Now, let's take a look at the `start` subcommand. + +The `start` subcommand both initializes and starts an in-process test network. This is the fastest way to spin up a local test network for testing purposes. + +You can start the local test network by running the following command: + +```bash +simd testnet start +``` + +You should see something similar to the following: + +```bash +acquiring test network lock +preparing test network with chain-id "chain-mtoD9v" + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++ THIS MNEMONIC IS FOR TESTING PURPOSES ONLY ++ +++ DO NOT USE IN PRODUCTION ++ +++ ++ +++ sustain know debris minute gate hybrid stereo custom ++ +++ divorce cross spoon machine latin vibrant term oblige ++ +++ moment beauty laundry repeat grab game bronze truly ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +starting test network... +started test network +press the Enter Key to terminate +``` + +The first validator node is now running in-process, which means the test network will terminate once you either close the terminal window or you press the Enter key. In the output, the mnemonic phrase for the first validator node is provided for testing purposes. The validator node is using the same default addresses being used when initializing and starting a single node (no need to provide a `--node` flag). + +Check the status of the first validator node: + +``` +simd status +``` + +Import the key from the provided mnemonic: + +``` +simd keys add test --recover --keyring-backend test +``` + +Check the balance of the account address: + +``` +simd q bank balances [address] +``` + +Use this test account to manually test against the test network. + +## Testnet Options + +You can customize the configuration of the test network with flags. In order to see all flag options, append the `--help` flag to each command. diff --git a/versioned_docs/version-0.45/user/run-node/txs.md b/versioned_docs/version-0.45/user/run-node/txs.md new file mode 100644 index 000000000..248f1b222 --- /dev/null +++ b/versioned_docs/version-0.45/user/run-node/txs.md @@ -0,0 +1,355 @@ +# Generating, Signing and Broadcasting Transactions + +This document describes how to generate an (unsigned) transaction, signing it (with one or multiple keys), and broadcasting it to the network. {synopsis} + +## Using the CLI + +The easiest way to send transactions is using the CLI, as we have seen in the previous page when [interacting with a node](./interact-node.md#using-the-cli). For example, running the following command + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --keyring-backend test +``` + +will run the following steps: + +- generate a transaction with one `Msg` (`x/bank`'s `MsgSend`), and print the generated transaction to the console. +- ask the user for confirmation to send the transaction from the `$MY_VALIDATOR_ADDRESS` account. +- fetch `$MY_VALIDATOR_ADDRESS` from the keyring. This is possible because we have [set up the CLI's keyring](./keyring.md) in a previous step. +- sign the generated transaction with the keyring's account. +- broadcast the signed transaction to the network. This is possible because the CLI connects to the node's Tendermint RPC endpoint. + +The CLI bundles all the necessary steps into a simple-to-use user experience. However, it's possible to run all the steps individually too. + +### Generating a Transaction + +Generating a transaction can simply be done by appending the `--generate-only` flag on any `tx` command, e.g.: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --generate-only +``` + +This will output the unsigned transaction as JSON in the console. We can also save the unsigned transaction to a file (to be passed around between signers more easily) by appending `> unsigned_tx.json` to the above command. + +### Signing a Transaction + +Signing a transaction using the CLI requires the unsigned transaction to be saved in a file. Let's assume the unsigned transaction is in a file called `unsigned_tx.json` in the current directory (see previous paragraph on how to do that). Then, simply run the following command: + +```bash +simd tx sign unsigned_tx.json --chain-id my-test-chain --keyring-backend test --from $MY_VALIDATOR_ADDRESS +``` + +This command will decode the unsigned transaction and sign it with `SIGN_MODE_DIRECT` with `$MY_VALIDATOR_ADDRESS`'s key, which we already set up in the keyring. The signed transaction will be output as JSON to the console, and, as above, we can save it to a file by appending `> signed_tx.json`. + +Some useful flags to consider in the `tx sign` command: + +- `--sign-mode`: you may use `amino-json` to sign the transaction using `SIGN_MODE_LEGACY_AMINO_JSON`, +- `--offline`: sign in offline mode. This means that the `tx sign` command doesn't connect to the node to retrieve the signer's account number and sequence, both needed for signing. In this case, you must manually supply the `--account-number` and `--sequence` flags. This is useful for offline signing, i.e. signing in a secure environment which doesn't have access to the internet. + +#### Signing with Multiple Signers + +::: warning +Please note that signing a transaction with multiple signers or with a multisig account, where at least one signer uses `SIGN_MODE_DIRECT`, is not yet possible. You may follow [this Github issue](https://github.com/cosmos/cosmos-sdk/issues/8141) for more info. +::: + +Signing with multiple signers is done with the `tx multisign` command. This command assumes that all signers use `SIGN_MODE_LEGACY_AMINO_JSON`. The flow is similar to the `tx sign` command flow, but instead of signing an unsigned transaction file, each signer signs the file signed by previous signer(s). The `tx multisign` command will append signatures to the existing transactions. It is important that signers sign the transaction **in the same order** as given by the transaction, which is retrievable using the `GetSigners()` method. + +For example, starting with the `unsigned_tx.json`, and assuming the transaction has 4 signers, we would run: + +```bash +# Let signer1 sign the unsigned tx. +simd tx multisignsign unsigned_tx.json signer_key_1 --chain-id my-test-chain --keyring-backend test > partial_tx_1.json +# Now signer1 will send the partial_tx_1.json to the signer2. +# Signer2 appends their signature: +simd tx multisignsign partial_tx_1.json signer_key_2 --chain-id my-test-chain --keyring-backend test > partial_tx_2.json +# Signer2 sends the partial_tx_2.json file to signer3, and signer3 can append his signature: +simd tx multisignsign partial_tx_2.json signer_key_3 --chain-id my-test-chain --keyring-backend test > partial_tx_3.json +``` + +### Broadcasting a Transaction + +Broadcasting a transaction is done using the following command: + +```bash +simd tx broadcast tx_signed.json +``` + +You may optionally pass the `--broadcast-mode` flag to specify which response to receive from the node: + +- `block`: the CLI waits for the tx to be committed in a block. +- `sync`: the CLI waits for a CheckTx execution response only. +- `async`: the CLI returns immediately (transaction might fail). + +## Programmatically with Go + +It is possible to manipulate transactions programmatically via Go using the Cosmos SDK's `TxBuilder` interface. + +### Generating a Transaction + +Before generating a transaction, a new instance of a `TxBuilder` needs to be created. Since the SDK supports both Amino and Protobuf transactions, the first step would be to decide which encoding scheme to use. All the subsequent steps remain unchanged, whether you're using Amino or Protobuf, as `TxBuilder` abstracts the encoding mechanisms. In the following snippet, we will use Protobuf. + +```go +import ( + "github.com/cosmos/cosmos-sdk/simapp" +) + +func sendTx() error { + // Choose your codec: Amino or Protobuf. Here, we use Protobuf, given by the + // following function. + encCfg := simapp.MakeTestEncodingConfig() + + // Create a new TxBuilder. + txBuilder := encCfg.TxConfig.NewTxBuilder() + + // --snip-- +} +``` + +We can also set up some keys and addresses that will send and receive the transactions. Here, for the purpose of the tutorial, we will be using some dummy data to create keys. + +```go +import ( + "github.com/cosmos/cosmos-sdk/testutil/testdata" +) + +priv1, _, addr1 := testdata.KeyTestPubAddr() +priv2, _, addr2 := testdata.KeyTestPubAddr() +priv3, _, addr3 := testdata.KeyTestPubAddr() +``` + +Populating the `TxBuilder` can be done via its [methods](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/client/tx_config.go#L32-L45): + +```go +import ( + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func sendTx() error { + // --snip-- + + // Define two x/bank MsgSend messages: + // - from addr1 to addr3, + // - from addr2 to addr3. + // This means that the transactions needs two signers: addr1 and addr2. + msg1 := banktypes.NewMsgSend(addr1, addr3, types.NewCoins(types.NewInt64Coin("atom", 12))) + msg2 := banktypes.NewMsgSend(addr2, addr3, types.NewCoins(types.NewInt64Coin("atom", 34))) + + err := txBuilder.SetMsgs(msg1, msg2) + if err != nil { + return err + } + + txBuilder.SetGasLimit(...) + txBuilder.SetFeeAmount(...) + txBuilder.SetMemo(...) + txBuilder.SetTimeoutHeight(...) +} +``` + +At this point, `TxBuilder`'s underlying transaction is ready to be signed. + +### Signing a Transaction + +We set encoding config to use Protobuf, which will use `SIGN_MODE_DIRECT` by default. As per [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc6/docs/architecture/adr-020-protobuf-transaction-encoding.md), each signer needs to sign the `SignerInfo`s of all other signers. This means that we need to perform two steps sequentially: + +- for each signer, populate the signer's `SignerInfo` inside `TxBuilder`, +- once all `SignerInfo`s are populated, for each signer, sign the `SignDoc` (the payload to be signed). + +In the current `TxBuilder`'s API, both steps are done using the same method: `SetSignatures()`. The current API requires us to first perform a round of `SetSignatures()` _with empty signatures_, only to populate `SignerInfo`s, and a second round of `SetSignatures()` to actually sign the correct payload. + +```go +import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" +) + +func sendTx() error { + // --snip-- + + privs := []cryptotypes.PrivKey{priv1, priv2} + accNums:= []uint64{..., ...} // The accounts' account numbers + accSeqs:= []uint64{..., ...} // The accounts' sequence numbers + + // First round: we gather all the signer infos. We use the "set empty + // signature" hack to do that. + var sigsV2 []signing.SignatureV2 + for i, priv := range privs { + sigV2 := signing.SignatureV2{ + PubKey: priv.PubKey(), + Data: &signing.SingleSignatureData{ + SignMode: encCfg.TxConfig.SignModeHandler().DefaultMode(), + Signature: nil, + }, + Sequence: accSeqs[i], + } + + sigsV2 = append(sigsV2, sigV2) + } + err := txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } + + // Second round: all signer infos are set, so each signer can sign. + sigsV2 = []signing.SignatureV2{} + for i, priv := range privs { + signerData := xauthsigning.SignerData{ + ChainID: chainID, + AccountNumber: accNums[i], + Sequence: accSeqs[i], + } + sigV2, err := tx.SignWithPrivKey( + encCfg.TxConfig.SignModeHandler().DefaultMode(), signerData, + txBuilder, priv, encCfg.TxConfig, accSeqs[i]) + if err != nil { + return nil, err + } + + sigsV2 = append(sigsV2, sigV2) + } + err = txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } +} +``` + +The `TxBuilder` is now correctly populated. To print it, you can use the `TxConfig` interface from the initial encoding config `encCfg`: + +```go +func sendTx() error { + // --snip-- + + // Generated Protobuf-encoded bytes. + txBytes, err := encCfg.TxConfig.TxEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + + // Generate a JSON string. + txJSONBytes, err := encCfg.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + txJSON := string(txJSONBytes) +} +``` + +### Broadcasting a Transaction + +The preferred way to broadcast a transaction is to use gRPC, though using REST (via `gRPC-gateway`) or the Tendermint RPC is also posible. An overview of the differences between these methods is exposed [here](../core/grpc_rest.md). For this tutorial, we will only describe the gRPC method. + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func sendTx(ctx context.Context) error { + // --snip-- + + // Create a connection to the gRPC server. + grpcConn := grpc.Dial( + "127.0.0.1:9090", // Or your gRPC server address. + grpc.WithInsecure(), // The SDK doesn't support any transport security mechanism. + ) + defer grpcConn.Close() + + // Broadcast the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + // We then call the BroadcastTx method on this client. + grpcRes, err := txClient.BroadcastTx( + ctx, + &tx.BroadcastTxRequest{ + Mode: tx.BroadcastMode_BROADCAST_MODE_SYNC, + TxBytes: txBytes, // Proto-binary of the signed transaction, see previous step. + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.TxResponse.Code) // Should be `0` if the tx is successful + + return nil +} +``` + +#### Simulating a Transaction + +Before broadcasting a transaction, we sometimes may want to dry-run the transaction, to estimate some information about the transaction without actually committing it. This is called simulating a transaction, and can be done as follows: + +```go +import ( + "context" + "fmt" + "testing" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/types/tx" + authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" +) + +func simulateTx() error { + // --snip-- + + // Simulate the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + txBytes := /* Fill in with your signed transaction bytes. */ + + // We then call the Simulate method on this client. + grpcRes, err := txClient.Simulate( + context.Background(), + &tx.SimulateRequest{ + TxBytes: txBytes, + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.GasInfo) // Prints estimated gas used. + + return nil +} +``` + +## Using gRPC + +It is not possible to generate or sign a transaction using gRPC, only to broadcast one. + +### Broadcasting a Transaction + +Broadcasting a transaction using the gRPC endpoint can be done by sending a `BroadcastTx` request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +grpcurl -plaintext \ + -d '{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/BroadcastTx +``` + +## Using REST + +It is not possible to generate or sign a transaction using REST, only to broadcast one. + +### Broadcasting a Transaction + +Broadcasting a transaction using the REST endpoint (served by `gRPC-gateway`) can be done by sending a POST request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +curl -X POST \ + -H "Content-Type: application/json" \ + -d'{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:1317/cosmos/tx/v1beta1/txs +``` + +## Using CosmJS (JavaScript & TypeScript) + +CosmJS aims to build client libraries in JavaScript that can be embedded in web applications. Please see [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs) for more information. As of January 2021, CosmJS documentation is still work in progress. diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md b/versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md index ce6bc4957..7aee39deb 100644 --- a/versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md +++ b/versioned_docs/version-0.46/develop/advanced-concepts/00-baseapp.md @@ -1,23 +1,17 @@ # BaseApp -:::note Synopsis -This document describes `BaseApp`, the abstraction that implements the core functionalities of a Cosmos SDK application. -::: +This document describes `BaseApp`, the abstraction that implements the core functionalities of a Cosmos SDK application. {synopsis} -:::note +## Pre-requisite Readings -### Pre-requisite Readings - -* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) -* [Lifecycle of a Cosmos SDK transaction](../high-level-concepts/01-tx-lifecycle.md) - -::: +* [Anatomy of a Cosmos SDK application](../basics/app-anatomy.md) {prereq} +* [Lifecycle of a Cosmos SDK transaction](../basics/tx-lifecycle.md) {prereq} ## Introduction `BaseApp` is a base type that implements the core of a Cosmos SDK application, namely: -* The [Application Blockchain Interface](#main-abci-10-messages), for the state-machine to communicate with the underlying consensus engine (e.g. CometBFT). +* The [Application Blockchain Interface](#main-abci-messages), for the state-machine to communicate with the underlying consensus engine (e.g. Tendermint). * [Service Routers](#service-routers), to route messages and queries to the appropriate module. * Different [states](#state-updates), as the state-machine can have different volatile states updated based on the ABCI message received. @@ -47,9 +41,7 @@ management logic. The `BaseApp` type holds many important parameters for any Cosmos SDK based application. -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L50-L146 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/baseapp.go#L45-L137 Let us go through the most important components. @@ -58,7 +50,7 @@ Let us go through the most important components. First, the important parameters that are initialized during the bootstrapping of the application: -* [`CommitMultiStore`](04-store.md#commitmultistore): This is the main store of the application, +* [`CommitMultiStore`](./05-store.md#commitmultistore): This is the main store of the application, which holds the canonical state that is committed at the [end of each block](#commit). This store is **not** cached, meaning it is not used to update the application's volatile (un-committed) states. The `CommitMultiStore` is a multi-store, meaning a store of stores. Each module of the application @@ -72,38 +64,37 @@ First, the important parameters that are initialized during the bootstrapping of appropriate module for it to be processed. These queries are not ABCI messages themselves, but they are relayed to the relevant module's gRPC `Query` service. * [`TxDecoder`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types#TxDecoder): It is used to decode - raw transaction bytes relayed by the underlying CometBFT engine. + raw transaction bytes relayed by the underlying Tendermint engine. +* [`ParamStore`](#paramstore): The parameter store used to get and set application consensus parameters. * [`AnteHandler`](#antehandler): This handler is used to handle signature verification, fee payment, and other pre-message execution checks when a transaction is received. It's executed during [`CheckTx/RecheckTx`](#checktx) and [`DeliverTx`](#delivertx). -* [`InitChainer`](../high-level-concepts/00-overview-app.md#initchainer), - [`BeginBlocker` and `EndBlocker`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblocker): These are +* [`InitChainer`](../basics/app-anatomy.md#initchainer), + [`BeginBlocker` and `EndBlocker`](../basics/app-anatomy.md#beginblocker-and-endblocker): These are the functions executed when the application receives the `InitChain`, `BeginBlock` and `EndBlock` - ABCI messages from the underlying CometBFT engine. + ABCI messages from the underlying Tendermint engine. Then, parameters used to define [volatile states](#state-updates) (i.e. cached states): * `checkState`: This state is updated during [`CheckTx`](#checktx), and reset on [`Commit`](#commit). * `deliverState`: This state is updated during [`DeliverTx`](#delivertx), and set to `nil` on [`Commit`](#commit) and gets re-initialized on BeginBlock. -* `processProposalState`: This state is updated during [`ProcessProposal`](#process-proposal). -* `prepareProposalState`: This state is updated during [`PrepareProposal`](#prepare-proposal). Finally, a few more important parameters: * `voteInfos`: This parameter carries the list of validators whose precommit is missing, either because they did not vote or because the proposer did not include their vote. This information is - carried by the and can be used by the application for various things like + carried by the [Context](#context) and can be used by the application for various things like punishing absent validators. * `minGasPrices`: This parameter defines the minimum gas prices accepted by the node. This is a **local** parameter, meaning each full-node can set a different `minGasPrices`. It is used in the `AnteHandler` during [`CheckTx`](#checktx), mainly as a spam protection mechanism. The transaction - enters the [mempool](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#mempool-methods) + enters the [mempool](https://docs.tendermint.com/master/tendermint-core/mempool/) only if the gas prices of the transaction are greater than one of the minimum gas price in `minGasPrices` (e.g. if `minGasPrices == 1uatom,1photon`, the `gas-price` of the transaction must be greater than `1uatom` OR `1photon`). * `appVersion`: Version of the application. It is set in the - [application's constructor function](../high-level-concepts/00-overview-app.md#constructor-function). + [application's constructor function](../basics/app-anatomy.md#constructor-function). ## Constructor @@ -117,7 +108,7 @@ func NewBaseApp( ``` The `BaseApp` constructor function is pretty straightforward. The only thing worth noting is the -possibility to provide additional [`options`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/options.go) +possibility to provide additional [`options`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/options.go) to the `BaseApp`, which will execute them in order. The `options` are generally `setter` functions for important parameters, like `SetPruning()` to set pruning options or `SetMinGasPrices()` to set the node's `min-gas-prices`. @@ -204,13 +195,13 @@ The application's `msgServiceRouter` is initialized with all the routes using th ### gRPC Query Router -Similar to `sdk.Msg`s, [`queries`](../../integrate/building-modules/02-messages-and-queries.md#queries) need to be routed to the appropriate module's [`Query` service](../../integrate/building-modules/04-query-services.md). To do so, `BaseApp` holds a `grpcQueryRouter`, which maps modules' fully-qualified service methods (`string`, defined in their Protobuf `Query` gRPC) to their `QueryServer` implementation. The `grpcQueryRouter` is called during the initial stages of query processing, which can be either by directly sending a gRPC query to the gRPC endpoint, or via the [`Query` ABCI message](#query) on the CometBFT RPC endpoint. +Similar to `sdk.Msg`s, [`queries`](../building-modules/messages-and-queries.md#queries) need to be routed to the appropriate module's [`Query` service](../building-modules/query-services.md). To do so, `BaseApp` holds a `grpcQueryRouter`, which maps modules' fully-qualified service methods (`string`, defined in their Protobuf `Query` gRPC) to their `QueryServer` implementation. The `grpcQueryRouter` is called during the initial stages of query processing, which can be either by directly sending a gRPC query to the gRPC endpoint, or via the [`Query` ABCI message](#query) on the Tendermint RPC endpoint. -Just like the `msgServiceRouter`, the `grpcQueryRouter` is initialized with all the query routes using the application's [module manager](../../integrate/building-modules/01-module-manager.md) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../high-level-concepts/00-overview-app.md#app-constructor). +Just like the `msgServiceRouter`, the `grpcQueryRouter` is initialized with all the query routes using the application's [module manager](../building-modules/module-manager.md) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../basics/app-anatomy.md#app-constructor). -## Main ABCI 1.0 Messages +## Main ABCI Messages -The [Application-Blockchain Interface](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md) (ABCI) is a generic interface that connects a state-machine with a consensus engine to form a functional full-node. It can be wrapped in any language, and needs to be implemented by each application-specific blockchain built on top of an ABCI-compatible consensus engine like CometBFT. +The [Application-Blockchain Interface](https://docs.tendermint.com/master/spec/abci/) (ABCI) is a generic interface that connects a state-machine with a consensus engine to form a functional full-node. It can be wrapped in any language, and needs to be implemented by each application-specific blockchain built on top of an ABCI-compatible consensus engine like Tendermint. The consensus engine handles two main tasks: @@ -219,13 +210,7 @@ The consensus engine handles two main tasks: It is **not** the role of the consensus engine to define the state or the validity of transactions. Generally, transactions are handled by the consensus engine in the form of `[]bytes`, and relayed to the application via the ABCI to be decoded and processed. At keys moments in the networking and consensus processes (e.g. beginning of a block, commit of a block, reception of an unconfirmed transaction, ...), the consensus engine emits ABCI messages for the state-machine to act on. -Developers building on top of the Cosmos SDK need not implement the ABCI themselves, as `BaseApp` comes with a built-in implementation of the interface. Let us go through the main ABCI messages that `BaseApp` implements: - -* [`Prepare Proposal`](#prepare-proposal) -* [`Process Proposal`](#process-proposal) -* [`CheckTx`](#checktx) -* [`DeliverTx`](#delivertx) - +Developers building on top of the Cosmos SDK need not implement the ABCI themselves, as `BaseApp` comes with a built-in implementation of the interface. Let us go through the main ABCI messages that `BaseApp` implements: [`CheckTx`](#checktx) and [`DeliverTx`](#delivertx) ### CheckTx @@ -237,28 +222,27 @@ Unconfirmed transactions are relayed to peers only if they pass `CheckTx`. `CheckTx()` can perform both _stateful_ and _stateless_ checks, but developers should strive to make the checks **lightweight** because gas fees are not charged for the resources (CPU, data load...) used during the `CheckTx`. -In the Cosmos SDK, after [decoding transactions](06-encoding.md), `CheckTx()` is implemented +In the Cosmos SDK, after [decoding transactions](./07-encoding.md), `CheckTx()` is implemented to do the following checks: 1. Extract the `sdk.Msg`s from the transaction. -2. **Optionally** perform _stateless_ checks by calling `ValidateBasic()` on each of the `sdk.Msg`s. This is done +2. Perform _stateless_ checks by calling `ValidateBasic()` on each of the `sdk.Msg`s. This is done first, as _stateless_ checks are less computationally expensive than _stateful_ checks. If `ValidateBasic()` fail, `CheckTx` returns before running _stateful_ checks, which saves resources. - This check is still performed for messages that have not yet migrated to the new message validation mechanism defined in [RFC 001](https://docs.cosmos.network/main/rfc/rfc-001-tx-validation) and still have a `ValidateBasic()` method. -3. Perform non-module related _stateful_ checks on the [account](../high-level-concepts/03-accounts.md). This step is mainly about checking +3. Perform non-module related _stateful_ checks on the [account](../basics/accounts.md). This step is mainly about checking that the `sdk.Msg` signatures are valid, that enough fees are provided and that the sending account - has enough funds to pay for said fees. Note that no precise [`gas`](../high-level-concepts/04-gas-fees.md) counting occurs here, - as `sdk.Msg`s are not processed. Usually, the [`AnteHandler`](../high-level-concepts/04-gas-fees.md#antehandler) will check that the `gas` provided + has enough funds to pay for said fees. Note that no precise [`gas`](../basics/gas-fees.md) counting occurs here, + as `sdk.Msg`s are not processed. Usually, the [`AnteHandler`](../basics/gas-fees.md#antehandler) will check that the `gas` provided with the transaction is superior to a minimum reference gas amount based on the raw transaction size, in order to avoid spam with transactions that provide 0 gas. `CheckTx` does **not** process `sdk.Msg`s - they only need to be processed when the canonical state need to be updated, which happens during `DeliverTx`. -Steps 2. and 3. are performed by the [`AnteHandler`](../high-level-concepts/04-gas-fees.md#antehandler) in the [`RunTx()`](#runtx) +Steps 2. and 3. are performed by the [`AnteHandler`](../basics/gas-fees.md#antehandler) in the [`RunTx()`](#runtx-antehandler-and-runmsgs) function, which `CheckTx()` calls with the `runTxModeCheck` mode. During each step of `CheckTx()`, a special [volatile state](#state-updates) called `checkState` is updated. This state is used to keep track of the temporary changes triggered by the `CheckTx()` calls of each transaction without modifying -the [main canonical state](#state-updates). For example, when a transaction goes through `CheckTx()`, the +the [main canonical state](#main-state). For example, when a transaction goes through `CheckTx()`, the transaction's fees are deducted from the sender's account in `checkState`. If a second transaction is received from the same account before the first is processed, and the account has consumed all its funds in `checkState` during the first transaction, the second transaction will fail `CheckTx`() and @@ -266,7 +250,7 @@ be rejected. In any case, the sender's account will not actually pay the fees un is actually included in a block, because `checkState` never gets committed to the main state. The `checkState` is reset to the latest state of the main state each time a blocks gets [committed](#commit). -`CheckTx` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#checktx). +`CheckTx` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://docs.tendermint.com/master/spec/abci/abci.html#checktx-2). The response contains: * `Code (uint32)`: Response Code. `0` if successful. @@ -275,12 +259,8 @@ The response contains: * `Info (string):` Additional information. May be non-deterministic. * `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. * `GasUsed (int64)`: Amount of gas consumed by transaction. During `CheckTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction. Next is an example: - -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/basic.go#L96 -``` - -* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](08-events.md) for more. + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/ante/basic.go#L95-L95 +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](./10-events.md) for more. * `Codespace (string)`: Namespace for the Code. #### RecheckTx @@ -296,22 +276,20 @@ This allows certain checks like signature verification can be skipped during `Ch When the underlying consensus engine receives a block proposal, each transaction in the block needs to be processed by the application. To that end, the underlying consensus engine sends a `DeliverTx` message to the application for each transaction in a sequential order. -Before the first transaction of a given block is processed, a [volatile state](#state-updates) called `deliverState` is initialized during [`BeginBlock`](#beginblock). This state is updated each time a transaction is processed via `DeliverTx`, and committed to the [main state](#state-updates) when the block is [committed](#commit), after what it is set to `nil`. +Before the first transaction of a given block is processed, a [volatile state](#state-updates) called `deliverState` is initialized during [`BeginBlock`](#beginblock). This state is updated each time a transaction is processed via `DeliverTx`, and committed to the [main state](#main-state) when the block is [committed](#commit), after what it is set to `nil`. `DeliverTx` performs the **exact same steps as `CheckTx`**, with a little caveat at step 3 and the addition of a fifth step: 1. The `AnteHandler` does **not** check that the transaction's `gas-prices` is sufficient. That is because the `min-gas-prices` value `gas-prices` is checked against is local to the node, and therefore what is enough for one full-node might not be for another. This means that the proposer can potentially include transactions for free, although they are not incentivised to do so, as they earn a bonus on the total fee of the block they propose. -2. For each `sdk.Msg` in the transaction, route to the appropriate module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). Additional _stateful_ checks are performed, and the branched multistore held in `deliverState`'s `context` is updated by the module's `keeper`. If the `Msg` service returns successfully, the branched multistore held in `context` is written to `deliverState` `CacheMultiStore`. +2. For each `sdk.Msg` in the transaction, route to the appropriate module's Protobuf [`Msg` service](../building-modules/msg-services.md). Additional _stateful_ checks are performed, and the branched multistore held in `deliverState`'s `context` is updated by the module's `keeper`. If the `Msg` service returns successfully, the branched multistore held in `context` is written to `deliverState` `CacheMultiStore`. During the additional fifth step outlined in (2), each read/write to the store increases the value of `GasConsumed`. You can find the default cost of each operation: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L230-L241 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/gas.go#L230-L241 At any point, if `GasConsumed > GasWanted`, the function returns with `Code != 0` and `DeliverTx` fails. -`DeliverTx` returns a response to the underlying consensus engine of type [`abci.ResponseDeliverTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#delivertx). The response contains: +`DeliverTx` returns a response to the underlying consensus engine of type [`abci.ResponseDeliverTx`](https://docs.tendermint.com/master/spec/abci/abci.html#delivertx-2). The response contains: * `Code (uint32)`: Response Code. `0` if successful. * `Data ([]byte)`: Result bytes, if any. @@ -319,7 +297,7 @@ At any point, if `GasConsumed > GasWanted`, the function returns with `Code != 0 * `Info (string):` Additional information. May be non-deterministic. * `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. * `GasUsed (int64)`: Amount of gas consumed by transaction. During `DeliverTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction, and by adding gas each time a read/write to the store occurs. -* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](08-events.md) for more. +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](./10-events.md) for more. * `Codespace (string)`: Namespace for the Code. ## RunTx, AnteHandler, RunMsgs, PostHandler @@ -328,17 +306,15 @@ At any point, if `GasConsumed > GasWanted`, the function returns with `Code != 0 `RunTx` is called from `CheckTx`/`DeliverTx` to handle the transaction, with `runTxModeCheck` or `runTxModeDeliver` as parameter to differentiate between the two modes of execution. Note that when `RunTx` receives a transaction, it has already been decoded. -The first thing `RunTx` does upon being called is to retrieve the `context`'s `CacheMultiStore` by calling the `getContextForTx()` function with the appropriate mode (either `runTxModeCheck` or `runTxModeDeliver`). This `CacheMultiStore` is a branch of the main store, with cache functionality (for query requests), instantiated during `BeginBlock` for `DeliverTx` and during the `Commit` of the previous block for `CheckTx`. After that, two `defer func()` are called for [`gas`](../high-level-concepts/04-gas-fees.md) management. They are executed when `runTx` returns and make sure `gas` is actually consumed, and will throw errors, if any. +The first thing `RunTx` does upon being called is to retrieve the `context`'s `CacheMultiStore` by calling the `getContextForTx()` function with the appropriate mode (either `runTxModeCheck` or `runTxModeDeliver`). This `CacheMultiStore` is a branch of the main store, with cache functionality (for query requests), instantiated during `BeginBlock` for `DeliverTx` and during the `Commit` of the previous block for `CheckTx`. After that, two `defer func()` are called for [`gas`](../basics/gas-fees.md) management. They are executed when `runTx` returns and make sure `gas` is actually consumed, and will throw errors, if any. -After that, `RunTx()` calls `ValidateBasic()`, when available and for backward compatibility, on each `sdk.Msg`in the `Tx`, which runs preliminary _stateless_ validity checks. If any `sdk.Msg` fails to pass `ValidateBasic()`, `RunTx()` returns with an error. +After that, `RunTx()` calls `ValidateBasic()` on each `sdk.Msg`in the `Tx`, which runs preliminary _stateless_ validity checks. If any `sdk.Msg` fails to pass `ValidateBasic()`, `RunTx()` returns with an error. Then, the [`anteHandler`](#antehandler) of the application is run (if it exists). In preparation of this step, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L663-L672 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/baseapp.go#L647-L654 -This allows `RunTx` not to commit the changes made to the state during the execution of `anteHandler` if it ends up failing. It also prevents the module implementing the `anteHandler` from writing to state, which is an important part of the [object-capabilities](10-ocap.md) of the Cosmos SDK. +This allows `RunTx` not to commit the changes made to the state during the execution of `anteHandler` if it ends up failing. It also prevents the module implementing the `anteHandler` from writing to state, which is an important part of the [object-capabilities](./12-ocap.md) of the Cosmos SDK. Finally, the [`RunMsgs()`](#runmsgs) function is called to process the `sdk.Msg`s in the `Tx`. In preparation of this step, just like with the `anteHandler`, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. @@ -346,36 +322,32 @@ Finally, the [`RunMsgs()`](#runmsgs) function is called to process the `sdk.Msg` The `AnteHandler` is a special handler that implements the `AnteHandler` interface and is used to authenticate the transaction before the transaction's internal messages are processed. -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/handler.go#L6-L8 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/handler.go#L6-L8 The `AnteHandler` is theoretically optional, but still a very important component of public blockchain networks. It serves 3 primary purposes: -* Be a primary line of defense against spam and second line of defense (the first one being the mempool) against transaction replay with fees deduction and [`sequence`](01-transactions.md#transaction-generation) checking. +* Be a primary line of defense against spam and second line of defense (the first one being the mempool) against transaction replay with fees deduction and [`sequence`](./01-transactions.md#transaction-generation) checking. * Perform preliminary _stateful_ validity checks like ensuring signatures are valid or that the sender has enough funds to pay for fees. * Play a role in the incentivisation of stakeholders via the collection of transaction fees. -`BaseApp` holds an `anteHandler` as parameter that is initialized in the [application's constructor](../high-level-concepts/00-overview-app.md#application-constructor). The most widely used `anteHandler` is the [`auth` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/ante.go). +`BaseApp` holds an `anteHandler` as parameter that is initialized in the [application's constructor](../basics/app-anatomy.md#application-constructor). The most widely used `anteHandler` is the [`auth` module](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/ante/ante.go). -Click [here](../high-level-concepts/04-gas-fees.md#antehandler) for more on the `anteHandler`. +Click [here](../basics/gas-fees.md#antehandler) for more on the `anteHandler`. ### RunMsgs `RunMsgs` is called from `RunTx` with `runTxModeCheck` as parameter to check the existence of a route for each message the transaction, and with `runTxModeDeliver` to actually process the `sdk.Msg`s. -First, it retrieves the `sdk.Msg`'s fully-qualified type name, by checking the `type_url` of the Protobuf `Any` representing the `sdk.Msg`. Then, using the application's [`msgServiceRouter`](#msg-service-router), it checks for the existence of `Msg` service method related to that `type_url`. At this point, if `mode == runTxModeCheck`, `RunMsgs` returns. Otherwise, if `mode == runTxModeDeliver`, the [`Msg` service](../../integrate/building-modules/03-msg-services.md) RPC is executed, before `RunMsgs` returns. +First, it retrieves the `sdk.Msg`'s fully-qualified type name, by checking the `type_url` of the Protobuf `Any` representing the `sdk.Msg`. Then, using the application's [`msgServiceRouter`](#msg-service-router), it checks for the existence of `Msg` service method related to that `type_url`. At this point, if `mode == runTxModeCheck`, `RunMsgs` returns. Otherwise, if `mode == runTxModeDeliver`, the [`Msg` service](../building-modules/msg-services.md) RPC is executed, before `RunMsgs` returns. ### PostHandler -`PostHandler` is similar to `AnteHandler`, but it, as the name suggests, executes custom post tx processing logic after [`RunMsgs`](#runmsgs) is called. `PostHandler` receives the `Result` of the the `RunMsgs` in order to enable this customizable behavior. +_PostHandler_ are like `AnteHandler` (they share the same signature), but they execute after [`RunMsgs`](#runmsgs). Like `AnteHandler`s, `PostHandler`s are theoretically optional, one use case for `PostHandler`s is transaction tips (enabled by default in simapp). Other use cases like unused gas refund can also be enabled by `PostHandler`s. -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/posthandler/post.go#L1-L15 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/posthandler/post.go#L14:L27 Note, when `PostHandler`s fail, the state from `runMsgs` is also reverted, effectively making the transaction fail. @@ -383,37 +355,32 @@ Note, when `PostHandler`s fail, the state from `runMsgs` is also reverted, effec ### InitChain -The [`InitChain` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when the chain is first started. It is mainly used to **initialize** parameters and state like: +The [`InitChain` ABCI message](https://docs.tendermint.com/master/spec/abci/abci.html#initchain) is sent from the underlying Tendermint engine when the chain is first started. It is mainly used to **initialize** parameters and state like: -* [Consensus Parameters](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#consensus-parameters) via `setConsensusParams`. -* [`checkState` and `deliverState`](#state-updates) via `setState`. -* The [block gas meter](../high-level-concepts/04-gas-fees.md#block-gas-meter), with infinite gas to process genesis transactions. +* [Consensus Parameters](https://docs.tendermint.com/master/spec/abci/apps.html#consensus-parameters) via `setConsensusParams`. +* [`checkState` and `deliverState`](#state-updates) via `setCheckState` and `setDeliverState`. +* The [block gas meter](../basics/gas-fees.md#block-gas-meter), with infinite gas to process genesis transactions. -Finally, the `InitChain(req abci.RequestInitChain)` method of `BaseApp` calls the [`initChainer()`](../high-level-concepts/00-overview-app.md#initchainer) of the application in order to initialize the main state of the application from the `genesis file` and, if defined, call the [`InitGenesis`](../../integrate/building-modules/08-genesis.md#initgenesis) function of each of the application's modules. +Finally, the `InitChain(req abci.RequestInitChain)` method of `BaseApp` calls the [`initChainer()`](../basics/app-anatomy.md#initchainer) of the application in order to initialize the main state of the application from the `genesis file` and, if defined, call the [`InitGenesis`](../building-modules/genesis.md#initgenesis) function of each of the application's modules. ### BeginBlock -The [`BeginBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when a block proposal created by the correct proposer is received, before [`DeliverTx`](#delivertx) is run for each transaction in the block. It allows developers to have logic be executed at the beginning of each block. In the Cosmos SDK, the `BeginBlock(req abci.RequestBeginBlock)` method does the following: +The [`BeginBlock` ABCI message](https://docs.tendermint.com/master/spec/abci/abci.html#beginblock) is sent from the underlying Tendermint engine when a block proposal created by the correct proposer is received, before [`DeliverTx`](#delivertx) is run for each transaction in the block. It allows developers to have logic be executed at the beginning of each block. In the Cosmos SDK, the `BeginBlock(req abci.RequestBeginBlock)` method does the following: -* Initialize [`deliverState`](#state-updates) with the latest header using the `req abci.RequestBeginBlock` passed as parameter via the `setState` function. - - ```go reference - https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L406-L433 - ``` - - This function also resets the [main gas meter](../high-level-concepts/04-gas-fees.md#main-gas-meter). - -* Initialize the [block gas meter](../high-level-concepts/04-gas-fees.md#block-gas-meter) with the `maxGas` limit. The `gas` consumed within the block cannot go above `maxGas`. This parameter is defined in the application's consensus parameters. -* Run the application's [`beginBlocker()`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblock), which mainly runs the [`BeginBlocker()`](../../integrate/building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. -* Set the [`VoteInfos`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#voteinfo) of the application, i.e. the list of validators whose _precommit_ for the previous block was included by the proposer of the current block. This information is carried into the [`Context`](02-context.md) so that it can be used during `DeliverTx` and `EndBlock`. +* Initialize [`deliverState`](#state-updates) with the latest header using the `req abci.RequestBeginBlock` passed as parameter via the `setDeliverState` function. + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/baseapp.go#L386-L396 + This function also resets the [main gas meter](../basics/gas-fees.md#main-gas-meter). +* Initialize the [block gas meter](../basics/gas-fees.md#block-gas-meter) with the `maxGas` limit. The `gas` consumed within the block cannot go above `maxGas`. This parameter is defined in the application's consensus parameters. +* Run the application's [`beginBlocker()`](../basics/app-anatomy.md#beginblocker-and-endblock), which mainly runs the [`BeginBlocker()`](../building-modules/beginblock-endblock.md#beginblock) method of each of the application's modules. +* Set the [`VoteInfos`](https://docs.tendermint.com/master/spec/abci/abci.html#voteinfo) of the application, i.e. the list of validators whose _precommit_ for the previous block was included by the proposer of the current block. This information is carried into the [`Context`](./03-context.md) so that it can be used during `DeliverTx` and `EndBlock`. ### EndBlock -The [`EndBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after [`DeliverTx`](#delivertx) as been run for each transaction in the block. It allows developers to have logic be executed at the end of each block. In the Cosmos SDK, the bulk `EndBlock(req abci.RequestEndBlock)` method is to run the application's [`EndBlocker()`](../high-level-concepts/00-overview-app.md#beginblocker-and-endblock), which mainly runs the [`EndBlocker()`](../../integrate/building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. +The [`EndBlock` ABCI message](https://docs.tendermint.com/master/spec/abci/abci.html#endblock) is sent from the underlying Tendermint engine after [`DeliverTx`](#delivertx) as been run for each transaction in the block. It allows developers to have logic be executed at the end of each block. In the Cosmos SDK, the bulk `EndBlock(req abci.RequestEndBlock)` method is to run the application's [`EndBlocker()`](../basics/app-anatomy.md#beginblocker-and-endblock), which mainly runs the [`EndBlocker()`](../building-modules/beginblock-endblock.md#beginblock) method of each of the application's modules. ### Commit -The [`Commit` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after the full-node has received _precommits_ from 2/3+ of validators (weighted by voting power). On the `BaseApp` end, the `Commit(res abci.ResponseCommit)` function is implemented to commit all the valid state transitions that occurred during `BeginBlock`, `DeliverTx` and `EndBlock` and to reset state for the next block. +The [`Commit` ABCI message](https://docs.tendermint.com/master/spec/abci/abci.html#commit) is sent from the underlying Tendermint engine after the full-node has received _precommits_ from 2/3+ of validators (weighted by voting power). On the `BaseApp` end, the `Commit(res abci.ResponseCommit)` function is implemented to commit all the valid state transitions that occurred during `BeginBlock`, `DeliverTx` and `EndBlock` and to reset state for the next block. To commit state-transitions, the `Commit` function calls the `Write()` function on `deliverState.ms`, where `deliverState.ms` is a branched multistore of the main store `app.cms`. Then, the `Commit` function sets `checkState` to the latest header (obtained from `deliverState.ctx.BlockHeader`) and `deliverState` to `nil`. @@ -421,14 +388,19 @@ Finally, `Commit` returns the hash of the commitment of `app.cms` back to the un ### Info -The [`Info` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is a simple query from the underlying consensus engine, notably used to sync the latter with the application during a handshake that happens on startup. When called, the `Info(res abci.ResponseInfo)` function from `BaseApp` will return the application's name, version and the hash of the last commit of `app.cms`. +The [`Info` ABCI message](https://docs.tendermint.com/master/spec/abci/abci.html#info) is a simple query from the underlying consensus engine, notably used to sync the latter with the application during a handshake that happens on startup. When called, the `Info(res abci.ResponseInfo)` function from `BaseApp` will return the application's name, version and the hash of the last commit of `app.cms`. ### Query -The [`Query` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is used to serve queries received from the underlying consensus engine, including queries received via RPC like CometBFT RPC. It used to be the main entrypoint to build interfaces with the application, but with the introduction of [gRPC queries](../../integrate/building-modules/04-query-services.md) in Cosmos SDK v0.40, its usage is more limited. The application must respect a few rules when implementing the `Query` method, which are outlined [here](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#query). +The [`Query` ABCI message](https://docs.tendermint.com/master/spec/abci/abci.html#query-2) is used to serve queries received from the underlying consensus engine, including queries received via RPC like Tendermint RPC. It used to be the main entrypoint to build interfaces with the application, but with the introduction of [gRPC queries](../building-modules/query-services.md) in Cosmos SDK v0.40, its usage is more limited. The application must respect a few rules when implementing the `Query` method, which are outlined [here](https://docs.tendermint.com/master/spec/abci/apps.html#query). -Each CometBFT `query` comes with a `path`, which is a `string` which denotes what to query. If the `path` matches a gRPC fully-qualified service method, then `BaseApp` will defer the query to the `grpcQueryRouter` and let it handle it like explained [above](#grpc-query-router). Otherwise, the `path` represents a query that is not (yet) handled by the gRPC router. `BaseApp` splits the `path` string with the `/` delimiter. By convention, the first element of the split string (`split[0]`) contains the category of `query` (`app`, `p2p`, `store` or `custom` ). The `BaseApp` implementation of the `Query(req abci.RequestQuery)` method is a simple dispatcher serving these 4 main categories of queries: +Each Tendermint `query` comes with a `path`, which is a `string` which denotes what to query. If the `path` matches a gRPC fully-qualified service method, then `BaseApp` will defer the query to the `grpcQueryRouter` and let it handle it like explained [above](#grpc-query-router). Otherwise, the `path` represents a query that is not (yet) handled by the gRPC router. `BaseApp` splits the `path` string with the `/` delimiter. By convention, the first element of the split string (`split[0]`) contains the category of `query` (`app`, `p2p`, `store` or `custom` ). The `BaseApp` implementation of the `Query(req abci.RequestQuery)` method is a simple dispatcher serving these 4 main categories of queries: * Application-related queries like querying the application's version, which are served via the `handleQueryApp` method. * Direct queries to the multistore, which are served by the `handlerQueryStore` method. These direct queries are different from custom queries which go through `app.queryRouter`, and are mainly used by third-party service provider like block explorers. * P2P queries, which are served via the `handleQueryP2P` method. These queries return either `app.addrPeerFilter` or `app.ipPeerFilter` that contain the list of peers filtered by address or IP respectively. These lists are first initialized via `options` in `BaseApp`'s [constructor](#constructor). +* Custom queries, which encompass legacy queries (before the introduction of gRPC queries), are served via the `handleQueryCustom` method. The `handleQueryCustom` branches the multistore before using the `queryRoute` obtained from `app.queryRouter` to map the query to the appropriate module's [legacy `querier`](../building-modules/query-services.md#legacy-queriers). + +## Next {hide} + +Learn more about [transactions](./01-transactions.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md b/versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md index 06757ad43..aba1e01ca 100644 --- a/versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md +++ b/versioned_docs/version-0.46/develop/advanced-concepts/01-transactions.md @@ -1,39 +1,31 @@ -# Transactions - -:::note Synopsis -`Transactions` are objects created by end-users to trigger state changes in the application. -::: + -:::note +# Transactions -### Pre-requisite Readings +`Transactions` are objects created by end-users to trigger state changes in the application. {synopsis} -* [Anatomy of a Cosmos SDK Application](../high-level-concepts/00-overview-app.md) +## Pre-requisite Readings -::: +* [Anatomy of a Cosmos SDK Application](../basics/app-anatomy.md) {prereq} ## Transactions -Transactions are comprised of metadata held in [contexts](02-context.md) and [`sdk.Msg`s](../../integrate/building-modules/02-messages-and-queries.md) that trigger state changes within a module through the module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). +Transactions are comprised of metadata held in [contexts](./03-context.md) and [`sdk.Msg`s](../building-modules/messages-and-queries.md) that trigger state changes within a module through the module's Protobuf [`Msg` service](../building-modules/msg-services.md). -When users want to interact with an application and make state changes (e.g. sending coins), they create transactions. Each of a transaction's `sdk.Msg` must be signed using the private key associated with the appropriate account(s), before the transaction is broadcasted to the network. A transaction must then be included in a block, validated, and approved by the network through the consensus process. To read more about the lifecycle of a transaction, click [here](../high-level-concepts/01-tx-lifecycle.md). +When users want to interact with an application and make state changes (e.g. sending coins), they create transactions. Each of a transaction's `sdk.Msg` must be signed using the private key associated with the appropriate account(s), before the transaction is broadcasted to the network. A transaction must then be included in a block, validated, and approved by the network through the consensus process. To read more about the lifecycle of a transaction, click [here](../basics/tx-lifecycle.md). ## Type Definition Transaction objects are Cosmos SDK types that implement the `Tx` interface -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L42-L50 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/tx_msg.go#L38-L46 It contains the following methods: * **GetMsgs:** unwraps the transaction and returns a list of contained `sdk.Msg`s - one transaction may have one or multiple messages, which are defined by module developers. -* **ValidateBasic:** lightweight, [_stateless_](../high-level-concepts/01-tx-lifecycle.md#types-of-checks) checks used by ABCI messages [`CheckTx`](00-baseapp.md#checktx) and [`DeliverTx`](00-baseapp.md#delivertx) to make sure transactions are not invalid. For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth) module's `ValidateBasic` function checks that its transactions are signed by the correct number of signers and that the fees do not exceed what the user's maximum. When [`runTx`](00-baseapp.md#runtx) is checking a transaction created from the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module, it first runs `ValidateBasic` on each message, then runs the `auth` module AnteHandler which calls `ValidateBasic` for the transaction itself. - - :::note - This function is different from the deprecated `sdk.Msg` [`ValidateBasic`](../high-level-concepts/01-tx-lifecycle.md#ValidateBasic) methods, which was performing basic validity checks on messages only. - ::: +* **ValidateBasic:** lightweight, [_stateless_](../basics/tx-lifecycle.md#types-of-checks) checks used by ABCI messages [`CheckTx`](./00-baseapp.md#checktx) and [`DeliverTx`](./00-baseapp.md#delivertx) to make sure transactions are not invalid. For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth) module's `ValidateBasic` function checks that its transactions are signed by the correct number of signers and that the fees do not exceed what the user's maximum. Note that this function is to be distinct from `sdk.Msg` [`ValidateBasic`](../basics/tx-lifecycle.md#ValidateBasic) methods, which perform basic validity checks on messages only. When [`runTx`](./00-baseapp.md#runtx) is checking a transaction created from the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module, it first runs `ValidateBasic` on each message, then runs the `auth` module AnteHandler which calls `ValidateBasic` for the transaction itself. As a developer, you should rarely manipulate `Tx` directly, as `Tx` is really an intermediate type used for transaction generation. Instead, developers should prefer the `TxBuilder` interface, which you can learn more about [below](#transaction-generation). @@ -45,15 +37,11 @@ Every message in a transaction must be signed by the addresses specified by its The most used implementation of the `Tx` interface is the Protobuf `Tx` message, which is used in `SIGN_MODE_DIRECT`: -```protobuf reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 -Because Protobuf serialization is not deterministic, the Cosmos SDK uses an additional `TxRaw` type to denote the pinned bytes over which a transaction is signed. Any user can generate a valid `body` and `auth_info` for a transaction, and serialize these two messages using Protobuf. `TxRaw` then pins the user's exact binary representation of `body` and `auth_info`, called respectively `body_bytes` and `auth_info_bytes`. The document that is signed by all signers of the transaction is `SignDoc` (deterministically serialized using [ADR-027](../../integrate/architecture/adr-027-deterministic-protobuf-serialization.md)): +Because Protobuf serialization is not deterministic, the Cosmos SDK uses an additional `TxRaw` type to denote the pinned bytes over which a transaction is signed. Any user can generate a valid `body` and `auth_info` for a transaction, and serialize these two messages using Protobuf. `TxRaw` then pins the user's exact binary representation of `body` and `auth_info`, called respectively `body_bytes` and `auth_info_bytes`. The document that is signed by all signers of the transaction is `SignDoc` (deterministically serialized using [ADR-027](../architecture/adr-027-deterministic-protobuf-serialization.md)): -```protobuf reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 Once signed by all signers, the `body_bytes`, `auth_info_bytes` and `signatures` are gathered into `TxRaw`, whose serialized bytes are broadcasted over the network. @@ -61,15 +49,11 @@ Once signed by all signers, the `body_bytes`, `auth_info_bytes` and `signatures` The legacy implementation of the `Tx` interface is the `StdTx` struct from `x/auth`: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx.go#L83-L93 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/migrations/legacytx/stdtx.go#L82-L92 The document signed by all signers is `StdSignDoc`: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdsign.go#L38-L52 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/migrations/legacytx/stdsign.go#L38-L52 which is encoded into bytes using Amino JSON. Once all signatures are gathered into `StdTx`, `StdTx` is serialized using Amino JSON, and these bytes are broadcasted over the network. @@ -82,14 +66,12 @@ The Cosmos SDK also provides a couple of other sign modes for particular use cas `SIGN_MODE_DIRECT_AUX` is a sign mode released in the Cosmos SDK v0.46 which targets transactions with multiple signers. Whereas `SIGN_MODE_DIRECT` expects each signer to sign over both `TxBody` and `AuthInfo` (which includes all other signers' signer infos, i.e. their account sequence, public key and mode info), `SIGN_MODE_DIRECT_AUX` allows N-1 signers to only sign over `TxBody` and _their own_ signer info. Morever, each auxiliary signer (i.e. a signer using `SIGN_MODE_DIRECT_AUX`) doesn't need to sign over the fees: -```protobuf reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L97 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L93 The use case is a multi-signer transaction, where one of the signers is appointed to gather all signatures, broadcast the signature and pay for fees, and the others only care about the transaction body. This generally allows for a better multi-signing UX. If Alice, Bob and Charlie are part of a 3-signer transaction, then Alice and Bob can both use `SIGN_MODE_DIRECT_AUX` to sign over the `TxBody` and their own signer info (no need an additional step to gather other signers' ones, like in `SIGN_MODE_DIRECT`), without specifying a fee in their SignDoc. Charlie can then gather both signatures from Alice and Bob, and create the final transaction by appending a fee. Note that the fee payer of the transaction (in our case Charlie) must sign over the fees, so must use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. -A concrete use case is implemented in [transaction tips](15-tips.md): the tipper may use `SIGN_MODE_DIRECT_AUX` to specify a tip in the transaction, without signing over the actual transaction fees. Then, the fee payer appends fees inside the tipper's desired `TxBody`, and as an exchange for paying the fees and broadcasting the transaction, receives the tipper's transaction tips as payment. +A concrete use case is implemented in [transaction tips](./15-tips.md): the tipper may use `SIGN_MODE_DIRECT_AUX` to specify a tip in the transaction, without signing over the actual transaction fees. Then, the fee payer appends fees inside the tipper's desired `TxBody`, and as an exchange for paying the fees and broadcasting the transaction, receives the tipper's transaction tips as payment. #### `SIGN_MODE_TEXTUAL` @@ -107,16 +89,16 @@ The next paragraphs will describe each of these components, in this order. ### Messages -:::tip -Module `sdk.Msg`s are not to be confused with [ABCI Messages](https://docs.cometbft.com/v0.37/spec/abci/) which define interactions between the CometBFT and application layers. +::: tip +Module `sdk.Msg`s are not to be confused with [ABCI Messages](https://docs.tendermint.com/master/spec/abci/abci.html#messages) which define interactions between the Tendermint and application layers. ::: -**Messages** (or `sdk.Msg`s) are module-specific objects that trigger state transitions within the scope of the module they belong to. Module developers define the messages for their module by adding methods to the Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md), and also implement the corresponding `MsgServer`. +**Messages** (or `sdk.Msg`s) are module-specific objects that trigger state transitions within the scope of the module they belong to. Module developers define the messages for their module by adding methods to the Protobuf [`Msg` service](../building-modules/msg-services.md), and also implement the corresponding `MsgServer`. -Each `sdk.Msg`s is related to exactly one Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md) RPC, defined inside each module's `tx.proto` file. A SDK app router automatically maps every `sdk.Msg` to a corresponding RPC. Protobuf generates a `MsgServer` interface for each module `Msg` service, and the module developer needs to implement this interface. +Each `sdk.Msg`s is related to exactly one Protobuf [`Msg` service](../building-modules/msg-services.md) RPC, defined inside each module's `tx.proto` file. A SDK app router automatically maps every `sdk.Msg` to a corresponding RPC. Protobuf generates a `MsgServer` interface for each module `Msg` service, and the module developer needs to implement this interface. This design puts more responsibility on module developers, allowing application developers to reuse common functionalities without having to implement state transition logic repetitively. -To learn more about Protobuf `Msg` services and how to implement `MsgServer`, click [here](../../integrate/building-modules/03-msg-services.md). +To learn more about Protobuf `Msg` services and how to implement `MsgServer`, click [here](../building-modules/msg-services.md). While messages contain the information for state transition logic, a transaction's other metadata and relevant information are stored in the `TxBuilder` and `Context`. @@ -124,9 +106,7 @@ While messages contain the information for state transition logic, a transaction The `TxBuilder` interface contains data closely related with the generation of transactions, which an end-user can freely set to generate the desired transaction: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L50 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/tx_config.go#L33-L50 * `Msg`s, the array of [messages](#messages) included in the transaction. * `GasLimit`, option chosen by the users for how to calculate how much gas they will need to pay. @@ -137,14 +117,12 @@ https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L5 As there are currently two sign modes for signing transactions, there are also two implementations of `TxBuilder`: -* [wrapper](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/builder.go#L18-L34) for creating transactions for `SIGN_MODE_DIRECT`, -* [StdTxBuilder](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx_builder.go#L15-L21) for `SIGN_MODE_LEGACY_AMINO_JSON`. +* [wrapper](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/tx/builder.go#L18-L34) for creating transactions for `SIGN_MODE_DIRECT`, +* [StdTxBuilder](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/migrations/legacytx/stdtx_builder.go#L15-L21) for `SIGN_MODE_LEGACY_AMINO_JSON`. However, the two implementation of `TxBuilder` should be hidden away from end-users, as they should prefer using the overarching `TxConfig` interface: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L22-L31 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/tx_config.go#L22-L31 `TxConfig` is an app-wide configuration for managing transactions. Most importantly, it holds the information about whether to sign each transaction with `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. By calling `txBuilder := txConfig.NewTxBuilder()`, a new `TxBuilder` will be created with the appropriate sign mode. @@ -164,9 +142,9 @@ Once the transaction bytes are generated, there are currently three ways of broa #### CLI -Application developers create entry points to the application by creating a [command-line interface](07-cli.md), [gRPC and/or REST interface](09-grpc_rest.md), typically found in the application's `./cmd` folder. These interfaces allow users to interact with the application through command-line. +Application developers create entry points to the application by creating a [command-line interface](../core/cli.md), [gRPC and/or REST interface](../core/grpc_rest.md), typically found in the application's `./cmd` folder. These interfaces allow users to interact with the application through command-line. -For the [command-line interface](../../integrate/building-modules/09-module-interfaces.md#cli), module developers create subcommands to add as children to the application top-level transaction command `TxCmd`. CLI commands actually bundle all the steps of transaction processing into one simple command: creating messages, generating transactions and broadcasting. For concrete examples, see the [Interacting with a Node](../../user/run-node/02-interact-node.md) section. An example transaction made using CLI looks like: +For the [command-line interface](../building-modules/module-interfaces.md#cli), module developers create subcommands to add as children to the application top-level transaction command `TxCmd`. CLI commands actually bundle all the steps of transaction processing into one simple command: creating messages, generating transactions and broadcasting. For concrete examples, see the [Interacting with a Node](../run-node/interact-node.md) section. An example transaction made using CLI looks like: ```bash simd tx send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake @@ -174,22 +152,24 @@ simd tx send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake #### gRPC -[gRPC](https://grpc.io) is the main component for the Cosmos SDK's RPC layer. Its principal usage is in the context of modules' [`Query` services](../../integrate/building-modules/04-query-services.md). However, the Cosmos SDK also exposes a few other module-agnostic gRPC services, one of them being the `Tx` service: +[gRPC](https://grpc.io) is the main component for the Cosmos SDK's RPC layer. Its principal usage is in the context of modules' [`Query` services](../building-modules). However, the Cosmos SDK also exposes a few other module-agnostic gRPC services, one of them being the `Tx` service: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/service.proto -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/service.proto The `Tx` service exposes a handful of utility functions, such as simulating a transaction or querying a transaction, and also one method to broadcast transactions. -Examples of broadcasting and simulating a transaction are shown [here](../../user/run-node/03-txs.md#programmatically-with-go). +Examples of broadcasting and simulating a transaction are shown [here](../run-node/txs.md#programmatically-with-go). #### REST Each gRPC method has its corresponding REST endpoint, generated using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). Therefore, instead of using gRPC, you can also use HTTP to broadcast the same transaction, on the `POST /cosmos/tx/v1beta1/txs` endpoint. -An example can be seen [here](../../user/run-node/03-txs.md#using-rest) +An example can be seen [here](../run-node/txs.md#using-rest) + +#### Tendermint RPC + +The three methods presented above are actually higher abstractions over the Tendermint RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.tendermint.com/master/rpc/#/Tx). This means that you can use the Tendermint RPC endpoints directly to broadcast the transaction, if you wish so. -#### CometBFT RPC +## Next {hide} -The three methods presented above are actually higher abstractions over the CometBFT RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.cometbft.com/v0.37/core/rpc). This means that you can use the CometBFT RPC endpoints directly to broadcast the transaction, if you wish so. +Learn about the [context](./03-context.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/03-context.md b/versioned_docs/version-0.46/develop/advanced-concepts/03-context.md new file mode 100644 index 000000000..75e374e0d --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/03-context.md @@ -0,0 +1,103 @@ + + +# Context + +The `context` is a data structure intended to be passed from function to function that carries information about the current state of the application. It provides access to a branched storage (a safe branch of the entire state) as well as useful objects and information like `gasMeter`, `block height`, `consensus parameters` and more. {synopsis} + +## Pre-requisites Readings + +* [Anatomy of a Cosmos SDK Application](../basics/app-anatomy.md) {prereq} +* [Lifecycle of a Transaction](../basics/tx-lifecycle.md) {prereq} + +## Context Definition + +The Cosmos SDK `Context` is a custom data structure that contains Go's stdlib [`context`](https://pkg.go.dev/context) as its base, and has many additional types within its definition that are specific to the Cosmos SDK. The `Context` is integral to transaction processing in that it allows modules to easily access their respective [store](./05-store.md#base-layer-kvstores) in the [`multistore`](./05-store.md#multistore) and retrieve transactional context such as the block header and gas meter. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/context.go#L17-L42 + +* **Base Context:** The base type is a Go [Context](https://pkg.go.dev/context), which is explained further in the [Go Context Package](#go-context-package) section below. +* **Multistore:** Every application's `BaseApp` contains a [`CommitMultiStore`](./05-store.md#multistore) which is provided when a `Context` is created. Calling the `KVStore()` and `TransientStore()` methods allows modules to fetch their respective [`KVStore`](./05-store.md#base-layer-kvstores) using their unique `StoreKey`. +* **Header:** The [header](https://docs.tendermint.com/master/spec/core/data_structures.html#header) is a Blockchain type. It carries important information about the state of the blockchain, such as block height and proposer of the current block. +* **Header Hash:** The current block header hash, obtained during `abci.RequestBeginBlock`. +* **Chain ID:** The unique identification number of the blockchain a block pertains to. +* **Transaction Bytes:** The `[]byte` representation of a transaction being processed using the context. Every transaction is processed by various parts of the Cosmos SDK and consensus engine (e.g. Tendermint) throughout its [lifecycle](../basics/tx-lifecycle.md), some of which do not have any understanding of transaction types. Thus, transactions are marshaled into the generic `[]byte` type using some kind of [encoding format](./07-encoding.md) such as [Amino](./07-encoding.md). +* **Logger:** A `logger` from the Tendermint libraries. Learn more about logs [here](https://docs.tendermint.com/master/nodes/logging.html). Modules call this method to create their own unique module-specific logger. +* **VoteInfo:** A list of the ABCI type [`VoteInfo`](https://docs.tendermint.com/master/spec/abci/abci.html#voteinfo), which includes the name of a validator and a boolean indicating whether they have signed the block. +* **Gas Meters:** Specifically, a [`gasMeter`](../basics/gas-fees.md#main-gas-meter) for the transaction currently being processed using the context and a [`blockGasMeter`](../basics/gas-fees.md#block-gas-meter) for the entire block it belongs to. Users specify how much in fees they wish to pay for the execution of their transaction; these gas meters keep track of how much [gas](../basics/gas-fees.md) has been used in the transaction or block so far. If the gas meter runs out, execution halts. +* **CheckTx Mode:** A boolean value indicating whether a transaction should be processed in `CheckTx` or `DeliverTx` mode. +* **Min Gas Price:** The minimum [gas](../basics/gas-fees.md) price a node is willing to take in order to include a transaction in its block. This price is a local value configured by each node individually, and should therefore **not be used in any functions used in sequences leading to state-transitions**. +* **Consensus Params:** The ABCI type [Consensus Parameters](https://docs.tendermint.com/master/spec/abci/apps.html#consensus-parameters), which specify certain limits for the blockchain, such as maximum gas for a block. +* **Event Manager:** The event manager allows any caller with access to a `Context` to emit [`Events`](./10-events.md). Modules may define module specific + `Events` by defining various `Types` and `Attributes` or use the common definitions found in `types/`. Clients can subscribe or query for these `Events`. These `Events` are collected throughout `DeliverTx`, `BeginBlock`, and `EndBlock` and are returned to Tendermint for indexing. For example: +* **Priority:** The transaction priority, only relevant in `CheckTx`. + +```go +ctx.EventManager().EmitEvent(sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory)), +) +``` + +## Go Context Package + +A basic `Context` is defined in the [Golang Context Package](https://pkg.go.dev/context). A `Context` +is an immutable data structure that carries request-scoped data across APIs and processes. Contexts +are also designed to enable concurrency and to be used in goroutines. + +Contexts are intended to be **immutable**; they should never be edited. Instead, the convention is +to create a child context from its parent using a `With` function. For example: + +```go +childCtx = parentCtx.WithBlockHeader(header) +``` + +The [Golang Context Package](https://pkg.go.dev/context) documentation instructs developers to +explicitly pass a context `ctx` as the first argument of a process. + +## Store branching + +The `Context` contains a `MultiStore`, which allows for branchinig and caching functionality using `CacheMultiStore` +(queries in `CacheMultiStore` are cached to avoid future round trips). +Each `KVStore` is branched in a safe and isolated ephemeral storage. Processes are free to write changes to +the `CacheMultiStore`. If a state-transition sequence is performed without issue, the store branch can +be committed to the underlying store at the end of the sequence or disregard them if something +goes wrong. The pattern of usage for a Context is as follows: + +1. A process receives a Context `ctx` from its parent process, which provides information needed to + perform the process. +2. The `ctx.ms` is a **branched store**, i.e. a branch of the [multistore](./05-store.md#multistore) is made so that the process can make changes to the state as it executes, without changing the original`ctx.ms`. This is useful to protect the underlying multistore in case the changes need to be reverted at some point in the execution. +3. The process may read and write from `ctx` as it is executing. It may call a subprocess and pass + `ctx` to it as needed. +4. When a subprocess returns, it checks if the result is a success or failure. If a failure, nothing + needs to be done - the branch `ctx` is simply discarded. If successful, the changes made to + the `CacheMultiStore` can be committed to the original `ctx.ms` via `Write()`. + +For example, here is a snippet from the [`runTx`](./00-baseapp.md#runtx-antehandler-runmsgs-posthandler) function in [`baseapp`](./00-baseapp.md): + +```go +runMsgCtx, msCache := app.cacheTxContext(ctx, txBytes) +result = app.runMsgs(runMsgCtx, msgs, mode) +result.GasWanted = gasWanted +if mode != runTxModeDeliver { + return result +} +if result.IsOK() { + msCache.Write() +} +``` + +Here is the process: + +1. Prior to calling `runMsgs` on the message(s) in the transaction, it uses `app.cacheTxContext()` + to branch and cache the context and multistore. +2. `runMsgCtx` - the context with branched store, is used in `runMsgs` to return a result. +3. If the process is running in [`checkTxMode`](./00-baseapp.md#checktx), there is no need to write the + changes - the result is returned immediately. +4. If the process is running in [`deliverTxMode`](./00-baseapp.md#delivertx) and the result indicates + a successful run over all the messages, the branched multistore is written back to the original. + +## Next {hide} + +Learn about the [node client](./04-node.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/04-node.md b/versioned_docs/version-0.46/develop/advanced-concepts/04-node.md new file mode 100644 index 000000000..94b6e9a1a --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/04-node.md @@ -0,0 +1,77 @@ + + +# Node Client (Daemon) + +The main endpoint of a Cosmos SDK application is the daemon client, otherwise known as the full-node client. The full-node runs the state-machine, starting from a genesis file. It connects to peers running the same client in order to receive and relay transactions, block proposals and signatures. The full-node is constituted of the application, defined with the Cosmos SDK, and of a consensus engine connected to the application via the ABCI. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of an SDK application](../basics/app-anatomy.md) {prereq} + +## `main` function + +The full-node client of any Cosmos SDK application is built by running a `main` function. The client is generally named by appending the `-d` suffix to the application name (e.g. `appd` for an application named `app`), and the `main` function is defined in a `./appd/cmd/main.go` file. Running this function creates an executable `appd` that comes with a set of commands. For an app named `app`, the main command is [`appd start`](#start-command), which starts the full-node. + +In general, developers will implement the `main.go` function with the following structure: + +* First, an [`encodingCodec`](./07-encoding.md) is instantiated for the application. +* Then, the `config` is retrieved and config parameters are set. This mainly involves setting the Bech32 prefixes for [addresses](../basics/accounts.md#addresses). + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/config.go#L14-L29 +* Using [cobra](https://github.com/spf13/cobra), the root command of the full-node client is created. After that, all the custom commands of the application are added using the `AddCommand()` method of `rootCmd`. +* Add default server commands to `rootCmd` using the `server.AddCommands()` method. These commands are separated from the ones added above since they are standard and defined at Cosmos SDK level. They should be shared by all Cosmos SDK-based applications. They include the most important command: the [`start` command](#start-command). +* Prepare and execute the `executor`. + +++ https://github.com/tendermint/tendermint/blob/v0.35.4/libs/cli/setup.go#L74-L78 + +See an example of `main` function from the `simapp` application, the Cosmos SDK's application for demo purposes: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/main.go + +## `start` command + +The `start` command is defined in the `/server` folder of the Cosmos SDK. It is added to the root command of the full-node client in the [`main` function](#main-function) and called by the end-user to start their node: + +```bash +# For an example app named "app", the following command starts the full-node. +appd start + +# Using the Cosmos SDK's own simapp, the following commands start the simapp node. +simd start +``` + +As a reminder, the full-node is composed of three conceptual layers: the networking layer, the consensus layer and the application layer. The first two are generally bundled together in an entity called the consensus engine (Tendermint Core by default), while the third is the state-machine defined with the help of the Cosmos SDK. Currently, the Cosmos SDK uses Tendermint as the default consensus engine, meaning the start command is implemented to boot up a Tendermint node. + +The flow of the `start` command is pretty straightforward. First, it retrieves the `config` from the `context` in order to open the `db` (a [`leveldb`](https://github.com/syndtr/goleveldb) instance by default). This `db` contains the latest known state of the application (empty if the application is started from the first time. + +With the `db`, the `start` command creates a new instance of the application using an `appCreator` function: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server/start.go#L209-L209 + +Note that an `appCreator` is a function that fulfills the `AppCreator` signature: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server/types/app.go#L57-L59 + +In practice, the [constructor of the application](../basics/app-anatomy.md#constructor-function) is passed as the `appCreator`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L246-L295 + +Then, the instance of `app` is used to instantiate a new Tendermint node: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server/start.go#L291-L294 + +The Tendermint node can be created with `app` because the latter satisfies the [`abci.Application` interface](https://github.com/tendermint/tendermint/blob/v0.35.4/abci/types/application.go#L7-L32) (given that `app` extends [`baseapp`](./00-baseapp.md)). As part of the `node.New` method, Tendermint makes sure that the height of the application (i.e. number of blocks since genesis) is equal to the height of the Tendermint node. The difference between these two heights should always be negative or null. If it is strictly negative, `node.New` will replay blocks until the height of the application reaches the height of the Tendermint node. Finally, if the height of the application is `0`, the Tendermint node will call [`InitChain`](./00-baseapp.md#initchain) on the application to initialize the state from the genesis file. + +Once the Tendermint node is instantiated and in sync with the application, the node can be started: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server/start.go#L296-L298 + +Upon starting, the node will bootstrap its RPC and P2P server and start dialing peers. During handshake with its peers, if the node realizes they are ahead, it will query all the blocks sequentially in order to catch up. Then, it will wait for new block proposals and block signatures from validators in order to make progress. + +## Other commands + +To discover how to concretely run a node and interact with it, please refer to our [Running a Node, API and CLI](../run-node/README.md) guide. + +## Next {hide} + +Learn about the [store](./05-store.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md b/versioned_docs/version-0.46/develop/advanced-concepts/05-store.md similarity index 94% rename from versioned_docs/version-0.46/develop/advanced-concepts/04-store.md rename to versioned_docs/version-0.46/develop/advanced-concepts/05-store.md index 291c2551f..f6fe3fa96 100644 --- a/versioned_docs/version-0.46/develop/advanced-concepts/04-store.md +++ b/versioned_docs/version-0.46/develop/advanced-concepts/05-store.md @@ -8,11 +8,11 @@ A store is a data structure that holds the state of the application. {synopsis} ## Pre-requisite Readings -* [Anatomy of a Cosmos SDK application](../high-level-concepts/00-overview-app.md) {prereq} +* [Anatomy of a Cosmos SDK application](../basics/app-anatomy.md) {prereq} ## Introduction to Cosmos SDK Stores -The Cosmos SDK comes with a large set of stores to persist the state of applications. By default, the main store of Cosmos SDK applications is a `multistore`, i.e. a store of stores. Developers can add any number of key-value stores to the multistore, depending on their application needs. The multistore exists to support the modularity of the Cosmos SDK, as it lets each module declare and manage their own subset of the state. Key-value stores in the multistore can only be accessed with a specific capability `key`, which is typically held in the [`keeper`](../../integrate/building-modules/06-keeper.md) of the module that declared the store. +The Cosmos SDK comes with a large set of stores to persist the state of applications. By default, the main store of Cosmos SDK applications is a `multistore`, i.e. a store of stores. Developers can add any number of key-value stores to the multistore, depending on their application needs. The multistore exists to support the modularity of the Cosmos SDK, as it lets each module declare and manage their own subset of the state. Key-value stores in the multistore can only be accessed with a specific capability `key`, which is typically held in the [`keeper`](../building-modules/keeper.md) of the module that declared the store. ```text +-----------------------------------------------------+ @@ -64,7 +64,7 @@ The `GetStoreType` is a simple method that returns the type of store, whereas a +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L247-L277 -Branching and cache is used ubiquitously in the Cosmos SDK and required to be implemented on every store type. A storage branch creates an isolated, ephemeral branch of a store that can be passed around and updated without affecting the main underlying store. This is used to trigger temporary state-transitions that may be reverted later should an error occur. Read more about it in [context](./02-context.md) +Branching and cache is used ubiquitously in the Cosmos SDK and required to be implemented on every store type. A storage branch creates an isolated, ephemeral branch of a store that can be passed around and updated without affecting the main underlying store. This is used to trigger temporary state-transitions that may be reverted later should an error occur. Read more about it in [context](./03-context.md#Store-branching) ### Commit Store @@ -76,7 +76,7 @@ The `Committer` is an interface that defines methods to persist changes to disk: +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L21-L28 -The `CommitID` is a deterministic commit of the state tree. Its hash is returned to the underlying consensus engine and stored in the block header. Note that commit store interfaces exist for various purposes, one of which is to make sure not every object can commit the store. As part of the [object-capabilities model](./10-ocap.md) of the Cosmos SDK, only `baseapp` should have the ability to commit stores. For example, this is the reason why the `ctx.KVStore()` method by which modules typically access stores returns a `KVStore` and not a `CommitKVStore`. +The `CommitID` is a deterministic commit of the state tree. Its hash is returned to the underlying consensus engine and stored in the block header. Note that commit store interfaces exist for various purposes, one of which is to make sure not every object can commit the store. As part of the [object-capabilities model](./12-ocap.md) of the Cosmos SDK, only `baseapp` should have the ability to commit stores. For example, this is the reason why the `ctx.KVStore()` method by which modules typically access stores returns a `KVStore` and not a `CommitKVStore`. The Cosmos SDK comes with many types of stores, the most used being [`CommitMultiStore`](#multistore), [`KVStore`](#kvstore) and [`GasKv` store](#gaskv-store). [Other types of stores](#other-stores) include `Transient` and `TraceKV` stores. @@ -116,9 +116,9 @@ Whenever the `rootMulti.Store` needs to be branched, a [`cachemulti.Store`](http A `KVStore` is a simple key-value store used to store and retrieve data. A `CommitKVStore` is a `KVStore` that also implements a `Committer`. By default, stores mounted in `baseapp`'s main `CommitMultiStore` are `CommitKVStore`s. The `KVStore` interface is primarily used to restrict modules from accessing the committer. -Individual `KVStore`s are used by modules to manage a subset of the global state. `KVStores` can be accessed by objects that hold a specific key. This `key` should only be exposed to the [`keeper`](../../integrate/building-modules/06-keeper.md) of the module that defines the store. +Individual `KVStore`s are used by modules to manage a subset of the global state. `KVStores` can be accessed by objects that hold a specific key. This `key` should only be exposed to the [`keeper`](../building-modules/keeper.md) of the module that defines the store. -`CommitKVStore`s are declared by proxy of their respective `key` and mounted on the application's [multistore](#multistore) in the [main application file](../high-level-concepts/00-overview-app.md). In the same file, the `key` is also passed to the module's `keeper` that is responsible for managing the store. +`CommitKVStore`s are declared by proxy of their respective `key` and mounted on the application's [multistore](#multistore) in the [main application file](../basics/app-anatomy.md#core-application-file). In the same file, the `key` is also passed to the module's `keeper` that is responsible for managing the store. +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/store.go#L192-L226 @@ -160,7 +160,7 @@ This type of store is useful to persist information that is only relevant per-bl +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/params/types/subspace.go#L21-L31 -Transient stores are typically accessed via the [`context`](./context.md) via the `TransientStore()` method: +Transient stores are typically accessed via the [`context`](./03-context.md) via the `TransientStore()` method: +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/context.go#L264-L267 @@ -196,7 +196,7 @@ When methods of the parent `KVStore` are called, `GasKv.Store` automatically con +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/gas.go#L219-L228 -By default, all `KVStores` are wrapped in `GasKv.Stores` when retrieved. This is done in the `KVStore()` method of the [`context`](./context.md): +By default, all `KVStores` are wrapped in `GasKv.Stores` when retrieved. This is done in the `KVStore()` method of the [`context`](./03-context.md): +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/context.go#L259-L262 @@ -238,7 +238,7 @@ The SDK is in the process of transitioning to use the types listed here as the d These types use the new `db` sub-module of Cosmos-SDK (`github.com/cosmos/cosmos-sdk/db`), rather than `tmdb` (`github.com/tendermint/tm-db`). -See [ADR-040](../../integrate/architecture/adr-040-storage-and-smt-state-commitments.md) for the motivations and design specifications of the change. +See [ADR-040](../architecture/adr-040-storage-and-smt-state-commitments.md) for the motivations and design specifications of the change. ## `BasicKVStore` interface @@ -278,4 +278,4 @@ This store can optionally be configured to use a different backend database inst ## Next {hide} -Learn about [encoding](./encoding.md) {hide} +Learn about [encoding](./07-encoding.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/07-encoding.md b/versioned_docs/version-0.46/develop/advanced-concepts/07-encoding.md new file mode 100644 index 000000000..47a2e34ff --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/07-encoding.md @@ -0,0 +1,292 @@ + + +# Encoding + +While encoding in the Cosmos SDK used to be mainly handled by `go-amino` codec, the Cosmos SDK is moving towards using `gogoprotobuf` for both state and client-side encoding. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/app-anatomy.md) {prereq} + +## Encoding + +The Cosmos SDK utilizes two binary wire encoding protocols, [Amino](https://github.com/tendermint/go-amino/) which is an object encoding specification and [Protocol Buffers](https://developers.google.com/protocol-buffers), a subset of Proto3 with an extension for +interface support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) +for more information on Proto3, which Amino is largely compatible with (but not with Proto2). + +Due to Amino having significant performance drawbacks, being reflection-based, and +not having any meaningful cross-language/client support, Protocol Buffers, specifically +[gogoprotobuf](https://github.com/gogo/protobuf/), is being used in place of Amino. +Note, this process of using Protocol Buffers over Amino is still an ongoing process. + +Binary wire encoding of types in the Cosmos SDK can be broken down into two main +categories, client encoding and store encoding. Client encoding mainly revolves +around transaction processing and signing, whereas store encoding revolves around +types used in state-machine transitions and what is ultimately stored in the Merkle +tree. + +For store encoding, protobuf definitions can exist for any type and will typically +have an Amino-based "intermediary" type. Specifically, the protobuf-based type +definition is used for serialization and persistence, whereas the Amino-based type +is used for business logic in the state-machine where they may convert back-n-forth. +Note, the Amino-based types may slowly be phased-out in the future, so developers +should take note to use the protobuf message definitions where possible. + +In the `codec` package, there exists two core interfaces, `BinaryCodec` and `JSONCodec`, +where the former encapsulates the current Amino interface except it operates on +types implementing the latter instead of generic `interface{}` types. + +In addition, there exists two implementations of `Codec`. The first being +`AminoCodec`, where both binary and JSON serialization is handled via Amino. The +second being `ProtoCodec`, where both binary and JSON serialization is handled +via Protobuf. + +This means that modules may use Amino or Protobuf encoding, but the types must +implement `ProtoMarshaler`. If modules wish to avoid implementing this interface +for their types, they may use an Amino codec directly. + +### Amino + +Every module uses an Amino codec to serialize types and interfaces. This codec typically +has types and interfaces registered in that module's domain only (e.g. messages), +but there are exceptions like `x/gov`. Each module exposes a `RegisterLegacyAminoCodec` function +that allows a user to provide a codec and have all the types registered. An application +will call this method for each necessary module. + +Where there is no protobuf-based type definition for a module (see below), Amino +is used to encode and decode raw wire bytes to the concrete type or interface: + +```go +bz := keeper.cdc.MustMarshal(typeOrInterface) +keeper.cdc.MustUnmarshal(bz, &typeOrInterface) +``` + +Note, there are length-prefixed variants of the above functionality and this is +typically used for when the data needs to be streamed or grouped together +(e.g. `ResponseDeliverTx.Data`) + +#### Authz authorizations + +Since the `MsgExec` message type can contain different messages instances, it is important that developers +add the following code inside the `init` method of their module's `codec.go` file: + +```go +import authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" + +init() { + // Register all Amino interfaces and concrete types on the authz Amino codec so that this can later be + // used to properly serialize MsgGrant and MsgExec instances + RegisterLegacyAminoCodec(authzcodec.Amino) +} +``` + +This will allow the `x/authz` module to properly serialize and de-serializes `MsgExec` instances using Amino, +which is required when signing this kind of messages using a Ledger. + +### Gogoproto + +Modules are encouraged to utilize Protobuf encoding for their respective types. In the Cosmos SDK, we use the [Gogoproto](https://github.com/gogo/protobuf) specific implementation of the Protobuf spec that offers speed and DX improvements compared to the official [Google protobuf implementation](https://github.com/protocolbuffers/protobuf). + +### Guidelines for protobuf message definitions + +In addition to [following official Protocol Buffer guidelines](https://developers.google.com/protocol-buffers/docs/proto3#simple), we recommend using these annotations in .proto files when dealing with interfaces: + +* use `cosmos_proto.accepts_interface` to annote fields that accept interfaces +* pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` +* annotate interface implementations with `cosmos_proto.implements_interface` +* pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` + +### Transaction Encoding + +Another important use of Protobuf is the encoding and decoding of +[transactions](./01-transactions.md). Transactions are defined by the application or +the Cosmos SDK but are then passed to the underlying consensus engine to be relayed to +other peers. Since the underlying consensus engine is agnostic to the application, +the consensus engine accepts only transactions in the form of raw bytes. + +* The `TxEncoder` object performs the encoding. +* The `TxDecoder` object performs the decoding. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/tx_msg.go#L72-L76 + +A standard implementation of both these objects can be found in the [`auth` module](../../x/auth/spec/README.md): + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/tx/decoder.go + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/tx/encoder.go + +See [ADR-020](../architecture/adr-020-protobuf-transaction-encoding.md) for details of how a transaction is encoded. + +### Interface Encoding and Usage of `Any` + +The Protobuf DSL is strongly typed, which can make inserting variable-typed fields difficult. Imagine we want to create a `Profile` protobuf message that serves as a wrapper over [an account](../basics/accounts.md): + +```proto +message Profile { + // account is the account associated to a profile. + cosmos.auth.v1beta1.BaseAccount account = 1; + // bio is a short description of the account. + string bio = 4; +} +``` + +In this `Profile` example, we hardcoded `account` as a `BaseAccount`. However, there are several other types of [user accounts related to vesting](../../x/auth/spec/05_vesting.md), such as `BaseVestingAccount` or `ContinuousVestingAccount`. All of these accounts are different, but they all implement the `AccountI` interface. How would you create a `Profile` that allows all these types of accounts with an `account` field that accepts an `AccountI` interface? + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/types/account.go#L301-L324 + +In [ADR-019](../architecture/adr-019-protobuf-state-encoding.md), it has been decided to use [`Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto)s to encode interfaces in protobuf. An `Any` contains an arbitrary serialized message as bytes, along with a URL that acts as a globally unique identifier for and resolves to that message's type. This strategy allows us to pack arbitrary Go types inside protobuf messages. Our new `Profile` then looks like: + +```protobuf +message Profile { + // account is the account associated to a profile. + google.protobuf.Any account = 1 [ + (cosmos_proto.accepts_interface) = "AccountI"; // Asserts that this field only accepts Go types implementing `AccountI`. It is purely informational for now. + ]; + // bio is a short description of the account. + string bio = 4; +} +``` + +To add an account inside a profile, we need to "pack" it inside an `Any` first, using `codectypes.NewAnyWithValue`: + +```go +var myAccount AccountI +myAccount = ... // Can be a BaseAccount, a ContinuousVestingAccount or any struct implementing `AccountI` + +// Pack the account into an Any +accAny, err := codectypes.NewAnyWithValue(myAccount) +if err != nil { + return nil, err +} + +// Create a new Profile with the any. +profile := Profile { + Account: accAny, + Bio: "some bio", +} + +// We can then marshal the profile as usual. +bz, err := cdc.Marshal(profile) +jsonBz, err := cdc.MarshalJSON(profile) +``` + +To summarize, to encode an interface, you must 1/ pack the interface into an `Any` and 2/ marshal the `Any`. For convenience, the Cosmos SDK provides a `MarshalInterface` method to bundle these two steps. Have a look at [a real-life example in the x/auth module](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/keeper/keeper.go#L230-L233). + +The reverse operation of retrieving the concrete Go type from inside an `Any`, called "unpacking", is done with the `GetCachedValue()` on `Any`. + +```go +profileBz := ... // The proto-encoded bytes of a Profile, e.g. retrieved through gRPC. +var myProfile Profile +// Unmarshal the bytes into the myProfile struct. +err := cdc.Unmarshal(profilebz, &myProfile) + +// Let's see the types of the Account field. +fmt.Printf("%T\n", myProfile.Account) // Prints "Any" +fmt.Printf("%T\n", myProfile.Account.GetCachedValue()) // Prints "BaseAccount", "ContinuousVestingAccount" or whatever was initially packed in the Any. + +// Get the address of the accountt. +accAddr := myProfile.Account.GetCachedValue().(AccountI).GetAddress() +``` + +It is important to note that for `GetCachedValue()` to work, `Profile` (and any other structs embedding `Profile`) must implement the `UnpackInterfaces` method: + +```go +func (p *Profile) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + if p.Account != nil { + var account AccountI + return unpacker.UnpackAny(p.Account, &account) + } + + return nil +} +``` + +The `UnpackInterfaces` gets called recursively on all structs implementing this method, to allow all `Any`s to have their `GetCachedValue()` correctly populated. + +For more information about interface encoding, and especially on `UnpackInterfaces` and how the `Any`'s `type_url` gets resolved using the `InterfaceRegistry`, please refer to [ADR-019](../architecture/adr-019-protobuf-state-encoding.md). + +#### `Any` Encoding in the Cosmos SDK + +The above `Profile` example is a fictive example used for educational purposes. In the Cosmos SDK, we use `Any` encoding in several places (non-exhaustive list): + +* the `cryptotypes.PubKey` interface for encoding different types of public keys, +* the `sdk.Msg` interface for encoding different `Msg`s in a transaction, +* the `AccountI` interface for encodinig different types of accounts (similar to the above example) in the x/auth query responses, +* the `Evidencei` interface for encoding different types of evidences in the x/evidence module, +* the `AuthorizationI` interface for encoding different types of x/authz authorizations, +* the [`Validator`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/types/staking.pb.go#L306-L339) struct that contains information about a validator. + +A real-life example of encoding the pubkey as `Any` inside the Validator struct in x/staking is shown in the following example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/types/validator.go#L40-L61 + +## FAQ + +### How to create modules using protobuf encoding + +#### Defining module types + +Protobuf types can be defined to encode: + +* state +* [`Msg`s](../building-modules/messages-and-queries.md#messages) +* [Query services](../building-modules/query-services.md) +* [genesis](../building-modules/genesis.md) + +#### Naming and conventions + +We encourage developers to follow industry guidelines: [Protocol Buffers style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide), see more details in [ADR 023](../architecture/adr-023-protobuf-naming.md) + +### How to update modules to protobuf encoding + +If modules do not contain any interfaces (e.g. `Account` or `Content`), then they +may simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf (see 1. for further guidelines) and accept a `Marshaler` as the codec which is implemented via the `ProtoCodec` +without any further customization. + +However, if a module type composes an interface, it must wrap it in the `sdk.Any` (from `/types` package) type. To do that, a module-level .proto file must use [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto) for respective message type interface types. + +For example, in the `x/evidence` module defines an `Evidence` interface, which is used by the `MsgSubmitEvidence`. The structure definition must use `sdk.Any` to wrap the evidence file. In the proto file we define it as follows: + +```protobuf +// proto/cosmos/evidence/v1beta1/tx.proto + +message MsgSubmitEvidence { + string submitter = 1; + google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "Evidence"]; +} +``` + +The Cosmos SDK `codec.Codec` interface provides support methods `MarshalInterface` and `UnmarshalInterface` to easy encoding of state to `Any`. + +Module should register interfaces using `InterfaceRegistry` which provides a mechanism for registering interfaces: `RegisterInterface(protoName string, iface interface{}, impls ...proto.Message)` and implementations: `RegisterImplementations(iface interface{}, impls ...proto.Message)` that can be safely unpacked from Any, similarly to type registration with Amino: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/codec/types/interface_registry.go#L25-L55 + +In addition, an `UnpackInterfaces` phase should be introduced to deserialization to unpack interfaces before they're needed. Protobuf types that contain a protobuf `Any` either directly or via one of their members should implement the `UnpackInterfacesMessage` interface: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +### Custom Stringer + +Using `option (gogoproto.goproto_stringer) = false;` in a proto message definition leads to unexpected behaviour, like returning wrong output or having missing fields in the output. +For that reason a proto Message's `String()` must not be customized, and the `goproto_stringer` option must be avoided. + +A correct YAML output can be obtained through ProtoJSON, using the `JSONToYAML` function: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0/codec/yaml.go#L8-L20 + +For example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0/x/auth/types/account.go#L139-L151 + +## Next {hide} + +Learn about [gRPC, REST and other endpoints](./08-grpc_rest.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/08-grpc_rest.md b/versioned_docs/version-0.46/develop/advanced-concepts/08-grpc_rest.md new file mode 100644 index 000000000..3071a0a95 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/08-grpc_rest.md @@ -0,0 +1,99 @@ + + +# gRPC, REST, and Tendermint Endpoints + +This document presents an overview of all the endpoints a node exposes: gRPC, REST as well as some other endpoints. {synopsis} + +## An Overview of All Endpoints + +Each node exposes the following endpoints for users to interact with a node, each endpoint is served on a different port. Details on how to configure each endpoint is provided in the endpoint's own section. + +* the gRPC server (default port: `9090`), +* the REST server (default port: `1317`), +* the Tendermint RPC endpoint (default port: `26657`). + +::: tip +The node also exposes some other endpoints, such as the Tendermint P2P endpoint, or the [Prometheus endpoint](https://docs.tendermint.com/master/nodes/metrics.html#metrics), which are not directly related to the Cosmos SDK. Please refer to the [Tendermint documentation](https://docs.tendermint.com/master/tendermint-core/using-tendermint.html#configuration) for more information about these endpoints. +::: + +## gRPC Server + +In the Cosmos SDK, Protobuf is the main [encoding](./07-encoding) library. This brings a wide range of Protobuf-based tools that can be plugged into the Cosmos SDK. One such tool is [gRPC](https://grpc.io), a modern open-source high performance RPC framework that has decent client support in several languages. + +Each module exposes a [Protobuf `Query` service](../building-modules/messages-and-queries.md#queries) that defines state queries. The `Query` services and a transaction service used to broadcast transactions are hooked up to the gRPC server via the following function inside the application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server/types/app.go#L45-L47 + +Note: It is not possible to expose any [Protobuf `Msg` service](../building-modules/messages-and-queries.md#messages) endpoints via gRPC. Transactions must be generated and signed using the CLI or programmatically before they can be broadcasted using gRPC. See [Generating, Signing, and Broadcasting Transactions](../run-node/txs.html) for more information. + +The `grpc.Server` is a concrete gRPC server, which spawns and serves all gRPC query requests and a broadcast transaction request. This server can be configured inside `~/.simapp/config/app.toml`: + +* `grpc.enable = true|false` field defines if the gRPC server should be enabled. Defaults to `true`. +* `grpc.address = {string}` field defines the address (really, the port, since the host should be kept at `0.0.0.0`) the server should bind to. Defaults to `0.0.0.0:9090`. + +:::tip +`~/.simapp` is the directory where the node's configuration and databases are stored. By default, it's set to `~/.{app_name}`. +::: + +Once the gRPC server is started, you can send requests to it using a gRPC client. Some examples are given in our [Interact with the Node](../run-node/interact-node.md#using-grpc) tutorial. + +An overview of all available gRPC endpoints shipped with the Cosmos SDK is [Protobuf documentation](https://buf.build/cosmos/cosmos-sdk). + +## REST Server + +Cosmos SDK supports REST routes via gRPC-gateway. + +All routes are configured under the following fields in `~/.simapp/config/app.toml`: + +* `api.enable = true|false` field defines if the REST server should be enabled. Defaults to `false`. +* `api.address = {string}` field defines the address (really, the port, since the host should be kept at `0.0.0.0`) the server should bind to. Defaults to `tcp://0.0.0.0:1317`. +* some additional API configuration options are defined in `~/.simapp/config/app.toml`, along with comments, please refer to that file directly. + +### gRPC-gateway REST Routes + +If, for various reasons, you cannot use gRPC (for example, you are building a web application, and browsers don't support HTTP2 on which gRPC is built), then the Cosmos SDK offers REST routes via gRPC-gateway. + +[gRPC-gateway](https://grpc-ecosystem.github.io/grpc-gateway/) is a tool to expose gRPC endpoints as REST endpoints. For each gRPC endpoint defined in a Protobuf `Query` service, the Cosmos SDK offers a REST equivalent. For instance, querying a balance could be done via the `/cosmos.bank.v1beta1.QueryAllBalances` gRPC endpoint, or alternatively via the gRPC-gateway `"/cosmos/bank/v1beta1/balances/{address}"` REST endpoint: both will return the same result. For each RPC method defined in a Protobuf `Query` service, the corresponding REST endpoint is defined as an option: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/bank/v1beta1/query.proto#L19-L22 + +For application developers, gRPC-gateway REST routes needs to be wired up to the REST server, this is done by calling the `RegisterGRPCGatewayRoutes` function on the ModuleManager. + +### Swagger + +A [Swagger](https://swagger.io/) (or OpenAPIv2) specification file is exposed under the `/swagger` route on the API server. Swagger is an open specification describing the API endpoints a server serves, including description, input arguments, return types and much more about each endpoint. + +Enabling the `/swagger` endpoint is configurable inside `~/.simapp/config/app.toml` via the `api.swagger` field, which is set to true by default. + +For application developers, you may want to generate your own Swagger definitions based on your custom modules. +The Cosmos SDK's [Swagger generation script](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/scripts/protoc-swagger-gen.sh) is a good place to start. + +## Tendermint RPC + +Independently from the Cosmos SDK, Tendermint also exposes a RPC server. This RPC server can be configured by tuning parameters under the `rpc` table in the `~/.simapp/config/config.toml`, the default listening address is `tcp://0.0.0.0:26657`. An OpenAPI specification of all Tendermint RPC endpoints is available [here](https://docs.tendermint.com/master/rpc/). + +Some Tendermint RPC endpoints are directly related to the Cosmos SDK: + +* `/abci_query`: this endpoint will query the application for state. As the `path` parameter, you can send the following strings: + * any Protobuf fully-qualified service method, such as `/cosmos.bank.v1beta1.QueryAllBalances`. The `data` field should then include the method's request parameter(s) encoded as bytes using Protobuf. + * `/app/simulate`: this will simulate a transaction, and return some information such as gas used. + * `/app/version`: this will return the application's version. + * `/store/{path}`: this will query the store directly. + * `/p2p/filter/addr/{port}`: this will return a filtered list of the node's P2P peers by address port. + * `/p2p/filter/id/{id}`: this will return a filtered list of the node's P2P peers by ID. +* `/broadcast_tx_{aync,async,commit}`: these 3 endpoint will broadcast a transaction to other peers. CLI, gRPC and REST expose [a way to broadcast transations](./01-transactions.md#broadcasting-the-transaction), but they all use these 3 Tendermint RPCs under the hood. + +## Comparison Table + +| Name | Advantages | Disadvantages | +| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| gRPC | - can use code-generated stubs in various languages
- supports streaming and bidirectional communication (HTTP2)
- small wire binary sizes, faster transmission | - based on HTTP2, not available in browsers
- learning curve (mostly due to Protobuf) | +| REST | - ubiquitous
- client libraries in all languages, faster implementation
| - only supports unary request-response communication (HTTP1.1)
- bigger over-the-wire message sizes (JSON) | +| CometBFT RPC | - easy to use | - bigger over-the-wire message sizes (JSON) | + + +## Next {hide} + +Learn about [the CLI](./09-cli.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/09-cli.md b/versioned_docs/version-0.46/develop/advanced-concepts/09-cli.md new file mode 100644 index 000000000..6895a486a --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/09-cli.md @@ -0,0 +1,156 @@ + + +# Command-Line Interface + +This document describes how command-line interface (CLI) works on a high-level, for an [**application**](../basics/app-anatomy.md). A separate document for implementing a CLI for a Cosmos SDK [**module**](../building-modules/intro.md) can be found [here](../building-modules/module-interfaces.md#cli). {synopsis} + +## Command-Line Interface + +### Example Command + +There is no set way to create a CLI, but Cosmos SDK modules typically use the [Cobra Library](https://github.com/spf13/cobra). Building a CLI with Cobra entails defining commands, arguments, and flags. [**Commands**](#commands) understand the actions users wish to take, such as `tx` for creating a transaction and `query` for querying the application. Each command can also have nested subcommands, necessary for naming the specific transaction type. Users also supply **Arguments**, such as account numbers to send coins to, and [**Flags**](#flags) to modify various aspects of the commands, such as gas prices or which node to broadcast to. + +Here is an example of a command a user might enter to interact with the simapp CLI `simd` in order to send some tokens: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --gas auto --gas-prices +``` + +The first four strings specify the command: + +* The root command for the entire application `simd`. +* The subcommand `tx`, which contains all commands that let users create transactions. +* The subcommand `bank` to indicate which module to route the command to ([`x/bank`](../../x/bank/spec/README.md) module in this case). +* The type of transaction `send`. + +The next two strings are arguments: the `from_address` the user wishes to send from, the `to_address` of the recipient, and the `amount` they want to send. Finally, the last few strings of the command are optional flags to indicate how much the user is willing to pay in fees (calculated using the amount of gas used to execute the transaction and the gas prices provided by the user). + +The CLI interacts with a [node](../core/node.md) to handle this command. The interface itself is defined in a `main.go` file. + +### Building the CLI + +The `main.go` file needs to have a `main()` function that creates a root command, to which all the application commands will be added as subcommands. The root command additionally handles: + +* **setting configurations** by reading in configuration files (e.g. the Cosmos SDK config file). +* **adding any flags** to it, such as `--chain-id`. +* **instantiating the `codec`** by calling the application's `MakeCodec()` function (called `MakeTestEncodingConfig` in `simapp`). The [`codec`](../core/encoding.md) is used to encode and decode data structures for the application - stores can only persist `[]byte`s so the developer must define a serialization format for their data structures or use the default, Protobuf. +* **adding subcommand** for all the possible user interactions, including [transaction commands](#transaction-commands) and [query commands](#query-commands). + +The `main()` function finally creates an executor and [execute](https://pkg.go.dev/github.com/spf13/cobra#Command.Execute) the root command. See an example of `main()` function from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/main.go#L12-L24 + +The rest of the document will detail what needs to be implemented for each step and include smaller portions of code from the `simapp` CLI files. + +## Adding Commands to the CLI + +Every application CLI first constructs a root command, then adds functionality by aggregating subcommands (often with further nested subcommands) using `rootCmd.AddCommand()`. The bulk of an application's unique capabilities lies in its transaction and query commands, called `TxCmd` and `QueryCmd` respectively. + +### Root Command + +The root command (called `rootCmd`) is what the user first types into the command line to indicate which application they wish to interact with. The string used to invoke the command (the "Use" field) is typically the name of the application suffixed with `-d`, e.g. `simd` or `gaiad`. The root command typically includes the following commands to support basic functionality in the application. + +* **Status** command from the Cosmos SDK rpc client tools, which prints information about the status of the connected [`Node`](../core/node.md). The Status of a node includes `NodeInfo`,`SyncInfo` and `ValidatorInfo`. +* **Keys** [commands](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/keys) from the Cosmos SDK client tools, which includes a collection of subcommands for using the key functions in the Cosmos SDK crypto tools, including adding a new key and saving it to the keyring, listing all public keys stored in the keyring, and deleting a key. For example, users can type `simd keys add ` to add a new key and save an encrypted copy to the keyring, using the flag `--recover` to recover a private key from a seed phrase or the flag `--multisig` to group multiple keys together to create a multisig key. For full details on the `add` key command, see the code [here](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/keys/add.go). For more details about usage of `--keyring-backend` for storage of key credentials look at the [keyring docs](../run-node/keyring.md). +* **Server** commands from the Cosmos SDK server package. These commands are responsible for providing the mechanisms necessary to start an ABCI Tendermint application and provides the CLI framework (based on [cobra](github.com/spf13/cobra)) necessary to fully bootstrap an application. The package exposes two core functions: `StartCmd` and `ExportCmd` which creates commands to start the application and export state respectively. Click [here](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server) to learn more. +* [**Transaction**](#transaction-commands) commands. +* [**Query**](#query-commands) commands. + +Next is an example `rootCmd` function from the `simapp` application. It instantiates the root command, adds a [_persistent_ flag](#flags) and `PreRun` function to be run before every execution, and adds all of the necessary subcommands. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L39-L85 + +`rootCmd` has a function called `initAppConfig()` which is useful for setting the application's custom configs. +By default app uses Tendermint app config template from Cosmos SDK, which can be over-written via `initAppConfig()`. +Here's an example code to override default `app.toml` template. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L99-L153 + +The `initAppConfig()` also allows overriding the default Cosmos SDK's [server config](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server/config/config.go#L235). One example is the `min-gas-prices` config, which defines the minimum gas prices a validator is willing to accept for processing a transaction. By default, the Cosmos SDK sets this parameter to `""` (empty string), which forces all validators to tweak their own `app.toml` and set a non-empty value, or else the node will halt on startup. This might not be the best UX for validators, so the chain developer can set a default `app.toml` value for validators inside this `initAppConfig()` function. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L119-L134 + +The root-level `status` and `keys` subcommands are common across most applications and do not interact with application state. The bulk of an application's functionality - what users can actually _do_ with it - is enabled by its `tx` and `query` commands. + +### Transaction Commands + +[Transactions](./01-transactions.md) are objects wrapping [`Msg`s](../building-modules/messages-and-queries.md#messages) that trigger state changes. To enable the creation of transactions using the CLI interface, a function `txCommand` is generally added to the `rootCmd`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L175-L181 + +This `txCommand` function adds all the transaction available to end-users for the application. This typically includes: + +* **Sign command** from the [`auth`](../../x/auth/spec/README.md) module that signs messages in a transaction. To enable multisig, add the `auth` module's `MultiSign` command. Since every transaction requires some sort of signature in order to be valid, the signing command is necessary for every application. +* **Broadcast command** from the Cosmos SDK client tools, to broadcast transactions. +* **All [module transaction commands](../building-modules/module-interfaces.md#transaction-commands)** the application is dependent on, retrieved by using the [basic module manager's](../building-modules/module-manager.md#basic-manager) `AddTxCommands()` function. + +Here is an example of a `txCommand` aggregating these subcommands from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L215-L240 + +### Query Commands + +[**Queries**](../building-modules/messages-and-queries.md#queries) are objects that allow users to retrieve information about the application's state. To enable the creation of queries using the CLI interface, a function `queryCommand` is generally added to the `rootCmd`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L175-L181 + +This `queryCommand` function adds all the queries available to end-users for the application. This typically includes: + +* **QueryTx** and/or other transaction query commands] from the `auth` module which allow the user to search for a transaction by inputting its hash, a list of tags, or a block height. These queries allow users to see if transactions have been included in a block. +* **Account command** from the `auth` module, which displays the state (e.g. account balance) of an account given an address. +* **Validator command** from the Cosmos SDK rpc client tools, which displays the validator set of a given height. +* **Block command** from the Cosmos SDK rpc client tools, which displays the block data for a given height. +* **All [module query commands](../building-modules/module-interfaces.md#query-commands)** the application is dependent on, retrieved by using the [basic module manager's](../building-modules/module-manager.md#basic-manager) `AddQueryCommands()` function. + +Here is an example of a `queryCommand` aggregating subcommands from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L191-L213 + +## Flags + +Flags are used to modify commands; developers can include them in a `flags.go` file with their CLI. Users can explicitly include them in commands or pre-configure them by inside their [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). Commonly pre-configured flags include the `--node` to connect to and `--chain-id` of the blockchain the user wishes to interact with. + +A _persistent_ flag (as opposed to a _local_ flag) added to a command transcends all of its children: subcommands will inherit the configured values for these flags. Additionally, all flags have default values when they are added to commands; some toggle an option off but others are empty values that the user needs to override to create valid commands. A flag can be explicitly marked as _required_ so that an error is automatically thrown if the user does not provide a value, but it is also acceptable to handle unexpected missing flags differently. + +Flags are added to commands directly (generally in the [module's CLI file](../building-modules/module-interfaces.md#flags) where module commands are defined) and no flag except for the `rootCmd` persistent flags has to be added at application level. It is common to add a _persistent_ flag for `--chain-id`, the unique identifier of the blockchain the application pertains to, to the root command. Adding this flag can be done in the `main()` function. Adding this flag makes sense as the chain ID should not be changing across commands in this application CLI. Here is an example from the `simapp` application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L210-L210 + +## Environment variables + +Each flag is bound to it's respecteve named environment variable. Then name of the environment variable consist of two parts - capital case `basename` followed by flag name of the flag. `-` must be substituted with `_`. For example flag `--home` for application with basename `GAIA` is bound to `GAIA_HOME`. It allows reducing the amount of flags typed for routine operations. For example instead of: + +```sh +gaia --home=./ --node= --chain-id="testchain-1" --keyring-backend=test tx ... --from= +``` + +this will be more convenient: + +```sh +# define env variables in .env, .envrc etc +GAIA_HOME= +GAIA_NODE= +GAIA_CHAIN_ID="testchain-1" +GAIA_KEYRING_BACKEND="test" + +# and later just use +gaia tx ... --from= +``` + +## Configurations + +It is vital that the root command of an application uses `PersistentPreRun()` cobra command property for executing the command, so all child commands have access to the server and client contexts. These contexts are set as their default values initially and maybe modified, scoped to the command, in their respective `PersistentPreRun()` functions. Note that the `client.Context` is typically pre-populated with "default" values that may be useful for all commands to inherit and override if necessary. + +Here is an example of an `PersistentPreRun()` function from `simapp`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/simd/cmd/root.go#L56-L79 + +The `SetCmdClientContextHandler` call reads persistent flags via `ReadPersistentCommandFlags` which creates a `client.Context` and sets that on the root command's `Context`. + +The `InterceptConfigsPreRunHandler` call creates a viper literal, default `server.Context`, and a logger and sets that on the root command's `Context`. The `server.Context` will be modified and saved to disk via the internal `interceptConfigs` call, which either reads or creates a Tendermint configuration based on the home path provided. In addition, `interceptConfigs` also reads and loads the application configuration, `app.toml`, and binds that to the `server.Context` viper literal. This is vital so the application can get access to not only the CLI flags, but also to the application configuration values provided by this file. + +## Next {hide} + +Learn about [events](./10-events.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/10-events.md b/versioned_docs/version-0.46/develop/advanced-concepts/10-events.md new file mode 100644 index 000000000..d11592577 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/10-events.md @@ -0,0 +1,139 @@ + + +# Events + +`Event`s are objects that contain information about the execution of the application. They are mainly used by service providers like block explorers and wallet to track the execution of various messages and index transactions. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/app-anatomy.md) {prereq} +* [Tendermint Documentation on Events](https://docs.tendermint.com/master/spec/abci/abci.html#events) {prereq} + +## Typed Events + +Events are implemented in the Cosmos SDK as an alias of the ABCI `Event` type and +take the form of: `{eventType}.{attributeKey}={attributeValue}`. + ++++ https://github.com/tendermint/tendermint/blob/v0.35.4/proto/tendermint/abci/types.proto#L273-L279 + +An Event contains: + +* A `type` to categorize the Event at a high-level; for example, the Cosmos SDK uses the `"message"` type to filter Events by `Msg`s. +* A list of `attributes` are key-value pairs that give more information about the categorized Event. For example, for the `"message"` type, we can filter Events by key-value pairs using `message.action={some_action}`, `message.module={some_module}` or `message.sender={some_sender}`. + +::: tip +To parse the attribute values as strings, make sure to add `'` (single quotes) around each attribute value. +::: + +_Typed Events_ are Protobuf-defined [messages](../architecture/adr-032-typed-events.md) used by the Cosmos SDK +for emitting and querying Events. They are defined in a `event.proto` file, on a **per-module basis**. +They are triggered from the module's Protobuf [`Msg` service](../building-modules/msg-services.md) +by using the [`EventManager`](#eventmanager), where they are read as `proto.Message`. + +In addition, each module documents its Events under `spec/xx_events.md`. + +Lastly, Events are returned to the underlying consensus engine in the response of the following ABCI messages: + +* [`BeginBlock`](./00-baseapp.md#beginblock) +* [`EndBlock`](./00-baseapp.md#endblock) +* [`CheckTx`](./00-baseapp.md#checktx) +* [`DeliverTx`](./00-baseapp.md#delivertx) + +### Examples + +The following examples show how to query Events using the Cosmos SDK. + +| Event | Description | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tx.height=23` | Query all transactions at height 23 | +| `message.action='/cosmos.bank.v1beta1.Msg/Send'` | Query all transactions containing a x/bank `Send` [Service `Msg`](../building-modules/msg-services.md). Note the `'`s around the value. | +| `message.action='send'` | Query all transactions containing a x/bank `Send` [legacy `Msg`](../building-modules/msg-services.md#legacy-amino-msgs). Note the `'`s around the value. | +| `message.module='bank'` | Query all transactions containing messages from the x/bank module. Note the `'`s around the value. | +| `create_validator.validator='cosmosval1...'` | x/staking-specific Event, see [x/staking SPEC](../../../cosmos-sdk/x/staking/spec/07_events.md). | + +## EventManager + +In Cosmos SDK applications, Events are managed by an abstraction called the `EventManager`. +Internally, the `EventManager` tracks a list of Events for the entire execution flow of a +transaction or `BeginBlock`/`EndBlock`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/events.go#L17-L25 + +The `EventManager` comes with a set of useful methods to manage Events. The method +that is used most by module and application developers is `EmitTypedEvent` that tracks +an Event in the `EventManager`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/events.go#L50-L59 + +Module developers should handle Event emission via the `EventManager#EmitTypedEvent` in each message +`Handler` and in each `BeginBlock`/`EndBlock` handler. The `EventManager` is accessed via +the [`Context`](./03-context.md), where Event should be already registered, and emitted like this: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/group/keeper/msg_server.go#L89-L92 + +Module's `handler` function should also set a new `EventManager` to the `context` to isolate emitted Events per `message`: + +```go +func NewHandler(keeper Keeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) + switch msg := msg.(type) { +``` + +See the [`Msg` services](../building-modules/msg-services.md) concept doc for a more detailed +view on how to typically implement Events and use the `EventManager` in modules. + +## Subscribing to Events + +You can use Tendermint's [Websocket](https://docs.tendermint.com/master/tendermint-core/subscription.html#subscribing-to-events-via-websocket) to subscribe to Events by calling the `subscribe` RPC method: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='eventCategory' AND eventType.eventAttribute='attributeValue'" + } +} +``` + +The main `eventCategory` you can subscribe to are: + +* `NewBlock`: Contains Events triggered during `BeginBlock` and `EndBlock`. +* `Tx`: Contains Events triggered during `DeliverTx` (i.e. transaction processing). +* `ValidatorSetUpdates`: Contains validator set updates for the block. + +These Events are triggered from the `state` package after a block is committed. You can get the +full list of Event categories [on the Tendermint Go documentation](https://pkg.go.dev/github.com/tendermint/tendermint/types#pkg-constants). + +The `type` and `attribute` value of the `query` allow you to filter the specific Event you are looking for. For example, a `Mint` transaction triggers an Event of type `EventMint` and has an `Id` and an `Owner` as `attributes` (as defined in the [`events.proto` file of the `NFT` module](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/nft/v1beta1/event.proto#L14-L19)). + +Subscribing to this Event would be done like so: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='Tx' AND mint.owner='ownerAddress'" + } +} +``` + +where `ownerAddress` is an address following the [`AccAddress`](../basics/accounts.md#addresses) format. + +## Events (Deprecated) + +Previously, the Cosmos SDK supported emitting Events that were defined in `types/events.go`. It is the responsibility of the module developer to define Event types and Event attributes. Except in the `spec/XX_events.md` file, these Event types and attributes are unfortunately not easily discoverable, + +This is why this methods as been deprecated, and replaced by _[Typed Events](#typed-events). + +To learn more about the previous way of defining events, please refer to the [previous SDK documentation](https://docs.cosmos.network/v0.45/core/events.html#events-2). + +## Next {hide} + +Learn about Cosmos SDK [telemetry](./11-telemetry.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/11-telemetry.md b/versioned_docs/version-0.46/develop/advanced-concepts/11-telemetry.md new file mode 100644 index 000000000..0152349ec --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/11-telemetry.md @@ -0,0 +1,130 @@ + + +# Telemetry + +Gather relevant insights about your application and modules with custom metrics and telemetry. {synopsis} + +The Cosmos SDK enables operators and developers to gain insight into the performance and behavior of +their application through the use of the `telemetry` package. To enable telemetrics, set `telemetry.enabled = true` in the app.toml config file. + +The Cosmos SDK currently supports enabling in-memory and prometheus as telemetry sinks. In-memory sink is always attached (when the telemetry is enabled) with 10 second interval and 1 minute retention. This means that metrics will be aggregated over 10 seconds, and metrics will be kept alive for 1 minute. + +To query active metrics (see retention note above) you have to enable API server (`api.enabled = true` in the app.toml). Single API endpoint is exposed: `http://localhost:1317/metrics?format={text|prometheus}`, the default being `text`. + +## Emitting metrics + +If telemetry is enabled via configuration, a single global metrics collector is registered via the +[go-metrics](https://github.com/armon/go-metrics) library. This allows emitting and collecting +metrics through simple [API](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/telemetry/wrapper.go). Example: + +```go +func EndBlocker(ctx sdk.Context, k keeper.Keeper) { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker) + + // ... +} +``` + +Developers may use the `telemetry` package directly, which provides wrappers around metric APIs +that include adding useful labels, or they must use the `go-metrics` library directly. It is preferable +to add as much context and adequate dimensionality to metrics as possible, so the `telemetry` package +is advised. Regardless of the package or method used, the Cosmos SDK supports the following metrics +types: + +* gauges +* summaries +* counters + +## Labels + +Certain components of modules will have their name automatically added as a label (e.g. `BeginBlock`). +Operators may also supply the application with a global set of labels that will be applied to all +metrics emitted using the `telemetry` package (e.g. chain-id). Global labels are supplied as a list +of [name, value] tuples. + +Example: + +```toml +global-labels = [ + ["chain_id", "chain-OfXo4V"], +] +``` + +## Cardinality + +Cardinality is key, specifically label and key cardinality. Cardinality is how many unique values of +something there are. So there is naturally a tradeoff between granularity and how much stress is put +on the telemetry sink in terms of indexing, scrape, and query performance. + +Developers should take care to support metrics with enough dimensionality and granularity to be +useful, but not increase the cardinality beyond the sink's limits. A general rule of thumb is to not +exceed a cardinality of 10. + +Consider the following examples with enough granularity and adequate cardinality: + +* begin/end blocker time +* tx gas used +* block gas used +* amount of tokens minted +* amount of accounts created + +The following examples expose too much cardinality and may not even prove to be useful: + +* transfers between accounts with amount +* voting/deposit amount from unique addresses + +## Supported Metrics + +| Metric | Description | Unit | Type | +|:--------------------------------|:------------------------------------------------------------------------------------------|:----------------|:--------| +| `tx_count` | Total number of txs processed via `DeliverTx` | tx | counter | +| `tx_successful` | Total number of successful txs processed via `DeliverTx` | tx | counter | +| `tx_failed` | Total number of failed txs processed via `DeliverTx` | tx | counter | +| `tx_gas_used` | The total amount of gas used by a tx | gas | gauge | +| `tx_gas_wanted` | The total amount of gas requested by a tx | gas | gauge | +| `tx_msg_send` | The total amount of tokens sent in a `MsgSend` (per denom) | token | gauge | +| `tx_msg_withdraw_reward` | The total amount of tokens withdrawn in a `MsgWithdrawDelegatorReward` (per denom) | token | gauge | +| `tx_msg_withdraw_commission` | The total amount of tokens withdrawn in a `MsgWithdrawValidatorCommission` (per denom) | token | gauge | +| `tx_msg_delegate` | The total amount of tokens delegated in a `MsgDelegate` | token | gauge | +| `tx_msg_begin_unbonding` | The total amount of tokens undelegated in a `MsgUndelegate` | token | gauge | +| `tx_msg_begin_begin_redelegate` | The total amount of tokens redelegated in a `MsgBeginRedelegate` | token | gauge | +| `tx_msg_ibc_transfer` | The total amount of tokens transferred via IBC in a `MsgTransfer` (source or sink chain) | token | gauge | +| `ibc_transfer_packet_receive` | The total amount of tokens received in a `FungibleTokenPacketData` (source or sink chain) | token | gauge | +| `new_account` | Total number of new accounts created | account | counter | +| `gov_proposal` | Total number of governance proposals | proposal | counter | +| `gov_vote` | Total number of governance votes for a proposal | vote | counter | +| `gov_deposit` | Total number of governance deposits for a proposal | deposit | counter | +| `staking_delegate` | Total number of delegations | delegation | counter | +| `staking_undelegate` | Total number of undelegations | undelegation | counter | +| `staking_redelegate` | Total number of redelegations | redelegation | counter | +| `ibc_transfer_send` | Total number of IBC transfers sent from a chain (source or sink) | transfer | counter | +| `ibc_transfer_receive` | Total number of IBC transfers received to a chain (source or sink) | transfer | counter | +| `ibc_client_create` | Total number of clients created | create | counter | +| `ibc_client_update` | Total number of client updates | update | counter | +| `ibc_client_upgrade` | Total number of client upgrades | upgrade | counter | +| `ibc_client_misbehaviour` | Total number of client misbehaviours | misbehaviour | counter | +| `ibc_connection_open-init` | Total number of connection `OpenInit` handshakes | handshake | counter | +| `ibc_connection_open-try` | Total number of connection `OpenTry` handshakes | handshake | counter | +| `ibc_connection_open-ack` | Total number of connection `OpenAck` handshakes | handshake | counter | +| `ibc_connection_open-confirm` | Total number of connection `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_open-init` | Total number of channel `OpenInit` handshakes | handshake | counter | +| `ibc_channel_open-try` | Total number of channel `OpenTry` handshakes | handshake | counter | +| `ibc_channel_open-ack` | Total number of channel `OpenAck` handshakes | handshake | counter | +| `ibc_channel_open-confirm` | Total number of channel `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_close-init` | Total number of channel `CloseInit` handshakes | handshake | counter | +| `ibc_channel_close-confirm` | Total number of channel `CloseConfirm` handshakes | handshake | counter | +| `tx_msg_ibc_recv_packet` | Total number of IBC packets received | packet | counter | +| `tx_msg_ibc_acknowledge_packet` | Total number of IBC packets acknowledged | acknowledgement | counter | +| `ibc_timeout_packet` | Total number of IBC timeout packets | timeout | counter | +| `store_iavl_get` | Duration of an IAVL `Store#Get` call | ms | summary | +| `store_iavl_set` | Duration of an IAVL `Store#Set` call | ms | summary | +| `store_iavl_has` | Duration of an IAVL `Store#Has` call | ms | summary | +| `store_iavl_delete` | Duration of an IAVL `Store#Delete` call | ms | summary | +| `store_iavl_commit` | Duration of an IAVL `Store#Commit` call | ms | summary | +| `store_iavl_query` | Duration of an IAVL `Store#Query` call | ms | summary | + +## Next {hide} + +Learn about the [object-capability](./12-ocap.md) model {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/12-ocap.md b/versioned_docs/version-0.46/develop/advanced-concepts/12-ocap.md new file mode 100644 index 000000000..f9a84457b --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/12-ocap.md @@ -0,0 +1,78 @@ + + +# Object-Capability Model + +## Intro + +When thinking about security, it is good to start with a specific threat model. Our threat model is the following: + +> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +The Cosmos SDK is designed to address this threat by being the +foundation of an object capability system. + +> The structural properties of object capability systems favor +> modularity in code design and ensure reliable encapsulation in +> code implementation. +> +> These structural properties facilitate the analysis of some +> security properties of an object-capability program or operating +> system. Some of these — in particular, information flow properties +> — can be analyzed at the level of object references and +> connectivity, independent of any knowledge or analysis of the code +> that determines the behavior of the objects. +> +> As a consequence, these security properties can be established +> and maintained in the presence of new objects that contain unknown +> and possibly malicious code. +> +> These structural properties stem from the two rules governing +> access to existing objects: +> +> 1. An object A can send a message to B only if object A holds a +> reference to B. +> 2. An object A can obtain a reference to C only +> if object A receives a message containing a reference to C. As a +> consequence of these two rules, an object can obtain a reference +> to another object only through a preexisting chain of references. +> In short, "Only connectivity begets connectivity." + +For an introduction to object-capabilities, see this [Wikipedia article](https://en.wikipedia.org/wiki/Object-capability_model). + +## Ocaps in practice + +The idea is to only reveal what is necessary to get the work done. + +For example, the following code snippet violates the object capabilities +principle: + +```go +type AppAccount struct {...} +account := &AppAccount{ + Address: pub.Address(), + Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)}, +} +sumValue := externalModule.ComputeSumValue(account) +``` + +The method `ComputeSumValue` implies a pure function, yet the implied +capability of accepting a pointer value is the capability to modify that +value. The preferred method signature should take a copy instead. + +```go +sumValue := externalModule.ComputeSumValue(*account) +``` + +In the Cosmos SDK, you can see the application of this principle in simapp. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L258-L283 + +The following diagram shows the current dependencies between keepers. + +![Keeper dependencies](./keeper_dependencies.svg) + +## Next {hide} + +Learn about the [`runTx` middleware](./13-runtx_middleware.md) {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/13-runtx_middleware.md b/versioned_docs/version-0.46/develop/advanced-concepts/13-runtx_middleware.md new file mode 100644 index 000000000..8b39f127e --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/13-runtx_middleware.md @@ -0,0 +1,69 @@ + + +# RunTx recovery middleware + +`BaseApp.runTx()` function handles Go panics that might occur during transactions execution, for example, keeper has faced an invalid state and paniced. +Depending on the panic type different handler is used, for instance the default one prints an error log message. +Recovery middleware is used to add custom panic recovery for Cosmos SDK application developers. + +More context can found in the corresponding [ADR-022](../architecture/adr-022-custom-panic-handling.md) and the implementation in [recovery.go](https://github.com/cosmos/cosmos-sdk/tree/v0.46.0-rc1/baseapp/recovery.go). + +## Interface + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/recovery.go#L11-L14 + +`recoveryObj` is a return value for `recover()` function from the `buildin` Go package. + +**Contract:** + +* RecoveryHandler returns `nil` if `recoveryObj` wasn't handled and should be passed to the next recovery middleware; +* RecoveryHandler returns a non-nil `error` if `recoveryObj` was handled; + +## Custom RecoveryHandler register + +`BaseApp.AddRunTxRecoveryHandler(handlers ...RecoveryHandler)` + +BaseApp method adds recovery middleware to the default recovery chain. + +## Example + +Lets assume we want to emit the "Consensus failure" chain state if some particular error occurred. + +We have a module keeper that panics: + +```go +func (k FooKeeper) Do(obj interface{}) { + if obj == nil { + // that shouldn't happen, we need to crash the app + err := sdkErrors.Wrap(fooTypes.InternalError, "obj is nil") + panic(err) + } +} +``` + +By default that panic would be recovered and an error message will be printed to log. To override that behaviour we should register a custom RecoveryHandler: + +```go +// Cosmos SDK application constructor +customHandler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { + return nil + } + + if fooTypes.InternalError.Is(err) { + panic(fmt.Errorf("FooKeeper did panic with error: %w", err)) + } + + return nil +} + +baseApp := baseapp.NewBaseApp(...) +baseApp.AddRunTxRecoveryHandler(customHandler) +``` + +## Next {hide} + +Learn about the [IBC](./../ibc/README.md) protocol {hide} diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/13-simulation.md b/versioned_docs/version-0.46/develop/advanced-concepts/13-simulation.md new file mode 100644 index 000000000..02befbeac --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/13-simulation.md @@ -0,0 +1,101 @@ + + +# Cosmos Blockchain Simulator + +The Cosmos SDK offers a full fledged simulation framework to fuzz test every +message defined by a module. + +On the Cosmos SDK, this functionality is provided by the[`SimApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go), which is a +`Baseapp` application that is used for running the [`simulation`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/simulation) module. +This module defines all the simulation logic as well as the operations for +randomized parameters like accounts, balances etc. + +## Goals + +The blockchain simulator tests how the blockchain application would behave under +real life circumstances by generating and sending randomized messages. +The goal of this is to detect and debug failures that could halt a live chain, +by providing logs and statistics about the operations run by the simulator as +well as exporting the latest application state when a failure was found. + +Its main difference with integration testing is that the simulator app allows +you to pass parameters to customize the chain that's being simulated. +This comes in handy when trying to reproduce bugs that were generated in the +provided operations (randomized or not). + +## Simulation commands + +The simulation app has different commands, each of which tests a different +failure type: + +* `AppImportExport`: The simulator exports the initial app state and then it + creates a new app with the exported `genesis.json` as an input, checking for + inconsistencies between the stores. +* `AppSimulationAfterImport`: Queues two simulations together. The first one provides the app state (_i.e_ genesis) to the second. Useful to test software upgrades or hard-forks from a live chain. +* `AppStateDeterminism`: Checks that all the nodes return the same values, in the same order. +* `BenchmarkInvariants`: Analysis of the performance of running all modules' invariants (_i.e_ sequentially runs a [benchmark](https://pkg.go.dev/testing/#hdr-Benchmarks) test). An invariant checks for + differences between the values that are on the store and the passive tracker. Eg: total coins held by accounts vs total supply tracker. +* `FullAppSimulation`: General simulation mode. Runs the chain and the specified operations for a given number of blocks. Tests that there're no `panics` on the simulation. It does also run invariant checks on every `Period` but they are not benchmarked. + +Each simulation must receive a set of inputs (_i.e_ flags) such as the number of +blocks that the simulation is run, seed, block size, etc. +Check the full list of flags [here](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/config.go#L32-L55). + +## Simulator Modes + +In addition to the various inputs and commands, the simulator runs in three modes: + +1. Completely random where the initial state, module parameters and simulation + parameters are **pseudo-randomly generated**. +2. From a `genesis.json` file where the initial state and the module parameters are defined. + This mode is helpful for running simulations on a known state such as a live network export where a new (mostly likely breaking) version of the application needs to be tested. +3. From a `params.json` file where the initial state is pseudo-randomly generated but the module and simulation parameters can be provided manually. + This allows for a more controlled and deterministic simulation setup while allowing the state space to still be pseudo-randomly simulated. + The list of available parameters are listed [here](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/config.go#L33-L57). + +::: tip +These modes are not mutually exclusive. So you can for example run a randomly +generated genesis state (`1`) with manually generated simulation params (`3`). +::: + +## Usage + +This is a general example of how simulations are run. For more specific examples +check the Cosmos SDK [Makefile](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/Makefile#L263-L299). + +```bash + $ go test -mod=readonly github.com/cosmos/cosmos-sdk/simapp \ + -run=TestApp \ + ... + -v -timeout 24h +``` + +## Debugging Tips + +Here are some suggestions when encountering a simulation failure: + +* Export the app state at the height where the failure was found. You can do this + by passing the `-ExportStatePath` flag to the simulator. +* Use `-Verbose` logs. They could give you a better hint on all the operations + involved. +* Reduce the simulation `-Period`. This will run the invariants checks more + frequently. +* Print all the failed invariants at once with `-PrintAllInvariants`. +* Try using another `-Seed`. If it can reproduce the same error and if it fails + sooner, you will spend less time running the simulations. +* Reduce the `-NumBlocks` . How's the app state at the height previous to the + failure? +* Run invariants on every operation with `-SimulateEveryOperation`. _Note_: this + will slow down your simulation **a lot**. +* Try adding logs to operations that are not logged. You will have to define a + [Logger](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/keeper/keeper.go#L60-L63) on your `Keeper`. + +## Use simulation in your Cosmos SDK-based application + +Learn how you can integrate the simulation into your Cosmos SDK-based application: + +* Application Simulation Manager +* [Building modules: Simulator](../building-modules/simulator.md) +* Simulator tests diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/14-proto-docs.md b/versioned_docs/version-0.46/develop/advanced-concepts/14-proto-docs.md new file mode 100644 index 000000000..8ea66828c --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/14-proto-docs.md @@ -0,0 +1,7 @@ + + +# Protobuf Documentation + +See [Cosmos-SDK Buf Proto-docs](https://buf.build/cosmos/cosmos-sdk/docs/main) diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/15-tips.md b/versioned_docs/version-0.46/develop/advanced-concepts/15-tips.md new file mode 100644 index 000000000..1f7ef11b8 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/15-tips.md @@ -0,0 +1,206 @@ + + +# Transaction Tips + +Transaction tips are a mechanism to pay for transaction fees using another denom than the native fee denom of the chain. They are still in beta, and are not included by default in the SDK. {synopsis} + +## Context + +In a Cosmos ecosystem where more and more chains are connected via [IBC](https://ibc.cosmos.network/), it happens that users want to perform actions on chains where they don't have native tokens yet. An example would be an Osmosis user who wants to vote on a proposal on the Cosmos Hub, but they don't have ATOMs in their wallet. A solution would be to swap OSMO for ATOM just for voting on this proposal, but that is cumbersome. Cross-chain DeFi project [Emeris](https://emeris.com/) is another use case. + +Transaction tips is a new solution for cross-chain transaction fees payment, whereby the transaction initiator signs a transaction without specifying fees, but uses a new `Tip` field. They send this signed transaction to a fee relayer who will choose the transaction fees and broadcast the final transaction, and the SDK provides a mechanism that will transfer the pre-defined `Tip` to the fee payer, to cover for fees. + +Assuming we have two chains, A and B, we define the following terms: + +* **the tipper**: this is the initiator of the transaction, who wants to execute a `Msg` on chain A, but doesn't have any native chain A tokens, only chain B tokens. In our example above, the tipper is the Osmosis (chain B) user wanting to vote on a Cosmos Hub (chain A) proposal. +* **the fee payer**: this is the party that will relay and broadcast the final transaction on chain A, and has chain A tokens. The tipper doesn't need to trust the feepayer. +* **the target chain**: the chain where the `Msg` is executed, chain A in this case. + +## Transaction Tips Flow + +The transaction tips flow happens in multiple steps. + +1. The tipper sends via IBC some chain B tokens to chain A. These tokens will cover for fees on the target chain A. This means that chain A's bank module holds some IBC tokens under the tipper's address. + +2. The tipper drafts a transaction to be executed on the chain A. It can include chain A `Msg`s. However, instead of creating a normal transaction, they create the following `AuxSignerData` document: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L230-L249 + +where we have defined `SignDocDirectAux` as: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L93 + +where `Tip` is defined as + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L219-L228 + +Notice that this document doesn't sign over the final chain A fees. Instead, it includes a `Tip` field. It also doesn't include the whole `AuthInfo` object as in `SIGN_MODE_DIRECT`, only the minimum information needed by the tipper + +3. The tipper signs the `SignDocDirectAux` document and attaches the signature to the `AuxSignerData`, then sends the signed `AuxSignerData` to the fee payer. + +4. From the signed `AuxSignerData` document, the fee payer constructs a transaction, using the following algorithm: + +* use as `TxBody` the exact `AuxSignerData.SignDocDirectAux.body_bytes`, to not alter the original intent of the tipper, +* create an `AuthInfo` with: + * `AuthInfo.Tip` copied from `AuxSignerData.SignDocDirectAux.Tip`, + * `AuthInfo.Fee` chosen by the fee payer, which should cover for the transaction gas, but also be small enough so that the tip/fee exchange rate is economically interesting for the fee payer, + * `AuthInfo.SignerInfos` has two signers: the first signer is the tipper, using the public key, sequence and sign mode specified in `AuxSignerData`; and the second signer is the fee payer, using their favorite sign mode, +* a `Signatures` array with two items: the tipper's signature from `AuxSignerData.Sig`, and the final fee payer's signature. + +5. Broadcast the final transaction signed by the two parties to the target chain. Once included, the Cosmos SDK will trigger a transfer of the `Tip` specified in the transaction from the tipper address to the fee payer address. + +### Fee Payers Market + +The benefit of transaction tips for the tipper is clear: there is no need to swap tokens before executing a cross-chain message. + +For the fee payer, the benefit is in the tip v.s. fee exchange. Put simply, the fee payer pays the fees of an unknown tipper's transaction, and gets in exchange the tip that the tipper chose. There is an economic incentive for the fee payer to do so only when the tip is greater than the transaction fees, given the exchange rates between the two tokens. + +In the future, we imagine a market where fee payers will compete to include transactions from tippers, who on their side will optimize by specifying the lowest tip possible. A number of automated services might spin up to perform transaction gas simulation and exchange rate monitoring to optimize both the tip and fee values in real-time. + +### Tipper and Fee Payer Sign Modes + +As we mentioned in the flow above, the tipper signs over the `SignDocDirectAux`, and the fee payer signs over the whole final transaction. As such, both parties might use different sign modes. + +* The tipper MUST use `SIGN_MODE_DIRECT_AUX` or `SIGN_MODE_LEGACY_AMINO_JSON`. That is because the tipper needs to sign over the body, the tip, but not the other signers' information and not over the fee (which is unknown to the tipper). +* The fee payer MUST use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. The fee payer signs over the whole transaction. + +For example, if the fee payer signs the whole transaction with `SIGN_MODE_DIRECT_AUX`, it will be rejected by the node, as that would introduce malleability issues (`SIGN_MODE_DIRECT_AUX` doesn't sign over fees). + +In both cases, using `SIGN_MODE_LEGACY_AMINO_JSON` is recommended only if hardware wallet signing is needed. + +## Enabling Tips on your Chain + +The transaction tips functionality is introduced in Cosmos SDK v0.46, so earlier versions do not have support for tips. It is however not included by default in a v0.46 app. Sending a transaction with tips to a chain which didn't enable tips will result in a no-op, i.e. the `tip` field in the transaction will be ignored. + +Enabling tips on a chain is done by adding the `TipDecorator` in the posthandler chain: + +```go +// HandlerOptions are the options required for constructing a SDK PostHandler which supports tips. +type HandlerOptions struct { + BankKeeper types.BankKeeper +} + +// MyPostHandler returns a posthandler chain with the TipDecorator. +func MyPostHandler(options HandlerOptions) (sdk.AnteHandler, error) { + if options.BankKeeper == nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for posthandler") + } + + postDecorators := []sdk.AnteDecorator{ + posthandler.NewTipDecorator(options.bankKeeper), + } + + return sdk.ChainAnteDecorators(postDecorators...), nil +} + +func (app *SimApp) setPostHandler() { + postHandler, err := MyPostHandler( + HandlerOptions{ + BankKeeper: app.BankKeeper, + }, + ) + if err != nil { + panic(err) + } + + app.SetPostHandler(postHandler) +} +``` + +Notice that `NewTipDecorator` needs a reference to the BankKeeper, for transferring the tip to the fee payer. + +## CLI Usage + +The Cosmos SDK also provides some CLI tooling for the transaction tips flow, both for the tipper and for the feepayer. + +For the tipper, the CLI `tx` subcommand has two new flags: `--aux` and `--tip`. The `--aux` flag is used to denote that we are creating an `AuxSignerData` instead of a `Tx`, and the `--tip` is used to populate its `Tip` field. + +```bash +$ simd tx gov vote 16 yes --from --aux --tip 50ibcdenom + + +### Prints the AuxSignerData as JSON: +### {"address":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2","sign_doc":{"body_bytes":"CosBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmsKLWNvc21vczFxMGF5ZjV2cTZmZDJ4eHJ3aDMwdXBnMDVoeGRueXcyaDUyNDlhMhItY29zbW9zMXdlNWoyZXI2MHV5OXF3YzBta3ptdGdtdHA5Z3F5NXY2bjhnZGdlGgsKBXN0YWtlEgIxMA==","public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AojOF/1luQ5H/nZDSrE1w3CyzGJhJdQuS7hFX5wAA6uJ"},"chain_id":"","account_number":"0","sequence":"1","tip":{"amount":[{"denom":"ibcdenom","amount":"50"}],"tipper":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2"}},"mode":"SIGN_MODE_DIRECT_AUX","sig":"v/d/bGq9FGdecs6faMG2t//nRirFTiqwFtUB65M6kh0QdUeM6jg3r8oJX1o17xkoDxJ09EyJiSyvo6fbU7vUxg=="} +``` + +It is useful to pipe the JSON output to a file, `> aux_signed_tx.json` + +For the fee payer, the Cosmos SDK added a `tx aux-to-fee` subcommand to include an `AuxSignerData` into a transaction, add fees to it, and broadcast it. + +```bash +$ simd tx aux-to-fee aux_signed_tx.json --from --fees 30atom + +### Prints the broadcasted tx response: +### code: 0 +### codespace: sdk +### data: "" +### events: [] +### gas_used: "0" +### gas_wanted: "0" +### height: "0" +### info: "" +### logs: [] +### timestamp: "" +### tx: null +``` + +Upon completion of the second command, the fee payer's balance will be down the `30atom` fees, and up the `50ibcdenom` tip. + +For both commands, the flag `--sign-mode=amino-json` is still available for hardware wallet signing. + +## Programmatic Usage + +For the tipper, the SDK exposes a new transaction builder, the `AuxTxBuilder`, for generating an `AuxSignerData`. The API of `AuxTxBuilder` is defined [in `client/tx`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/tx/aux_builder.go#L16), and can be used as follows: + +```go +// Note: there's no need to use clientCtx.TxConfig anymore. + +bldr := clienttx.NewAuxTxBuilder() +err := bldr.SetMsgs(msgs...) +bldr.SetAddress("cosmos1...") +bldr.SetMemo(...) +bldr.SetTip(...) +bldr.SetPubKey(...) +err := bldr.SetSignMode(...) // DIRECT_AUX or AMINO, or else error +// ... other setters are also available + +// Get the bytes to sign. +signBz, err := bldr.GetSignBytes() + +// Sign the bz using your favorite method. +sig, err := privKey.sign(signBz) + +// Set the signature +bldr.SetSig(sig) + +// Get the final auxSignerData to be sent to the fee payer +auxSignerData, err:= bldr.GetAuxSignerData() +``` + +For the fee payer, the SDK added a new method on the existing `TxBuilder` to import data from an `AuxSignerData`: + +```go +// get `auxSignerData` from tipper, see code snippet above. + +txBuilder := clientCtx.TxConfig.NewTxBuilder() +err := txBuilder.AddAuxSignerData(auxSignerData) +if err != nil { + return err +} + +// A lot of fields will be populated in txBuilder, such as its Msgs, tip +// memo, etc... + +// The fee payer choses the fee to set on the transaction. +txBuilder.SetFeePayer() +txBuilder.SetFeeAmount(...) +txBuilder.SetGasLimit(...) + +// Usual signing code +err = authclient.SignTx(...) +if err != nil { + return err +} +``` diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/16-upgrade.md b/versioned_docs/version-0.46/develop/advanced-concepts/16-upgrade.md new file mode 100644 index 000000000..bcccd4717 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/16-upgrade.md @@ -0,0 +1,160 @@ + + +# In-Place Store Migrations + +::: warning +Read and understand all the in-place store migration documentation before you run a migration on a live chain. +::: + +Upgrade your app modules smoothly with custom in-place store migration logic. {synopsis} + +The Cosmos SDK uses two methods to perform upgrades: + +* Exporting the entire application state to a JSON file using the `export` CLI command, making changes, and then starting a new binary with the changed JSON file as the genesis file. + +* Perform upgrades in place, which significantly decrease the upgrade time for chains with a larger state. Use the [Module Upgrade Guide](../building-modules/upgrade.md) to set up your application modules to take advantage of in-place upgrades. + +This document provides steps to use the In-Place Store Migrations upgrade method. + +## Tracking Module Versions + +Each module gets assigned a consensus version by the module developer. The consensus version serves as the breaking change version of the module. The Cosmos SDK keeps track of all module consensus versions in the x/upgrade `VersionMap` store. During an upgrade, the difference between the old `VersionMap` stored in state and the new `VersionMap` is calculated by the Cosmos SDK. For each identified difference, the module-specific migrations are run and the respective consensus version of each upgraded module is incremented. + +### Consensus Version + +The consensus version is defined on each app module by the module developer and serves as the breaking change version of the module. The consensus version informs the Cosmos SDK on which modules need to be upgraded. For example, if the bank module was version 2 and an upgrade introduces bank module 3, the Cosmos SDK upgrades the bank module and runs the "version 2 to 3" migration script. + +### Version Map + +The version map is a mapping of module names to consensus versions. The map is persisted to x/upgrade's state for use during in-place migrations. When migrations finish, the updated version map is persisted in the state. + +## Upgrade Handlers + +Upgrades use an `UpgradeHandler` to facilitate migrations. The `UpgradeHandler` functions implemented by the app developer must conform to the following function signature. These functions retrieve the `VersionMap` from x/upgrade's state and return the new `VersionMap` to be stored in x/upgrade after the upgrade. The diff between the two `VersionMap`s determines which modules need upgrading. + +```go +type UpgradeHandler func(ctx sdk.Context, plan Plan, fromVM VersionMap) (VersionMap, error) +``` + +Inside these functions, you must perform any upgrade logic to include in the provided `plan`. All upgrade handler functions must end with the following line of code: + +```go + return app.mm.RunMigrations(ctx, cfg, fromVM) +``` + +## Running Migrations + +Migrations are run inside of an `UpgradeHandler` using `app.mm.RunMigrations(ctx, cfg, vm)`. The `UpgradeHandler` functions describe the functionality to occur during an upgrade. The `RunMigration` function loops through the `VersionMap` argument and runs the migration scripts for all versions that are less than the versions of the new binary app module. After the migrations are finished, a new `VersionMap` is returned to persist the upgraded module versions to state. + +```go +cfg := module.NewConfigurator(...) +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // ... + // additional upgrade logic + // ... + + // returns a VersionMap with the updated module ConsensusVersions + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +To learn more about configuring migration scripts for your modules, see the [Module Upgrade Guide](../building-modules/upgrade.md). + +### Order Of Migrations + +By default, all migrations are run in module name alphabetical ascending order, except `x/auth` which is run last. The reason is state dependencies between x/auth and other modules (you can read more in [issue #10606](https://github.com/cosmos/cosmos-sdk/issues/10606)). + +If you want to change the order of migration, then you should call `app.mm.SetOrderMigrations(module1, module2, ...)` in your app.go file. The function will panic if you forget to include a module in the argument list. + +## Adding New Modules During Upgrades + +You can introduce entirely new modules to the application during an upgrade. New modules are recognized because they have not yet been registered in `x/upgrade`'s `VersionMap` store. In this case, `RunMigrations` calls the `InitGenesis` function from the corresponding module to set up its initial state. + +### Add StoreUpgrades for New Modules + +All chains preparing to run in-place store migrations will need to manually add store upgrades for new modules and then configure the store loader to apply those upgrades. This ensures that the new module's stores are added to the multistore before the migrations begin. + +```go +upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() +if err != nil { + panic(err) +} + +if upgradeInfo.Name == "my-plan" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + storeUpgrades := storetypes.StoreUpgrades{ + // add store upgrades for new modules + // Example: + // Added: []string{"foo", "bar"}, + // ... + } + + // configure store loader that checks if version == upgradeHeight and applies store upgrades + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) +} +``` + +## Genesis State + +When starting a new chain, the consensus version of each module MUST be saved to state during the application's genesis. To save the consensus version, add the following line to the `InitChainer` method in `app.go`: + +```diff +func (app *MyApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { + ... ++ app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) + ... +} +``` + +This information is used by the Cosmos SDK to detect when modules with newer versions are introduced to the app. + +For a new module `foo`, `InitGenesis` is called by `RunMigration` only when `foo` is registered in the module manager but it's not set in the `fromVM`. Therefore, if you want to skip `InitGenesis` when a new module is added to the app, then you should set its module version in `fromVM` to the module consensus version: + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // ... + + // Set foo's version to the latest ConsensusVersion in the VersionMap. + // This will skip running InitGenesis on Foo + fromVM[foo.ModuleName] = foo.AppModule{}.ConsensusVersion() + + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +### Overwriting Genesis Functions + +The Cosmos SDK offers modules that the application developer can import in their app. These modules often have an `InitGenesis` function already defined. + +You can write your own `InitGenesis` function for an imported module. To do this, manually trigger your custom genesis function in the upgrade handler. + +::: warning +You MUST manually set the consensus version in the version map passed to the `UpgradeHandler` function. Without this, the SDK will run the Module's existing `InitGenesis` code even if you triggered your custom function in the `UpgradeHandler`. +::: + +```go +import foo "github.com/my/module/foo" + +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // Register the consensus version in the version map + // to avoid the SDK from triggering the default + // InitGenesis function. + fromVM["foo"] = foo.AppModule{}.ConsensusVersion() + + // Run custom InitGenesis for foo + app.mm["foo"].InitGenesis(ctx, app.appCodec, myCustomGenesisState) + + return app.mm.RunMigrations(ctx, cfg, fromVM) +}) +``` + +## Syncing a Full Node to an Upgraded Blockchain + +You can sync a full node to an existing blockchain which has been upgraded using Cosmovisor + +To successfully sync, you must start with the initial binary that the blockchain started with at genesis. If all Software Upgrade Plans contain binary instruction, then you can run Cosmovisor with auto-download option to automatically handle downloading and switching to the binaries associated with each sequential upgrade. Otherwise, you need to manually provide all binaries to Cosmovisor. + +To learn more about Cosmovisor, see the [Cosmovisor Quick Start](../run-node/cosmovisor.md). diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/_category_.json b/versioned_docs/version-0.46/develop/advanced-concepts/_category_.json new file mode 100644 index 000000000..b2ac426fb --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Advanced Concepts", + "position": 2, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/keeper_dependencies.svg b/versioned_docs/version-0.46/develop/advanced-concepts/keeper_dependencies.svg new file mode 100644 index 000000000..bac9328e3 --- /dev/null +++ b/versioned_docs/version-0.46/develop/advanced-concepts/keeper_dependencies.svg @@ -0,0 +1,102 @@ +The dependencies between Keepers (Feb 2021)StakingDistributionSlashingEvidenceBankAuth/AccountGovMint \ No newline at end of file diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/README.md b/versioned_docs/version-0.46/develop/high-level-concepts/README.md new file mode 100644 index 000000000..3907f6e60 --- /dev/null +++ b/versioned_docs/version-0.46/develop/high-level-concepts/README.md @@ -0,0 +1,17 @@ + + +# Basics + +This repository contains reference documentation on the basic concepts of the Cosmos SDK. + +1. [Anatomy of a Cosmos SDK Application](./app-anatomy.md) +2. [Lifecycle of a transaction](./tx-lifecycle.md) +3. [Lifecycle of a query](./query-lifecycle.md) +4. [Accounts](./accounts.md) +5. [Gas and Fees](./gas-fees.md) + +After reading the basics, head on to the [Core Reference](../core/README.md) for more advanced material. diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/03-accounts.md b/versioned_docs/version-0.46/develop/high-level-concepts/accounts.md similarity index 83% rename from versioned_docs/version-0.46/develop/high-level-concepts/03-accounts.md rename to versioned_docs/version-0.46/develop/high-level-concepts/accounts.md index 15911cf5b..dde895cce 100644 --- a/versioned_docs/version-0.46/develop/high-level-concepts/03-accounts.md +++ b/versioned_docs/version-0.46/develop/high-level-concepts/accounts.md @@ -1,25 +1,18 @@ ---- -sidebar_position: 1 -dislayed_sidebar: developSidebar ---- + # Accounts -:::note Synopsis -This document describes the in-built account and public key system of the Cosmos SDK. -::: +This document describes the in-built account and public key system of the Cosmos SDK. {synopsis} -:::note +## Pre-requisite Readings -### Pre-requisite Readings - -* [Anatomy of a Cosmos SDK Application](00-overview-app.md) - -::: +* [Anatomy of a Cosmos SDK Application](./app-anatomy.md) {prereq} ## Account Definition -In the Cosmos SDK, an _account_ designates a pair of _public key_ `PubKey` and _private key_ `PrivKey`. The `PubKey` can be derived to generate various `Addresses`, which are used to identify users (among other parties) in the application. `Addresses` are also associated with [`message`s](../../integrate/building-modules/02-messages-and-queries.md#messages) to identify the sender of the `message`. The `PrivKey` is used to generate [digital signatures](#keys-accounts-addresses-and-signatures) to prove that an `Address` associated with the `PrivKey` approved of a given `message`. +In the Cosmos SDK, an _account_ designates a pair of _public key_ `PubKey` and _private key_ `PrivKey`. The `PubKey` can be derived to generate various `Addresses`, which are used to identify users (among other parties) in the application. `Addresses` are also associated with [`message`s](../building-modules/messages-and-queries.md#messages) to identify the sender of the `message`. The `PrivKey` is used to generate [digital signatures](#signatures) to prove that an `Address` associated with the `PrivKey` approved of a given `message`. For HD key derivation the Cosmos SDK uses a standard called [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). The BIP32 allows users to create an HD wallet (as specified in [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)) - a set of accounts derived from an initial secret seed. A seed is usually created from a 12- or 24-word mnemonic. A single seed can derive any number of `PrivKey`s using a one-way cryptographic function. Then, a `PubKey` can be derived from the `PrivKey`. Naturally, the mnemonic is the most sensitive information, as private keys can always be re-generated if the mnemonic is preserved. @@ -73,11 +66,11 @@ In the node, all data is stored using Protocol Buffers serialization. The Cosmos SDK supports the following digital key schemes for creating digital signatures: -* `secp256k1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256k1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256k1/secp256k1.go). -* `secp256r1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256r1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256r1/pubkey.go), -* `tm-ed25519`, as implemented in the [Cosmos SDK `crypto/keys/ed25519` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/ed25519/ed25519.go). This scheme is supported only for the consensus validation. +* `secp256k1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256k1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/crypto/keys/secp256k1/secp256k1.go). +* `secp256r1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256r1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/crypto/keys/secp256r1/pubkey.go), +* `tm-ed25519`, as implemented in the [Cosmos SDK `crypto/keys/ed25519` package](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/crypto/keys/ed25519/ed25519.go). This scheme is supported only for the consensus validation. -| | Address length in bytes | Public key length in bytes | Used for transaction authentication | Used for consensus (cometbft) | +| | Address length in bytes | Public key length in bytes | Used for transaction authentication | Used for consensus (tendermint) | | :----------: | :---------------------: | :------------------------: | :---------------------------------: | :-----------------------------: | | `secp256k1` | 20 | 33 | yes | no | | `secp256r1` | 32 | 33 | yes | no | @@ -95,9 +88,7 @@ Each account is identified using `Address` which is a sequence of bytes derived These types implement the `Address` interface: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L108-L124 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/address.go#L108-L125 Address construction algorithm is defined in [ADR-28](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-028-public-key-addresses.md). Here is the standard way to obtain an account address from a `pub` public key: @@ -110,9 +101,7 @@ Of note, the `Marshal()` and `Bytes()` method both return the same raw `[]byte` For user interaction, addresses are formatted using [Bech32](https://en.bitcoin.it/wiki/Bech32) and implemented by the `String` method. The Bech32 method is the only supported format to use when interacting with a blockchain. The Bech32 human-readable part (Bech32 prefix) is used to denote an address type. Example: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L281-L295 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/address.go#L272-L286 | | Address Bech32 Prefix | | ------------------ | --------------------- | @@ -124,9 +113,7 @@ https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L281-L295 Public keys in Cosmos SDK are defined by `cryptotypes.PubKey` interface. Since public keys are saved in a store, `cryptotypes.PubKey` extends the `proto.Message` interface: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/types/types.go#L8-L17 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/crypto/types/types.go#L8-L17 A compressed format is used for `secp256k1` and `secp256r1` serialization. @@ -136,33 +123,30 @@ A compressed format is used for `secp256k1` and `secp256r1` serialization. This prefix is followed by the `x`-coordinate. Public Keys are not used to reference accounts (or users) and in general are not used when composing transaction messages (with few exceptions: `MsgCreateValidator`, `Validator` and `Multisig` messages). -For user interactions, `PubKey` is formatted using Protobufs JSON ([ProtoMarshalJSON](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/json.go#L14-L34) function). Example: +For user interactions, `PubKey` is formatted using Protobufs JSON ([ProtoMarshalJSON](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/codec/json.go#L14-L34) function). Example: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/output.go#L23-L39 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/crypto/keyring/output.go#L23-L39 ## Keyring A `Keyring` is an object that stores and manages accounts. In the Cosmos SDK, a `Keyring` implementation follows the `Keyring` interface: -```go reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L54-L101 -``` ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/crypto/keyring/keyring.go#L54-L101 The default implementation of `Keyring` comes from the third-party [`99designs/keyring`](https://github.com/99designs/keyring) library. A few notes on the `Keyring` methods: -* `Sign(uid string, msg []byte) ([]byte, types.PubKey, error)` strictly deals with the signature of the `msg` bytes. You must prepare and encode the transaction into a canonical `[]byte` form. Because protobuf is not deterministic, it has been decided in [ADR-020](../../integrate/architecture/adr-020-protobuf-transaction-encoding.md) that the canonical `payload` to sign is the `SignDoc` struct, deterministically encoded using [ADR-027](../../integrate/architecture/adr-027-deterministic-protobuf-serialization.md). Note that signature verification is not implemented in the Cosmos SDK by default, it is deferred to the [`anteHandler`](../advanced-concepts/00-baseapp.md#antehandler). - -```protobuf reference -https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 -``` +* `Sign(uid string, msg []byte) ([]byte, types.PubKey, error)` strictly deals with the signature of the `msg` bytes. You must prepare and encode the transaction into a canonical `[]byte` form. Because protobuf is not deterministic, it has been decided in [ADR-020](../architecture/adr-020-protobuf-transaction-encoding.md) that the canonical `payload` to sign is the `SignDoc` struct, deterministically encoded using [ADR-027](../architecture/adr-027-deterministic-protobuf-serialization.md). Note that signature verification is not implemented in the Cosmos SDK by default, it is deferred to the [`anteHandler`](../core/baseapp.md#antehandler). + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 -* `NewAccount(uid, mnemonic, bip39Passphrase, hdPath string, algo SignatureAlgo) (*Record, error)` creates a new account based on the [`bip44 path`](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) and persists it on disk. The `PrivKey` is **never stored unencrypted**, instead it is [encrypted with a passphrase](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/armor.go) before being persisted. In the context of this method, the key type and sequence number refer to the segment of the BIP44 derivation path (for example, `0`, `1`, `2`, ...) that is used to derive a private and a public key from the mnemonic. Using the same mnemonic and derivation path, the same `PrivKey`, `PubKey` and `Address` is generated. The following keys are supported by the keyring: +* `NewAccount(uid, mnemonic, bip39Passphrase, hdPath string, algo SignatureAlgo) (*Record, error)` creates a new account based on the [`bip44 path`](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) and persists it on disk. The `PrivKey` is **never stored unencrypted**, instead it is [encrypted with a passphrase](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/crypto/armor.go) before being persisted. In the context of this method, the key type and sequence number refer to the segment of the BIP44 derivation path (for example, `0`, `1`, `2`, ...) that is used to derive a private and a public key from the mnemonic. Using the same mnemonic and derivation path, the same `PrivKey`, `PubKey` and `Address` is generated. The following keys are supported by the keyring: * `secp256k1` * `ed25519` * `ExportPrivKeyArmor(uid, encryptPassphrase string) (armor string, err error)` exports a private key in ASCII-armored encrypted format using the given passphrase. You can then either import the private key again into the keyring using the `ImportPrivKey(uid, armor, passphrase string)` function or decrypt it into a raw private key using the `UnarmorDecryptPrivKey(armorStr string, passphrase string)` function. + +## Next {hide} + +Learn about [gas and fees](./gas-fees.md) {hide} diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/app-anatomy.md b/versioned_docs/version-0.46/develop/high-level-concepts/app-anatomy.md new file mode 100644 index 000000000..91a01b8ad --- /dev/null +++ b/versioned_docs/version-0.46/develop/high-level-concepts/app-anatomy.md @@ -0,0 +1,256 @@ + + +# Anatomy of a Cosmos SDK Application + +This document describes the core parts of a Cosmos SDK application. Throughout the document, a placeholder application named `app` will be used. {synopsis} + +## Node Client + +The Daemon, or [Full-Node Client](../core/node.md), is the core process of a Cosmos SDK-based blockchain. Participants in the network run this process to initialize their state-machine, connect with other full-nodes and update their state-machine as new blocks come in. + +```text + ^ +-------------------------------+ ^ + | | | | + | | State-machine = Application | | + | | | | Built with Cosmos SDK + | | ^ + | | + | +----------- | ABCI | ----------+ v + | | + v | ^ + | | | | +Blockchain Node | | Consensus | | + | | | | + | +-------------------------------+ | Tendermint Core + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +The blockchain full-node presents itself as a binary, generally suffixed by `-d` for "daemon" (e.g. `appd` for `app` or `gaiad` for `gaia`). This binary is built by running a simple [`main.go`](../core/node.md#main-function) function placed in `./cmd/appd/`. This operation usually happens through the [Makefile](#dependencies-and-makefile). + +Once the main binary is built, the node can be started by running the [`start` command](../core/node.md#start-command). This command function primarily does three things: + +1. Create an instance of the state-machine defined in [`app.go`](#core-application-file). +2. Initialize the state-machine with the latest known state, extracted from the `db` stored in the `~/.app/data` folder. At this point, the state-machine is at height `appBlockHeight`. +3. Create and start a new Tendermint instance. Among other things, the node will perform a handshake with its peers. It will get the latest `blockHeight` from them, and replay blocks to sync to this height if it is greater than the local `appBlockHeight`. If `appBlockHeight` is `0`, the node is starting from genesis and Tendermint sends an `InitChain` message via the ABCI to the `app`, which triggers the [`InitChainer`](#initchainer). + +## Core Application File + +In general, the core of the state-machine is defined in a file called `app.go`. It mainly contains the **type definition of the application** and functions to **create and initialize it**. + +### Type Definition of the Application + +The first thing defined in `app.go` is the `type` of the application. It is generally comprised of the following parts: + +* **A reference to [`baseapp`](../core/baseapp.md).** The custom application defined in `app.go` is an extension of `baseapp`. When a transaction is relayed by Tendermint to the application, `app` uses `baseapp`'s methods to route them to the appropriate module. `baseapp` implements most of the core logic for the application, including all the [ABCI methods](https://docs.tendermint.com/master/spec/abci/abci.html) and the [routing logic](../core/baseapp.md#routing). +* **A list of store keys**. The [store](../core/store.md), which contains the entire state, is implemented as a [`multistore`](../core/store.md#multistore) (i.e. a store of stores) in the Cosmos SDK. Each module uses one or multiple stores in the multistore to persist their part of the state. These stores can be accessed with specific keys that are declared in the `app` type. These keys, along with the `keepers`, are at the heart of the [object-capabilities model](../core/ocap.md) of the Cosmos SDK. +* **A list of module's `keeper`s.** Each module defines an abstraction called [`keeper`](../building-modules/keeper.md), which handles reads and writes for this module's store(s). The `keeper`'s methods of one module can be called from other modules (if authorized), which is why they are declared in the application's type and exported as interfaces to other modules so that the latter can only access the authorized functions. +* **A reference to an [`appCodec`](../core/encoding.md).** The application's `appCodec` is used to serialize and deserialize data structures in order to store them, as stores can only persist `[]bytes`. The default codec is [Protocol Buffers](../core/encoding.md). +* **A reference to a [`legacyAmino`](../core/encoding.md) codec.** Some parts of the Cosmos SDK have not been migrated to use the `appCodec` above, and are still hardcoded to use Amino. Other parts explicity use Amino for backwards compatibility. For these reasons, the application still holds a reference to the legacy Amino codec. Please note that the Amino codec will be removed from the SDK in the upcoming releases. +* **A reference to a [module manager](../building-modules/module-manager.md#manager)** and a [basic module manager](../building-modules/module-manager.md#basicmanager). The module manager is an object that contains a list of the application's module. It facilitates operations related to these modules, like registering their [`Msg` service](../core/baseapp.md#msg-services) and [gRPC `Query` service](../core/baseapp.md#grpc-query-services), or setting the order of execution between modules for various functions like [`InitChainer`](#initchainer), [`BeginBlocker` and `EndBlocker`](#beginblocker-and-endblocker). + +See an example of application type definition from `simapp`, the Cosmos SDK's own app used for demo and testing purposes: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L151-L193 + +### Constructor Function + +This function constructs a new application of the type defined in the section above. It must fulfill the `AppCreator` signature in order to be used in the [`start` command](../core/node.md#start-command) of the application's daemon command. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/server/types/app.go#L57-L59 + +Here are the main actions performed by this function: + +* Instantiate a new [`codec`](../core/encoding.md) and initialize the `codec` of each of the application's module using the [basic manager](../building-modules/module-manager.md#basicmanager) +* Instantiate a new application with a reference to a `baseapp` instance, a codec and all the appropriate store keys. +* Instantiate all the [`keeper`s](#keeper) defined in the application's `type` using the `NewKeeper` function of each of the application's modules. Note that `keepers` must be instantiated in the correct order, as the `NewKeeper` of one module might require a reference to another module's `keeper`. +* Instantiate the application's [module manager](../building-modules/module-manager.md#manager) with the [`AppModule`](#application-module-interface) object of each of the application's modules. +* With the module manager, initialize the application's [`Msg` services](../core/baseapp.md#msg-services), [gRPC `Query` services](../core/baseapp.md#grpc-query-services), [legacy `Msg` routes](../core/baseapp.md#routing) and [legacy query routes](../core/baseapp.md#query-routing). When a transaction is relayed to the application by Tendermint via the ABCI, it is routed to the appropriate module's [`Msg` service](#msg-services) using the routes defined here. Likewise, when a gRPC query request is received by the application, it is routed to the appropriate module's [`gRPC query service`](#grpc-query-services) using the gRPC routes defined here. The Cosmos SDK still supports legacy `Msg`s and legacy Tendermint queries, which are routed using respectively the legacy `Msg` routes and the legacy query routes. +* With the module manager, register the [application's modules' invariants](../building-modules/invariants.md). Invariants are variables (e.g. total supply of a token) that are evaluated at the end of each block. The process of checking invariants is done via a special module called the [`InvariantsRegistry`](../building-modules/invariants.md#invariant-registry). The value of the invariant should be equal to a predicted value defined in the module. Should the value be different than the predicted one, special logic defined in the invariant registry will be triggered (usually the chain is halted). This is useful to make sure no critical bug goes unnoticed and produces long-lasting effects that would be hard to fix. +* With the module manager, set the order of execution between the `InitGenesis`, `BeginBlocker` and `EndBlocker` functions of each of the [application's modules](#application-module-interface). Note that not all modules implement these functions. +* Set the remainder of application's parameters: + * [`InitChainer`](#initchainer): used to initialize the application when it is first started. + * [`BeginBlocker`, `EndBlocker`](#beginblocker-and-endlbocker): called at the beginning and the end of every block). + * [`anteHandler`](../core/baseapp.md#antehandler): used to handle fees and signature verification. +* Mount the stores. +* Return the application. + +Note that this function only creates an instance of the app, while the actual state is either carried over from the `~/.app/data` folder if the node is restarted, or generated from the genesis file if the node is started for the first time. + +See an example of application constructor from `simapp`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L204-L474 + +### InitChainer + +The `InitChainer` is a function that initializes the state of the application from a genesis file (i.e. token balances of genesis accounts). It is called when the application receives the `InitChain` message from the Tendermint engine, which happens when the node is started at `appBlockHeight == 0` (i.e. on genesis). The application must set the `InitChainer` in its [constructor](#constructor-function) via the [`SetInitChainer`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/baseapp#BaseApp.SetInitChainer) method. + +In general, the `InitChainer` is mostly composed of the [`InitGenesis`](../building-modules/genesis.md#initgenesis) function of each of the application's modules. This is done by calling the `InitGenesis` function of the module manager, which in turn will call the `InitGenesis` function of each of the modules it contains. Note that the order in which the modules' `InitGenesis` functions must be called has to be set in the module manager using the [module manager's](../building-modules/module-manager.md) `SetOrderInitGenesis` method. This is done in the [application's constructor](#application-constructor), and the `SetOrderInitGenesis` has to be called before the `SetInitChainer`. + +See an example of an `InitChainer` from `simapp`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L524-L532 + +### BeginBlocker and EndBlocker + +The Cosmos SDK offers developers the possibility to implement automatic execution of code as part of their application. This is implemented through two function called `BeginBlocker` and `EndBlocker`. They are called when the application receives respectively the `BeginBlock` and `EndBlock` messages from the Tendermint engine, which happens at the beginning and at the end of each block. The application must set the `BeginBlocker` and `EndBlocker` in its [constructor](#constructor-function) via the [`SetBeginBlocker`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/baseapp#BaseApp.SetBeginBlocker) and [`SetEndBlocker`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/baseapp#BaseApp.SetEndBlocker) methods. + +In general, the `BeginBlocker` and `EndBlocker` functions are mostly composed of the [`BeginBlock` and `EndBlock`](../building-modules/beginblock-endblock.md) functions of each of the application's modules. This is done by calling the `BeginBlock` and `EndBlock` functions of the module manager, which in turn will call the `BeginBlock` and `EndBlock` functions of each of the modules it contains. Note that the order in which the modules' `BeginBlock` and `EndBlock` functions must be called has to be set in the module manager using the `SetOrderBeginBlockers` and `SetOrderEndBlockers` methods respectively. This is done via the [module manager](../building-modules/module-manager.md) in the [application's constructor](#application-constructor), and the `SetOrderBeginBlockers` and `SetOrderEndBlockers` methods have to be called before the `SetBeginBlocker` and `SetEndBlocker` functions. + +As a sidenote, it is important to remember that application-specific blockchains are deterministic. Developers must be careful not to introduce non-determinism in `BeginBlocker` or `EndBlocker`, and must also be careful not to make them too computationally expensive, as [gas](./gas-fees.md) does not constrain the cost of `BeginBlocker` and `EndBlocker` execution. + +See an example of `BeginBlocker` and `EndBlocker` functions from `simapp` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L514-L522 + +### Register Codec + +The `EncodingConfig` structure is the last important part of the `app.go` file. The goal of this structure is to define the codecs that will be used throughout the app. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/params/encoding.go#L9-L16 + +Here are descriptions of what each of the four fields means: + +* `InterfaceRegistry`: The `InterfaceRegistry` is used by the Protobuf codec to handle interfaces that are encoded and decoded (we also say "unpacked") using [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). `Any` could be thought as a struct that contains a `type_url` (name of a concrete type implementing the interface) and a `value` (its encoded bytes). `InterfaceRegistry` provides a mechanism for registering interfaces and implementations that can be safely unpacked from `Any`. Each of the application's modules implements the `RegisterInterfaces` method that can be used to register the module's own interfaces and implementations. + * You can read more about Any in [ADR-19](../architecture/adr-019-protobuf-state-encoding.md#usage-of-any-to-encode-interfaces). + * To go more into details, the Cosmos SDK uses an implementation of the Protobuf specification called [`gogoprotobuf`](https://github.com/gogo/protobuf). By default, the [gogo protobuf implementation of `Any`](https://pkg.go.dev/github.com/gogo/protobuf/types) uses [global type registration](https://github.com/gogo/protobuf/blob/master/proto/properties.go#L540) to decode values packed in `Any` into concrete Go types. This introduces a vulnerability where any malicious module in the dependency tree could register a type with the global protobuf registry and cause it to be loaded and unmarshaled by a transaction that referenced it in the `type_url` field. For more information, please refer to [ADR-019](../architecture/adr-019-protobuf-state-encoding.md). +* `Codec`: the default codec used throughout the Cosmos SDK. It is composed of a `BinaryCodec` used to encode and decode state, and a `JSONCodec` used to output data to the users (for example in the [CLI](#cli)). By default, the SDK uses Protobuf as `Codec`. +* `TxConfig`: `TxConfig` defines an interface a client can utilize to generate an application-defined concrete transaction type. Currently, the SDK handles two transaction types: `SIGN_MODE_DIRECT` (which uses Protobuf binary as over-the-wire encoding) and `SIGN_MODE_LEGACY_AMINO_JSON` (which depends on Amino). Read more about transactions [here](../core/transactions.md). +* `Amino`: Some legacy parts of the Cosmos SDK still use Amino for backwards-compatibility. Each module exposes a `RegisterLegacyAmino` method to register the module's specific types within Amino. This `Amino` codec should not be used by app developers anymore, and will be removed in future releases. + +The Cosmos SDK exposes a `MakeTestEncodingConfig` function used to create a `EncodingConfig` for the app constructor (`NewApp`). It uses Protobuf as a default `Codec`. + +NOTE: This function is deprecated and should only be used to create an app or in tests. + +See an example of a `MakeTestEncodingConfig` from `simapp`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/encoding.go#L8-L19 + +## Modules + +[Modules](../building-modules/intro.md) are the heart and soul of Cosmos SDK applications. They can be considered as state-machines nested within the state-machine. When a transaction is relayed from the underlying Tendermint engine via the ABCI to the application, it is routed by [`baseapp`](../core/baseapp.md) to the appropriate module in order to be processed. This paradigm enables developers to easily build complex state-machines, as most of the modules they need often already exist. **For developers, most of the work involved in building a Cosmos SDK application revolves around building custom modules required by their application that do not exist yet, and integrating them with modules that do already exist into one coherent application**. In the application directory, the standard practice is to store modules in the `x/` folder (not to be confused with the Cosmos SDK's `x/` folder, which contains already-built modules). + +### Application Module Interface + +Modules must implement [interfaces](../building-modules/module-manager.md#application-module-interfaces) defined in the Cosmos SDK, [`AppModuleBasic`](../building-modules/module-manager.md#appmodulebasic) and [`AppModule`](../building-modules/module-manager.md#appmodule). The former implements basic non-dependent elements of the module, such as the `codec`, while the latter handles the bulk of the module methods (including methods that require references to other modules' `keeper`s). Both the `AppModule` and `AppModuleBasic` types are, by convention, defined in a file called `module.go`. + +`AppModule` exposes a collection of useful methods on the module that facilitates the composition of modules into a coherent application. These methods are called from the [`module manager`](../building-modules/module-manager.md#manager), which manages the application's collection of modules. + +### `Msg` Services + +Each module defines two [Protobuf services](https://developers.google.com/protocol-buffers/docs/proto#services): one `Msg` service to handle messages, and one gRPC `Query` service to handle queries. If we consider the module as a state-machine, then a `Msg` service is a set of state transition RPC methods. +Each Protobuf `Msg` service method is 1:1 related to a Protobuf request type, which must implement `sdk.Msg` interface. +Note that `sdk.Msg`s are bundled in [transactions](../core/transactions.md), and each transaction contains one or multiple messages. + +When a valid block of transactions is received by the full-node, Tendermint relays each one to the application via [`DeliverTx`](https://docs.tendermint.com/master/spec/abci/apps.html#delivertx). Then, the application handles the transaction: + +1. Upon receiving the transaction, the application first unmarshalls it from `[]byte`. +2. Then, it verifies a few things about the transaction like [fee payment and signatures](./gas-fees.md#antehandler) before extracting the `Msg`(s) contained in the transaction. +3. `sdk.Msg`s are encoded using Protobuf [`Any`s](#register-codec). By analyzing each `Any`'s `type_url`, baseapp's `msgServiceRouter` routes the `sdk.Msg` to the corresponding module's `Msg` service. +4. If the message is successfully processed, the state is updated. + +For a more details look at a transaction [lifecycle](./tx-lifecycle.md). + +Module developers create custom `Msg` services when they build their own module. The general practice is to define the `Msg` Protobuf service in a `tx.proto` file. For example, the `x/bank` module defines a service with two methods to transfer tokens: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L12-L19 + +Service methods use `keeper` in order to update the module state. + +Each module should also implement the `RegisterServices` method as part of the [`AppModule` interface](#application-module-interface). This method should call the `RegisterMsgServer` function provided by the generated Protobuf code. + +### gRPC `Query` Services + +gRPC `Query` services allows users to query the state using [gRPC](https://grpc.io). They are enabled by default, and can be configured under the `grpc.enable` and `grpc.address` fields inside [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). + +gRPC `Query` services are defined in the module's Protobuf definition files, specifically inside `query.proto`. The `query.proto` definition file exposes a single `Query` [Protobuf service](https://developers.google.com/protocol-buffers/docs/proto#services). Each gRPC query endpoint corresponds to a service method, starting with the `rpc` keyword, inside the `Query` service. + +Protobuf generates a `QueryServer` interface for each module, containing all the service methods. A module's [`keeper`](#keeper) then needs to implement this `QueryServer` interface, by providing the concrete implementation of each service method. This concrete implementation is the handler of the corresponding gRPC query endpoint. + +Finally, each module should also implement the `RegisterServices` method as part of the [`AppModule` interface](#application-module-interface). This method should call the `RegisterQueryServer` function provided by the generated Protobuf code. + +### Keeper + +[`Keepers`](../building-modules/keeper.md) are the gatekeepers of their module's store(s). To read or write in a module's store, it is mandatory to go through one of its `keeper`'s methods. This is ensured by the [object-capabilities](../core/ocap.md) model of the Cosmos SDK. Only objects that hold the key to a store can access it, and only the module's `keeper` should hold the key(s) to the module's store(s). + +`Keepers` are generally defined in a file called `keeper.go`. It contains the `keeper`'s type definition and methods. + +The `keeper` type definition generally consists of: + +* **Key(s)** to the module's store(s) in the multistore. +* Reference to **other module's `keepers`**. Only needed if the `keeper` needs to access other module's store(s) (either to read or write from them). +* A reference to the application's **codec**. The `keeper` needs it to marshal structs before storing them, or to unmarshal them when it retrieves them, because stores only accept `[]bytes` as value. + +Along with the type definition, the next important component of the `keeper.go` file is the `keeper`'s constructor function, `NewKeeper`. This function instantiates a new `keeper` of the type defined above, with a `codec`, store `keys` and potentially references to other modules' `keeper`s as parameters. The `NewKeeper` function is called from the [application's constructor](#constructor-function). The rest of the file defines the `keeper`'s methods, primarily getters and setters. + +### Command-Line, gRPC Services and REST Interfaces + +Each module defines command-line commands, gRPC services and REST routes to be exposed to end-user via the [application's interfaces](#application-interfaces). This enables end-users to create messages of the types defined in the module, or to query the subset of the state managed by the module. + +#### CLI + +Generally, the [commands related to a module](../building-modules/module-interfaces.md#cli) are defined in a folder called `client/cli` in the module's folder. The CLI divides commands in two category, transactions and queries, defined in `client/cli/tx.go` and `client/cli/query.go` respectively. Both commands are built on top of the [Cobra Library](https://github.com/spf13/cobra): + +* Transactions commands let users generate new transactions so that they can be included in a block and eventually update the state. One command should be created for each [message type](#message-types) defined in the module. The command calls the constructor of the message with the parameters provided by the end-user, and wraps it into a transaction. The Cosmos SDK handles signing and the addition of other transaction metadata. +* Queries let users query the subset of the state defined by the module. Query commands forward queries to the [application's query router](../core/baseapp.md#query-routing), which routes them to the appropriate [querier](#querier) the `queryRoute` parameter supplied. + +#### gRPC + +[gRPC](https://grpc.io) is a modern open-source high performance RPC framework that has support in multiple languages. It is the recommended way for external clients (such as wallets, browsers and other backend services) to interact with a node. + +Each module can expose gRPC endpoints, called [service methods](https://grpc.io/docs/what-is-grpc/core-concepts/#service-definition) and are defined in the [module's Protobuf `query.proto` file](#grpc-query-services). A service method is defined by its name, input arguments and output response. The module then needs to: + +* define a `RegisterGRPCGatewayRoutes` method on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. +* for each service method, define a corresponding handler. The handler implements the core logic necessary to serve the gRPC request, and is located in the `keeper/grpc_query.go` file. + +#### gRPC-gateway REST Endpoints + +Some external clients may not wish to use gRPC. The Cosmos SDK provides in this case a gRPC gateway service, which exposes each gRPC service as a correspoding REST endpoint. Please refer to the [grpc-gateway](https://grpc-ecosystem.github.io/grpc-gateway/) documentation to learn more. + +The REST endpoints are defined in the Protobuf files, along with the gRPC services, using Protobuf annotations. Modules that want to expose REST queries should add `google.api.http` annotations to their `rpc` methods. By default, all REST endpoints defined in the SDK have an URL starting with the `/cosmos/` prefix. + +The Cosmos SDK also provides a development endpoint to generate [Swagger](https://swagger.io/) definition files for these REST endpoints. This endpoint can be enabled inside the [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) config file, under the `api.swagger` key. + +## Application Interface + +[Interfaces](#command-line-grpc-services-and-rest-interfaces) let end-users interact with full-node clients. This means querying data from the full-node or creating and sending new transactions to be relayed by the full-node and eventually included in a block. + +The main interface is the [Command-Line Interface](../core/cli.md). The CLI of a Cosmos SDK application is built by aggregating [CLI commands](#cli) defined in each of the modules used by the application. The CLI of an application is the same as the daemon (e.g. `appd`), and defined in a file called `appd/main.go`. The file contains: + +* **A `main()` function**, which is executed to build the `appd` interface client. This function prepares each command and adds them to the `rootCmd` before building them. At the root of `appd`, the function adds generic commands like `status`, `keys` and `config`, query commands, tx commands and `rest-server`. +* **Query commands** are added by calling the `queryCmd` function. This function returns a Cobra command that contains the query commands defined in each of the application's modules (passed as an array of `sdk.ModuleClients` from the `main()` function), as well as some other lower level query commands such as block or validator queries. Query command are called by using the command `appd query [query]` of the CLI. +* **Transaction commands** are added by calling the `txCmd` function. Similar to `queryCmd`, the function returns a Cobra command that contains the tx commands defined in each of the application's modules, as well as lower level tx commands like transaction signing or broadcasting. Tx commands are called by using the command `appd tx [tx]` of the CLI. + +See an example of an application's main command-line file from the [Cosmos Hub](https://github.com/cosmos/gaia) + ++++ https://github.com/cosmos/gaia/blob/Theta-main/cmd/gaiad/cmd/root.go#L39-L77 + +## Dependencies and Makefile + +::: warning +A patch introduced in `go-grpc v1.34.0` made gRPC incompatible with the `gogoproto` library, making some [gRPC queries](https://github.com/cosmos/cosmos-sdk/issues/8426) panic. As such, the Cosmos SDK requires that `go-grpc <=v1.33.2` is installed in your `go.mod`. + +To make sure that gRPC is working properly, it is **highly recommended** to add the following line in your application's `go.mod`: + +```go +replace google.golang.org/grpc => google.golang.org/grpc v1.33.2 +``` + +Please see [issue #8392](https://github.com/cosmos/cosmos-sdk/issues/8392) for more info. +::: + +This section is optional, as developers are free to choose their dependency manager and project building method. That said, the current most used framework for versioning control is [`go.mod`](https://github.com/golang/go/wiki/Modules). It ensures each of the libraries used throughout the application are imported with the correct version. + +Below, the `go.mod` of the [Cosmos Hub](https://github.com/cosmos/gaia) is provided as an example. + ++++ https://github.com/cosmos/gaia/blob/Theta-main/go.mod#L1-L20 + +For building the application, a [Makefile](https://en.wikipedia.org/wiki/Makefile) is generally used. The Makefile primarily ensures that the `go.mod` is run before building the two entrypoints to the application, [`appd`](#node-client) and [`appd`](#application-interface). + +Here is an example of the [Cosmos Hub Makefile](https://github.com/cosmos/gaia/blob/Theta-main/Makefile). + +## Next {hide} + +Learn more about the [Lifecycle of a transaction](./tx-lifecycle.md) {hide} diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/gas-fees.md b/versioned_docs/version-0.46/develop/high-level-concepts/gas-fees.md new file mode 100644 index 000000000..b49bc8a97 --- /dev/null +++ b/versioned_docs/version-0.46/develop/high-level-concepts/gas-fees.md @@ -0,0 +1,85 @@ + + +# Gas and Fees + +This document describes the default strategies to handle gas and fees within a Cosmos SDK application. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](./app-anatomy.md) {prereq} + +## Introduction to `Gas` and `Fees` + +In the Cosmos SDK, `gas` is a special unit that is used to track the consumption of resources during execution. `gas` is typically consumed whenever read and writes are made to the store, but it can also be consumed if expensive computation needs to be done. It serves two main purposes: + +* Make sure blocks are not consuming too many resources and will be finalized. This is implemented by default in the Cosmos SDK via the [block gas meter](#block-gas-meter). +* Prevent spam and abuse from end-user. To this end, `gas` consumed during [`message`](../building-modules/messages-and-queries.md#messages) execution is typically priced, resulting in a `fee` (`fees = gas * gas-prices`). `fees` generally have to be paid by the sender of the `message`. Note that the Cosmos SDK does not enforce `gas` pricing by default, as there may be other ways to prevent spam (e.g. bandwidth schemes). Still, most applications will implement `fee` mechanisms to prevent spam. This is done via the [`AnteHandler`](#antehandler). + +## Gas Meter + +In the Cosmos SDK, `gas` is a simple alias for `uint64`, and is managed by an object called a _gas meter_. Gas meters implement the `GasMeter` interface + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/store/types/gas.go#L40-L51 + +where: + +* `GasConsumed()` returns the amount of gas that was consumed by the gas meter instance. +* `GasConsumedToLimit()` returns the amount of gas that was consumed by gas meter instance, or the limit if it is reached. +* `GasRemaining()` returns the gas left in the GasMeter. +* `Limit()` returns the limit of the gas meter instance. `0` if the gas meter is infinite. +* `ConsumeGas(amount Gas, descriptor string)` consumes the amount of `gas` provided. If the `gas` overflows, it panics with the `descriptor` message. If the gas meter is not infinite, it panics if `gas` consumed goes above the limit. +* `RefundGas()` deducts the given amount from the gas consumed. This functionality enables refunding gas to the transaction or block gas pools so that EVM-compatible chains can fully support the go-ethereum StateDB interface. +* `IsPastLimit()` returns `true` if the amount of gas consumed by the gas meter instance is strictly above the limit, `false` otherwise. +* `IsOutOfGas()` returns `true` if the amount of gas consumed by the gas meter instance is above or equal to the limit, `false` otherwise. + +The gas meter is generally held in [`ctx`](../core/context.md), and consuming gas is done with the following pattern: + +```go +ctx.GasMeter().ConsumeGas(amount, "description") +``` + +By default, the Cosmos SDK makes use of two different gas meters, the [main gas meter](#main-gas-metter) and the [block gas meter](#block-gas-meter). + +### Main Gas Meter + +`ctx.GasMeter()` is the main gas meter of the application. The main gas meter is initialized in `BeginBlock` via `setDeliverState`, and then tracks gas consumption during execution sequences that lead to state-transitions, i.e. those originally triggered by [`BeginBlock`](../core/baseapp.md#beginblock), [`DeliverTx`](../core/baseapp.md#delivertx) and [`EndBlock`](../core/baseapp.md#endblock). At the beginning of each `DeliverTx`, the main gas meter **must be set to 0** in the [`AnteHandler`](#antehandler), so that it can track gas consumption per-transaction. + +Gas consumption can be done manually, generally by the module developer in the [`BeginBlocker`, `EndBlocker`](../building-modules/beginblock-endblock.md) or [`Msg` service](../building-modules/msg-services.md), but most of the time it is done automatically whenever there is a read or write to the store. This automatic gas consumption logic is implemented in a special store called [`GasKv`](../core/store.md#gaskv-store). + +### Block Gas Meter + +`ctx.BlockGasMeter()` is the gas meter used to track gas consumption per block and make sure it does not go above a certain limit. A new instance of the `BlockGasMeter` is created each time [`BeginBlock`](../core/baseapp.md#beginblock) is called. The `BlockGasMeter` is finite, and the limit of gas per block is defined in the application's consensus parameters. By default, Cosmos SDK applications use the default consensus parameters provided by Tendermint: + ++++ https://github.com/tendermint/tendermint/blob/v0.35.4/types/params.go#L78-L117 + +When a new [transaction](../core/transactions.md) is being processed via `DeliverTx`, the current value of `BlockGasMeter` is checked to see if it is above the limit. If it is, `DeliverTx` returns immediately. This can happen even with the first transaction in a block, as `BeginBlock` itself can consume gas. If not, the transaction is processed normally. At the end of `DeliverTx`, the gas tracked by `ctx.BlockGasMeter()` is increased by the amount consumed to process the transaction: + +```go +ctx.BlockGasMeter().ConsumeGas( + ctx.GasMeter().GasConsumedToLimit(), + "block gas meter", +) +``` + +## AnteHandler + +The `AnteHandler` is run for every transaction during `CheckTx` and `DeliverTx`, before a Protobuf `Msg` service method for each `sdk.Msg` in the transaction. + +The anteHandler is not implemented in the core Cosmos SDK but in a module. That said, most applications today use the default implementation defined in the [`auth` module](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth). Here is what the `anteHandler` is intended to do in a normal Cosmos SDK application: + +* Verify that the transactions are of the correct type. Transaction types are defined in the module that implements the `anteHandler`, and they follow the transaction interface: + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/tx_msg.go#L38-L46 + This enables developers to play with various types for the transaction of their application. In the default `auth` module, the default transaction type is `Tx`: + +++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 +* Verify signatures for each [`message`](../building-modules/messages-and-queries.md#messages) contained in the transaction. Each `message` should be signed by one or multiple sender(s), and these signatures must be verified in the `anteHandler`. +* During `CheckTx`, verify that the gas prices provided with the transaction is greater than the local `min-gas-prices` (as a reminder, gas-prices can be deducted from the following equation: `fees = gas * gas-prices`). `min-gas-prices` is a parameter local to each full-node and used during `CheckTx` to discard transactions that do not provide a minimum amount of fees. This ensures that the mempool cannot be spammed with garbage transactions. +* Verify that the sender of the transaction has enough funds to cover for the `fees`. When the end-user generates a transaction, they must indicate 2 of the 3 following parameters (the third one being implicit): `fees`, `gas` and `gas-prices`. This signals how much they are willing to pay for nodes to execute their transaction. The provided `gas` value is stored in a parameter called `GasWanted` for later use. +* Set `newCtx.GasMeter` to 0, with a limit of `GasWanted`. **This step is crucial**, as it not only makes sure the transaction cannot consume infinite gas, but also that `ctx.GasMeter` is reset in-between each `DeliverTx` (`ctx` is set to `newCtx` after `anteHandler` is run, and the `anteHandler` is run each time `DeliverTx` is called). + +As explained above, the `anteHandler` returns a maximum limit of `gas` the transaction can consume during execution called `GasWanted`. The actual amount consumed in the end is denominated `GasUsed`, and we must therefore have `GasUsed =< GasWanted`. Both `GasWanted` and `GasUsed` are relayed to the underlying consensus engine when [`DeliverTx`](../core/baseapp.md#delivertx) returns. + +## Next {hide} + +Learn about [baseapp](../core/baseapp.md) {hide} diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/query-lifecycle.md b/versioned_docs/version-0.46/develop/high-level-concepts/query-lifecycle.md new file mode 100644 index 000000000..80b492f57 --- /dev/null +++ b/versioned_docs/version-0.46/develop/high-level-concepts/query-lifecycle.md @@ -0,0 +1,138 @@ + + +# Query Lifecycle + +This document describes the lifecycle of a query in a Cosmos SDK application, from the user interface to application stores and back. {synopsis} + +## Pre-requisite Readings + +* [Transaction Lifecycle](./tx-lifecycle.md) {prereq} + +## Query Creation + +A [**query**](../building-modules/messages-and-queries.md#queries) is a request for information made by end-users of applications through an interface and processed by a full-node. Users can query information about the network, the application itself, and application state directly from the application's stores or modules. Note that queries are different from [transactions](../core/transactions.md) (view the lifecycle [here](./tx-lifecycle.md)), particularly in that they do not require consensus to be processed (as they do not trigger state-transitions); they can be fully handled by one full-node. + +For the purpose of explaining the query lifecycle, let's say `MyQuery` is requesting a list of delegations made by a certain delegator address in the application called `simapp`. As to be expected, the [`staking`](../../x/staking/spec/README.md) module handles this query. But first, there are a few ways `MyQuery` can be created by users. + +### CLI + +The main interface for an application is the command-line interface. Users connect to a full-node and run the CLI directly from their machines - the CLI interacts directly with the full-node. To create `MyQuery` from their terminal, users type the following command: + +```bash +simd query staking delegations +``` + +This query command was defined by the [`staking`](../../x/staking/spec/README.md) module developer and added to the list of subcommands by the application developer when creating the CLI. + +Note that the general format is as follows: + +```bash +simd query [moduleName] [command] --flag +``` + +To provide values such as `--node` (the full-node the CLI connects to), the user can use the [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) config file to set them or provide them as flags. + +The CLI understands a specific set of commands, defined in a hierarchical structure by the application developer: from the [root command](../core/cli.md#root-command) (`simd`), the type of command (`Myquery`), the module that contains the command (`staking`), and command itself (`delegations`). Thus, the CLI knows exactly which module handles this command and directly passes the call there. + +Another interface through which users can make queries is [gRPC](https://grpc.io) requests to a [gRPC server](../core/grpc_rest.md#grpc-server). The endpoints are defined as [Protocol Buffers](https://developers.google.com/protocol-buffers) service methods inside `.proto` files, written in Protobuf's own language-agnostic interface definition language (IDL). The Protobuf ecosystem developed tools for code-generation from `*.proto` files into various languages. These tools allow to build gRPC clients easily. + +One such tool is [grpcurl](https://github.com/fullstorydev/grpcurl), and a gRPC request for `MyQuery` using this client looks like: + +```bash +grpcurl \ + -plaintext # We want results in plain test + -import-path ./proto \ # Import these .proto files + -proto ./proto/cosmos/staking/v1beta1/query.proto \ # Look into this .proto file for the Query protobuf service + -d '{"address":"$MY_DELEGATOR"}' \ # Query arguments + localhost:9090 \ # gRPC server endpoint + cosmos.staking.v1beta1.Query/Delegations # Fully-qualified service method name +``` + +### REST + +Another interface through which users can make queries is through HTTP Requests to a [REST server](../core/grpc_rest.md#rest-server). The REST server is fully auto-generated from Protobuf services, using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). + +An example HTTP request for `MyQuery` looks like: + +```bash +GET http://localhost:1317/cosmos/staking/v1beta1/delegators/{delegatorAddr}/delegations +``` + +## How Queries are Handled by the CLI + +The examples above show how an external user can interact with a node by querying its state. To understand more in details the exact lifecycle of a query, let's dig into how the CLI prepares the query, and how the node handles it. The interactions from the users' perspective are a bit different, but the underlying functions are almost identical because they are implementations of the same command defined by the module developer. This step of processing happens within the CLI, gRPC or REST server and heavily involves a `client.Context`. + +### Context + +The first thing that is created in the execution of a CLI command is a `client.Context`. A `client.Context` is an object that stores all the data needed to process a request on the user side. In particular, a `client.Context` stores the following: + +* **Codec**: The [encoder/decoder](../core/encoding.md) used by the application, used to marshal the parameters and query before making the Tendermint RPC request and unmarshal the returned response into a JSON object. The default codec used by the CLI is Protobuf. +* **Account Decoder**: The account decoder from the [`auth`](../../x/auth/spec/README.md) module, which translates `[]byte`s into accounts. +* **RPC Client**: The Tendermint RPC Client, or node, to which the request will be relayed to. +* **Keyring**: A [Key Manager](../basics/accounts.md#keyring) used to sign transactions and handle other operations with keys. +* **Output Writer**: A [Writer](https://pkg.go.dev/io/#Writer) used to output the response. +* **Configurations**: The flags configured by the user for this command, including `--height`, specifying the height of the blockchain to query and `--indent`, which indicates to add an indent to the JSON response. + +The `client.Context` also contains various functions such as `Query()` which retrieves the RPC Client and makes an ABCI call to relay a query to a full-node. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/context.go#L25-L63 + +The `client.Context`'s primary role is to store data used during interactions with the end-user and provide methods to interact with this data - it is used before and after the query is processed by the full-node. Specifically, in handling `MyQuery`, the `client.Context` is utilized to encode the query parameters, retrieve the full-node, and write the output. Prior to being relayed to a full-node, the query needs to be encoded into a `[]byte` form, as full-nodes are application-agnostic and do not understand specific types. The full-node (RPC Client) itself is retrieved using the `client.Context`, which knows which node the user CLI is connected to. The query is relayed to this full-node to be processed. Finally, the `client.Context` contains a `Writer` to write output when the response is returned. These steps are further described in later sections. + +### Arguments and Route Creation + +At this point in the lifecycle, the user has created a CLI command with all of the data they wish to include in their query. A `client.Context` exists to assist in the rest of the `MyQuery`'s journey. Now, the next step is to parse the command or request, extract the arguments, and encode everything. These steps all happen on the user side within the interface they are interacting with. + +#### Encoding + +In our case (querying an address's delegations), `MyQuery` contains an [address](./accounts.md#addresses) `delegatorAddress` as its only argument. However, the request can only contain `[]byte`s, as it will be relayed to a consensus engine (e.g. Tendermint Core) of a full-node that has no inherent knowledge of the application types. Thus, the `codec` of `client.Context` is used to marshal the address. + +Here is what the code looks like for the CLI command: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/client/cli/query.go#L323-L326 + +#### gRPC Query Client Creation + +The Cosmos SDK leverages code generated from Protobuf services to make queries. The `staking` module's `MyQuery` service generates a `queryClient`, which the CLI will use to make queries. Here is the relevant code: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/client/cli/query.go#L317-L341 + +Under the hood, the `client.Context` has a `Query()` function used to retrieve the pre-configured node and relay a query to it; the function takes the query fully-qualified service method name as path (in our case: `/cosmos.staking.v1beta1.Query/Delegations`), and arguments as parameters. It first retrieves the RPC Client (called the [**node**](../core/node.md)) configured by the user to relay this query to, and creates the `ABCIQueryOptions` (parameters formatted for the ABCI call). The node is then used to make the ABCI call, `ABCIQueryWithOptions()`. + +Here is what the code looks like: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/query.go#L80-L114 + +## RPC + +With a call to `ABCIQueryWithOptions()`, `MyQuery` is received by a [full-node](../core/encoding.md) which will then process the request. Note that, while the RPC is made to the consensus engine (e.g. Tendermint Core) of a full-node, queries are not part of consensus and will not be broadcasted to the rest of the network, as they do not require anything the network needs to agree upon. + +Read more about ABCI Clients and Tendermint RPC in the [Tendermint documentation](https://docs.tendermint.com/master/rpc/). + +## Application Query Handling + +When a query is received by the full-node after it has been relayed from the underlying consensus engine, it is now being handled within an environment that understands application-specific types and has a copy of the state. [`baseapp`](../core/baseapp.md) implements the ABCI [`Query()`](../core/baseapp.md#query) function and handles gRPC queries. The query route is parsed, and it matches the fully-qualified service method name of an existing service method (most likely in one of the modules), then `baseapp` will relay the request to the relevant module. + +Apart from gRPC routes, `baseapp` also handles four different types of queries: `app`, `store`, `p2p`, and `custom`. The first three types (`app`, `store`, `p2p`) are purely application-level and thus directly handled by `baseapp` or the stores, but the `custom` query type requires `baseapp` to route the query to a module's [legacy queriers](../building-modules/query-services.md#legacy-queriers). To learn more about these queries, please refer to [this guide](../core/grpc_rest.md#tendermint-rpc). + +Since `MyQuery` has a Protobuf fully-qualified service method name from the `staking` module (recall `/cosmos.staking.v1beta1.Query/Delegations`), `baseapp` first parses the path, then uses its own internal `GRPCQueryRouter` to retrieve the corresponding gRPC handler, and routes the query to the module. The gRPC handler is responsible for recognizing this query, retrieving the appropriate values from the application's stores, and returning a response. Read more about query services [here](../building-modules/query-services.md). + +Once a result is received from the querier, `baseapp` begins the process of returning a response to the user. + +## Response + +Since `Query()` is an ABCI function, `baseapp` returns the response as an [`abci.ResponseQuery`](https://docs.tendermint.com/master/spec/abci/abci.html#query-2) type. The `client.Context` `Query()` routine receives the response and. + +### CLI Response + +The application [`codec`](../core/encoding.md) is used to unmarshal the response to a JSON and the `client.Context` prints the output to the command line, applying any configurations such as the output type (text, JSON or YAML). + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/context.go#L315-L343 + +And that's a wrap! The result of the query is outputted to the console by the CLI. + +## Next {hide} + +Read more about [accounts](./accounts.md). {hide} diff --git a/versioned_docs/version-0.46/develop/high-level-concepts/tx-lifecycle.md b/versioned_docs/version-0.46/develop/high-level-concepts/tx-lifecycle.md new file mode 100644 index 000000000..efb59e1a0 --- /dev/null +++ b/versioned_docs/version-0.46/develop/high-level-concepts/tx-lifecycle.md @@ -0,0 +1,257 @@ + + +# Transaction Lifecycle + +This document describes the lifecycle of a transaction from creation to committed state changes. Transaction definition is described in a [different doc](../core/transactions.md). The transaction will be referred to as `Tx`. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](./app-anatomy.md) {prereq} + +## Creation + +### Transaction Creation + +One of the main application interfaces is the command-line interface. The transaction `Tx` can be created by the user inputting a command in the following format from the [command-line](../core/cli.md), providing the type of transaction in `[command]`, arguments in `[args]`, and configurations such as gas prices in `[flags]`: + +```bash +[appname] tx [command] [args] [flags] +``` + +This command will automatically **create** the transaction, **sign** it using the account's private key, and **broadcast** it to the specified peer node. + +There are several required and optional flags for transaction creation. The `--from` flag specifies which [account](./accounts.md) the transaction is originating from. For example, if the transaction is sending coins, the funds will be drawn from the specified `from` address. + +#### Gas and Fees + +Additionally, there are several [flags](../core/cli.md) users can use to indicate how much they are willing to pay in [fees](./gas-fees.md): + +* `--gas` refers to how much [gas](./gas-fees.md), which represents computational resources, `Tx` consumes. Gas is dependent on the transaction and is not precisely calculated until execution, but can be estimated by providing `auto` as the value for `--gas`. +* `--gas-adjustment` (optional) can be used to scale `gas` up in order to avoid underestimating. For example, users can specify their gas adjustment as 1.5 to use 1.5 times the estimated gas. +* `--gas-prices` specifies how much the user is willing to pay per unit of gas, which can be one or multiple denominations of tokens. For example, `--gas-prices=0.025uatom, 0.025upho` means the user is willing to pay 0.025uatom AND 0.025upho per unit of gas. +* `--fees` specifies how much in fees the user is willing to pay in total. +* `--timeout-height` specifies a block timeout height to prevent the tx from being committed past a certain height. + +The ultimate value of the fees paid is equal to the gas multiplied by the gas prices. In other words, `fees = ceil(gas * gasPrices)`. Thus, since fees can be calculated using gas prices and vice versa, the users specify only one of the two. + +Later, validators decide whether or not to include the transaction in their block by comparing the given or calculated `gas-prices` to their local `min-gas-prices`. `Tx` will be rejected if its `gas-prices` is not high enough, so users are incentivized to pay more. + +#### CLI Example + +Users of the application `app` can enter the following command into their CLI to generate a transaction to send 1000uatom from a `senderAddress` to a `recipientAddress`. It specifies how much gas they are willing to pay: an automatic estimate scaled up by 1.5 times, with a gas price of 0.025uatom per unit gas. + +```bash +appd tx send 1000uatom --from --gas auto --gas-adjustment 1.5 --gas-prices 0.025uatom +``` + +#### Other Transaction Creation Methods + +The command-line is an easy way to interact with an application, but `Tx` can also be created using a [gRPC or REST interface](../core/grpc_rest.md) or some other entry point defined by the application developer. From the user's perspective, the interaction depends on the web interface or wallet they are using (e.g. creating `Tx` using [Lunie.io](https://lunie.io/#/) and signing it with a Ledger Nano S). + +## Addition to Mempool + +Each full-node (running Tendermint) that receives a `Tx` sends an [ABCI message](https://docs.tendermint.com/master/spec/abci/abci.html#messages), +`CheckTx`, to the application layer to check for validity, and receives an `abci.ResponseCheckTx`. If the `Tx` passes the checks, it is held in the nodes' +[**Mempool**](https://docs.tendermint.com/master/tendermint-core/mempool/), an in-memory pool of transactions unique to each node, pending inclusion in a block - honest nodes will discard `Tx` if it is found to be invalid. Prior to consensus, nodes continuously check incoming transactions and gossip them to their peers. + +### Types of Checks + +The full-nodes perform stateless, then stateful checks on `Tx` during `CheckTx`, with the goal to +identify and reject an invalid transaction as early on as possible to avoid wasted computation. + +**_Stateless_** checks do not require nodes to access state - light clients or offline nodes can do +them - and are thus less computationally expensive. Stateless checks include making sure addresses +are not empty, enforcing nonnegative numbers, and other logic specified in the definitions. + +**_Stateful_** checks validate transactions and messages based on a committed state. Examples +include checking that the relevant values exist and can be transacted with, the address +has sufficient funds, and the sender is authorized or has the correct ownership to transact. +At any given moment, full-nodes typically have [multiple versions](../core/baseapp.md#state-updates) +of the application's internal state for different purposes. For example, nodes will execute state +changes while in the process of verifying transactions, but still need a copy of the last committed +state in order to answer queries - they should not respond using state with uncommitted changes. + +In order to verify a `Tx`, full-nodes call `CheckTx`, which includes both _stateless_ and _stateful_ +checks. Further validation happens later in the [`DeliverTx`](#delivertx) stage. `CheckTx` goes +through several steps, beginning with decoding `Tx`. + +### Decoding + +When `Tx` is received by the application from the underlying consensus engine (e.g. Tendermint), it is still in its [encoded](../core/encoding.md) `[]byte` form and needs to be unmarshaled in order to be processed. Then, the [`runTx`](../core/baseapp.md#runtx-antehandler-runmsgs-posthandler) function is called to run in `runTxModeCheck` mode, meaning the function will run all checks but exit before executing messages and writing state changes. + +### ValidateBasic + +Messages ([`sdk.Msg`](../core/transactions.md#messages)) are extracted from transactions (`Tx`). The `ValidateBasic` method of the `sdk.Msg` interface implemented by the module developer is run for each transaction. +To discard obviously invalid messages, the `BaseApp` type calls the `ValidateBasic` method very early in the processing of the message in the [`CheckTx`](../core/baseapp.md#checktx) and [`DeliverTx`](../core/baseapp.md#delivertx) transactions. +`ValidateBasic` can include only **stateless** checks (the checks that do not require access to the state). + +#### Guideline + +Gas is not charged when `ValidateBasic` is executed, so we recommend only performing all necessary stateless checks to enable middleware operations (for example, parsing the required signer accounts to validate a signature by a middleware) and stateless sanity checks not impacting performance of the CheckTx phase. +Other validation operations must be performed when [handling a message](../building-modules/msg-services#Validation) in a module Msg Server. + +Example, if the message is to send coins from one address to another, `ValidateBasic` likely checks for non-empty addresses and a non-negative coin amount, but does not require knowledge of state such as the account balance of an address. + +See also [Msg Service Validation](../building-modules/msg-services.md#Validation). + +### AnteHandler + +After the ValidateBasic checks, the `AnteHandler`s are run. Technically, they are optional, but in practice, they are very often present to perform signature verification, gas calculation, fee deduction and other core operations related to blockchain transactions. + +A copy of the cached context is provided to the `AnteHandler`, which performs limited checks specified for the transaction type. Using a copy allows the `AnteHandler` to do stateful checks for `Tx` without modifying the last committed state, and revert back to the original if the execution fails. + +For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module `AnteHandler` checks and increments sequence numbers, checks signatures and account numbers, and deducts fees from the first signer of the transaction - all state changes are made using the `checkState`. + +### Gas + +The [`Context`](../core/context.md), which keeps a `GasMeter` that will track how much gas has been used during the execution of `Tx`, is initialized. The user-provided amount of gas for `Tx` is known as `GasWanted`. If `GasConsumed`, the amount of gas consumed so during execution, ever exceeds `GasWanted`, the execution will stop and the changes made to the cached copy of the state won't be committed. Otherwise, `CheckTx` sets `GasUsed` equal to `GasConsumed` and returns it in the result. After calculating the gas and fee values, validator-nodes check that the user-specified `gas-prices` is greater than their locally defined `min-gas-prices`. + +### Discard or Addition to Mempool + +If at any point during `CheckTx` the `Tx` fails, it is discarded and the transaction lifecycle ends +there. Otherwise, if it passes `CheckTx` successfully, the default protocol is to relay it to peer +nodes and add it to the Mempool so that the `Tx` becomes a candidate to be included in the next block. + +The **mempool** serves the purpose of keeping track of transactions seen by all full-nodes. +Full-nodes keep a **mempool cache** of the last `mempool.cache_size` transactions they have seen, as a first line of +defense to prevent replay attacks. Ideally, `mempool.cache_size` is large enough to encompass all +of the transactions in the full mempool. If the mempool cache is too small to keep track of all +the transactions, `CheckTx` is responsible for identifying and rejecting replayed transactions. + +Currently existing preventative measures include fees and a `sequence` (nonce) counter to distinguish +replayed transactions from identical but valid ones. If an attacker tries to spam nodes with many +copies of a `Tx`, full-nodes keeping a mempool cache will reject identical copies instead of running +`CheckTx` on all of them. Even if the copies have incremented `sequence` numbers, attackers are +disincentivized by the need to pay fees. + +Validator nodes keep a mempool to prevent replay attacks, just as full-nodes do, but also use it as +a pool of unconfirmed transactions in preparation of block inclusion. Note that even if a `Tx` +passes all checks at this stage, it is still possible to be found invalid later on, because +`CheckTx` does not fully validate the transaction (i.e. it does not actually execute the messages). + +## Inclusion in a Block + +Consensus, the process through which validator nodes come to agreement on which transactions to +accept, happens in **rounds**. Each round begins with a proposer creating a block of the most +recent transactions and ends with **validators**, special full-nodes with voting power responsible +for consensus, agreeing to accept the block or go with a `nil` block instead. Validator nodes +execute the consensus algorithm, such as [Tendermint BFT](https://docs.tendermint.com/master/spec/consensus/consensus.html#terms), +confirming the transactions using ABCI requests to the application, in order to come to this agreement. + +The first step of consensus is the **block proposal**. One proposer amongst the validators is chosen +by the consensus algorithm to create and propose a block - in order for a `Tx` to be included, it +must be in this proposer's mempool. + +## State Changes + +The next step of consensus is to execute the transactions to fully validate them. All full-nodes +that receive a block proposal from the correct proposer execute the transactions by calling the ABCI functions +[`BeginBlock`](./app-anatomy.md#beginblocker-and-endblocker), `DeliverTx` for each transaction, +and [`EndBlock`](./app-anatomy.md#beginblocker-and-endblocker). While each full-node runs everything +locally, this process yields a single, unambiguous result, since the messages' state transitions are deterministic and transactions are +explicitly ordered in the block proposal. + +```text + ----------------------- + |Receive Block Proposal| + ----------------------- + | + v + ----------------------- + | BeginBlock | + ----------------------- + | + v + ----------------------- + | DeliverTx(tx0) | + | DeliverTx(tx1) | + | DeliverTx(tx2) | + | DeliverTx(tx3) | + | . | + | . | + | . | + ----------------------- + | + v + ----------------------- + | EndBlock | + ----------------------- + | + v + ----------------------- + | Consensus | + ----------------------- + | + v + ----------------------- + | Commit | + ----------------------- +``` + +### DeliverTx + +The `DeliverTx` ABCI function defined in [`BaseApp`](../core/baseapp.md) does the bulk of the +state transitions: it is run for each transaction in the block in sequential order as committed +to during consensus. Under the hood, `DeliverTx` is almost identical to `CheckTx` but calls the +[`runTx`](../core/baseapp.md#runtx) function in deliver mode instead of check mode. +Instead of using their `checkState`, full-nodes use `deliverState`: + +* **Decoding:** Since `DeliverTx` is an ABCI call, `Tx` is received in the encoded `[]byte` form. + Nodes first unmarshal the transaction, using the [`TxConfig`](./app-anatomy#register-codec) defined in the app, then call `runTx` in `runTxModeDeliver`, which is very similar to `CheckTx` but also executes and writes state changes. + +* **Checks and AnteHandler:** Full-nodes call `validateBasicMsgs` and `AnteHandler` again. This second check + happens because they may not have seen the same transactions during the addition to Mempool stage + and a malicious proposer may have included invalid ones. One difference here is that the + `AnteHandler` will not compare `gas-prices` to the node's `min-gas-prices` since that value is local + to each node - differing values across nodes would yield nondeterministic results. + +* **`MsgServiceRouter`:** While `CheckTx` would have exited, `DeliverTx` continues to run + [`runMsgs`](../core/baseapp.md#runtx-antehandler-runmsgs-posthandler) to fully execute each `Msg` within the transaction. + Since the transaction may have messages from different modules, `BaseApp` needs to know which module + to find the appropriate handler. This is achieved using `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's Protobuf [`Msg` service](../building-modules/msg-services.md). + For `LegacyMsg` routing, the `Route` function is called via the [module manager](../building-modules/module-manager.md) to retrieve the route name and find the legacy [`Handler`](../building-modules/msg-services.md#handler-type) within the module. + +* **`Msg` service:** Protobuf `Msg` service is responsible for executing each message in the `Tx` and causes state transitions to persist in `deliverTxState`. + +* **PostHandlers:** [`PostHandler`](../core/baseapp.md#posthandler)s run after the execution of the message. If they fail, the state change of `runMsgs`, as well of `PostHandlers` are both reverted. + +* **Gas:** While a `Tx` is being delivered, a `GasMeter` is used to keep track of how much + gas is being used; if execution completes, `GasUsed` is set and returned in the + `abci.ResponseDeliverTx`. If execution halts because `BlockGasMeter` or `GasMeter` has run out or something else goes + wrong, a deferred function at the end appropriately errors or panics. + +If there are any failed state changes resulting from a `Tx` being invalid or `GasMeter` running out, +the transaction processing terminates and any state changes are reverted. Invalid transactions in a +block proposal cause validator nodes to reject the block and vote for a `nil` block instead. + +### Commit + +The final step is for nodes to commit the block and state changes. Validator nodes +perform the previous step of executing state transitions in order to validate the transactions, +then sign the block to confirm it. Full nodes that are not validators do not +participate in consensus - i.e. they cannot vote - but listen for votes to understand whether or +not they should commit the state changes. + +When they receive enough validator votes (2/3+ _precommits_ weighted by voting power), full nodes commit to a new block to be added to the blockchain and +finalize the state transitions in the application layer. A new state root is generated to serve as +a merkle proof for the state transitions. Applications use the [`Commit`](../core/baseapp.md#commit) +ABCI method inherited from [Baseapp](../core/baseapp.md); it syncs all the state transitions by +writing the `deliverState` into the application's internal state. As soon as the state changes are +committed, `checkState` start afresh from the most recently committed state and `deliverState` +resets to `nil` in order to be consistent and reflect the changes. + +Note that not all blocks have the same number of transactions and it is possible for consensus to +result in a `nil` block or one with none at all. In a public blockchain network, it is also possible +for validators to be **byzantine**, or malicious, which may prevent a `Tx` from being committed in +the blockchain. Possible malicious behaviors include the proposer deciding to censor a `Tx` by +excluding it from the block or a validator voting against the block. + +At this point, the transaction lifecycle of a `Tx` is over: nodes have verified its validity, +delivered it by executing its state changes, and committed those changes. The `Tx` itself, +in `[]byte` form, is stored in a block and appended to the blockchain. + +## Next {hide} + +Learn about [accounts](./accounts.md) {hide} diff --git a/versioned_docs/version-0.46/develop/intro/README.md b/versioned_docs/version-0.46/develop/intro/README.md new file mode 100644 index 000000000..d20de3560 --- /dev/null +++ b/versioned_docs/version-0.46/develop/intro/README.md @@ -0,0 +1,16 @@ + + +# Introduction + +This introduction gives a quick start on the Cosmos SDK. + +1. [Overview](./overview.md) +2. [Application-Specific Blockchains](./why-app-specific.md) +3. [Architecture of a Cosmos SDK Application](./sdk-app-architecture.md) +4. [Cosmos SDK Design Overview](./sdk-design.md) + +After reading the introduction material, head over to the [basics](../basics/README.md) to learn more. diff --git a/versioned_docs/version-0.46/develop/intro/overview.md b/versioned_docs/version-0.46/develop/intro/overview.md new file mode 100644 index 000000000..859f0acce --- /dev/null +++ b/versioned_docs/version-0.46/develop/intro/overview.md @@ -0,0 +1,37 @@ + + +# High-level Overview + +## What is the Cosmos SDK + +The [Cosmos SDK](https://github.com/cosmos/cosmos-sdk) is an open-source framework for building multi-asset public Proof-of-Stake (PoS) blockchains, like the Cosmos Hub, as well as permissioned Proof-of-Authority (PoA) blockchains. Blockchains built with the Cosmos SDK are generally referred to as **application-specific blockchains**. + +The goal of the Cosmos SDK is to allow developers to easily create custom blockchains from scratch that can natively interoperate with other blockchains. We envision the Cosmos SDK as the npm-like framework to build secure blockchain applications on top of [Tendermint](https://github.com/tendermint/tendermint). SDK-based blockchains are built out of composable [modules](../building-modules/intro.md), most of which are open-source and readily available for any developers to use. Anyone can create a module for the Cosmos SDK, and integrating already-built modules is as simple as importing them into your blockchain application. What's more, the Cosmos SDK is a capabilities-based system that allows developers to better reason about the security of interactions between modules. For a deeper look at capabilities, jump to [Object-Capability Model](../core/ocap.md). + +## What are Application-Specific Blockchains + +One development paradigm in the blockchain world today is that of virtual-machine blockchains like Ethereum, where development generally revolves around building decentralized applications on top of an existing blockchain as a set of smart contracts. While smart contracts can be very good for some use cases like single-use applications (e.g. ICOs), they often fall short for building complex decentralized platforms. More generally, smart contracts can be limiting in terms of flexibility, sovereignty and performance. + +Application-specific blockchains offer a radically different development paradigm than virtual-machine blockchains. An application-specific blockchain is a blockchain customized to operate a single application: developers have all the freedom to make the design decisions required for the application to run optimally. They can also provide better sovereignty, security and performance. + +Learn more about [application-specific blockchains](./why-app-specific.md). + +## Why the Cosmos SDK + +The Cosmos SDK is the most advanced framework for building custom application-specific blockchains today. Here are a few reasons why you might want to consider building your decentralized application with the Cosmos SDK: + +* The default consensus engine available within the Cosmos SDK is [Tendermint Core](https://github.com/tendermint/tendermint). Tendermint is the most (and only) mature BFT consensus engine in existence. It is widely used across the industry and is considered the gold standard consensus engine for building Proof-of-Stake systems. +* The Cosmos SDK is open-source and designed to make it easy to build blockchains out of composable [modules](../../x/). As the ecosystem of open-source Cosmos SDK modules grows, it will become increasingly easier to build complex decentralized platforms with it. +* The Cosmos SDK is inspired by capabilities-based security, and informed by years of wrestling with blockchain state-machines. This makes the Cosmos SDK a very secure environment to build blockchains. +* Most importantly, the Cosmos SDK has already been used to build many application-specific blockchains that are already in production. Among others, we can cite [Cosmos Hub](https://hub.cosmos.network), [IRIS Hub](https://irisnet.org), [Binance Chain](https://docs.binance.org/), [Terra](https://terra.money/) or [Kava](https://www.kava.io/). [Many more](https://cosmos.network/ecosystem) are building on the Cosmos SDK. + +## Getting started with the Cosmos SDK + +* Learn more about the [architecture of a Cosmos SDK application](./sdk-app-architecture.md) +* Learn how to build an application-specific blockchain from scratch with the [Cosmos SDK Tutorial](https://cosmos.network/docs/tutorial) + +## Next {hide} + +Learn about [application-specific blockchains](./why-app-specific.md) {hide} diff --git a/versioned_docs/version-0.46/develop/intro/sdk-app-architecture.md b/versioned_docs/version-0.46/develop/intro/sdk-app-architecture.md new file mode 100644 index 000000000..7a1113683 --- /dev/null +++ b/versioned_docs/version-0.46/develop/intro/sdk-app-architecture.md @@ -0,0 +1,97 @@ + + +# Blockchain Architecture + +## State machine + +At its core, a blockchain is a [replicated deterministic state machine](https://en.wikipedia.org/wiki/State_machine_replication). + +A state machine is a computer science concept whereby a machine can have multiple states, but only one at any given time. There is a `state`, which describes the current state of the system, and `transactions`, that trigger state transitions. + +Given a state S and a transaction T, the state machine will return a new state S'. + +```text ++--------+ +--------+ +| | | | +| S +---------------->+ S' | +| | apply(T) | | ++--------+ +--------+ +``` + +In practice, the transactions are bundled in blocks to make the process more efficient. Given a state S and a block of transactions B, the state machine will return a new state S'. + +```text ++--------+ +--------+ +| | | | +| S +----------------------------> | S' | +| | For each T in B: apply(T) | | ++--------+ +--------+ +``` + +In a blockchain context, the state machine is deterministic. This means that if a node is started at a given state and replays the same sequence of transactions, it will always end up with the same final state. + +The Cosmos SDK gives developers maximum flexibility to define the state of their application, transaction types and state transition functions. The process of building state-machines with the Cosmos SDK will be described more in depth in the following sections. But first, let us see how the state-machine is replicated using **Tendermint**. + +## Tendermint + +Thanks to the Cosmos SDK, developers just have to define the state machine, and [*Tendermint*](https://docs.tendermint.com/master/introduction/what-is-tendermint.html) will handle replication over the network for them. + +```text + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | Tendermint Core + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +[Tendermint](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html) is an application-agnostic engine that is responsible for handling the *networking* and *consensus* layers of a blockchain. In practice, this means that Tendermint is responsible for propagating and ordering transaction bytes. Tendermint Core relies on an eponymous Byzantine-Fault-Tolerant (BFT) algorithm to reach consensus on the order of transactions. + +The Tendermint [consensus algorithm](https://docs.tendermint.com/v0.34/introduction/what-is-tendermint.html#consensus-overview) works with a set of special nodes called *Validators*. Validators are responsible for adding blocks of transactions to the blockchain. At any given block, there is a validator set V. A validator in V is chosen by the algorithm to be the proposer of the next block. This block is considered valid if more than two thirds of V signed a `prevote` and a `precommit` on it, and if all the transactions that it contains are valid. The validator set can be changed by rules written in the state-machine. + +## ABCI + +Tendermint passes transactions to the application through an interface called the [ABCI](https://docs.tendermint.com/master/spec/abci/), which the application must implement. + +```text + +---------------------+ + | | + | Application | + | | + +--------+---+--------+ + ^ | + | | ABCI + | v + +--------+---+--------+ + | | + | | + | Tendermint | + | | + | | + +---------------------+ +``` + +Note that **Tendermint only handles transaction bytes**. It has no knowledge of what these bytes mean. All Tendermint does is order these transaction bytes deterministically. Tendermint passes the bytes to the application via the ABCI, and expects a return code to inform it if the messages contained in the transactions were successfully processed or not. + +Here are the most important messages of the ABCI: + +* `CheckTx`: When a transaction is received by Tendermint Core, it is passed to the application to check if a few basic requirements are met. `CheckTx` is used to protect the mempool of full-nodes against spam transactions. . A special handler called the [`AnteHandler`](../basics/gas-fees.md#antehandler) is used to execute a series of validation steps such as checking for sufficient fees and validating the signatures. If the checks are valid, the transaction is added to the [mempool](https://docs.tendermint.com/v0.34/tendermint-core/mempool.html#mempool) and relayed to peer nodes. Note that transactions are not processed (i.e. no modification of the state occurs) with `CheckTx` since they have not been included in a block yet. +* `DeliverTx`: When a [valid block](https://docs.tendermint.com/v0.34/spec/blockchain/blockchain.html#validation) is received by Tendermint Core, each transaction in the block is passed to the application via `DeliverTx` in order to be processed. It is during this stage that the state transitions occur. The `AnteHandler` executes again, along with the actual [`Msg` service](../building-modules/msg-services.md) RPC for each message in the transaction. +* `BeginBlock`/`EndBlock`: These messages are executed at the beginning and the end of each block, whether the block contains transactions or not. It is useful to trigger automatic execution of logic. Proceed with caution though, as computationally expensive loops could slow down your blockchain, or even freeze it if the loop is infinite. + +Find a more detailed view of the ABCI methods from the [Tendermint docs](https://docs.tendermint.com/v0.35/introduction/what-is-tendermint.html#abci-overview). + +Any application built on Tendermint needs to implement the ABCI interface in order to communicate with the underlying local Tendermint engine. Fortunately, you do not have to implement the ABCI interface. The Cosmos SDK provides a boilerplate implementation of it in the form of [baseapp](./sdk-design.md#baseapp). + +## Next {hide} + +Read about the [high-level design principles of the Cosmos SDK](./sdk-design.md) {hide} diff --git a/versioned_docs/version-0.46/develop/intro/sdk-design.md b/versioned_docs/version-0.46/develop/intro/sdk-design.md new file mode 100644 index 000000000..e9f61be4e --- /dev/null +++ b/versioned_docs/version-0.46/develop/intro/sdk-design.md @@ -0,0 +1,97 @@ + + +# Main Components of the Cosmos SDK + +The Cosmos SDK is a framework that facilitates the development of secure state-machines on top of Tendermint. At its core, the Cosmos SDK is a boilerplate implementation of the [ABCI](./sdk-app-architecture.md#abci) in Golang. It comes with a [`multistore`](../core/store.md#multistore) to persist data and a [`router`](../core/baseapp.md#routing) to handle transactions. + +Here is a simplified view of how transactions are handled by an application built on top of the Cosmos SDK when transferred from Tendermint via `DeliverTx`: + +1. Decode `transactions` received from the Tendermint consensus engine (remember that Tendermint only deals with `[]bytes`). +2. Extract `messages` from `transactions` and do basic sanity checks. +3. Route each message to the appropriate module so that it can be processed. +4. Commit state changes. + +## `baseapp` + +`baseapp` is the boilerplate implementation of a Cosmos SDK application. It comes with an implementation of the ABCI to handle the connection with the underlying consensus engine. Typically, a Cosmos SDK application extends `baseapp` by embedding it in [`app.go`](../basics/app-anatomy.md#core-application-file). + +Here is an example of this from `simapp`, the Cosmos SDK demonstration app: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L154-L193 + +The goal of `baseapp` is to provide a secure interface between the store and the extensible state machine while defining as little about the state machine as possible (staying true to the ABCI). + +For more on `baseapp`, please click [here](../core/baseapp.md). + +## Multistore + +The Cosmos SDK provides a [`multistore`](../core/store.md#multistore) for persisting state. The multistore allows developers to declare any number of [`KVStores`](../core/store.md#base-layer-kvstores). These `KVStores` only accept the `[]byte` type as value and therefore any custom structure needs to be marshalled using [a codec](../core/encoding.md) before being stored. + +The multistore abstraction is used to divide the state in distinct compartments, each managed by its own module. For more on the multistore, click [here](../core/store.md#multistore) + +## Modules + +The power of the Cosmos SDK lies in its modularity. Cosmos SDK applications are built by aggregating a collection of interoperable modules. Each module defines a subset of the state and contains its own message/transaction processor, while the Cosmos SDK is responsible for routing each message to its respective module. + +Here is a simplified view of how a transaction is processed by the application of each full-node when it is received in a valid block: + +```text + + + | + | Transaction relayed from the full-node's + | Tendermint engine to the node's application + | via DeliverTx + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | Message routed to + | the correct module + | to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to Tendermint + | (0=Ok, 1=Err) + v +``` + +Each module can be seen as a little state-machine. Developers need to define the subset of the state handled by the module, as well as custom message types that modify the state (*Note:* `messages` are extracted from `transactions` by `baseapp`). In general, each module declares its own `KVStore` in the `multistore` to persist the subset of the state it defines. Most developers will need to access other 3rd party modules when building their own modules. Given that the Cosmos SDK is an open framework, some of the modules may be malicious, which means there is a need for security principles to reason about inter-module interactions. These principles are based on [object-capabilities](../core/ocap.md). In practice, this means that instead of having each module keep an access control list for other modules, each module implements special objects called `keepers` that can be passed to other modules to grant a pre-defined set of capabilities. + +Cosmos SDK modules are defined in the `x/` folder of the Cosmos SDK. Some core modules include: + +* `x/auth`: Used to manage accounts and signatures. +* `x/bank`: Used to enable tokens and token transfers. +* `x/staking` + `x/slashing`: Used to build Proof-Of-Stake blockchains. + +In addition to the already existing modules in `x/`, that anyone can use in their app, the Cosmos SDK lets you build your own custom modules. You can check an [example of that in the tutorial](https://tutorials.cosmos.network/). + +## Next {hide} + +Learn more about the [anatomy of a Cosmos SDK application](../basics/app-anatomy.md) {hide} diff --git a/versioned_docs/version-0.46/develop/intro/why-app-specific.md b/versioned_docs/version-0.46/develop/intro/why-app-specific.md new file mode 100644 index 000000000..91e84ce0c --- /dev/null +++ b/versioned_docs/version-0.46/develop/intro/why-app-specific.md @@ -0,0 +1,81 @@ + + +# Application-Specific Blockchains + +This document explains what application-specific blockchains are, and why developers would want to build one as opposed to writing Smart Contracts. {synopsis} + +## What are application-specific blockchains + +Application-specific blockchains are blockchains customized to operate a single application. Instead of building a decentralized application on top of an underlying blockchain like Ethereum, developers build their own blockchain from the ground up. This means building a full-node client, a light-client, and all the necessary interfaces (CLI, REST, ...) to interact with the nodes. + +```text + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | Tendermint Core + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +## What are the shortcomings of Smart Contracts + +Virtual-machine blockchains like Ethereum addressed the demand for more programmability back in 2014. At the time, the options available for building decentralized applications were quite limited. Most developers would build on top of the complex and limited Bitcoin scripting language, or fork the Bitcoin codebase which was hard to work with and customize. + +Virtual-machine blockchains came in with a new value proposition. Their state-machine incorporates a virtual-machine that is able to interpret turing-complete programs called Smart Contracts. These Smart Contracts are very good for use cases like one-time events (e.g. ICOs), but they can fall short for building complex decentralized platforms. Here is why: + +* Smart Contracts are generally developed with specific programming languages that can be interpreted by the underlying virtual-machine. These programming languages are often immature and inherently limited by the constraints of the virtual-machine itself. For example, the Ethereum Virtual Machine does not allow developers to implement automatic execution of code. Developers are also limited to the account-based system of the EVM, and they can only choose from a limited set of functions for their cryptographic operations. These are examples, but they hint at the lack of **flexibility** that a smart contract environment often entails. +* Smart Contracts are all run by the same virtual machine. This means that they compete for resources, which can severely restrain **performance**. And even if the state-machine were to be split in multiple subsets (e.g. via sharding), Smart Contracts would still need to be interpreted by a virtual machine, which would limit performance compared to a native application implemented at state-machine level (our benchmarks show an improvement on the order of 10x in performance when the virtual-machine is removed). +* Another issue with the fact that Smart Contracts share the same underlying environment is the resulting limitation in **sovereignty**. A decentralized application is an ecosystem that involves multiple players. If the application is built on a general-purpose virtual-machine blockchain, stakeholders have very limited sovereignty over their application, and are ultimately superseded by the governance of the underlying blockchain. If there is a bug in the application, very little can be done about it. + +Application-Specific Blockchains are designed to address these shortcomings. + +## Application-Specific Blockchains Benefits + +### Flexibility + +Application-specific blockchains give maximum flexibility to developers: + +* In Cosmos blockchains, the state-machine is typically connected to the underlying consensus engine via an interface called the [ABCI](https://docs.tendermint.com/v0.34/spec/abci/). This interface can be wrapped in any programming language, meaning developers can build their state-machine in the programming language of their choice. + +* Developers can choose among multiple frameworks to build their state-machine. The most widely used today is the Cosmos SDK, but others exist (e.g. [Lotion](https://github.com/nomic-io/lotion), [Weave](https://github.com/iov-one/weave), ...). Typically the choice will be made based on the programming language they want to use (Cosmos SDK and Weave are in Golang, Lotion is in Javascript, ...). +* The ABCI also allows developers to swap the consensus engine of their application-specific blockchain. Today, only Tendermint is production-ready, but in the future other consensus engines are expected to emerge. +* Even when they settle for a framework and consensus engine, developers still have the freedom to tweak them if they don't perfectly match their requirements in their pristine forms. +* Developers are free to explore the full spectrum of tradeoffs (e.g. number of validators vs transaction throughput, safety vs availability in asynchrony, ...) and design choices (DB or IAVL tree for storage, UTXO or account model, ...). +* Developers can implement automatic execution of code. In the Cosmos SDK, logic can be automatically triggered at the beginning and the end of each block. They are also free to choose the cryptographic library used in their application, as opposed to being constrained by what is made available by the underlying environment in the case of virtual-machine blockchains. + +The list above contains a few examples that show how much flexibility application-specific blockchains give to developers. The goal of Cosmos and the Cosmos SDK is to make developer tooling as generic and composable as possible, so that each part of the stack can be forked, tweaked and improved without losing compatibility. As the community grows, more alternatives for each of the core building blocks will emerge, giving more options to developers. + +### Performance + +decentralized applications built with Smart Contracts are inherently capped in performance by the underlying environment. For a decentralized application to optimise performance, it needs to be built as an application-specific blockchain. Next are some of the benefits an application-specific blockchain brings in terms of performance: + +* Developers of application-specific blockchains can choose to operate with a novel consensus engine such as Tendermint BFT. Compared to Proof-of-Work (used by most virtual-machine blockchains today), it offers significant gains in throughput. +* An application-specific blockchain only operates a single application, so that the application does not compete with others for computation and storage. This is the opposite of most non-sharded virtual-machine blockchains today, where smart contracts all compete for computation and storage. +* Even if a virtual-machine blockchain offered application-based sharding coupled with an efficient consensus algorithm, performance would still be limited by the virtual-machine itself. The real throughput bottleneck is the state-machine, and requiring transactions to be interpreted by a virtual-machine significantly increases the computational complexity of processing them. + +### Security + +Security is hard to quantify, and greatly varies from platform to platform. That said here are some important benefits an application-specific blockchain can bring in terms of security: + +* Developers can choose proven programming languages like Go when building their application-specific blockchains, as opposed to smart contract programming languages that are often more immature. +* Developers are not constrained by the cryptographic functions made available by the underlying virtual-machines. They can use their own custom cryptography, and rely on well-audited crypto libraries. +* Developers do not have to worry about potential bugs or exploitable mechanisms in the underlying virtual-machine, making it easier to reason about the security of the application. + +### Sovereignty + +One of the major benefits of application-specific blockchains is sovereignty. A decentralized application is an ecosystem that involves many actors: users, developers, third-party services, and more. When developers build on virtual-machine blockchain where many decentralized applications coexist, the community of the application is different than the community of the underlying blockchain, and the latter supersedes the former in the governance process. If there is a bug or if a new feature is needed, stakeholders of the application have very little leeway to upgrade the code. If the community of the underlying blockchain refuses to act, nothing can happen. + +The fundamental issue here is that the governance of the application and the governance of the network are not aligned. This issue is solved by application-specific blockchains. Because application-specific blockchains specialize to operate a single application, stakeholders of the application have full control over the entire chain. This ensures that the community will not be stuck if a bug is discovered, and that it has the freedom to choose how it is going to evolve. + +## Next {hide} + +Learn more about the [high-level architecture](./sdk-app-architecture.md) of a Cosmos SDK application {hide} diff --git a/versioned_docs/version-0.46/integrate/CosmWasm/README.md b/versioned_docs/version-0.46/integrate/CosmWasm/README.md new file mode 100644 index 000000000..b6a14810b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/CosmWasm/README.md @@ -0,0 +1,13 @@ + + +# CosmWasm smart contracts + +>CosmWasm is a smart contracting platform built for the Cosmos ecosystem. Simply put, it's the Cosmos (Cosm) way of using WebAssembly (Wasm) hence the name. + +>CosmWasm is written as a module that can plug into the Cosmos SDK. This means that anyone currently building a blockchain using the Cosmos SDK can quickly and easily add CosmWasm smart contracting support to their chain, without adjusting existing logic. + +Read more about writing smart contracts with CosmWasm at their [documentation site](https://book.cosmwasm.com/), or visit [the repository](https://github.com/CosmWasm/cosmwasm). diff --git a/versioned_docs/version-0.46/integrate/architecture/PROCESS.md b/versioned_docs/version-0.46/integrate/architecture/PROCESS.md new file mode 100644 index 000000000..c5140bbe4 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/PROCESS.md @@ -0,0 +1,56 @@ +# ADR Creation Process + +1. Copy the `adr-template.md` file. Use the following filename pattern: `adr-next_number-title.md` +2. Create a draft Pull Request if you want to get an early feedback. +3. Make sure the context and a solution is clear and well documented. +4. Add an entry to a list in the [README](./README.md) file. +5. Create a Pull Request to propose a new ADR. + +## ADR life cycle + +ADR creation is an **iterative** process. Instead of trying to solve all decisions in a single ADR pull request, we MUST firstly understand the problem and collect feedback through a GitHub Issue. + +1. Every proposal SHOULD start with a new GitHub Issue or be a result of existing Issues. The Issue should contain just a brief proposal summary. + +2. Once the motivation is validated, a GitHub Pull Request (PR) is created with a new document based on the `adr-template.md`. + +3. An ADR doesn't have to arrive to `main` with an _accepted_ status in a single PR. If the motivation is clear and the solution is sound, we SHOULD be able to merge it and keep a _proposed_ status. It's preferable to have an iterative approach rather than long, not merged Pull Requests. + +4. If a _proposed_ ADR is merged, then it should clearly document outstanding issues either in ADR document notes or in a GitHub Issue. + +5. The PR SHOULD always be merged. In the case of a faulty ADR, we still prefer to merge it with a _rejected_ status. The only time the ADR SHOULD NOT be merged is if the author abandons it. + +6. Merged ADRs SHOULD NOT be pruned. + +### ADR status + +Status has two components: + +```text +{CONSENSUS STATUS} {IMPLEMENTATION STATUS} +``` + +IMPLEMENTATION STATUS is either `Implemented` or `Not Implemented`. + +#### Consensus Status + +```text +DRAFT -> PROPOSED -> LAST CALL yyyy-mm-dd -> ACCEPTED | REJECTED -> SUPERSEDED by ADR-xxx + \ | + \ | + v v + ABANDONED +``` + +* `DRAFT`: [optional] an ADR which is work in progress, not being ready for a general review. This is to present an early work and get an early feedback in a Draft Pull Request form. +* `PROPOSED`: an ADR covering a full solution architecture and still in the review - project stakeholders haven't reached an agreed yet. +* `LAST CALL `: [optional] clear notify that we are close to accept updates. Changing a status to `LAST CALL` means that social consensus (of Cosmos SDK maintainers) has been reached and we still want to give it a time to let the community react or analyze. +* `ACCEPTED`: ADR which will represent a currently implemented or to be implemented architecture design. +* `REJECTED`: ADR can go from PROPOSED or ACCEPTED to rejected if the consensus among project stakeholders will decide so. +* `SUPERSEEDED by ADR-xxx`: ADR which has been superseded by a new ADR. +* `ABANDONED`: the ADR is no longer pursued by the original authors. + +## Language used in ADR + +* The context/background should be written in the present tense. +* Avoid using a first, personal form. diff --git a/versioned_docs/version-0.46/integrate/architecture/README.md b/versioned_docs/version-0.46/integrate/architecture/README.md new file mode 100644 index 000000000..4257d1e87 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/README.md @@ -0,0 +1,87 @@ +--- +order: false +parent: + order: false +--- + +# Architecture Decision Records (ADR) + +This is a location to record all high-level architecture decisions in the Cosmos-SDK. + +An Architectural Decision (**AD**) is a software design choice that addresses a functional or non-functional requirement that is architecturally significant. +An Architecturally Significant Requirement (**ASR**) is a requirement that has a measurable effect on a software system’s architecture and quality. +An Architectural Decision Record (**ADR**) captures a single AD, such as often done when writing personal notes or meeting minutes; the collection of ADRs created and maintained in a project constitute its decision log. All these are within the topic of Architectural Knowledge Management (AKM). + +You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). + +## Rationale + +ADRs are intended to be the primary mechanism for proposing new feature designs and new processes, for collecting community input on an issue, and for documenting the design decisions. +An ADR should provide: + +* Context on the relevant goals and the current state +* Proposed changes to achieve the goals +* Summary of pros and cons +* References +* Changelog + +Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and +justification for a change in architecture, or for the architecture of something +new. The spec is much more compressed and streamlined summary of everything as +it stands today. + +If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match. + +## Creating new ADR + +Read about the [PROCESS](./PROCESS.md). + +### Use RFC 2119 Keywords + +When writing ADRs, follow the same best practices for writing RFCs. When writing RFCs, key words are used to signify the requirements in the specification. These words are often capitalized: "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL. They are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119). + +## ADR Table of Contents + +### Accepted + +* [ADR 002: SDK Documentation Structure](./adr-002-docs-structure.md) +* [ADR 004: Split Denomination Keys](./adr-004-split-denomination-keys.md) +* [ADR 006: Secret Store Replacement](./adr-006-secret-store-replacement.md) +* [ADR 009: Evidence Module](./adr-009-evidence-module.md) +* [ADR 010: Modular AnteHandler](./adr-010-modular-antehandler.md) +* [ADR 019: Protocol Buffer State Encoding](./adr-019-protobuf-state-encoding.md) +* [ADR 020: Protocol Buffer Transaction Encoding](./adr-020-protobuf-transaction-encoding.md) +* [ADR 021: Protocol Buffer Query Encoding](./adr-021-protobuf-query-encoding.md) +* [ADR 023: Protocol Buffer Naming and Versioning](./adr-023-protobuf-naming.md) +* [ADR 029: Fee Grant Module](./adr-029-fee-grant-module.md) +* [ADR 030: Message Authorization Module](./adr-030-authz-module.md) +* [ADR 031: Protobuf Msg Services](./adr-031-msg-service.md) +* [ADR 055: ORM](./adr-055-orm.md) + +### Proposed + +* [ADR 003: Dynamic Capability Store](./adr-003-dynamic-capability-store.md) +* [ADR 011: Generalize Genesis Accounts](./adr-011-generalize-genesis-accounts.md) +* [ADR 012: State Accessors](./adr-012-state-accessors.md) +* [ADR 013: Metrics](./adr-013-metrics.md) +* [ADR 016: Validator Consensus Key Rotation](./adr-016-validator-consensus-key-rotation.md) +* [ADR 017: Historical Header Module](./adr-017-historical-header-module.md) +* [ADR 018: Extendable Voting Periods](./adr-018-extendable-voting-period.md) +* [ADR 022: Custom baseapp panic handling](./adr-022-custom-panic-handling.md) +* [ADR 024: Coin Metadata](./adr-024-coin-metadata.md) +* [ADR 027: Deterministic Protobuf Serialization](./adr-027-deterministic-protobuf-serialization.md) +* [ADR 028: Public Key Addresses](./adr-028-public-key-addresses.md) +* [ADR 032: Typed Events](./adr-032-typed-events.md) +* [ADR 033: Inter-module RPC](./adr-033-protobuf-inter-module-comm.md) +* [ADR 035: Rosetta API Support](./adr-035-rosetta-api-support.md) +* [ADR 037: Governance Split Votes](./adr-037-gov-split-vote.md) +* [ADR 038: State Listening](./adr-038-state-listening.md) +* [ADR 039: Epoched Staking](./adr-039-epoched-staking.md) +* [ADR 040: Storage and SMT State Commitments](./adr-040-storage-and-smt-state-commitments.md) +* [ADR 046: Module Params](./adr-046-module-params.md) + +### Draft + +- [ADR 044: Guidelines for Updating Protobuf Definitions](./adr-044-protobuf-updates-guidelines.md) +- [ADR 047: Extend Upgrade Plan](./adr-047-extend-upgrade-plan.md) +- [ADR 053: Go Module Refactoring](./adr-053-go-module-refactoring.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-002-docs-structure.md b/versioned_docs/version-0.46/integrate/architecture/adr-002-docs-structure.md new file mode 100644 index 000000000..5819151fc --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-002-docs-structure.md @@ -0,0 +1,86 @@ +# ADR 002: SDK Documentation Structure + +## Context + +There is a need for a scalable structure of the Cosmos SDK documentation. Current documentation includes a lot of non-related Cosmos SDK material, is difficult to maintain and hard to follow as a user. + +Ideally, we would have: + +* All docs related to dev frameworks or tools live in their respective github repos (sdk repo would contain sdk docs, hub repo would contain hub docs, lotion repo would contain lotion docs, etc.) +* All other docs (faqs, whitepaper, high-level material about Cosmos) would live on the website. + +## Decision + +Re-structure the `/docs` folder of the Cosmos SDK github repo as follows: + +```text +docs/ +├── README +├── intro/ +├── concepts/ +│ ├── baseapp +│ ├── types +│ ├── store +│ ├── server +│ ├── modules/ +│ │ ├── keeper +│ │ ├── handler +│ │ ├── cli +│ ├── gas +│ └── commands +├── clients/ +│ ├── lite/ +│ ├── service-providers +├── modules/ +├── spec/ +├── translations/ +└── architecture/ +``` + +The files in each sub-folders do not matter and will likely change. What matters is the sectioning: + +* `README`: Landing page of the docs. +* `intro`: Introductory material. Goal is to have a short explainer of the Cosmos SDK and then channel people to the resource they need. The [Cosmos SDK tutorial](https://github.com/cosmos/sdk-application-tutorial/) will be highlighted, as well as the `godocs`. +* `concepts`: Contains high-level explanations of the abstractions of the Cosmos SDK. It does not contain specific code implementation and does not need to be updated often. **It is not an API specification of the interfaces**. API spec is the `godoc`. +* `clients`: Contains specs and info about the various Cosmos SDK clients. +* `spec`: Contains specs of modules, and others. +* `modules`: Contains links to `godocs` and the spec of the modules. +* `architecture`: Contains architecture-related docs like the present one. +* `translations`: Contains different translations of the documentation. + +Website docs sidebar will only include the following sections: + +* `README` +* `intro` +* `concepts` +* `clients` + +`architecture` need not be displayed on the website. + +## Status + +Accepted + +## Consequences + +### Positive + +* Much clearer organisation of the Cosmos SDK docs. +* The `/docs` folder now only contains Cosmos SDK and gaia related material. Later, it will only contain Cosmos SDK related material. +* Developers only have to update `/docs` folder when they open a PR (and not `/examples` for example). +* Easier for developers to find what they need to update in the docs thanks to reworked architecture. +* Cleaner vuepress build for website docs. +* Will help build an executable doc (cf https://github.com/cosmos/cosmos-sdk/issues/2611) + +### Neutral + +* We need to move a bunch of deprecated stuff to `/_attic` folder. +* We need to integrate content in `docs/sdk/docs/core` in `concepts`. +* We need to move all the content that currently lives in `docs` and does not fit in new structure (like `lotion`, intro material, whitepaper) to the website repository. +* Update `DOCS_README.md` + +## References + +* https://github.com/cosmos/cosmos-sdk/issues/1460 +* https://github.com/cosmos/cosmos-sdk/pull/2695 +* https://github.com/cosmos/cosmos-sdk/issues/2611 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-003-dynamic-capability-store.md b/versioned_docs/version-0.46/integrate/architecture/adr-003-dynamic-capability-store.md new file mode 100644 index 000000000..4ec3f1a61 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-003-dynamic-capability-store.md @@ -0,0 +1,344 @@ +# ADR 3: Dynamic Capability Store + +## Changelog + +* 12 December 2019: Initial version +* 02 April 2020: Memory Store Revisions + +## Context + +Full implementation of the [IBC specification](https://github.com/cosmos/ibs) requires the ability to create and authenticate object-capability keys at runtime (i.e., during transaction execution), +as described in [ICS 5](https://github.com/cosmos/ibc/tree/master/spec/core/ics-005-port-allocation#technical-specification). In the IBC specification, capability keys are created for each newly initialised +port & channel, and are used to authenticate future usage of the port or channel. Since channels and potentially ports can be initialised during transaction execution, the state machine must be able to create +object-capability keys at this time. + +At present, the Cosmos SDK does not have the ability to do this. Object-capability keys are currently pointers (memory addresses) of `StoreKey` structs created at application initialisation in `app.go` ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L132)) +and passed to Keepers as fixed arguments ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L160)). Keepers cannot create or store capability keys during transaction execution — although they could call `NewKVStoreKey` and take the memory address +of the returned struct, storing this in the Merklised store would result in a consensus fault, since the memory address will be different on each machine (this is intentional — were this not the case, the keys would be predictable and couldn't serve as object capabilities). + +Keepers need a way to keep a private map of store keys which can be altered during transaction execution, along with a suitable mechanism for regenerating the unique memory addresses (capability keys) in this map whenever the application is started or restarted, along with a mechanism to revert capability creation on tx failure. +This ADR proposes such an interface & mechanism. + +## Decision + +The Cosmos SDK will include a new `CapabilityKeeper` abstraction, which is responsible for provisioning, +tracking, and authenticating capabilities at runtime. During application initialisation in `app.go`, +the `CapabilityKeeper` will be hooked up to modules through unique function references +(by calling `ScopeToModule`, defined below) so that it can identify the calling module when later +invoked. + +When the initial state is loaded from disk, the `CapabilityKeeper`'s `Initialise` function will create +new capability keys for all previously allocated capability identifiers (allocated during execution of +past transactions and assigned to particular modes), and keep them in a memory-only store while the +chain is running. + +The `CapabilityKeeper` will include a persistent `KVStore`, a `MemoryStore`, and an in-memory map. +The persistent `KVStore` tracks which capability is owned by which modules. +The `MemoryStore` stores a forward mapping that map from module name, capability tuples to capability names and +a reverse mapping that map from module name, capability name to the capability index. +Since we cannot marshal the capability into a `KVStore` and unmarshal without changing the memory location of the capability, +the reverse mapping in the KVStore will simply map to an index. This index can then be used as a key in the ephemeral +go-map to retrieve the capability at the original memory location. + +The `CapabilityKeeper` will define the following types & functions: + +The `Capability` is similar to `StoreKey`, but has a globally unique `Index()` instead of +a name. A `String()` method is provided for debugging. + +A `Capability` is simply a struct, the address of which is taken for the actual capability. + +```golang +type Capability struct { + index uint64 +} +``` + +A `CapabilityKeeper` contains a persistent store key, memory store key, and mapping of allocated module names. + +```golang +type CapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleNames map[string]interface{} + sealed bool +} +``` + +The `CapabilityKeeper` provides the ability to create *scoped* sub-keepers which are tied to a +particular module name. These `ScopedCapabilityKeeper`s must be created at application initialisation +and passed to modules, which can then use them to claim capabilities they receive and retrieve +capabilities which they own by name, in addition to creating new capabilities & authenticating capabilities +passed by other modules. + +```golang +type ScopedCapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleName string +} +``` + +`ScopeToModule` is used to create a scoped sub-keeper with a particular name, which must be unique. +It MUST be called before `InitialiseAndSeal`. + +```golang +func (ck CapabilityKeeper) ScopeToModule(moduleName string) ScopedCapabilityKeeper { + if k.sealed { + panic("cannot scope to module via a sealed capability keeper") + } + + if _, ok := k.scopedModules[moduleName]; ok { + panic(fmt.Sprintf("cannot create multiple scoped keepers for the same module name: %s", moduleName)) + } + + k.scopedModules[moduleName] = struct{}{} + + return ScopedKeeper{ + cdc: k.cdc, + storeKey: k.storeKey, + memKey: k.memKey, + capMap: k.capMap, + module: moduleName, + } +} +``` + +`InitialiseAndSeal` MUST be called exactly once, after loading the initial state and creating all +necessary `ScopedCapabilityKeeper`s, in order to populate the memory store with newly-created +capability keys in accordance with the keys previously claimed by particular modules and prevent the +creation of any new `ScopedCapabilityKeeper`s. + +```golang +func (ck CapabilityKeeper) InitialiseAndSeal(ctx Context) { + if ck.sealed { + panic("capability keeper is sealed") + } + + persistentStore := ctx.KVStore(ck.persistentKey) + map := ctx.KVStore(ck.memKey) + + // initialise memory store for all names in persistent store + for index, value := range persistentStore.Iter() { + capability = &CapabilityKey{index: index} + + for moduleAndCapability := range value { + moduleName, capabilityName := moduleAndCapability.Split("/") + memStore.Set(moduleName + "/fwd/" + capability, capabilityName) + memStore.Set(moduleName + "/rev/" + capabilityName, index) + + ck.capMap[index] = capability + } + } + + ck.sealed = true +} +``` + +`NewCapability` can be called by any module to create a new unique, unforgeable object-capability +reference. The newly created capability is automatically persisted; the calling module need not +call `ClaimCapability`. + +```golang +func (sck ScopedCapabilityKeeper) NewCapability(ctx Context, name string) (Capability, error) { + // check name not taken in memory store + if capStore.Get("rev/" + name) != nil { + return nil, errors.New("name already taken") + } + + // fetch the current index + index := persistentStore.Get("index") + + // create a new capability + capability := &CapabilityKey{index: index} + + // set persistent store + persistentStore.Set(index, Set.singleton(sck.moduleName + "/" + name)) + + // update the index + index++ + persistentStore.Set("index", index) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to index + memStore.Set(sck.moduleName + "/rev/" + name, index) + + // set the in-memory mapping from index to capability pointer + capMap[index] = capability + + // return the newly created capability + return capability +} +``` + +`AuthenticateCapability` can be called by any module to check that a capability +does in fact correspond to a particular name (the name can be untrusted user input) +with which the calling module previously associated it. + +```golang +func (sck ScopedCapabilityKeeper) AuthenticateCapability(name string, capability Capability) bool { + // return whether forward mapping in memory store matches name + return memStore.Get(sck.moduleName + "/fwd/" + capability) === name +} +``` + +`ClaimCapability` allows a module to claim a capability key which it has received from another module +so that future `GetCapability` calls will succeed. + +`ClaimCapability` MUST be called if a module which receives a capability wishes to access it by name +in the future. Capabilities are multi-owner, so if multiple modules have a single `Capability` reference, +they will all own it. + +```golang +func (sck ScopedCapabilityKeeper) ClaimCapability(ctx Context, capability Capability, name string) error { + persistentStore := ctx.KVStore(sck.persistentKey) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to capability + memStore.Set(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.add(sck.moduleName + "/" + name) + persistentStore.Set(capability.Index(), owners) +} +``` + +`GetCapability` allows a module to fetch a capability which it has previously claimed by name. +The module is not allowed to retrieve capabilities which it does not own. + +```golang +func (sck ScopedCapabilityKeeper) GetCapability(ctx Context, name string) (Capability, error) { + // fetch the index of capability using reverse mapping in memstore + index := memStore.Get(sck.moduleName + "/rev/" + name) + + // fetch capability from go-map using index + capability := capMap[index] + + // return the capability + return capability +} +``` + +`ReleaseCapability` allows a module to release a capability which it had previously claimed. If no +more owners exist, the capability will be deleted globally. + +```golang +func (sck ScopedCapabilityKeeper) ReleaseCapability(ctx Context, capability Capability) err { + persistentStore := ctx.KVStore(sck.persistentKey) + + name := capStore.Get(sck.moduleName + "/fwd/" + capability) + if name == nil { + return error("capability not owned by module") + } + + // delete forward mapping in memory store + memoryStore.Delete(sck.moduleName + "/fwd/" + capability, name) + + // delete reverse mapping in memory store + memoryStore.Delete(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.remove(sck.moduleName + "/" + name) + if owners.size() > 0 { + // there are still other owners, keep the capability around + persistentStore.Set(capability.Index(), owners) + } else { + // no more owners, delete the capability + persistentStore.Delete(capability.Index()) + delete(capMap[capability.Index()]) + } +} +``` + +### Usage patterns + +#### Initialisation + +Any modules which use dynamic capabilities must be provided a `ScopedCapabilityKeeper` in `app.go`: + +```golang +ck := NewCapabilityKeeper(persistentKey, memoryKey) +mod1Keeper := NewMod1Keeper(ck.ScopeToModule("mod1"), ....) +mod2Keeper := NewMod2Keeper(ck.ScopeToModule("mod2"), ....) + +// other initialisation logic ... + +// load initial state... + +ck.InitialiseAndSeal(initialContext) +``` + +#### Creating, passing, claiming and using capabilities + +Consider the case where `mod1` wants to create a capability, associate it with a resource (e.g. an IBC channel) by name, then pass it to `mod2` which will use it later: + +Module 1 would have the following code: + +```golang +capability := scopedCapabilityKeeper.NewCapability(ctx, "resourceABC") +mod2Keeper.SomeFunction(ctx, capability, args...) +``` + +`SomeFunction`, running in module 2, could then claim the capability: + +```golang +func (k Mod2Keeper) SomeFunction(ctx Context, capability Capability) { + k.sck.ClaimCapability(ctx, capability, "resourceABC") + // other logic... +} +``` + +Later on, module 2 can retrieve that capability by name and pass it to module 1, which will authenticate it against the resource: + +```golang +func (k Mod2Keeper) SomeOtherFunction(ctx Context, name string) { + capability := k.sck.GetCapability(ctx, name) + mod1.UseResource(ctx, capability, "resourceABC") +} +``` + +Module 1 will then check that this capability key is authenticated to use the resource before allowing module 2 to use it: + +```golang +func (k Mod1Keeper) UseResource(ctx Context, capability Capability, resource string) { + if !k.sck.AuthenticateCapability(name, capability) { + return errors.New("unauthenticated") + } + // do something with the resource +} +``` + +If module 2 passed the capability key to module 3, module 3 could then claim it and call module 1 just like module 2 did +(in which case module 1, module 2, and module 3 would all be able to use this capability). + +## Status + +Proposed. + +## Consequences + +### Positive + +* Dynamic capability support. +* Allows CapabilityKeeper to return same capability pointer from go-map while reverting any writes to the persistent `KVStore` and in-memory `MemoryStore` on tx failure. + +### Negative + +* Requires an additional keeper. +* Some overlap with existing `StoreKey` system (in the future they could be combined, since this is a superset functionality-wise). +* Requires an extra level of indirection in the reverse mapping, since MemoryStore must map to index which must then be used as key in a go map to retrieve the actual capability + +### Neutral + +(none known) + +## References + +* [Original discussion](https://github.com/cosmos/cosmos-sdk/pull/5230#discussion_r343978513) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-004-split-denomination-keys.md b/versioned_docs/version-0.46/integrate/architecture/adr-004-split-denomination-keys.md new file mode 100644 index 000000000..3012901b8 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-004-split-denomination-keys.md @@ -0,0 +1,120 @@ +# ADR 004: Split Denomination Keys + +## Changelog + +* 2020-01-08: Initial version +* 2020-01-09: Alterations to handle vesting accounts +* 2020-01-14: Updates from review feedback +* 2020-01-30: Updates from implementation + +### Glossary + +* denom / denomination key -- unique token identifier. + +## Context + +With permissionless IBC, anyone will be able to send arbitrary denominations to any other account. Currently, all non-zero balances are stored along with the account in an `sdk.Coins` struct, which creates a potential denial-of-service concern, as too many denominations will become expensive to load & store each time the account is modified. See issues [5467](https://github.com/cosmos/cosmos-sdk/issues/5467) and [4982](https://github.com/cosmos/cosmos-sdk/issues/4982) for additional context. + +Simply rejecting incoming deposits after a denomination count limit doesn't work, since it opens up a griefing vector: someone could send a user lots of nonsensical coins over IBC, and then prevent the user from receiving real denominations (such as staking rewards). + +## Decision + +Balances shall be stored per-account & per-denomination under a denomination- and account-unique key, thus enabling O(1) read & write access to the balance of a particular account in a particular denomination. + +### Account interface (x/auth) + +`GetCoins()` and `SetCoins()` will be removed from the account interface, since coin balances will +now be stored in & managed by the bank module. + +The vesting account interface will replace `SpendableCoins` in favor of `LockedCoins` which does +not require the account balance anymore. In addition, `TrackDelegation()` will now accept the +account balance of all tokens denominated in the vesting balance instead of loading the entire +account balance. + +Vesting accounts will continue to store original vesting, delegated free, and delegated +vesting coins (which is safe since these cannot contain arbitrary denominations). + +### Bank keeper (x/bank) + +The following APIs will be added to the `x/bank` keeper: + +* `GetAllBalances(ctx Context, addr AccAddress) Coins` +* `GetBalance(ctx Context, addr AccAddress, denom string) Coin` +* `SetBalance(ctx Context, addr AccAddress, coin Coin)` +* `LockedCoins(ctx Context, addr AccAddress) Coins` +* `SpendableCoins(ctx Context, addr AccAddress) Coins` + +Additional APIs may be added to facilitate iteration and auxiliary functionality not essential to +core functionality or persistence. + +Balances will be stored first by the address, then by the denomination (the reverse is also possible, +but retrieval of all balances for a single account is presumed to be more frequent): + +```golang +var BalancesPrefix = []byte("balances") + +func (k Keeper) SetBalance(ctx Context, addr AccAddress, balance Coin) error { + if !balance.IsValid() { + return err + } + + store := ctx.KVStore(k.storeKey) + balancesStore := prefix.NewStore(store, BalancesPrefix) + accountStore := prefix.NewStore(balancesStore, addr.Bytes()) + + bz := Marshal(balance) + accountStore.Set([]byte(balance.Denom), bz) + + return nil +} +``` + +This will result in the balances being indexed by the byte representation of +`balances/{address}/{denom}`. + +`DelegateCoins()` and `UndelegateCoins()` will be altered to only load each individual +account balance by denomination found in the (un)delegation amount. As a result, +any mutations to the account balance by will made by denomination. + +`SubtractCoins()` and `AddCoins()` will be altered to read & write the balances +directly instead of calling `GetCoins()` / `SetCoins()` (which no longer exist). + +`trackDelegation()` and `trackUndelegation()` will be altered to no longer update +account balances. + +External APIs will need to scan all balances under an account to retain backwards-compatibility. It +is advised that these APIs use `GetBalance` and `SetBalance` instead of `GetAllBalances` when +possible as to not load the entire account balance. + +### Supply module + +The supply module, in order to implement the total supply invariant, will now need +to scan all accounts & call `GetAllBalances` using the `x/bank` Keeper, then sum +the balances and check that they match the expected total supply. + +## Status + +Accepted. + +## Consequences + +### Positive + +* O(1) reads & writes of balances (with respect to the number of denominations for +which an account has non-zero balances). Note, this does not relate to the actual +I/O cost, rather the total number of direct reads needed. + +### Negative + +* Slightly less efficient reads/writes when reading & writing all balances of a +single account in a transaction. + +### Neutral + +None in particular. + +## References + +* Ref: https://github.com/cosmos/cosmos-sdk/issues/4982 +* Ref: https://github.com/cosmos/cosmos-sdk/issues/5467 +* Ref: https://github.com/cosmos/cosmos-sdk/issues/5492 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-006-secret-store-replacement.md b/versioned_docs/version-0.46/integrate/architecture/adr-006-secret-store-replacement.md new file mode 100644 index 000000000..fe2e25467 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-006-secret-store-replacement.md @@ -0,0 +1,54 @@ +# ADR 006: Secret Store Replacement + +## Changelog + +* July 29th, 2019: Initial draft +* September 11th, 2019: Work has started +* November 4th: Cosmos SDK changes merged in +* November 18th: Gaia changes merged in + +## Context + +Currently, a Cosmos SDK application's CLI directory stores key material and metadata in a plain text database in the user’s home directory. Key material is encrypted by a passphrase, protected by bcrypt hashing algorithm. Metadata (e.g. addresses, public keys, key storage details) is available in plain text. + +This is not desirable for a number of reasons. Perhaps the biggest reason is insufficient security protection of key material and metadata. Leaking the plain text allows an attacker to surveil what keys a given computer controls via a number of techniques, like compromised dependencies without any privilege execution. This could be followed by a more targeted attack on a particular user/computer. + +All modern desktop computers OS (Ubuntu, Debian, MacOS, Windows) provide a built-in secret store that is designed to allow applications to store information that is isolated from all other applications and requires passphrase entry to access the data. + +We are seeking solution that provides a common abstraction layer to the many different backends and reasonable fallback for minimal platforms that don’t provide a native secret store. + +## Decision + +We recommend replacing the current Keybase backend based on LevelDB with [Keyring](https://github.com/99designs/keyring) by 99 designs. This application is designed to provide a common abstraction and uniform interface between many secret stores and is used by AWS Vault application by 99-designs application. + +This appears to fulfill the requirement of protecting both key material and metadata from rouge software on a user’s machine. + +## Status + +Accepted + +## Consequences + +### Positive + +Increased safety for users. + +### Negative + +Users must manually migrate. + +Testing against all supported backends is difficult. + +Running tests locally on a Mac require numerous repetitive password entries. + +### Neutral + +{neutral consequences} + +## References + +* #4754 Switch secret store to the keyring secret store (original PR by @poldsam) [__CLOSED__] +* #5029 Add support for github.com/99designs/keyring-backed keybases [__MERGED__] +* #5097 Add keys migrate command [__MERGED__] +* #5180 Drop on-disk keybase in favor of keyring [_PENDING_REVIEW_] +* cosmos/gaia#164 Drop on-disk keybase in favor of keyring (gaia's changes) [_PENDING_REVIEW_] diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-007-specialization-groups.md b/versioned_docs/version-0.46/integrate/architecture/adr-007-specialization-groups.md new file mode 100644 index 000000000..58f78abf5 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-007-specialization-groups.md @@ -0,0 +1,177 @@ +# ADR 007: Specialization Groups + +## Changelog + +* 2019 Jul 31: Initial Draft + +## Context + +This idea was first conceived of in order to fulfill the use case of the +creation of a decentralized Computer Emergency Response Team (dCERT), whose +members would be elected by a governing community and would fulfill the role of +coordinating the community under emergency situations. This thinking +can be further abstracted into the conception of "blockchain specialization +groups". + +The creation of these groups are the beginning of specialization capabilities +within a wider blockchain community which could be used to enable a certain +level of delegated responsibilities. Examples of specialization which could be +beneficial to a blockchain community include: code auditing, emergency response, +code development etc. This type of community organization paves the way for +individual stakeholders to delegate votes by issue type, if in the future +governance proposals include a field for issue type. + +## Decision + +A specialization group can be broadly broken down into the following functions +(herein containing examples): + +* Membership Admittance +* Membership Acceptance +* Membership Revocation + * (probably) Without Penalty + * member steps down (self-Revocation) + * replaced by new member from governance + * (probably) With Penalty + * due to breach of soft-agreement (determined through governance) + * due to breach of hard-agreement (determined by code) +* Execution of Duties + * Special transactions which only execute for members of a specialization + group (for example, dCERT members voting to turn off transaction routes in + an emergency scenario) +* Compensation + * Group compensation (further distribution decided by the specialization group) + * Individual compensation for all constituents of a group from the + greater community + +Membership admittance to a specialization group could take place over a wide +variety of mechanisms. The most obvious example is through a general vote among +the entire community, however in certain systems a community may want to allow +the members already in a specialization group to internally elect new members, +or maybe the community may assign a permission to a particular specialization +group to appoint members to other 3rd party groups. The sky is really the limit +as to how membership admittance can be structured. We attempt to capture +some of these possiblities in a common interface dubbed the `Electionator`. For +its initial implementation as a part of this ADR we recommend that the general +election abstraction (`Electionator`) is provided as well as a basic +implementation of that abstraction which allows for a continuous election of +members of a specialization group. + +``` golang +// The Electionator abstraction covers the concept space for +// a wide variety of election kinds. +type Electionator interface { + + // is the election object accepting votes. + Active() bool + + // functionality to execute for when a vote is cast in this election, here + // the vote field is anticipated to be marshalled into a vote type used + // by an election. + // + // NOTE There are no explicit ids here. Just votes which pertain specifically + // to one electionator. Anyone can create and send a vote to the electionator item + // which will presumably attempt to marshal those bytes into a particular struct + // and apply the vote information in some arbitrary way. There can be multiple + // Electionators within the Cosmos-Hub for multiple specialization groups, votes + // would need to be routed to the Electionator upstream of here. + Vote(addr sdk.AccAddress, vote []byte) + + // here lies all functionality to authenticate and execute changes for + // when a member accepts being elected + AcceptElection(sdk.AccAddress) + + // Register a revoker object + RegisterRevoker(Revoker) + + // No more revokers may be registered after this function is called + SealRevokers() + + // register hooks to call when an election actions occur + RegisterHooks(ElectionatorHooks) + + // query for the current winner(s) of this election based on arbitrary + // election ruleset + QueryElected() []sdk.AccAddress + + // query metadata for an address in the election this + // could include for example position that an address + // is being elected for within a group + // + // this metadata may be directly related to + // voting information and/or privileges enabled + // to members within a group. + QueryMetadata(sdk.AccAddress) []byte +} + +// ElectionatorHooks, once registered with an Electionator, +// trigger execution of relevant interface functions when +// Electionator events occur. +type ElectionatorHooks interface { + AfterVoteCast(addr sdk.AccAddress, vote []byte) + AfterMemberAccepted(addr sdk.AccAddress) + AfterMemberRevoked(addr sdk.AccAddress, cause []byte) +} + +// Revoker defines the function required for a membership revocation rule-set +// used by a specialization group. This could be used to create self revoking, +// and evidence based revoking, etc. Revokers types may be created and +// reused for different election types. +// +// When revoking the "cause" bytes may be arbitrarily marshalled into evidence, +// memos, etc. +type Revoker interface { + RevokeName() string // identifier for this revoker type + RevokeMember(addr sdk.AccAddress, cause []byte) error +} +``` + +Certain level of commonality likely exists between the existing code within +`x/governance` and required functionality of elections. This common +functionality should be abstracted during implementation. Similarly for each +vote implementation client CLI/REST functionality should be abstracted +to be reused for multiple elections. + +The specialization group abstraction firstly extends the `Electionator` +but also further defines traits of the group. + +``` golang +type SpecializationGroup interface { + Electionator + GetName() string + GetDescription() string + + // general soft contract the group is expected + // to fulfill with the greater community + GetContract() string + + // messages which can be executed by the members of the group + Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result + + // logic to be executed at endblock, this may for instance + // include payment of a stipend to the group members + // for participation in the security group. + EndBlocker(ctx sdk.Context) +} +``` + +## Status + +> Proposed + +## Consequences + +### Positive + +* increases specialization capabilities of a blockchain +* improve abstractions in `x/gov/` such that they can be used with specialization groups + +### Negative + +* could be used to increase centralization within a community + +### Neutral + +## References + +* [dCERT ADR](./adr-008-dCERT-group.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-008-dCERT-group.md b/versioned_docs/version-0.46/integrate/architecture/adr-008-dCERT-group.md new file mode 100644 index 000000000..2b2d2b826 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-008-dCERT-group.md @@ -0,0 +1,171 @@ +# ADR 008: Decentralized Computer Emergency Response Team (dCERT) Group + +## Changelog + +* 2019 Jul 31: Initial Draft + +## Context + +In order to reduce the number of parties involved with handling sensitive +information in an emergency scenario, we propose the creation of a +specialization group named The Decentralized Computer Emergency Response Team +(dCERT). Initially this group's role is intended to serve as coordinators +between various actors within a blockchain community such as validators, +bug-hunters, and developers. During a time of crisis, the dCERT group would +aggregate and relay input from a variety of stakeholders to the developers who +are actively devising a patch to the software, this way sensitive information +does not need to be publicly disclosed while some input from the community can +still be gained. + +Additionally, a special privilege is proposed for the dCERT group: the capacity +to "circuit-break" (aka. temporarily disable) a particular message path. Note +that this privilege should be enabled/disabled globally with a governance +parameter such that this privilege could start disabled and later be enabled +through a parameter change proposal, once a dCERT group has been established. + +In the future it is foreseeable that the community may wish to expand the roles +of dCERT with further responsibilities such as the capacity to "pre-approve" a +security update on behalf of the community prior to a full community +wide vote whereby the sensitive information would be revealed prior to a +vulnerability being patched on the live network. + +## Decision + +The dCERT group is proposed to include an implementation of a `SpecializationGroup` +as defined in [ADR 007](./adr-007-specialization-groups.md). This will include the +implementation of: + +* continuous voting +* slashing due to breach of soft contract +* revoking a member due to breach of soft contract +* emergency disband of the entire dCERT group (ex. for colluding maliciously) +* compensation stipend from the community pool or other means decided by + governance + +This system necessitates the following new parameters: + +* blockly stipend allowance per dCERT member +* maximum number of dCERT members +* required staked slashable tokens for each dCERT member +* quorum for suspending a particular member +* proposal wager for disbanding the dCERT group +* stabilization period for dCERT member transition +* circuit break dCERT privileges enabled + +These parameters are expected to be implemented through the param keeper such +that governance may change them at any given point. + +### Continuous Voting Electionator + +An `Electionator` object is to be implemented as continuous voting and with the +following specifications: + +* All delegation addresses may submit votes at any point which updates their + preferred representation on the dCERT group. +* Preferred representation may be arbitrarily split between addresses (ex. 50% + to John, 25% to Sally, 25% to Carol) +* In order for a new member to be added to the dCERT group they must + send a transaction accepting their admission at which point the validity of + their admission is to be confirmed. + * A sequence number is assigned when a member is added to dCERT group. + If a member leaves the dCERT group and then enters back, a new sequence number + is assigned. +* Addresses which control the greatest amount of preferred-representation are + eligible to join the dCERT group (up the _maximum number of dCERT members_). + If the dCERT group is already full and new member is admitted, the existing + dCERT member with the lowest amount of votes is kicked from the dCERT group. + * In the split situation where the dCERT group is full but a vying candidate + has the same amount of vote as an existing dCERT member, the existing + member should maintain its position. + * In the split situation where somebody must be kicked out but the two + addresses with the smallest number of votes have the same number of votes, + the address with the smallest sequence number maintains its position. +* A stabilization period can be optionally included to reduce the + "flip-flopping" of the dCERT membership tail members. If a stabilization + period is provided which is greater than 0, when members are kicked due to + insufficient support, a queue entry is created which documents which member is + to replace which other member. While this entry is in the queue, no new entries + to kick that same dCERT member can be made. When the entry matures at the + duration of the stabilization period, the new member is instantiated, and old + member kicked. + +### Staking/Slashing + +All members of the dCERT group must stake tokens _specifically_ to maintain +eligibility as a dCERT member. These tokens can be staked directly by the vying +dCERT member or out of the good will of a 3rd party (who shall gain no on-chain +benefits for doing so). This staking mechanism should use the existing global +unbonding time of tokens staked for network validator security. A dCERT member +can _only be_ a member if it has the required tokens staked under this +mechanism. If those tokens are unbonded then the dCERT member must be +automatically kicked from the group. + +Slashing of a particular dCERT member due to soft-contract breach should be +performed by governance on a per member basis based on the magnitude of the +breach. The process flow is anticipated to be that a dCERT member is suspended +by the dCERT group prior to being slashed by governance. + +Membership suspension by the dCERT group takes place through a voting procedure +by the dCERT group members. After this suspension has taken place, a governance +proposal to slash the dCERT member must be submitted, if the proposal is not +approved by the time the rescinding member has completed unbonding their +tokens, then the tokens are no longer staked and unable to be slashed. + +Additionally in the case of an emergency situation of a colluding and malicious +dCERT group, the community needs the capability to disband the entire dCERT +group and likely fully slash them. This could be achieved though a special new +proposal type (implemented as a general governance proposal) which would halt +the functionality of the dCERT group until the proposal was concluded. This +special proposal type would likely need to also have a fairly large wager which +could be slashed if the proposal creator was malicious. The reason a large +wager should be required is because as soon as the proposal is made, the +capability of the dCERT group to halt message routes is put on temporarily +suspended, meaning that a malicious actor who created such a proposal could +then potentially exploit a bug during this period of time, with no dCERT group +capable of shutting down the exploitable message routes. + +### dCERT membership transactions + +Active dCERT members + +* change of the description of the dCERT group +* circuit break a message route +* vote to suspend a dCERT member. + +Here circuit-breaking refers to the capability to disable a groups of messages, +This could for instance mean: "disable all staking-delegation messages", or +"disable all distribution messages". This could be accomplished by verifying +that the message route has not been "circuit-broken" at CheckTx time (in +`baseapp/baseapp.go`). + +"unbreaking" a circuit is anticipated only to occur during a hard fork upgrade +meaning that no capability to unbreak a message route on a live chain is +required. + +Note also, that if there was a problem with governance voting (for instance a +capability to vote many times) then governance would be broken and should be +halted with this mechanism, it would be then up to the validator set to +coordinate and hard-fork upgrade to a patched version of the software where +governance is re-enabled (and fixed). If the dCERT group abuses this privilege +they should all be severely slashed. + +## Status + +> Proposed + +## Consequences + +### Positive + +* Potential to reduces the number of parties to coordinate with during an emergency +* Reduction in possibility of disclosing sensitive information to malicious parties + +### Negative + +* Centralization risks + +### Neutral + +## References + + [Specialization Groups ADR](./adr-007-specialization-groups.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-009-evidence-module.md b/versioned_docs/version-0.46/integrate/architecture/adr-009-evidence-module.md new file mode 100644 index 000000000..ded04a142 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-009-evidence-module.md @@ -0,0 +1,182 @@ +# ADR 009: Evidence Module + +## Changelog + +* 2019 July 31: Initial draft +* 2019 October 24: Initial implementation + +## Status + +Accepted + +## Context + +In order to support building highly secure, robust and interoperable blockchain +applications, it is vital for the Cosmos SDK to expose a mechanism in which arbitrary +evidence can be submitted, evaluated and verified resulting in some agreed upon +penalty for any misbehavior committed by a validator, such as equivocation (double-voting), +signing when unbonded, signing an incorrect state transition (in the future), etc. +Furthermore, such a mechanism is paramount for any +[IBC](https://github.com/cosmos/ics/blob/master/ibc/2_IBC_ARCHITECTURE.md) or +cross-chain validation protocol implementation in order to support the ability +for any misbehavior to be relayed back from a collateralized chain to a primary +chain so that the equivocating validator(s) can be slashed. + +## Decision + +We will implement an evidence module in the Cosmos SDK supporting the following +functionality: + +* Provide developers with the abstractions and interfaces necessary to define + custom evidence messages, message handlers, and methods to slash and penalize + accordingly for misbehavior. +* Support the ability to route evidence messages to handlers in any module to + determine the validity of submitted misbehavior. +* Support the ability, through governance, to modify slashing penalties of any + evidence type. +* Querier implementation to support querying params, evidence types, params, and + all submitted valid misbehavior. + +### Types + +First, we define the `Evidence` interface type. The `x/evidence` module may implement +its own types that can be used by many chains (e.g. `CounterFactualEvidence`). +In addition, other modules may implement their own `Evidence` types in a similar +manner in which governance is extensible. It is important to note any concrete +type implementing the `Evidence` interface may include arbitrary fields such as +an infraction time. We want the `Evidence` type to remain as flexible as possible. + +When submitting evidence to the `x/evidence` module, the concrete type must provide +the validator's consensus address, which should be known by the `x/slashing` +module (assuming the infraction is valid), the height at which the infraction +occurred and the validator's power at same height in which the infraction occurred. + +```go +type Evidence interface { + Route() string + Type() string + String() string + Hash() HexBytes + ValidateBasic() error + + // The consensus address of the malicious validator at time of infraction + GetConsensusAddress() ConsAddress + + // Height at which the infraction occurred + GetHeight() int64 + + // The total power of the malicious validator at time of infraction + GetValidatorPower() int64 + + // The total validator set power at time of infraction + GetTotalPower() int64 +} +``` + +### Routing & Handling + +Each `Evidence` type must map to a specific unique route and be registered with +the `x/evidence` module. It accomplishes this through the `Router` implementation. + +```go +type Router interface { + AddRoute(r string, h Handler) Router + HasRoute(r string) bool + GetRoute(path string) Handler + Seal() +} +``` + +Upon successful routing through the `x/evidence` module, the `Evidence` type +is passed through a `Handler`. This `Handler` is responsible for executing all +corresponding business logic necessary for verifying the evidence as valid. In +addition, the `Handler` may execute any necessary slashing and potential jailing. +Since slashing fractions will typically result from some form of static functions, +allow the `Handler` to do this provides the greatest flexibility. An example could +be `k * evidence.GetValidatorPower()` where `k` is an on-chain parameter controlled +by governance. The `Evidence` type should provide all the external information +necessary in order for the `Handler` to make the necessary state transitions. +If no error is returned, the `Evidence` is considered valid. + +```go +type Handler func(Context, Evidence) error +``` + +### Submission + +`Evidence` is submitted through a `MsgSubmitEvidence` message type which is internally +handled by the `x/evidence` module's `SubmitEvidence`. + +```go +type MsgSubmitEvidence struct { + Evidence +} + +func handleMsgSubmitEvidence(ctx Context, keeper Keeper, msg MsgSubmitEvidence) Result { + if err := keeper.SubmitEvidence(ctx, msg.Evidence); err != nil { + return err.Result() + } + + // emit events... + + return Result{ + // ... + } +} +``` + +The `x/evidence` module's keeper is responsible for matching the `Evidence` against +the module's router and invoking the corresponding `Handler` which may include +slashing and jailing the validator. Upon success, the submitted evidence is persisted. + +```go +func (k Keeper) SubmitEvidence(ctx Context, evidence Evidence) error { + handler := keeper.router.GetRoute(evidence.Route()) + if err := handler(ctx, evidence); err != nil { + return ErrInvalidEvidence(keeper.codespace, err) + } + + keeper.setEvidence(ctx, evidence) + return nil +} +``` + +### Genesis + +Finally, we need to represent the genesis state of the `x/evidence` module. The +module only needs a list of all submitted valid infractions and any necessary params +for which the module needs in order to handle submitted evidence. The `x/evidence` +module will naturally define and route native evidence types for which it'll most +likely need slashing penalty constants for. + +```go +type GenesisState struct { + Params Params + Infractions []Evidence +} +``` + +## Consequences + +### Positive + +* Allows the state machine to process misbehavior submitted on-chain and penalize + validators based on agreed upon slashing parameters. +* Allows evidence types to be defined and handled by any module. This further allows + slashing and jailing to be defined by more complex mechanisms. +* Does not solely rely on Tendermint to submit evidence. + +### Negative + +* No easy way to introduce new evidence types through governance on a live chain + due to the inability to introduce the new evidence type's corresponding handler + +### Neutral + +* Should we persist infractions indefinitely? Or should we rather rely on events? + +## References + +* [ICS](https://github.com/cosmos/ics) +* [IBC Architecture](https://github.com/cosmos/ics/blob/master/ibc/1_IBC_ARCHITECTURE.md) +* [Tendermint Fork Accountability](https://github.com/tendermint/spec/blob/7b3138e69490f410768d9b1ffc7a17abc23ea397/spec/consensus/fork-accountability.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-010-modular-antehandler.md b/versioned_docs/version-0.46/integrate/architecture/adr-010-modular-antehandler.md new file mode 100644 index 000000000..386af1a77 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-010-modular-antehandler.md @@ -0,0 +1,290 @@ +# ADR 010: Modular AnteHandler + +## Changelog + +* 2019 Aug 31: Initial draft +* 2021 Sep 14: Superseded by ADR-045 + +## Status + +SUPERSEDED by ADR-045 + +## Context + +The current AnteHandler design allows users to either use the default AnteHandler provided in `x/auth` or to build their own AnteHandler from scratch. Ideally AnteHandler functionality is split into multiple, modular functions that can be chained together along with custom ante-functions so that users do not have to rewrite common antehandler logic when they want to implement custom behavior. + +For example, let's say a user wants to implement some custom signature verification logic. In the current codebase, the user would have to write their own Antehandler from scratch largely reimplementing much of the same code and then set their own custom, monolithic antehandler in the baseapp. Instead, we would like to allow users to specify custom behavior when necessary and combine them with default ante-handler functionality in a way that is as modular and flexible as possible. + +## Proposals + +### Per-Module AnteHandler + +One approach is to use the [ModuleManager](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types/module) and have each module implement its own antehandler if it requires custom antehandler logic. The ModuleManager can then be passed in an AnteHandler order in the same way it has an order for BeginBlockers and EndBlockers. The ModuleManager returns a single AnteHandler function that will take in a tx and run each module's `AnteHandle` in the specified order. The module manager's AnteHandler is set as the baseapp's AnteHandler. + +Pros: + +1. Simple to implement +2. Utilizes the existing ModuleManager architecture + +Cons: + +1. Improves granularity but still cannot get more granular than a per-module basis. e.g. If auth's `AnteHandle` function is in charge of validating memo and signatures, users cannot swap the signature-checking functionality while keeping the rest of auth's `AnteHandle` functionality. +2. Module AnteHandler are run one after the other. There is no way for one AnteHandler to wrap or "decorate" another. + +### Decorator Pattern + +The [weave project](https://github.com/iov-one/weave) achieves AnteHandler modularity through the use of a decorator pattern. The interface is designed as follows: + +```go +// Decorator wraps a Handler to provide common functionality +// like authentication, or fee-handling, to many Handlers +type Decorator interface { + Check(ctx Context, store KVStore, tx Tx, next Checker) (*CheckResult, error) + Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) (*DeliverResult, error) +} +``` + +Each decorator works like a modularized Cosmos SDK antehandler function, but it can take in a `next` argument that may be another decorator or a Handler (which does not take in a next argument). These decorators can be chained together, one decorator being passed in as the `next` argument of the previous decorator in the chain. The chain ends in a Router which can take a tx and route to the appropriate msg handler. + +A key benefit of this approach is that one Decorator can wrap its internal logic around the next Checker/Deliverer. A weave Decorator may do the following: + +```go +// Example Decorator's Deliver function +func (example Decorator) Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) { + // Do some pre-processing logic + + res, err := next.Deliver(ctx, store, tx) + + // Do some post-processing logic given the result and error +} +``` + +Pros: + +1. Weave Decorators can wrap over the next decorator/handler in the chain. The ability to both pre-process and post-process may be useful in certain settings. +2. Provides a nested modular structure that isn't possible in the solution above, while also allowing for a linear one-after-the-other structure like the solution above. + +Cons: + +1. It is hard to understand at first glance the state updates that would occur after a Decorator runs given the `ctx`, `store`, and `tx`. A Decorator can have an arbitrary number of nested Decorators being called within its function body, each possibly doing some pre- and post-processing before calling the next decorator on the chain. Thus to understand what a Decorator is doing, one must also understand what every other decorator further along the chain is also doing. This can get quite complicated to understand. A linear, one-after-the-other approach while less powerful, may be much easier to reason about. + +### Chained Micro-Functions + +The benefit of Weave's approach is that the Decorators can be very concise, which when chained together allows for maximum customizability. However, the nested structure can get quite complex and thus hard to reason about. + +Another approach is to split the AnteHandler functionality into tightly scoped "micro-functions", while preserving the one-after-the-other ordering that would come from the ModuleManager approach. + +We can then have a way to chain these micro-functions so that they run one after the other. Modules may define multiple ante micro-functions and then also provide a default per-module AnteHandler that implements a default, suggested order for these micro-functions. + +Users can order the AnteHandlers easily by simply using the ModuleManager. The ModuleManager will take in a list of AnteHandlers and return a single AnteHandler that runs each AnteHandler in the order of the list provided. If the user is comfortable with the default ordering of each module, this is as simple as providing a list with each module's antehandler (exactly the same as BeginBlocker and EndBlocker). + +If however, users wish to change the order or add, modify, or delete ante micro-functions in anyway; they can always define their own ante micro-functions and add them explicitly to the list that gets passed into module manager. + +#### Default Workflow + +This is an example of a user's AnteHandler if they choose not to make any custom micro-functions. + +##### Cosmos SDK code + +```go +// Chains together a list of AnteHandler micro-functions that get run one after the other. +// Returned AnteHandler will abort on first error. +func Chainer(order []AnteHandler) AnteHandler { + return func(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + for _, ante := range order { + ctx, err := ante(ctx, tx, simulate) + if err != nil { + return ctx, err + } + } + return ctx, err + } +} +``` + +```go +// AnteHandler micro-function to verify signatures +func VerifySignatures(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // verify signatures + // Returns InvalidSignature Result and abort=true if sigs invalid + // Return OK result and abort=false if sigs are valid +} + +// AnteHandler micro-function to validate memo +func ValidateMemo(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // validate memo +} + +// Auth defines its own default ante-handler by chaining its micro-functions in a recommended order +AuthModuleAnteHandler := Chainer([]AnteHandler{VerifySignatures, ValidateMemo}) +``` + +```go +// Distribution micro-function to deduct fees from tx +func DeductFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // Deduct fees from tx + // Abort if insufficient funds in account to pay for fees +} + +// Distribution micro-function to check if fees > mempool parameter +func CheckMempoolFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // If CheckTx: Abort if the fees are less than the mempool's minFee parameter +} + +// Distribution defines its own default ante-handler by chaining its micro-functions in a recommended order +DistrModuleAnteHandler := Chainer([]AnteHandler{CheckMempoolFees, DeductFees}) +``` + +```go +type ModuleManager struct { + // other fields + AnteHandlerOrder []AnteHandler +} + +func (mm ModuleManager) GetAnteHandler() AnteHandler { + retun Chainer(mm.AnteHandlerOrder) +} +``` + +##### User Code + +```go +// Note: Since user is not making any custom modifications, we can just SetAnteHandlerOrder with the default AnteHandlers provided by each module in our preferred order +moduleManager.SetAnteHandlerOrder([]AnteHandler(AuthModuleAnteHandler, DistrModuleAnteHandler)) + +app.SetAnteHandler(mm.GetAnteHandler()) +``` + +#### Custom Workflow + +This is an example workflow for a user that wants to implement custom antehandler logic. In this example, the user wants to implement custom signature verification and change the order of antehandler so that validate memo runs before signature verification. + +##### User Code + +```go +// User can implement their own custom signature verification antehandler micro-function +func CustomSigVerify(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // do some custom signature verification logic +} +``` + +```go +// Micro-functions allow users to change order of when they get executed, and swap out default ante-functionality with their own custom logic. +// Note that users can still chain the default distribution module handler, and auth micro-function along with their custom ante function +moduleManager.SetAnteHandlerOrder([]AnteHandler(ValidateMemo, CustomSigVerify, DistrModuleAnteHandler)) +``` + +Pros: + +1. Allows for ante functionality to be as modular as possible. +2. For users that do not need custom ante-functionality, there is little difference between how antehandlers work and how BeginBlock and EndBlock work in ModuleManager. +3. Still easy to understand + +Cons: + +1. Cannot wrap antehandlers with decorators like you can with Weave. + +### Simple Decorators + +This approach takes inspiration from Weave's decorator design while trying to minimize the number of breaking changes to the Cosmos SDK and maximizing simplicity. Like Weave decorators, this approach allows one `AnteDecorator` to wrap the next AnteHandler to do pre- and post-processing on the result. This is useful since decorators can do defer/cleanups after an AnteHandler returns as well as perform some setup beforehand. Unlike Weave decorators, these `AnteDecorator` functions can only wrap over the AnteHandler rather than the entire handler execution path. This is deliberate as we want decorators from different modules to perform authentication/validation on a `tx`. However, we do not want decorators being capable of wrapping and modifying the results of a `MsgHandler`. + +In addition, this approach will not break any core Cosmos SDK API's. Since we preserve the notion of an AnteHandler and still set a single AnteHandler in baseapp, the decorator is simply an additional approach available for users that desire more customization. The API of modules (namely `x/auth`) may break with this approach, but the core API remains untouched. + +Allow Decorator interface that can be chained together to create a Cosmos SDK AnteHandler. + +This allows users to choose between implementing an AnteHandler by themselves and setting it in the baseapp, or use the decorator pattern to chain their custom decorators with the Cosmos SDK provided decorators in the order they wish. + +```go +// An AnteDecorator wraps an AnteHandler, and can do pre- and post-processing on the next AnteHandler +type AnteDecorator interface { + AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) +} +``` + +```go +// ChainAnteDecorators will recursively link all of the AnteDecorators in the chain and return a final AnteHandler function +// This is done to preserve the ability to set a single AnteHandler function in the baseapp. +func ChainAnteDecorators(chain ...AnteDecorator) AnteHandler { + if len(chain) == 1 { + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, nil) + } + } + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, ChainAnteDecorators(chain[1:])) + } +} +``` + +#### Example Code + +Define AnteDecorator functions + +```go +// Setup GasMeter, catch OutOfGasPanic and handle appropriately +type SetUpContextDecorator struct{} + +func (sud SetUpContextDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + ctx.GasMeter = NewGasMeter(tx.Gas) + + defer func() { + // recover from OutOfGas panic and handle appropriately + } + + return next(ctx, tx, simulate) +} + +// Signature Verification decorator. Verify Signatures and move on +type SigVerifyDecorator struct{} + +func (svd SigVerifyDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // verify sigs. Return error if invalid + + // call next antehandler if sigs ok + return next(ctx, tx, simulate) +} + +// User-defined Decorator. Can choose to pre- and post-process on AnteHandler +type UserDefinedDecorator struct{ + // custom fields +} + +func (udd UserDefinedDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // pre-processing logic + + ctx, err = next(ctx, tx, simulate) + + // post-processing logic +} +``` + +Link AnteDecorators to create a final AnteHandler. Set this AnteHandler in baseapp. + +```go +// Create final antehandler by chaining the decorators together +antehandler := ChainAnteDecorators(NewSetUpContextDecorator(), NewSigVerifyDecorator(), NewUserDefinedDecorator()) + +// Set chained Antehandler in the baseapp +bapp.SetAnteHandler(antehandler) +``` + +Pros: + +1. Allows one decorator to pre- and post-process the next AnteHandler, similar to the Weave design. +2. Do not need to break baseapp API. Users can still set a single AnteHandler if they choose. + +Cons: + +1. Decorator pattern may have a deeply nested structure that is hard to understand, this is mitigated by having the decorator order explicitly listed in the `ChainAnteDecorators` function. +2. Does not make use of the ModuleManager design. Since this is already being used for BeginBlocker/EndBlocker, this proposal seems unaligned with that design pattern. + +## Consequences + +Since pros and cons are written for each approach, it is omitted from this section + +## References + +* [#4572](https://github.com/cosmos/cosmos-sdk/issues/4572): Modular AnteHandler Issue +* [#4582](https://github.com/cosmos/cosmos-sdk/pull/4583): Initial Implementation of Per-Module AnteHandler Approach +* [Weave Decorator Code](https://github.com/iov-one/weave/blob/master/handler.go#L35) +* [Weave Design Videos](https://vimeo.com/showcase/6189877) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-011-generalize-genesis-accounts.md b/versioned_docs/version-0.46/integrate/architecture/adr-011-generalize-genesis-accounts.md new file mode 100644 index 000000000..92a704ba6 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-011-generalize-genesis-accounts.md @@ -0,0 +1,170 @@ +# ADR 011: Generalize Genesis Accounts + +## Changelog + +* 2019-08-30: initial draft + +## Context + +Currently, the Cosmos SDK allows for custom account types; the `auth` keeper stores any type fulfilling its `Account` interface. However `auth` does not handle exporting or loading accounts to/from a genesis file, this is done by `genaccounts`, which only handles one of 4 concrete account types (`BaseAccount`, `ContinuousVestingAccount`, `DelayedVestingAccount` and `ModuleAccount`). + +Projects desiring to use custom accounts (say custom vesting accounts) need to fork and modify `genaccounts`. + +## Decision + +In summary, we will (un)marshal all accounts (interface types) directly using amino, rather than converting to `genaccounts`’s `GenesisAccount` type. Since doing this removes the majority of `genaccounts`'s code, we will merge `genaccounts` into `auth`. Marshalled accounts will be stored in `auth`'s genesis state. + +Detailed changes: + +### 1) (Un)Marshal accounts directly using amino + +The `auth` module's `GenesisState` gains a new field `Accounts`. Note these aren't of type `exported.Account` for reasons outlined in section 3. + +```go +// GenesisState - all auth state that must be provided at genesis +type GenesisState struct { + Params Params `json:"params" yaml:"params"` + Accounts []GenesisAccount `json:"accounts" yaml:"accounts"` +} +``` + +Now `auth`'s `InitGenesis` and `ExportGenesis` (un)marshal accounts as well as the defined params. + +```go +// InitGenesis - Init store state from genesis data +func InitGenesis(ctx sdk.Context, ak AccountKeeper, data GenesisState) { + ak.SetParams(ctx, data.Params) + // load the accounts + for _, a := range data.Accounts { + acc := ak.NewAccount(ctx, a) // set account number + ak.SetAccount(ctx, acc) + } +} + +// ExportGenesis returns a GenesisState for a given context and keeper +func ExportGenesis(ctx sdk.Context, ak AccountKeeper) GenesisState { + params := ak.GetParams(ctx) + + var genAccounts []exported.GenesisAccount + ak.IterateAccounts(ctx, func(account exported.Account) bool { + genAccount := account.(exported.GenesisAccount) + genAccounts = append(genAccounts, genAccount) + return false + }) + + return NewGenesisState(params, genAccounts) +} +``` + +### 2) Register custom account types on the `auth` codec + +The `auth` codec must have all custom account types registered to marshal them. We will follow the pattern established in `gov` for proposals. + +An example custom account definition: + +```go +import authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + +// Register the module account type with the auth module codec so it can decode module accounts stored in a genesis file +func init() { + authtypes.RegisterAccountTypeCodec(ModuleAccount{}, "cosmos-sdk/ModuleAccount") +} + +type ModuleAccount struct { + ... +``` + +The `auth` codec definition: + +```go +var ModuleCdc *codec.LegacyAmino + +func init() { + ModuleCdc = codec.NewLegacyAmino() + // register module msg's and Account interface + ... + // leave the codec unsealed +} + +// RegisterAccountTypeCodec registers an external account type defined in another module for the internal ModuleCdc. +func RegisterAccountTypeCodec(o interface{}, name string) { + ModuleCdc.RegisterConcrete(o, name, nil) +} +``` + +### 3) Genesis validation for custom account types + +Modules implement a `ValidateGenesis` method. As `auth` does not know of account implementations, accounts will need to validate themselves. + +We will unmarshal accounts into a `GenesisAccount` interface that includes a `Validate` method. + +```go +type GenesisAccount interface { + exported.Account + Validate() error +} +``` + +Then the `auth` `ValidateGenesis` function becomes: + +```go +// ValidateGenesis performs basic validation of auth genesis data returning an +// error for any failed validation criteria. +func ValidateGenesis(data GenesisState) error { + // Validate params + ... + + // Validate accounts + addrMap := make(map[string]bool, len(data.Accounts)) + for _, acc := range data.Accounts { + + // check for duplicated accounts + addrStr := acc.GetAddress().String() + if _, ok := addrMap[addrStr]; ok { + return fmt.Errorf("duplicate account found in genesis state; address: %s", addrStr) + } + addrMap[addrStr] = true + + // check account specific validation + if err := acc.Validate(); err != nil { + return fmt.Errorf("invalid account found in genesis state; address: %s, error: %s", addrStr, err.Error()) + } + + } + return nil +} +``` + +### 4) Move add-genesis-account cli to `auth` + +The `genaccounts` module contains a cli command to add base or vesting accounts to a genesis file. + +This will be moved to `auth`. We will leave it to projects to write their own commands to add custom accounts. An extensible cli handler, similar to `gov`, could be created but it is not worth the complexity for this minor use case. + +### 5) Update module and vesting accounts + +Under the new scheme, module and vesting account types need some minor updates: + +* Type registration on `auth`'s codec (shown above) +* A `Validate` method for each `Account` concrete type + +## Status + +Proposed + +## Consequences + +### Positive + +* custom accounts can be used without needing to fork `genaccounts` +* reduction in lines of code + +### Negative + +### Neutral + +* `genaccounts` module no longer exists +* accounts in genesis files are stored under `accounts` in `auth` rather than in the `genaccounts` module. +-`add-genesis-account` cli command now in `auth` + +## References diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-012-state-accessors.md b/versioned_docs/version-0.46/integrate/architecture/adr-012-state-accessors.md new file mode 100644 index 000000000..93600000f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-012-state-accessors.md @@ -0,0 +1,155 @@ +# ADR 012: State Accessors + +## Changelog + +* 2019 Sep 04: Initial draft + +## Context + +Cosmos SDK modules currently use the `KVStore` interface and `Codec` to access their respective state. While +this provides a large degree of freedom to module developers, it is hard to modularize and the UX is +mediocre. + +First, each time a module tries to access the state, it has to marshal the value and set or get the +value and finally unmarshal. Usually this is done by declaring `Keeper.GetXXX` and `Keeper.SetXXX` functions, +which are repetitive and hard to maintain. + +Second, this makes it harder to align with the object capability theorem: the right to access the +state is defined as a `StoreKey`, which gives full access on the entire Merkle tree, so a module cannot +send the access right to a specific key-value pair (or a set of key-value pairs) to another module safely. + +Finally, because the getter/setter functions are defined as methods of a module's `Keeper`, the reviewers +have to consider the whole Merkle tree space when they reviewing a function accessing any part of the state. +There is no static way to know which part of the state that the function is accessing (and which is not). + +## Decision + +We will define a type named `Value`: + +```go +type Value struct { + m Mapping + key []byte +} +``` + +The `Value` works as a reference for a key-value pair in the state, where `Value.m` defines the key-value +space it will access and `Value.key` defines the exact key for the reference. + +We will define a type named `Mapping`: + +```go +type Mapping struct { + storeKey sdk.StoreKey + cdc *codec.LegacyAmino + prefix []byte +} +``` + +The `Mapping` works as a reference for a key-value space in the state, where `Mapping.storeKey` defines +the IAVL (sub-)tree and `Mapping.prefix` defines the optional subspace prefix. + +We will define the following core methods for the `Value` type: + +```go +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Value) Get(ctx Context, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Value) GetSafe(ctx Context, ptr interface{}) {} + +// Get stored data as raw byte slice +func (Value) GetRaw(ctx Context) []byte {} + +// Marshal and set a raw value +func (Value) Set(ctx Context, o interface{}) {} + +// Check if a raw value exists +func (Value) Exists(ctx Context) bool {} + +// Delete a raw value value +func (Value) Delete(ctx Context) {} +``` + +We will define the following core methods for the `Mapping` type: + +```go +// Constructs key-value pair reference corresponding to the key argument in the Mapping space +func (Mapping) Value(key []byte) Value {} + +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Mapping) Get(ctx Context, key []byte, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Mapping) GetSafe(ctx Context, key []byte, ptr interface{}) + +// Get stored data as raw byte slice +func (Mapping) GetRaw(ctx Context, key []byte) []byte {} + +// Marshal and set a raw value +func (Mapping) Set(ctx Context, key []byte, o interface{}) {} + +// Check if a raw value exists +func (Mapping) Has(ctx Context, key []byte) bool {} + +// Delete a raw value value +func (Mapping) Delete(ctx Context, key []byte) {} +``` + +Each method of the `Mapping` type that is passed the arguments `ctx`, `key`, and `args...` will proxy +the call to `Mapping.Value(key)` with arguments `ctx` and `args...`. + +In addition, we will define and provide a common set of types derived from the `Value` type: + +```go +type Boolean struct { Value } +type Enum struct { Value } +type Integer struct { Value; enc IntEncoding } +type String struct { Value } +// ... +``` + +Where the encoding schemes can be different, `o` arguments in core methods are typed, and `ptr` arguments +in core methods are replaced by explicit return types. + +Finally, we will define a family of types derived from the `Mapping` type: + +```go +type Indexer struct { + m Mapping + enc IntEncoding +} +``` + +Where the `key` argument in core method is typed. + +Some of the properties of the accessor types are: + +* State access happens only when a function which takes a `Context` as an argument is invoked +* Accessor type structs give rights to access the state only that the struct is referring, no other +* Marshalling/Unmarshalling happens implicitly within the core methods + +## Status + +Proposed + +## Consequences + +### Positive + +* Serialization will be done automatically +* Shorter code size, less boilerplate, better UX +* References to the state can be transferred safely +* Explicit scope of accessing + +### Negative + +* Serialization format will be hidden +* Different architecture from the current, but the use of accessor types can be opt-in +* Type-specific types (e.g. `Boolean` and `Integer`) have to be defined manually + +### Neutral + +## References + +* [#4554](https://github.com/cosmos/cosmos-sdk/issues/4554) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-013-metrics.md b/versioned_docs/version-0.46/integrate/architecture/adr-013-metrics.md new file mode 100644 index 000000000..33849b56c --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-013-metrics.md @@ -0,0 +1,157 @@ +# ADR 013: Observability + +## Changelog + +* 20-01-2020: Initial Draft + +## Status + +Proposed + +## Context + +Telemetry is paramount into debugging and understanding what the application is doing and how it is +performing. We aim to expose metrics from modules and other core parts of the Cosmos SDK. + +In addition, we should aim to support multiple configurable sinks that an operator may choose from. +By default, when telemetry is enabled, the application should track and expose metrics that are +stored in-memory. The operator may choose to enable additional sinks, where we support only +[Prometheus](https://prometheus.io/) for now, as it's battle-tested, simple to setup, open source, +and is rich with ecosystem tooling. + +We must also aim to integrate metrics into the Cosmos SDK in the most seamless way possible such that +metrics may be added or removed at will and without much friction. To do this, we will use the +[go-metrics](https://github.com/armon/go-metrics) library. + +Finally, operators may enable telemetry along with specific configuration options. If enabled, metrics +will be exposed via `/metrics?format={text|prometheus}` via the API server. + +## Decision + +We will add an additional configuration block to `app.toml` that defines telemetry settings: + +```toml +############################################################################### +### Telemetry Configuration ### +############################################################################### + +[telemetry] + +# Prefixed with keys to separate services +service-name = {{ .Telemetry.ServiceName }} + +# Enabled enables the application telemetry functionality. When enabled, +# an in-memory sink is also enabled by default. Operators may also enabled +# other sinks such as Prometheus. +enabled = {{ .Telemetry.Enabled }} + +# Enable prefixing gauge values with hostname +enable-hostname = {{ .Telemetry.EnableHostname }} + +# Enable adding hostname to labels +enable-hostname-label = {{ .Telemetry.EnableHostnameLabel }} + +# Enable adding service to labels +enable-service-label = {{ .Telemetry.EnableServiceLabel }} + +# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. +prometheus-retention-time = {{ .Telemetry.PrometheusRetentionTime }} +``` + +The given configuration allows for two sinks -- in-memory and Prometheus. We create a `Metrics` +type that performs all the bootstrapping for the operator, so capturing metrics becomes seamless. + +```go +// Metrics defines a wrapper around application telemetry functionality. It allows +// metrics to be gathered at any point in time. When creating a Metrics object, +// internally, a global metrics is registered with a set of sinks as configured +// by the operator. In addition to the sinks, when a process gets a SIGUSR1, a +// dump of formatted recent metrics will be sent to STDERR. +type Metrics struct { + memSink *metrics.InmemSink + prometheusEnabled bool +} + +// Gather collects all registered metrics and returns a GatherResponse where the +// metrics are encoded depending on the type. Metrics are either encoded via +// Prometheus or JSON if in-memory. +func (m *Metrics) Gather(format string) (GatherResponse, error) { + switch format { + case FormatPrometheus: + return m.gatherPrometheus() + + case FormatText: + return m.gatherGeneric() + + case FormatDefault: + return m.gatherGeneric() + + default: + return GatherResponse{}, fmt.Errorf("unsupported metrics format: %s", format) + } +} +``` + +In addition, `Metrics` allows us to gather the current set of metrics at any given point in time. An +operator may also choose to send a signal, SIGUSR1, to dump and print formatted metrics to STDERR. + +During an application's bootstrapping and construction phase, if `Telemetry.Enabled` is `true`, the +API server will create an instance of a reference to `Metrics` object and will register a metrics +handler accordingly. + +```go +func (s *Server) Start(cfg config.Config) error { + // ... + + if cfg.Telemetry.Enabled { + m, err := telemetry.New(cfg.Telemetry) + if err != nil { + return err + } + + s.metrics = m + s.registerMetrics() + } + + // ... +} + +func (s *Server) registerMetrics() { + metricsHandler := func(w http.ResponseWriter, r *http.Request) { + format := strings.TrimSpace(r.FormValue("format")) + + gr, err := s.metrics.Gather(format) + if err != nil { + rest.WriteErrorResponse(w, http.StatusBadRequest, fmt.Sprintf("failed to gather metrics: %s", err)) + return + } + + w.Header().Set("Content-Type", gr.ContentType) + _, _ = w.Write(gr.Metrics) + } + + s.Router.HandleFunc("/metrics", metricsHandler).Methods("GET") +} +``` + +Application developers may track counters, gauges, summaries, and key/value metrics. There is no +additional lifting required by modules to leverage profiling metrics. To do so, it's as simple as: + +```go +func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { + defer metrics.MeasureSince(time.Now(), "MintCoins") + // ... +} +``` + +## Consequences + +### Positive + +* Exposure into the performance and behavior of an application + +### Negative + +### Neutral + +## References diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-014-proportional-slashing.md b/versioned_docs/version-0.46/integrate/architecture/adr-014-proportional-slashing.md new file mode 100644 index 000000000..63cd04dee --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-014-proportional-slashing.md @@ -0,0 +1,85 @@ +# ADR 14: Proportional Slashing + +## Changelog + +* 2019-10-15: Initial draft +* 2020-05-25: Removed correlation root slashing +* 2020-07-01: Updated to include S-curve function instead of linear + +## Context + +In Proof of Stake-based chains, centralization of consensus power amongst a small set of validators can cause harm to the network due to increased risk of censorship, liveness failure, fork attacks, etc. However, while this centralization causes a negative externality to the network, it is not directly felt by the delegators contributing towards delegating towards already large validators. We would like a way to pass on the negative externality cost of centralization onto those large validators and their delegators. + +## Decision + +### Design + +To solve this problem, we will implement a procedure called Proportional Slashing. The desire is that the larger a validator is, the more they should be slashed. The first naive attempt is to make a validator's slash percent proportional to their share of consensus voting power. + +```text +slash_amount = k * power // power is the faulting validator's voting power and k is some on-chain constant +``` + +However, this will incentivize validators with large amounts of stake to split up their voting power amongst accounts (sybil attack), so that if they fault, they all get slashed at a lower percent. The solution to this is to take into account not just a validator's own voting percentage, but also the voting percentage of all the other validators who get slashed in a specified time frame. + +```text +slash_amount = k * (power_1 + power_2 + ... + power_n) // where power_i is the voting power of the ith validator faulting in the specified time frame and k is some on-chain constant +``` + +Now, if someone splits a validator of 10% into two validators of 5% each which both fault, then they both fault in the same time frame, they both will get slashed at the sum 10% amount. + +However in practice, we likely don't want a linear relation between amount of stake at fault, and the percentage of stake to slash. In particular, solely 5% of stake double signing effectively did nothing to majorly threaten security, whereas 30% of stake being at fault clearly merits a large slashing factor, due to being very close to the point at which Tendermint security is threatened. A linear relation would require a factor of 6 gap between these two, whereas the difference in risk posed to the network is much larger. We propose using S-curves (formally [logistic functions](https://en.wikipedia.org/wiki/Logistic_function) to solve this). S-Curves capture the desired criterion quite well. They allow the slashing factor to be minimal for small values, and then grow very rapidly near some threshold point where the risk posed becomes notable. + +#### Parameterization + +This requires parameterizing a logistic function. It is very well understood how to parameterize this. It has four parameters: + +1) A minimum slashing factor +2) A maximum slashing factor +3) The inflection point of the S-curve (essentially where do you want to center the S) +4) The rate of growth of the S-curve (How elongated is the S) + +#### Correlation across non-sybil validators + +One will note, that this model doesn't differentiate between multiple validators run by the same operators vs validators run by different operators. This can be seen as an additional benefit in fact. It incentivizes validators to differentiate their setups from other validators, to avoid having correlated faults with them or else they risk a higher slash. So for example, operators should avoid using the same popular cloud hosting platforms or using the same Staking as a Service providers. This will lead to a more resilient and decentralized network. + +#### Griefing + +Griefing, the act of intentionally getting oneself slashed in order to make another's slash worse, could be a concern here. However, using the protocol described here, the attacker also gets equally impacted by the grief as the victim, so it would not provide much benefit to the griefer. + +### Implementation + +In the slashing module, we will add two queues that will track all of the recent slash events. For double sign faults, we will define "recent slashes" as ones that have occurred within the last `unbonding period`. For liveness faults, we will define "recent slashes" as ones that have occurred withing the last `jail period`. + +```go +type SlashEvent struct { + Address sdk.ValAddress + ValidatorVotingPercent sdk.Dec + SlashedSoFar sdk.Dec +} +``` + +These slash events will be pruned from the queue once they are older than their respective "recent slash period". + +Whenever a new slash occurs, a `SlashEvent` struct is created with the faulting validator's voting percent and a `SlashedSoFar` of 0. Because recent slash events are pruned before the unbonding period and unjail period expires, it should not be possible for the same validator to have multiple SlashEvents in the same Queue at the same time. + +We then will iterate over all the SlashEvents in the queue, adding their `ValidatorVotingPercent` to calculate the new percent to slash all the validators in the queue at, using the "Square of Sum of Roots" formula introduced above. + +Once we have the `NewSlashPercent`, we then iterate over all the `SlashEvent`s in the queue once again, and if `NewSlashPercent > SlashedSoFar` for that SlashEvent, we call the `staking.Slash(slashEvent.Address, slashEvent.Power, Math.Min(Math.Max(minSlashPercent, NewSlashPercent - SlashedSoFar), maxSlashPercent)` (we pass in the power of the validator before any slashes occurred, so that we slash the right amount of tokens). We then set `SlashEvent.SlashedSoFar` amount to `NewSlashPercent`. + +## Status + +Proposed + +## Consequences + +### Positive + +* Increases decentralization by disincentivizing delegating to large validators +* Incentivizes Decorrelation of Validators +* More severely punishes attacks than accidental faults +* More flexibility in slashing rates parameterization + +### Negative + +* More computationally expensive than current implementation. Will require more data about "recent slashing events" to be stored on chain. diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-016-validator-consensus-key-rotation.md b/versioned_docs/version-0.46/integrate/architecture/adr-016-validator-consensus-key-rotation.md new file mode 100644 index 000000000..0510c2b9b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-016-validator-consensus-key-rotation.md @@ -0,0 +1,125 @@ +# ADR 016: Validator Consensus Key Rotation + +## Changelog + +* 2019 Oct 23: Initial draft +* 2019 Nov 28: Add key rotation fee + +## Context + +Validator consensus key rotation feature has been discussed and requested for a long time, for the sake of safer validator key management policy (e.g. https://github.com/tendermint/tendermint/issues/1136). So, we suggest one of the simplest form of validator consensus key rotation implementation mostly onto Cosmos SDK. + +We don't need to make any update on consensus logic in Tendermint because Tendermint does not have any mapping information of consensus key and validator operator key, meaning that from Tendermint point of view, a consensus key rotation of a validator is simply a replacement of a consensus key to another. + +Also, it should be noted that this ADR includes only the simplest form of consensus key rotation without considering multiple consensus keys concept. Such multiple consensus keys concept shall remain a long term goal of Tendermint and Cosmos SDK. + +## Decision + +### Pseudo procedure for consensus key rotation + +* create new random consensus key. +* create and broadcast a transaction with a `MsgRotateConsPubKey` that states the new consensus key is now coupled with the validator operator with signature from the validator's operator key. +* old consensus key becomes unable to participate on consensus immediately after the update of key mapping state on-chain. +* start validating with new consensus key. +* validators using HSM and KMS should update the consensus key in HSM to use the new rotated key after the height `h` when `MsgRotateConsPubKey` committed to the blockchain. + +### Considerations + +* consensus key mapping information management strategy + * store history of each key mapping changes in the kvstore. + * the state machine can search corresponding consensus key paired with given validator operator for any arbitrary height in a recent unbonding period. + * the state machine does not need any historical mapping information which is past more than unbonding period. +* key rotation costs related to LCD and IBC + * LCD and IBC will have traffic/computation burden when there exists frequent power changes + * In current Tendermint design, consensus key rotations are seen as power changes from LCD or IBC perspective + * Therefore, to minimize unnecessary frequent key rotation behavior, we limited maximum number of rotation in recent unbonding period and also applied exponentially increasing rotation fee +* limits + * a validator cannot rotate its consensus key more than `MaxConsPubKeyRotations` time for any unbonding period, to prevent spam. + * parameters can be decided by governance and stored in genesis file. +* key rotation fee + * a validator should pay `KeyRotationFee` to rotate the consensus key which is calculated as below + * `KeyRotationFee` = (max(`VotingPowerPercentage` *100, 1)* `InitialKeyRotationFee`) * 2^(number of rotations in `ConsPubKeyRotationHistory` in recent unbonding period) +* evidence module + * evidence module can search corresponding consensus key for any height from slashing keeper so that it can decide which consensus key is supposed to be used for given height. +* abci.ValidatorUpdate + * tendermint already has ability to change a consensus key by ABCI communication(`ValidatorUpdate`). + * validator consensus key update can be done via creating new + delete old by change the power to zero. + * therefore, we expect we even do not need to change tendermint codebase at all to implement this feature. +* new genesis parameters in `staking` module + * `MaxConsPubKeyRotations` : maximum number of rotation can be executed by a validator in recent unbonding period. default value 10 is suggested(11th key rotation will be rejected) + * `InitialKeyRotationFee` : the initial key rotation fee when no key rotation has happened in recent unbonding period. default value 1atom is suggested(1atom fee for the first key rotation in recent unbonding period) + +### Workflow + +1. The validator generates a new consensus keypair. +2. The validator generates and signs a `MsgRotateConsPubKey` tx with their operator key and new ConsPubKey + + ```go + type MsgRotateConsPubKey struct { + ValidatorAddress sdk.ValAddress + NewPubKey crypto.PubKey + } + ``` + +3. `handleMsgRotateConsPubKey` gets `MsgRotateConsPubKey`, calls `RotateConsPubKey` with emits event +4. `RotateConsPubKey` + * checks if `NewPubKey` is not duplicated on `ValidatorsByConsAddr` + * checks if the validator is does not exceed parameter `MaxConsPubKeyRotations` by iterating `ConsPubKeyRotationHistory` + * checks if the signing account has enough balance to pay `KeyRotationFee` + * pays `KeyRotationFee` to community fund + * overwrites `NewPubKey` in `validator.ConsPubKey` + * deletes old `ValidatorByConsAddr` + * `SetValidatorByConsAddr` for `NewPubKey` + * Add `ConsPubKeyRotationHistory` for tracking rotation + + ```go + type ConsPubKeyRotationHistory struct { + OperatorAddress sdk.ValAddress + OldConsPubKey crypto.PubKey + NewConsPubKey crypto.PubKey + RotatedHeight int64 + } + ``` + +5. `ApplyAndReturnValidatorSetUpdates` checks if there is `ConsPubKeyRotationHistory` with `ConsPubKeyRotationHistory.RotatedHeight == ctx.BlockHeight()` and if so, generates 2 `ValidatorUpdate` , one for a remove validator and one for create new validator + + ```go + abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(OldConsPubKey), + Power: 0, + } + + abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(NewConsPubKey), + Power: v.ConsensusPower(), + } + ``` + +6. at `previousVotes` Iteration logic of `AllocateTokens`, `previousVote` using `OldConsPubKey` match up with `ConsPubKeyRotationHistory`, and replace validator for token allocation +7. Migrate `ValidatorSigningInfo` and `ValidatorMissedBlockBitArray` from `OldConsPubKey` to `NewConsPubKey` + +* Note : All above features shall be implemented in `staking` module. + +## Status + +Proposed + +## Consequences + +### Positive + +* Validators can immediately or periodically rotate their consensus key to have better security policy +* improved security against Long-Range attacks (https://nearprotocol.com/blog/long-range-attacks-and-a-new-fork-choice-rule) given a validator throws away the old consensus key(s) + +### Negative + +* Slash module needs more computation because it needs to lookup corresponding consensus key of validators for each height +* frequent key rotations will make light client bisection less efficient + +### Neutral + +## References + +* on tendermint repo : https://github.com/tendermint/tendermint/issues/1136 +* on cosmos-sdk repo : https://github.com/cosmos/cosmos-sdk/issues/5231 +* about multiple consensus keys : https://github.com/tendermint/tendermint/issues/1758#issuecomment-545291698 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-017-historical-header-module.md b/versioned_docs/version-0.46/integrate/architecture/adr-017-historical-header-module.md new file mode 100644 index 000000000..b97b46d4f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-017-historical-header-module.md @@ -0,0 +1,61 @@ +# ADR 17: Historical Header Module + +## Changelog + +* 26 November 2019: Start of first version +* 2 December 2019: Final draft of first version + +## Context + +In order for the Cosmos SDK to implement the [IBC specification](https://github.com/cosmos/ics), modules within the Cosmos SDK must have the ability to introspect recent consensus states (validator sets & commitment roots) as proofs of these values on other chains must be checked during the handshakes. + +## Decision + +The application MUST store the most recent `n` headers in a persistent store. At first, this store MAY be the current Merklised store. A non-Merklised store MAY be used later as no proofs are necessary. + +The application MUST store this information by storing new headers immediately when handling `abci.RequestBeginBlock`: + +```golang +func BeginBlock(ctx sdk.Context, keeper HistoricalHeaderKeeper, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + info := HistoricalInfo{ + Header: ctx.BlockHeader(), + ValSet: keeper.StakingKeeper.GetAllValidators(ctx), // note that this must be stored in a canonical order + } + keeper.SetHistoricalInfo(ctx, ctx.BlockHeight(), info) + n := keeper.GetParamRecentHeadersToStore() + keeper.PruneHistoricalInfo(ctx, ctx.BlockHeight() - n) + // continue handling request +} +``` + +Alternatively, the application MAY store only the hash of the validator set. + +The application MUST make these past `n` committed headers available for querying by Cosmos SDK modules through the `Keeper`'s `GetHistoricalInfo` function. This MAY be implemented in a new module, or it MAY also be integrated into an existing one (likely `x/staking` or `x/ibc`). + +`n` MAY be configured as a parameter store parameter, in which case it could be changed by `ParameterChangeProposal`s, although it will take some blocks for the stored information to catch up if `n` is increased. + +## Status + +Proposed. + +## Consequences + +Implementation of this ADR will require changes to the Cosmos SDK. It will not require changes to Tendermint. + +### Positive + +* Easy retrieval of headers & state roots for recent past heights by modules anywhere in the Cosmos SDK. +* No RPC calls to Tendermint required. +* No ABCI alterations required. + +### Negative + +* Duplicates `n` headers data in Tendermint & the application (additional disk usage) - in the long term, an approach such as [this](https://github.com/tendermint/tendermint/issues/4210) might be preferable. + +### Neutral + +(none known) + +## References + +* [ICS 2: "Consensus state introspection"](https://github.com/cosmos/ibc/tree/master/spec/core/ics-002-client-semantics#consensus-state-introspection) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-018-extendable-voting-period.md b/versioned_docs/version-0.46/integrate/architecture/adr-018-extendable-voting-period.md new file mode 100644 index 000000000..ee238fc35 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-018-extendable-voting-period.md @@ -0,0 +1,66 @@ +# ADR 18: Extendable Voting Periods + +## Changelog + +* 1 January 2020: Start of first version + +## Context + +Currently the voting period for all governance proposals is the same. However, this is suboptimal as all governance proposals do not require the same time period. For more non-contentious proposals, they can be dealt with more efficently with a faster period, while more contentious or complex proposals may need a longer period for extended discussion/consideration. + +## Decision + +We would like to design a mechanism for making the voting period of a governance proposal variable based on the demand of voters. We would like it to be based on the view of the governance participants, rather than just the proposer of a governance proposal (thus, allowing the proposer to select the voting period length is not sufficient). + +However, we would like to avoid the creation of an entire second voting process to determine the length of the voting period, as it just pushed the problem to determining the length of that first voting period. + +Thus, we propose the following mechanism: + +### Params + +* The current gov param `VotingPeriod` is to be replaced by a `MinVotingPeriod` param. This is the default voting period that all governance proposal voting periods start with. +* There is a new gov param called `MaxVotingPeriodExtension`. + +### Mechanism + +There is a new `Msg` type called `MsgExtendVotingPeriod`, which can be sent by any staked account during a proposal's voting period. It allows the sender to unilaterally extend the length of the voting period by `MaxVotingPeriodExtension * sender's share of voting power`. Every address can only call `MsgExtendVotingPeriod` once per proposal. + +So for example, if the `MaxVotingPeriodExtension` is set to 100 Days, then anyone with 1% of voting power can extend the voting power by 1 day. If 33% of voting power has sent the message, the voting period will be extended by 33 days. Thus, if absolutely everyone chooses to extend the voting period, the absolute maximum voting period will be `MinVotingPeriod + MaxVotingPeriodExtension`. + +This system acts as a sort of distributed coordination, where individual stakers choosing to extend or not, allows the system the guage the conentiousness/complexity of the proposal. It is extremely unlikely that many stakers will choose to extend at the exact same time, it allows stakers to view how long others have already extended thus far, to decide whether or not to extend further. + +### Dealing with Unbonding/Redelegation + +There is one thing that needs to be addressed. How to deal with redelegation/unbonding during the voting period. If a staker of 5% calls `MsgExtendVotingPeriod` and then unbonds, does the voting period then decrease by 5 days again? This is not good as it can give people a false sense of how long they have to make their decision. For this reason, we want to design it such that the voting period length can only be extended, not shortened. To do this, the current extension amount is based on the highest percent that voted extension at any time. This is best explained by example: + +1. Let's say 2 stakers of voting power 4% and 3% respectively vote to extend. The voting period will be extended by 7 days. +2. Now the staker of 3% decides to unbond before the end of the voting period. The voting period extension remains 7 days. +3. Now, let's say another staker of 2% voting power decides to extend voting period. There is now 6% of active voting power choosing the extend. The voting power remains 7 days. +4. If a fourth staker of 10% chooses to extend now, there is a total of 16% of active voting power wishing to extend. The voting period will be extended to 16 days. + +### Delegators + +Just like votes in the actual voting period, delegators automatically inherit the extension of their validators. If their validator chooses to extend, their voting power will be used in the validator's extension. However, the delegator is unable to override their validator and "unextend" as that would contradict the "voting power length can only be ratcheted up" principle described in the previous section. However, a delegator may choose the extend using their personal voting power, if their validator has not done so. + +## Status + +Proposed + +## Consequences + +### Positive + +* More complex/contentious governance proposals will have more time to properly digest and deliberate + +### Negative + +* Governance process becomes more complex and requires more understanding to interact with effectively +* Can no longer predict when a governance proposal will end. Can't assume order in which governance proposals will end. + +### Neutral + +* The minimum voting period can be made shorter + +## References + +* [Cosmos Forum post where idea first originated](https://forum.cosmos.network/t/proposal-draft-reduce-governance-voting-period-to-7-days/3032/9) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-019-protobuf-state-encoding.md b/versioned_docs/version-0.46/integrate/architecture/adr-019-protobuf-state-encoding.md new file mode 100644 index 000000000..1d20145ae --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-019-protobuf-state-encoding.md @@ -0,0 +1,379 @@ +# ADR 019: Protocol Buffer State Encoding + +## Changelog + +* 2020 Feb 15: Initial Draft +* 2020 Feb 24: Updates to handle messages with interface fields +* 2020 Apr 27: Convert usages of `oneof` for interfaces to `Any` +* 2020 May 15: Describe `cosmos_proto` extensions and amino compatibility +* 2020 Dec 4: Move and rename `MarshalAny` and `UnmarshalAny` into the `codec.Codec` interface. +* 2021 Feb 24: Remove mentions of `HybridCodec`, which has been abandoned in [#6843](https://github.com/cosmos/cosmos-sdk/pull/6843). + +## Status + +Accepted + +## Context + +Currently, the Cosmos SDK utilizes [go-amino](https://github.com/tendermint/go-amino/) for binary +and JSON object encoding over the wire bringing parity between logical objects and persistence objects. + +From the Amino docs: + +> Amino is an object encoding specification. It is a subset of Proto3 with an extension for interface +> support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) for more +> information on Proto3, which Amino is largely compatible with (but not with Proto2). +> +> The goal of the Amino encoding protocol is to bring parity into logic objects and persistence objects. + +Amino also aims to have the following goals (not a complete list): + +* Binary bytes must be decode-able with a schema. +* Schema must be upgradeable. +* The encoder and decoder logic must be reasonably simple. + +However, we believe that Amino does not fulfill these goals completely and does not fully meet the +needs of a truly flexible cross-language and multi-client compatible encoding protocol in the Cosmos SDK. +Namely, Amino has proven to be a big pain-point in regards to supporting object serialization across +clients written in various languages while providing virtually little in the way of true backwards +compatibility and upgradeability. Furthermore, through profiling and various benchmarks, Amino has +been shown to be an extremely large performance bottleneck in the Cosmos SDK 1. This is +largely reflected in the performance of simulations and application transaction throughput. + +Thus, we need to adopt an encoding protocol that meets the following criteria for state serialization: + +* Language agnostic +* Platform agnostic +* Rich client support and thriving ecosystem +* High performance +* Minimal encoded message size +* Codegen-based over reflection-based +* Supports backward and forward compatibility + +Note, migrating away from Amino should be viewed as a two-pronged approach, state and client encoding. +This ADR focuses on state serialization in the Cosmos SDK state machine. A corresponding ADR will be +made to address client-side encoding. + +## Decision + +We will adopt [Protocol Buffers](https://developers.google.com/protocol-buffers) for serializing +persisted structured data in the Cosmos SDK while providing a clean mechanism and developer UX for +applications wishing to continue to use Amino. We will provide this mechanism by updating modules to +accept a codec interface, `Marshaler`, instead of a concrete Amino codec. Furthermore, the Cosmos SDK +will provide two concrete implementations of the `Marshaler` interface: `AminoCodec` and `ProtoCodec`. + +* `AminoCodec`: Uses Amino for both binary and JSON encoding. +* `ProtoCodec`: Uses Protobuf for both binary and JSON encoding. + +Modules will use whichever codec that is instantiated in the app. By default, the Cosmos SDK's `simapp` +instantiates a `ProtoCodec` as the concrete implementation of `Marshaler`, inside the `MakeTestEncodingConfig` +function. This can be easily overwritten by app developers if they so desire. + +The ultimate goal will be to replace Amino JSON encoding with Protobuf encoding and thus have +modules accept and/or extend `ProtoCodec`. Until then, Amino JSON is still provided for legacy use-cases. +A handful of places in the Cosmos SDK still have Amino JSON hardcoded, such as the Legacy API REST endpoints +and the `x/params` store. They are planned to be converted to Protobuf in a gradual manner. + +### Module Codecs + +Modules that do not require the ability to work with and serialize interfaces, the path to Protobuf +migration is pretty straightforward. These modules are to simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf and have their keeper accept a +`Marshaler` that will be a `ProtoCodec`. This migration is simple as things will just work as-is. + +Note, any business logic that needs to encode primitive types like `bool` or `int64` should use +[gogoprotobuf](https://github.com/gogo/protobuf) Value types. + +Example: + +```go + ts, err := gogotypes.TimestampProto(completionTime) + if err != nil { + // ... + } + + bz := cdc.MustMarshal(ts) +``` + +However, modules can vary greatly in purpose and design and so we must support the ability for modules +to be able to encode and work with interfaces (e.g. `Account` or `Content`). For these modules, they +must define their own codec interface that extends `Marshaler`. These specific interfaces are unique +to the module and will contain method contracts that know how to serialize the needed interfaces. + +Example: + +```go +// x/auth/types/codec.go + +type Codec interface { + codec.Codec + + MarshalAccount(acc exported.Account) ([]byte, error) + UnmarshalAccount(bz []byte) (exported.Account, error) + + MarshalAccountJSON(acc exported.Account) ([]byte, error) + UnmarshalAccountJSON(bz []byte) (exported.Account, error) +} +``` + +### Usage of `Any` to encode interfaces + +In general, module-level .proto files should define messages which encode interfaces +using [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). +After [extension discussion](https://github.com/cosmos/cosmos-sdk/issues/6030), +this was chosen as the preferred alternative to application-level `oneof`s +as in our original protobuf design. The arguments in favor of `Any` can be +summarized as follows: + +* `Any` provides a simpler, more consistent client UX for dealing with +interfaces than app-level `oneof`s that will need to be coordinated more +carefully across applications. Creating a generic transaction +signing library using `oneof`s may be cumbersome and critical logic may need +to be reimplemented for each chain +* `Any` provides more resistance against human error than `oneof` +* `Any` is generally simpler to implement for both modules and apps + +The main counter-argument to using `Any` centers around its additional space +and possibly performance overhead. The space overhead could be dealt with using +compression at the persistence layer in the future and the performance impact +is likely to be small. Thus, not using `Any` is seem as a pre-mature optimization, +with user experience as the higher order concern. + +Note, that given the Cosmos SDK's decision to adopt the `Codec` interfaces described +above, apps can still choose to use `oneof` to encode state and transactions +but it is not the recommended approach. If apps do choose to use `oneof`s +instead of `Any` they will likely lose compatibility with client apps that +support multiple chains. Thus developers should think carefully about whether +they care more about what is possibly a pre-mature optimization or end-user +and client developer UX. + +### Safe usage of `Any` + +By default, the [gogo protobuf implementation of `Any`](https://pkg.go.dev/github.com/gogo/protobuf/types) +uses [global type registration]( https://github.com/gogo/protobuf/blob/master/proto/properties.go#L540) +to decode values packed in `Any` into concrete +go types. This introduces a vulnerability where any malicious module +in the dependency tree could register a type with the global protobuf registry +and cause it to be loaded and unmarshaled by a transaction that referenced +it in the `type_url` field. + +To prevent this, we introduce a type registration mechanism for decoding `Any` +values into concrete types through the `InterfaceRegistry` interface which +bears some similarity to type registration with Amino: + +```go +type InterfaceRegistry interface { + // RegisterInterface associates protoName as the public name for the + // interface passed in as iface + // Ex: + // registry.RegisterInterface("cosmos_sdk.Msg", (*sdk.Msg)(nil)) + RegisterInterface(protoName string, iface interface{}) + + // RegisterImplementations registers impls as a concrete implementations of + // the interface iface + // Ex: + // registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSend{}, &MsgMultiSend{}) + RegisterImplementations(iface interface{}, impls ...proto.Message) + +} +``` + +In addition to serving as a whitelist, `InterfaceRegistry` can also serve +to communicate the list of concrete types that satisfy an interface to clients. + +In .proto files: + +* fields which accept interfaces should be annotated with `cosmos_proto.accepts_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` +* interface implementations should be annotated with `cosmos_proto.implements_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` + +In the future, `protoName`, `cosmos_proto.accepts_interface`, `cosmos_proto.implements_interface` +may be used via code generation, reflection &/or static linting. + +The same struct that implements `InterfaceRegistry` will also implement an +interface `InterfaceUnpacker` to be used for unpacking `Any`s: + +```go +type InterfaceUnpacker interface { + // UnpackAny unpacks the value in any to the interface pointer passed in as + // iface. Note that the type in any must have been registered with + // RegisterImplementations as a concrete type for that interface + // Ex: + // var msg sdk.Msg + // err := ctx.UnpackAny(any, &msg) + // ... + UnpackAny(any *Any, iface interface{}) error +} +``` + +Note that `InterfaceRegistry` usage does not deviate from standard protobuf +usage of `Any`, it just introduces a security and introspection layer for +golang usage. + +`InterfaceRegistry` will be a member of `ProtoCodec` +described above. In order for modules to register interface types, app modules +can optionally implement the following interface: + +```go +type InterfaceModule interface { + RegisterInterfaceTypes(InterfaceRegistry) +} +``` + +The module manager will include a method to call `RegisterInterfaceTypes` on +every module that implements it in order to populate the `InterfaceRegistry`. + +### Using `Any` to encode state + +The Cosmos SDK will provide support methods `MarshalInterface` and `UnmarshalInterface` to hide a complexity of wrapping interface types into `Any` and allow easy serialization. + +```go +import "github.com/cosmos/cosmos-sdk/codec" + +// note: eviexported.Evidence is an interface type +func MarshalEvidence(cdc codec.BinaryCodec, e eviexported.Evidence) ([]byte, error) { + return cdc.MarshalInterface(e) +} + +func UnmarshalEvidence(cdc codec.BinaryCodec, bz []byte) (eviexported.Evidence, error) { + var evi eviexported.Evidence + err := cdc.UnmarshalInterface(&evi, bz) + return err, nil +} +``` + +### Using `Any` in `sdk.Msg`s + +A similar concept is to be applied for messages that contain interfaces fields. +For example, we can define `MsgSubmitEvidence` as follows where `Evidence` is +an interface: + +```protobuf +// x/evidence/types/types.proto + +message MsgSubmitEvidence { + bytes submitter = 1 + [ + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress" + ]; + google.protobuf.Any evidence = 2; +} +``` + +Note that in order to unpack the evidence from `Any` we do need a reference to +`InterfaceRegistry`. In order to reference evidence in methods like +`ValidateBasic` which shouldn't have to know about the `InterfaceRegistry`, we +introduce an `UnpackInterfaces` phase to deserialization which unpacks +interfaces before they're needed. + +### Unpacking Interfaces + +To implement the `UnpackInterfaces` phase of deserialization which unpacks +interfaces wrapped in `Any` before they're needed, we create an interface +that `sdk.Msg`s and other types can implement: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +We also introduce a private `cachedValue interface{}` field onto the `Any` +struct itself with a public getter `GetCachedValue() interface{}`. + +The `UnpackInterfaces` method is to be invoked during message deserialization right +after `Unmarshal` and any interface values packed in `Any`s will be decoded +and stored in `cachedValue` for reference later. + +Then unpacked interface values can safely be used in any code afterwards +without knowledge of the `InterfaceRegistry` +and messages can introduce a simple getter to cast the cached value to the +correct interface type. + +This has the added benefit that unmarshaling of `Any` values only happens once +during initial deserialization rather than every time the value is read. Also, +when `Any` values are first packed (for instance in a call to +`NewMsgSubmitEvidence`), the original interface value is cached so that +unmarshaling isn't needed to read it again. + +`MsgSubmitEvidence` could implement `UnpackInterfaces`, plus a convenience getter +`GetEvidence` as follows: + +```go +func (msg MsgSubmitEvidence) UnpackInterfaces(ctx sdk.InterfaceRegistry) error { + var evi eviexported.Evidence + return ctx.UnpackAny(msg.Evidence, *evi) +} + +func (msg MsgSubmitEvidence) GetEvidence() eviexported.Evidence { + return msg.Evidence.GetCachedValue().(eviexported.Evidence) +} +``` + +### Amino Compatibility + +Our custom implementation of `Any` can be used transparently with Amino if used +with the proper codec instance. What this means is that interfaces packed within +`Any`s will be amino marshaled like regular Amino interfaces (assuming they +have been registered properly with Amino). + +In order for this functionality to work: + +* **all legacy code must use `*codec.LegacyAmino` instead of `*amino.Codec` which is + now a wrapper which properly handles `Any`** +* **all new code should use `Marshaler` which is compatible with both amino and + protobuf** +* Also, before v0.39, `codec.LegacyAmino` will be renamed to `codec.LegacyAmino`. + +### Why Wasn't X Chosen Instead + +For a more complete comparison to alternative protocols, see [here](https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f). + +### Cap'n Proto + +While [Cap’n Proto](https://capnproto.org/) does seem like an advantageous alternative to Protobuf +due to it's native support for interfaces/generics and built in canonicalization, it does lack the +rich client ecosystem compared to Protobuf and is a bit less mature. + +### FlatBuffers + +[FlatBuffers](https://google.github.io/flatbuffers/) is also a potentially viable alternative, with the +primary difference being that FlatBuffers does not need a parsing/unpacking step to a secondary +representation before you can access data, often coupled with per-object memory allocation. + +However, it would require great efforts into research and full understanding the scope of the migration +and path forward -- which isn't immediately clear. In addition, FlatBuffers aren't designed for +untrusted inputs. + +## Future Improvements & Roadmap + +In the future we may consider a compression layer right above the persistence +layer which doesn't change tx or merkle tree hashes, but reduces the storage +overhead of `Any`. In addition, we may adopt protobuf naming conventions which +make type URLs a bit more concise while remaining descriptive. + +Additional code generation support around the usage of `Any` is something that +could also be explored in the future to make the UX for go developers more +seamless. + +## Consequences + +### Positive + +* Significant performance gains. +* Supports backward and forward type compatibility. +* Better support for cross-language clients. + +### Negative + +* Learning curve required to understand and implement Protobuf messages. +* Slightly larger message size due to use of `Any`, although this could be offset + by a compression layer in the future + +### Neutral + +## References + +1. https://github.com/cosmos/cosmos-sdk/issues/4977 +2. https://github.com/cosmos/cosmos-sdk/issues/5444 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-020-protobuf-transaction-encoding.md b/versioned_docs/version-0.46/integrate/architecture/adr-020-protobuf-transaction-encoding.md new file mode 100644 index 000000000..71bd1f9fd --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-020-protobuf-transaction-encoding.md @@ -0,0 +1,464 @@ +# ADR 020: Protocol Buffer Transaction Encoding + +## Changelog + +* 2020 March 06: Initial Draft +* 2020 March 12: API Updates +* 2020 April 13: Added details on interface `oneof` handling +* 2020 April 30: Switch to `Any` +* 2020 May 14: Describe public key encoding +* 2020 June 08: Store `TxBody` and `AuthInfo` as bytes in `SignDoc`; Document `TxRaw` as broadcast and storage type. +* 2020 August 07: Use ADR 027 for serializing `SignDoc`. +* 2020 August 19: Move sequence field from `SignDoc` to `SignerInfo`, as discussed in [#6966](https://github.com/cosmos/cosmos-sdk/issues/6966). +* 2020 September 25: Remove `PublicKey` type in favor of `secp256k1.PubKey`, `ed25519.PubKey` and `multisig.LegacyAminoPubKey`. +* 2020 October 15: Add `GetAccount` and `GetAccountWithHeight` methods to the `AccountRetriever` interface. +* 2021 Feb 24: The Cosmos SDK does not use Tendermint's `PubKey` interface anymore, but its own `cryptotypes.PubKey`. Updates to reflect this. +* 2021 May 3: Rename `clientCtx.JSONMarshaler` to `clientCtx.JSONCodec`. +* 2021 June 10: Add `clientCtx.Codec: codec.Codec`. + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](./adr-019-protobuf-state-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +Specifically, the client-side migration path primarily includes tx generation and +signing, message construction and routing, in addition to CLI & REST handlers and +business logic (i.e. queriers). + +With this in mind, we will tackle the migration path via two main areas, txs and +querying. However, this ADR solely focuses on transactions. Querying should be +addressed in a future ADR, but it should build off of these proposals. + +Based on detailed discussions ([\#6030](https://github.com/cosmos/cosmos-sdk/issues/6030) +and [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078)), the original +design for transactions was changed substantially from an `oneof` /JSON-signing +approach to the approach described below. + +## Decision + +### Transactions + +Since interface values are encoded with `google.protobuf.Any` in state (see [ADR 019](adr-019-protobuf-state-encoding.md)), +`sdk.Msg`s are encoding with `Any` in transactions. + +One of the main goals of using `Any` to encode interface values is to have a +core set of types which is reused by apps so that +clients can safely be compatible with as many chains as possible. + +It is one of the goals of this specification to provide a flexible cross-chain transaction +format that can serve a wide variety of use cases without breaking client +compatibility. + +In order to facilitate signing, transactions are separated into `TxBody`, +which will be re-used by `SignDoc` below, and `signatures`: + +```proto +// types/types.proto +package cosmos_sdk.v1; + +message Tx { + TxBody body = 1; + AuthInfo auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +// A variant of Tx that pins the signer's exact binary represenation of body and +// auth_info. This is used for signing, broadcasting and verification. The binary +// `serialize(tx: TxRaw)` is stored in Tendermint and the hash `sha256(serialize(tx: TxRaw))` +// becomes the "txhash", commonly used as the transaction ID. +message TxRaw { + // A protobuf serialization of a TxBody that matches the representation in SignDoc. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in SignDoc. + bytes auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +message TxBody { + // A list of messages to be executed. The required signers of those messages define + // the number and order of elements in AuthInfo's signer_infos and Tx's signatures. + // Each required signer address is added to the list only the first time it occurs. + // + // By convention, the first required signer (usually from the first message) is referred + // to as the primary signer and pays the fee for the whole transaction. + repeated google.protobuf.Any messages = 1; + string memo = 2; + int64 timeout_height = 3; + repeated google.protobuf.Any extension_options = 1023; +} + +message AuthInfo { + // This list defines the signing modes for the required signers. The number + // and order of elements must match the required signers from TxBody's messages. + // The first element is the primary signer and the one which pays the fee. + repeated SignerInfo signer_infos = 1; + // The fee can be calculated based on the cost of evaluating the body and doing signature verification of the signers. This can be estimated via simulation. + Fee fee = 2; +} + +message SignerInfo { + // The public key is optional for accounts that already exist in state. If unset, the + // verifier can use the required signer address for this position and lookup the public key. + google.protobuf.Any public_key = 1; + // ModeInfo describes the signing mode of the signer and is a nested + // structure to support nested multisig pubkey's + ModeInfo mode_info = 2; + // sequence is the sequence of the account, which describes the + // number of committed transactions signed by a given address. It is used to prevent + // replay attacks. + uint64 sequence = 3; +} + +message ModeInfo { + oneof sum { + Single single = 1; + Multi multi = 2; + } + + // Single is the mode info for a single signer. It is structured as a message + // to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the future + message Single { + SignMode mode = 1; + } + + // Multi is the mode info for a multisig public key + message Multi { + // bitarray specifies which keys within the multisig are signing + CompactBitArray bitarray = 1; + // mode_infos is the corresponding modes of the signers of the multisig + // which could include nested multisig public keys + repeated ModeInfo mode_infos = 2; + } +} + +enum SignMode { + SIGN_MODE_UNSPECIFIED = 0; + + SIGN_MODE_DIRECT = 1; + + SIGN_MODE_TEXTUAL = 2; + + SIGN_MODE_LEGACY_AMINO_JSON = 127; +} +``` + +As will be discussed below, in order to include as much of the `Tx` as possible +in the `SignDoc`, `SignerInfo` is separated from signatures so that only the +raw signatures themselves live outside of what is signed over. + +Because we are aiming for a flexible, extensible cross-chain transaction +format, new transaction processing options should be added to `TxBody` as soon +those use cases are discovered, even if they can't be implemented yet. + +Because there is coordination overhead in this, `TxBody` includes an +`extension_options` field which can be used for any transaction processing +options that are not already covered. App developers should, nevertheless, +attempt to upstream important improvements to `Tx`. + +### Signing + +All of the signing modes below aim to provide the following guarantees: + +* **No Malleability**: `TxBody` and `AuthInfo` cannot change once the transaction + is signed +* **Predictable Gas**: if I am signing a transaction where I am paying a fee, + the final gas is fully dependent on what I am signing + +These guarantees give the maximum amount confidence to message signers that +manipulation of `Tx`s by intermediaries can't result in any meaningful changes. + +#### `SIGN_MODE_DIRECT` + +The "direct" signing behavior is to sign the raw `TxBody` bytes as broadcast over +the wire. This has the advantages of: + +* requiring the minimum additional client capabilities beyond a standard protocol + buffers implementation +* leaving effectively zero holes for transaction malleability (i.e. there are no + subtle differences between the signing and encoding formats which could + potentially be exploited by an attacker) + +Signatures are structured using the `SignDoc` below which reuses the serialization of +`TxBody` and `AuthInfo` and only adds the fields which are needed for signatures: + +```proto +// types/types.proto +message SignDoc { + // A protobuf serialization of a TxBody that matches the representation in TxRaw. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in TxRaw. + bytes auth_info = 2; + string chain_id = 3; + uint64 account_number = 4; +} +``` + +In order to sign in the default mode, clients take the following steps: + +1. Serialize `TxBody` and `AuthInfo` using any valid protobuf implementation. +2. Create a `SignDoc` and serialize it using [ADR 027](./adr-027-deterministic-protobuf-serialization.md). +3. Sign the encoded `SignDoc` bytes. +4. Build a `TxRaw` and serialize it for broadcasting. + +Signature verification is based on comparing the raw `TxBody` and `AuthInfo` +bytes encoded in `TxRaw` not based on any ["canonicalization"](https://github.com/regen-network/canonical-proto3) +algorithm which creates added complexity for clients in addition to preventing +some forms of upgradeability (to be addressed later in this document). + +Signature verifiers do: + +1. Deserialize a `TxRaw` and pull out `body` and `auth_info`. +2. Create a list of required signer addresses from the messages. +3. For each required signer: + * Pull account number and sequence from the state. + * Obtain the public key either from state or `AuthInfo`'s `signer_infos`. + * Create a `SignDoc` and serialize it using [ADR 027](./adr-027-deterministic-protobuf-serialization.md). + * Verify the signature at the same list position against the serialized `SignDoc`. + +#### `SIGN_MODE_LEGACY_AMINO` + +In order to support legacy wallets and exchanges, Amino JSON will be temporarily +supported transaction signing. Once wallets and exchanges have had a +chance to upgrade to protobuf based signing, this option will be disabled. In +the meantime, it is foreseen that disabling the current Amino signing would cause +too much breakage to be feasible. Note that this is mainly a requirement of the +Cosmos Hub and other chains may choose to disable Amino signing immediately. + +Legacy clients will be able to sign a transaction using the current Amino +JSON format and have it encoded to protobuf using the REST `/tx/encode` +endpoint before broadcasting. + +#### `SIGN_MODE_TEXTUAL` + +As was discussed extensively in [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078), +there is a desire for a human-readable signing encoding, especially for hardware +wallets like the [Ledger](https://www.ledger.com) which display +transaction contents to users before signing. JSON was an attempt at this but +falls short of the ideal. + +`SIGN_MODE_TEXTUAL` is intended as a placeholder for a human-readable +encoding which will replace Amino JSON. This new encoding should be even more +focused on readability than JSON, possibly based on formatting strings like +[MessageFormat](http://userguide.icu-project.org/formatparse/messages). + +In order to ensure that the new human-readable format does not suffer from +transaction malleability issues, `SIGN_MODE_TEXTUAL` +requires that the _human-readable bytes are concatenated with the raw `SignDoc`_ +to generate sign bytes. + +Multiple human-readable formats (maybe even localized messages) may be supported +by `SIGN_MODE_TEXTUAL` when it is implemented. + +### Unknown Field Filtering + +Unknown fields in protobuf messages should generally be rejected by transaction +processors because: + +* important data may be present in the unknown fields, that if ignored, will + cause unexpected behavior for clients +* they present a malleability vulnerability where attackers can bloat tx size + by adding random uninterpreted data to unsigned content (i.e. the master `Tx`, + not `TxBody`) + +There are also scenarios where we may choose to safely ignore unknown fields +(https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-624400188) to +provide graceful forwards compatibility with newer clients. + +We propose that field numbers with bit 11 set (for most use cases this is +the range of 1024-2047) be considered non-critical fields that can safely be +ignored if unknown. + +To handle this we will need a unknown field filter that: + +* always rejects unknown fields in unsigned content (i.e. top-level `Tx` and + unsigned parts of `AuthInfo` if present based on the signing mode) +* rejects unknown fields in all messages (including nested `Any`s) other than + fields with bit 11 set + +This will likely need to be a custom protobuf parser pass that takes message bytes +and `FileDescriptor`s and returns a boolean result. + +### Public Key Encoding + +Public keys in the Cosmos SDK implement the `cryptotypes.PubKey` interface. +We propose to use `Any` for protobuf encoding as we are doing with other interfaces (for example, in `BaseAccount.PubKey` and `SignerInfo.PublicKey`). +The following public keys are implemented: secp256k1, secp256r1, ed25519 and legacy-multisignature. + +Ex: + +```proto +message PubKey { + bytes key = 1; +} +``` + +`multisig.LegacyAminoPubKey` has an array of `Any`'s member to support any +protobuf public key type. + +Apps should only attempt to handle a registered set of public keys that they +have tested. The provided signature verification ante handler decorators will +enforce this. + +### CLI & REST + +Currently, the REST and CLI handlers encode and decode types and txs via Amino +JSON encoding using a concrete Amino codec. Being that some of the types dealt with +in the client can be interfaces, similar to how we described in [ADR 019](./adr-019-protobuf-state-encoding.md), +the client logic will now need to take a codec interface that knows not only how +to handle all the types, but also knows how to generate transactions, signatures, +and messages. + +```go +type AccountRetriever interface { + GetAccount(clientCtx Context, addr sdk.AccAddress) (client.Account, error) + GetAccountWithHeight(clientCtx Context, addr sdk.AccAddress) (client.Account, int64, error) + EnsureExists(clientCtx client.Context, addr sdk.AccAddress) error + GetAccountNumberSequence(clientCtx client.Context, addr sdk.AccAddress) (uint64, uint64, error) +} + +type Generator interface { + NewTx() TxBuilder + NewFee() ClientFee + NewSignature() ClientSignature + MarshalTx(tx types.Tx) ([]byte, error) +} + +type TxBuilder interface { + GetTx() sdk.Tx + + SetMsgs(...sdk.Msg) error + GetSignatures() []sdk.Signature + SetSignatures(...sdk.Signature) + GetFee() sdk.Fee + SetFee(sdk.Fee) + GetMemo() string + SetMemo(string) +} +``` + +We then update `Context` to have new fields: `Codec`, `TxGenerator`, +and `AccountRetriever`, and we update `AppModuleBasic.GetTxCmd` to take +a `Context` which should have all of these fields pre-populated. + +Each client method should then use one of the `Init` methods to re-initialize +the pre-populated `Context`. `tx.GenerateOrBroadcastTx` can be used to +generate or broadcast a transaction. For example: + +```go +import "github.com/spf13/cobra" +import "github.com/cosmos/cosmos-sdk/client" +import "github.com/cosmos/cosmos-sdk/client/tx" + +func NewCmdDoSomething(clientCtx client.Context) *cobra.Command { + return &cobra.Command{ + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := ctx.InitWithInput(cmd.InOrStdin()) + msg := NewSomeMsg{...} + tx.GenerateOrBroadcastTx(clientCtx, msg) + }, + } +} +``` + +## Future Improvements + +### `SIGN_MODE_TEXTUAL` specification + +A concrete specification and implementation of `SIGN_MODE_TEXTUAL` is intended +as a near-term future improvement so that the ledger app and other wallets +can gracefully transition away from Amino JSON. + +### `SIGN_MODE_DIRECT_AUX` + +(\*Documented as option (3) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933) + +We could add a mode `SIGN_MODE_DIRECT_AUX` +to support scenarios where multiple signatures +are being gathered into a single transaction but the message composer does not +yet know which signatures will be included in the final transaction. For instance, +I may have a 3/5 multisig wallet and want to send a `TxBody` to all 5 +signers to see who signs first. As soon as I have 3 signatures then I will go +ahead and build the full transaction. + +With `SIGN_MODE_DIRECT`, each signer needs +to sign the full `AuthInfo` which includes the full list of all signers and +their signing modes, making the above scenario very hard. + +`SIGN_MODE_DIRECT_AUX` would allow "auxiliary" signers to create their signature +using only `TxBody` and their own `PublicKey`. This allows the full list of +signers in `AuthInfo` to be delayed until signatures have been collected. + +An "auxiliary" signer is any signer besides the primary signer who is paying +the fee. For the primary signer, the full `AuthInfo` is actually needed to calculate gas and fees +because that is dependent on how many signers and which key types and signing +modes they are using. Auxiliary signers, however, do not need to worry about +fees or gas and thus can just sign `TxBody`. + +To generate a signature in `SIGN_MODE_DIRECT_AUX` these steps would be followed: + +1. Encode `SignDocAux` (with the same requirement that fields must be serialized + in order): + + ```proto + // types/types.proto + message SignDocAux { + bytes body_bytes = 1; + // PublicKey is included in SignDocAux : + // 1. as a special case for multisig public keys. For multisig public keys, + // the signer should use the top-level multisig public key they are signing + // against, not their own public key. This is to prevent against a form + // of malleability where a signature could be taken out of context of the + // multisig key that was intended to be signed for + // 2. to guard against scenario where configuration information is encoded + // in public keys (it has been proposed) such that two keys can generate + // the same signature but have different security properties + // + // By including it here, the composer of AuthInfo cannot reference the + // a public key variant the signer did not intend to use + PublicKey public_key = 2; + string chain_id = 3; + uint64 account_number = 4; + } + ``` + +2. Sign the encoded `SignDocAux` bytes +3. Send their signature and `SignerInfo` to primary signer who will then + sign and broadcast the final transaction (with `SIGN_MODE_DIRECT` and `AuthInfo` + added) once enough signatures have been collected + +### `SIGN_MODE_DIRECT_RELAXED` + +(_Documented as option (1)(a) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933_) + +This is a variation of `SIGN_MODE_DIRECT` where multiple signers wouldn't need to +coordinate public keys and signing modes in advance. It would involve an alternate +`SignDoc` similar to `SignDocAux` above with fee. This could be added in the future +if client developers found the burden of collecting public keys and modes in advance +too burdensome. + +## Consequences + +### Positive + +* Significant performance gains. +* Supports backward and forward type compatibility. +* Better support for cross-language clients. +* Multiple signing modes allow for greater protocol evolution + +### Negative + +* `google.protobuf.Any` type URLs increase transaction size although the effect + may be negligible or compression may be able to mitigate it. + +### Neutral + +## References diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-021-protobuf-query-encoding.md b/versioned_docs/version-0.46/integrate/architecture/adr-021-protobuf-query-encoding.md new file mode 100644 index 000000000..9037d14a8 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-021-protobuf-query-encoding.md @@ -0,0 +1,256 @@ +# ADR 021: Protocol Buffer Query Encoding + +## Changelog + +* 2020 March 27: Initial Draft + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](./adr-019-protobuf-state-encoding.md) and +[ARD 020](./adr-019-protobuf-transaction-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +This ADR continues from [ARD 020](./adr-020-protobuf-transaction-encoding.md) +to specify the encoding of queries. + +## Decision + +### Custom Query Definition + +Modules define custom queries through a protocol buffers `service` definition. +These `service` definitions are generally associated with and used by the +GRPC protocol. However, the protocol buffers specification indicates that +they can be used more generically by any request/response protocol that uses +protocol buffer encoding. Thus, we can use `service` definitions for specifying +custom ABCI queries and even reuse a substantial amount of the GRPC infrastructure. + +Each module with custom queries should define a service canonically named `Query`: + +```proto +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { } +} +``` + +#### Handling of Interface Types + +Modules that use interface types and need true polymorphism generally force a +`oneof` up to the app-level that provides the set of concrete implementations of +that interface that the app supports. While app's are welcome to do the same for +queries and implement an app-level query service, it is recommended that modules +provide query methods that expose these interfaces via `google.protobuf.Any`. +There is a concern on the transaction level that the overhead of `Any` is too +high to justify its usage. However for queries this is not a concern, and +providing generic module-level queries that use `Any` does not preclude apps +from also providing app-level queries that return use the app-level `oneof`s. + +A hypothetical example for the `gov` module would look something like: + +```proto +// x/gov/types/types.proto + +import "google/protobuf/any.proto"; + +service Query { + rpc GetProposal(GetProposalParams) returns (AnyProposal) { } +} + +message AnyProposal { + ProposalBase base = 1; + google.protobuf.Any content = 2; +} +``` + +### Custom Query Implementation + +In order to implement the query service, we can reuse the existing [gogo protobuf](https://github.com/gogo/protobuf) +grpc plugin, which for a service named `Query` generates an interface named +`QueryServer` as below: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +The custom queries for our module are implemented by implementing this interface. + +The first parameter in this generated interface is a generic `context.Context`, +whereas querier methods generally need an instance of `sdk.Context` to read +from the store. Since arbitrary values can be attached to `context.Context` +using the `WithValue` and `Value` methods, the Cosmos SDK should provide a function +`sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +An example implementation of `QueryBalance` for the bank module as above would +look something like: + +```go +type Querier struct { + Keeper +} + +func (q Querier) QueryBalance(ctx context.Context, params *types.QueryBalanceParams) (*sdk.Coin, error) { + balance := q.GetBalance(sdk.UnwrapSDKContext(ctx), params.Address, params.Denom) + return &balance, nil +} +``` + +### Custom Query Registration and Routing + +Query server implementations as above would be registered with `AppModule`s using +a new method `RegisterQueryService(grpc.Server)` which could be implemented simply +as below: + +```go +// x/bank/module.go +func (am AppModule) RegisterQueryService(server grpc.Server) { + types.RegisterQueryServer(server, keeper.Querier{am.keeper}) +} +``` + +Underneath the hood, a new method `RegisterService(sd *grpc.ServiceDesc, handler interface{})` +will be added to the existing `baseapp.QueryRouter` to add the queries to the custom +query routing table (with the routing method being described below). +The signature for this method matches the existing +`RegisterServer` method on the GRPC `Server` type where `handler` is the custom +query server implementation described above. + +GRPC-like requests are routed by the service name (ex. `cosmos_sdk.x.bank.v1.Query`) +and method name (ex. `QueryBalance`) combined with `/`s to form a full +method name (ex. `/cosmos_sdk.x.bank.v1.Query/QueryBalance`). This gets translated +into an ABCI query as `custom/cosmos_sdk.x.bank.v1.Query/QueryBalance`. Service handlers +registered with `QueryRouter.RegisterService` will be routed this way. + +Beyond the method name, GRPC requests carry a protobuf encoded payload, which maps naturally +to `RequestQuery.Data`, and receive a protobuf encoded response or error. Thus +there is a quite natural mapping of GRPC-like rpc methods to the existing +`sdk.Query` and `QueryRouter` infrastructure. + +This basic specification allows us to reuse protocol buffer `service` definitions +for ABCI custom queries substantially reducing the need for manual decoding and +encoding in query methods. + +### GRPC Protocol Support + +In addition to providing an ABCI query pathway, we can easily provide a GRPC +proxy server that routes requests in the GRPC protocol to ABCI query requests +under the hood. In this way, clients could use their host languages' existing +GRPC implementations to make direct queries against Cosmos SDK app's using +these `service` definitions. In order for this server to work, the `QueryRouter` +on `BaseApp` will need to expose the service handlers registered with +`QueryRouter.RegisterService` to the proxy server implementation. Nodes could +launch the proxy server on a separate port in the same process as the ABCI app +with a command-line flag. + +### REST Queries and Swagger Generation + +[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) is a project that +translates REST calls into GRPC calls using special annotations on service +methods. Modules that want to expose REST queries should add `google.api.http` +annotations to their `rpc` methods as in this example below. + +```proto +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { + option (google.api.http) = { + get: "/x/bank/v1/balance/{address}/{denom}" + }; + } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { + option (google.api.http) = { + get: "/x/bank/v1/balances/{address}" + }; + } +} +``` + +grpc-gateway will work direcly against the GRPC proxy described above which will +translate requests to ABCI queries under the hood. grpc-gateway can also +generate Swagger definitions automatically. + +In the current implementation of REST queries, each module needs to implement +REST queries manually in addition to ABCI querier methods. Using the grpc-gateway +approach, there will be no need to generate separate REST query handlers, just +query servers as described above as grpc-gateway handles the translation of protobuf +to REST as well as Swagger definitions. + +The Cosmos SDK should provide CLI commands for apps to start GRPC gateway either in +a separate process or the same process as the ABCI app, as well as provide a +command for generating grpc-gateway proxy `.proto` files and the `swagger.json` +file. + +### Client Usage + +The gogo protobuf grpc plugin generates client interfaces in addition to server +interfaces. For the `Query` service defined above we would get a `QueryClient` +interface like: + +```go +type QueryClient interface { + QueryBalance(ctx context.Context, in *QueryBalanceParams, opts ...grpc.CallOption) (*types.Coin, error) + QueryAllBalances(ctx context.Context, in *QueryAllBalancesParams, opts ...grpc.CallOption) (*QueryAllBalancesResponse, error) +} +``` + +Via a small patch to gogo protobuf ([gogo/protobuf#675](https://github.com/gogo/protobuf/pull/675)) +we have tweaked the grpc codegen to use an interface rather than concrete type +for the generated client struct. This allows us to also reuse the GRPC infrastructure +for ABCI client queries. + +1Context`will receive a new method`QueryConn`that returns a`ClientConn` +that routes calls to ABCI queries + +Clients (such as CLI methods) will then be able to call query methods like this: + +```go +clientCtx := client.NewContext() +queryClient := types.NewQueryClient(clientCtx.QueryConn()) +params := &types.QueryBalanceParams{addr, denom} +result, err := queryClient.QueryBalance(gocontext.Background(), params) +``` + +### Testing + +Tests would be able to create a query client directly from keeper and `sdk.Context` +references using a `QueryServerTestHelper` as below: + +```go +queryHelper := baseapp.NewQueryServerTestHelper(ctx) +types.RegisterQueryServer(queryHelper, keeper.Querier{app.BankKeeper}) +queryClient := types.NewQueryClient(queryHelper) +``` + +## Future Improvements + +## Consequences + +### Positive + +* greatly simplified querier implementation (no manual encoding/decoding) +* easy query client generation (can use existing grpc and swagger tools) +* no need for REST query implementations +* type safe query methods (generated via grpc plugin) +* going forward, there will be less breakage of query methods because of the +backwards compatibility guarantees provided by buf + +### Negative + +* all clients using the existing ABCI/REST queries will need to be refactored +for both the new GRPC/REST query paths as well as protobuf/proto-json encoded +data, but this is more or less unavoidable in the protobuf refactoring + +### Neutral + +## References diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-022-custom-panic-handling.md b/versioned_docs/version-0.46/integrate/architecture/adr-022-custom-panic-handling.md new file mode 100644 index 000000000..6ed7b6246 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-022-custom-panic-handling.md @@ -0,0 +1,218 @@ +# ADR 022: Custom BaseApp panic handling + +## Changelog + +* 2020 Apr 24: Initial Draft +* 2021 Sep 14: Superseded by ADR-045 + +## Status + +SUPERSEDED by ADR-045 + +## Context + +The current implementation of BaseApp does not allow developers to write custom error handlers during panic recovery +[runTx()](https://github.com/cosmos/cosmos-sdk/blob/bad4ca75f58b182f600396ca350ad844c18fc80b/baseapp/baseapp.go#L539) +method. We think that this method can be more flexible and can give Cosmos SDK users more options for customizations without +the need to rewrite whole BaseApp. Also there's one special case for `sdk.ErrorOutOfGas` error handling, that case +might be handled in a "standard" way (middleware) alongside the others. + +We propose middleware-solution, which could help developers implement the following cases: + +* add external logging (let's say sending reports to external services like [Sentry](https://sentry.io)); +* call panic for specific error cases; + +It will also make `OutOfGas` case and `default` case one of the middlewares. +`Default` case wraps recovery object to an error and logs it ([example middleware implementation](#Recovery-middleware)). + +Our project has a sidecar service running alongside the blockchain node (smart contracts virtual machine). It is +essential that node <-> sidecar connectivity stays stable for TXs processing. So when the communication breaks we need +to crash the node and reboot it once the problem is solved. That behaviour makes node's state machine execution +deterministic. As all keeper panics are caught by runTx's `defer()` handler, we have to adjust the BaseApp code +in order to customize it. + +## Decision + +### Design + +#### Overview + +Instead of hardcoding custom error handling into BaseApp we suggest using set of middlewares which can be customized +externally and will allow developers use as many custom error handlers as they want. Implementation with tests +can be found [here](https://github.com/cosmos/cosmos-sdk/pull/6053). + +#### Implementation details + +##### Recovery handler + +New `RecoveryHandler` type added. `recoveryObj` input argument is an object returned by the standard Go function +`recover()` from the `builtin` package. + +```go +type RecoveryHandler func(recoveryObj interface{}) error +``` + +Handler should type assert (or other methods) an object to define if object should be handled. +`nil` should be returned if input object can't be handled by that `RecoveryHandler` (not a handler's target type). +Not `nil` error should be returned if input object was handled and middleware chain execution should be stopped. + +An example: + +```go +func exampleErrHandler(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { return nil } + + if someSpecificError.Is(err) { + panic(customPanicMsg) + } else { + return nil + } +} +``` + +This example breaks the application execution, but it also might enrich the error's context like the `OutOfGas` handler. + +##### Recovery middleware + +We also add a middleware type (decorator). That function type wraps `RecoveryHandler` and returns the next middleware in +execution chain and handler's `error`. Type is used to separate actual `recovery()` object handling from middleware +chain processing. + +```go +type recoveryMiddleware func(recoveryObj interface{}) (recoveryMiddleware, error) + +func newRecoveryMiddleware(handler RecoveryHandler, next recoveryMiddleware) recoveryMiddleware { + return func(recoveryObj interface{}) (recoveryMiddleware, error) { + if err := handler(recoveryObj); err != nil { + return nil, err + } + return next, nil + } +} +``` + +Function receives a `recoveryObj` object and returns: + +* (next `recoveryMiddleware`, `nil`) if object wasn't handled (not a target type) by `RecoveryHandler`; +* (`nil`, not nil `error`) if input object was handled and other middlewares in the chain should not be executed; +* (`nil`, `nil`) in case of invalid behavior. Panic recovery might not have been properly handled; +this can be avoided by always using a `default` as a rightmost middleware in the chain (always returns an `error`'); + +`OutOfGas` middleware example: + +```go +func newOutOfGasRecoveryMiddleware(gasWanted uint64, ctx sdk.Context, next recoveryMiddleware) recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(sdk.ErrorOutOfGas) + if !ok { return nil } + + return sdkerrors.Wrap( + sdkerrors.ErrOutOfGas, fmt.Sprintf( + "out of gas in location: %v; gasWanted: %d, gasUsed: %d", err.Descriptor, gasWanted, ctx.GasMeter().GasConsumed(), + ), + ) + } + + return newRecoveryMiddleware(handler, next) +} +``` + +`Default` middleware example: + +```go +func newDefaultRecoveryMiddleware() recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + return sdkerrors.Wrap( + sdkerrors.ErrPanic, fmt.Sprintf("recovered: %v\nstack:\n%v", recoveryObj, string(debug.Stack())), + ) + } + + return newRecoveryMiddleware(handler, nil) +} +``` + +##### Recovery processing + +Basic chain of middlewares processing would look like: + +```go +func processRecovery(recoveryObj interface{}, middleware recoveryMiddleware) error { + if middleware == nil { return nil } + + next, err := middleware(recoveryObj) + if err != nil { return err } + if next == nil { return nil } + + return processRecovery(recoveryObj, next) +} +``` + +That way we can create a middleware chain which is executed from left to right, the rightmost middleware is a +`default` handler which must return an `error`. + +##### BaseApp changes + +The `default` middleware chain must exist in a `BaseApp` object. `Baseapp` modifications: + +```go +type BaseApp struct { + // ... + runTxRecoveryMiddleware recoveryMiddleware +} + +func NewBaseApp(...) { + // ... + app.runTxRecoveryMiddleware = newDefaultRecoveryMiddleware() +} + +func (app *BaseApp) runTx(...) { + // ... + defer func() { + if r := recover(); r != nil { + recoveryMW := newOutOfGasRecoveryMiddleware(gasWanted, ctx, app.runTxRecoveryMiddleware) + err, result = processRecovery(r, recoveryMW), nil + } + + gInfo = sdk.GasInfo{GasWanted: gasWanted, GasUsed: ctx.GasMeter().GasConsumed()} + }() + // ... +} +``` + +Developers can add their custom `RecoveryHandler`s by providing `AddRunTxRecoveryHandler` as a BaseApp option parameter to the `NewBaseapp` constructor: + +```go +func (app *BaseApp) AddRunTxRecoveryHandler(handlers ...RecoveryHandler) { + for _, h := range handlers { + app.runTxRecoveryMiddleware = newRecoveryMiddleware(h, app.runTxRecoveryMiddleware) + } +} +``` + +This method would prepend handlers to an existing chain. + +## Consequences + +### Positive + +* Developers of Cosmos SDK based projects can add custom panic handlers to: + * add error context for custom panic sources (panic inside of custom keepers); + * emit `panic()`: passthrough recovery object to the Tendermint core; + * other necessary handling; +* Developers can use standard Cosmos SDK `BaseApp` implementation, rather that rewriting it in their projects; +* Proposed solution doesn't break the current "standard" `runTx()` flow; + +### Negative + +* Introduces changes to the execution model design. + +### Neutral + +* `OutOfGas` error handler becomes one of the middlewares; +* Default panic handler becomes one of the middlewares; + +## References + +* [PR-6053 with proposed solution](https://github.com/cosmos/cosmos-sdk/pull/6053) +* [Similar solution. ADR-010 Modular AnteHandler](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-010-modular-antehandler.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-023-protobuf-naming.md b/versioned_docs/version-0.46/integrate/architecture/adr-023-protobuf-naming.md new file mode 100644 index 000000000..4360befde --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-023-protobuf-naming.md @@ -0,0 +1,263 @@ +# ADR 023: Protocol Buffer Naming and Versioning Conventions + +## Changelog + +* 2020 April 27: Initial Draft +* 2020 August 5: Update guidelines + +## Status + +Accepted + +## Context + +Protocol Buffers provide a basic [style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide) builds upon that. To the +extent possible, we want to follow industry accepted guidelines and wisdom for +the effective usage of protobuf, deviating from those only when there is clear +rationale for our use case. + +### Adoption of `Any` + +The adoption of `google.protobuf.Any` as the recommended approach for encoding +interface types (as opposed to `oneof`) makes package naming a central part +of the encoding as fully-qualified message names now appear in encoded +messages. + +### Current Directory Organization + +Thus far we have mostly followed [Buf's](https://buf.build) [DEFAULT](https://buf.build/docs/lint-checkers#default) +recommendations, with the minor deviation of disabling [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout) +which although being convenient for developing code comes with the warning +from Buf that: + +> you will have a very bad time with many Protobuf plugins across various languages if you do not do this + +### Adoption of gRPC Queries + +In [ADR 021](adr-021-protobuf-query-encoding.md), gRPC was adopted for Protobuf +native queries. The full gRPC service path thus becomes a key part of ABCI query +path. In the future, gRPC queries may be allowed from within persistent scripts +by technologies such as CosmWasm and these query routes would be stored within +script binaries. + +## Decision + +The goal of this ADR is to provide thoughtful naming conventions that: + +* encourage a good user experience for when users interact directly with +.proto files and fully-qualified protobuf names +* balance conciseness against the possibility of either over-optimizing (making +names too short and cryptic) or under-optimizing (just accepting bloated names +with lots of redundant information) + +These guidelines are meant to act as a style guide for both the Cosmos SDK and +third-party modules. + +As a starting point, we should adopt all of the [DEFAULT](https://buf.build/docs/lint-checkers#default) +checkers in [Buf's](https://buf.build) including [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout), +except: + +* [PACKAGE_VERSION_SUFFIX](https://buf.build/docs/lint-checkers#package_version_suffix) +* [SERVICE_SUFFIX](https://buf.build/docs/lint-checkers#service_suffix) + +Further guidelines to be described below. + +### Principles + +#### Concise and Descriptive Names + +Names should be descriptive enough to convey their meaning and distinguish +them from other names. + +Given that we are using fully-qualifed names within +`google.protobuf.Any` as well as within gRPC query routes, we should aim to +keep names concise, without going overboard. The general rule of thumb should +be if a shorter name would convey more or else the same thing, pick the shorter +name. + +For instance, `cosmos.bank.MsgSend` (19 bytes) conveys roughly the same information +as `cosmos_sdk.x.bank.v1.MsgSend` (28 bytes) but is more concise. + +Such conciseness makes names both more pleasant to work with and take up less +space within transactions and on the wire. + +We should also resist the temptation to over-optimize, by making names +cryptically short with abbreviations. For instance, we shouldn't try to +reduce `cosmos.bank.MsgSend` to `csm.bk.MSnd` just to save a few bytes. + +The goal is to make names **_concise but not cryptic_**. + +#### Names are for Clients First + +Package and type names should be chosen for the benefit of users, not +necessarily because of legacy concerns related to the go code-base. + +#### Plan for Longevity + +In the interests of long-term support, we should plan on the names we do +choose to be in usage for a long time, so now is the opportunity to make +the best choices for the future. + +### Versioning + +#### Guidelines on Stable Package Versions + +In general, schema evolution is the way to update protobuf schemas. That means that new fields, +messages, and RPC methods are _added_ to existing schemas and old fields, messages and RPC methods +are maintained as long as possible. + +Breaking things is often unacceptable in a blockchain scenario. For instance, immutable smart contracts +may depend on certain data schemas on the host chain. If the host chain breaks those schemas, the smart +contract may be irreparably broken. Even when things can be fixed (for instance in client software), +this often comes at a high cost. + +Instead of breaking things, we should make every effort to evolve schemas rather than just breaking them. +[Buf](https://buf.build) breaking change detection should be used on all stable (non-alpha or beta) packages +to prevent such breakage. + +With that in mind, different stable versions (i.e. `v1` or `v2`) of a package should more or less be considered +different packages and this should be last resort approach for upgrading protobuf schemas. Scenarios where creating +a `v2` may make sense are: + +* we want to create a new module with similar functionality to an existing module and adding `v2` is the most natural +way to do this. In that case, there are really just two different, but similar modules with different APIs. +* we want to add a new revamped API for an existing module and it's just too cumbersome to add it to the existing package, +so putting it in `v2` is cleaner for users. In this case, care should be made to not deprecate support for +`v1` if it is actively used in immutable smart contracts. + +#### Guidelines on unstable (alpha and beta) package versions + +The following guidelines are recommended for marking packages as alpha or beta: + +* marking something as `alpha` or `beta` should be a last resort and just putting something in the +stable package (i.e. `v1` or `v2`) should be preferred +* a package _should_ be marked as `alpha` _if and only if_ there are active discussions to remove +or significantly alter the package in the near future +* a package _should_ be marked as `beta` _if and only if_ there is an active discussion to +significantly refactor/rework the functionality in the near future but not remove it +* modules _can and should_ have types in both stable (i.e. `v1` or `v2`) and unstable (`alpha` or `beta`) packages. + +_`alpha` and `beta` should not be used to avoid responsibility for maintaining compatibility._ +Whenever code is released into the wild, especially on a blockchain, there is a high cost to changing things. In some +cases, for instance with immutable smart contracts, a breaking change may be impossible to fix. + +When marking something as `alpha` or `beta`, maintainers should ask the questions: + +* what is the cost of asking others to change their code vs the benefit of us maintaining the optionality to change it? +* what is the plan for moving this to `v1` and how will that affect users? + +`alpha` or `beta` should really be used to communicate "changes are planned". + +As a case study, gRPC reflection is in the package `grpc.reflection.v1alpha`. It hasn't been changed since +2017 and it is now used in other widely used software like gRPCurl. Some folks probably use it in production services +and so if they actually went and changed the package to `grpc.reflection.v1`, some software would break and +they probably don't want to do that... So now the `v1alpha` package is more or less the de-facto `v1`. Let's not do that. + +The following are guidelines for working with non-stable packages: + +* [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix) +(ex. `v1alpha1`) _should_ be used for non-stable packages +* non-stable packages should generally be excluded from breaking change detection +* immutable smart contract modules (i.e. CosmWasm) _should_ block smart contracts/persistent +scripts from interacting with `alpha`/`beta` packages + +#### Omit v1 suffix + +Instead of using [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix), +we can omit `v1` for packages that don't actually have a second version. This +allows for more concise names for common use cases like `cosmos.bank.Send`. +Packages that do have a second or third version can indicate that with `.v2` +or `.v3`. + +### Package Naming + +#### Adopt a short, unique top-level package name + +Top-level packages should adopt a short name that is known to not collide with +other names in common usage within the Cosmos ecosystem. In the near future, a +registry should be created to reserve and index top-level package names used +within the Cosmos ecosystem. Because the Cosmos SDK is intended to provide +the top-level types for the Cosmos project, the top-level package name `cosmos` +is recommended for usage within the Cosmos SDK instead of the longer `cosmos_sdk`. +[ICS](https://github.com/cosmos/ics) specifications could consider a +short top-level package like `ics23` based upon the standard number. + +#### Limit sub-package depth + +Sub-package depth should be increased with caution. Generally a single +sub-package is needed for a module or a library. Even though `x` or `modules` +is used in source code to denote modules, this is often unnecessary for .proto +files as modules are the primary thing sub-packages are used for. Only items which +are known to be used infrequently should have deep sub-package depths. + +For the Cosmos SDK, it is recommended that that we simply write `cosmos.bank`, +`cosmos.gov`, etc. rather than `cosmos.x.bank`. In practice, most non-module +types can go straight in the `cosmos` package or we can introduce a +`cosmos.base` package if needed. Note that this naming _will not_ change +go package names, i.e. the `cosmos.bank` protobuf package will still live in +`x/bank`. + +### Message Naming + +Message type names should be as concise possible without losing clarity. `sdk.Msg` +types which are used in transactions will retain the `Msg` prefix as that provides +helpful context. + +### Service and RPC Naming + +[ADR 021](adr-021-protobuf-query-encoding.md) specifies that modules should +implement a gRPC query service. We should consider the principle of conciseness +for query service and RPC names as these may be called from persistent script +modules such as CosmWasm. Also, users may use these query paths from tools like +[gRPCurl](https://github.com/fullstorydev/grpcurl). As an example, we can shorten +`/cosmos_sdk.x.bank.v1.QueryService/QueryBalance` to +`/cosmos.bank.Query/Balance` without losing much useful information. + +RPC request and response types _should_ follow the `ServiceNameMethodNameRequest`/ +`ServiceNameMethodNameResponse` naming convention. i.e. for an RPC method named `Balance` +on the `Query` service, the request and response types would be `QueryBalanceRequest` +and `QueryBalanceResponse`. This will be more self-explanatory than `BalanceRequest` +and `BalanceResponse`. + +#### Use just `Query` for the query service + +Instead of [Buf's default service suffix recommendation](https://github.com/cosmos/cosmos-sdk/pull/6033), +we should simply use the shorter `Query` for query services. + +For other types of gRPC services, we should consider sticking with Buf's +default recommendation. + +#### Omit `Get` and `Query` from query service RPC names + +`Get` and `Query` should be omitted from `Query` service names because they are +redundant in the fully-qualified name. For instance, `/cosmos.bank.Query/QueryBalance` +just says `Query` twice without any new information. + +## Future Improvements + +A registry of top-level package names should be created to coordinate naming +across the ecosystem, prevent collisions, and also help developers discover +useful schemas. A simple starting point would be a git repository with +community-based governance. + +## Consequences + +### Positive + +* names will be more concise and easier to read and type +* all transactions using `Any` will be at shorter (`_sdk.x` and `.v1` will be removed) +* `.proto` file imports will be more standard (without `"third_party/proto"` in +the path) +* code generation will be easier for clients because .proto files will be +in a single `proto/` directory which can be copied rather than scattered +throughout the Cosmos SDK + +### Negative + +### Neutral + +* `.proto` files will need to be reorganized and refactored +* some modules may need to be marked as alpha or beta + +## References diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-024-coin-metadata.md b/versioned_docs/version-0.46/integrate/architecture/adr-024-coin-metadata.md new file mode 100644 index 000000000..3c55f80f0 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-024-coin-metadata.md @@ -0,0 +1,139 @@ +# ADR 024: Coin Metadata + +## Changelog + +* 05/19/2020: Initial draft + +## Status + +Proposed + +## Context + +Assets in the Cosmos SDK are represented via a `Coins` type that consists of an `amount` and a `denom`, +where the `amount` can be any arbitrarily large or small value. In addition, the Cosmos SDK uses an +account-based model where there are two types of primary accounts -- basic accounts and module accounts. +All account types have a set of balances that are composed of `Coins`. The `x/bank` module keeps +track of all balances for all accounts and also keeps track of the total supply of balances in an +application. + +With regards to a balance `amount`, the Cosmos SDK assumes a static and fixed unit of denomination, +regardless of the denomination itself. In other words, clients and apps built atop a Cosmos-SDK-based +chain may choose to define and use arbitrary units of denomination to provide a richer UX, however, by +the time a tx or operation reaches the Cosmos SDK state machine, the `amount` is treated as a single +unit. For example, for the Cosmos Hub (Gaia), clients assume 1 ATOM = 10^6 uatom, and so all txs and +operations in the Cosmos SDK work off of units of 10^6. + +This clearly provides a poor and limited UX especially as interoperability of networks increases and +as a result the total amount of asset types increases. We propose to have `x/bank` additionally keep +track of metadata per `denom` in order to help clients, wallet providers, and explorers improve their +UX and remove the requirement for making any assumptions on the unit of denomination. + +## Decision + +The `x/bank` module will be updated to store and index metadata by `denom`, specifically the "base" or +smallest unit -- the unit the Cosmos SDK state-machine works with. + +Metadata may also include a non-zero length list of denominations. Each entry contains the name of +the denomination `denom`, the exponent to the base and a list of aliases. An entry is to be +interpreted as `1 denom = 10^exponent base_denom` (e.g. `1 ETH = 10^18 wei` and `1 uatom = 10^0 uatom`). + +There are two denominations that are of high importance for clients: the `base`, which is the smallest +possible unit and the `display`, which is the unit that is commonly referred to in human communication +and on exchanges. The values in those fields link to an entry in the list of denominations. + +The list in `denom_units` and the `display` entry may be changed via governance. + +As a result, we can define the type as follows: + +```protobuf +message DenomUnit { + string denom = 1; + uint32 exponent = 2; + repeated string aliases = 3; +} + +message Metadata { + string description = 1; + repeated DenomUnit denom_units = 2; + string base = 3; + string display = 4; +} +``` + +As an example, the ATOM's metadata can be defined as follows: + +```json +{ + "description": "The native staking token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "uatom", + "exponent": 0, + "aliases": [ + "microatom" + ], + }, + { + "denom": "matom", + "exponent": 3, + "aliases": [ + "milliatom" + ] + }, + { + "denom": "atom", + "exponent": 6, + } + ], + "base": "uatom", + "display": "atom", +} +``` + +Given the above metadata, a client may infer the following things: + +* 4.3atom = 4.3 * (10^6) = 4,300,000uatom +* The string "atom" can be used as a display name in a list of tokens. +* The balance 4300000 can be displayed as 4,300,000uatom or 4,300matom or 4.3atom. + The `display` denomination 4.3atom is a good default if the authors of the client don't make + an explicit decision to choose a different representation. + +A client should be able to query for metadata by denom both via the CLI and REST interfaces. In +addition, we will add handlers to these interfaces to convert from any unit to another given unit, +as the base framework for this already exists in the Cosmos SDK. + +Finally, we need to ensure metadata exists in the `GenesisState` of the `x/bank` module which is also +indexed by the base `denom`. + +```go +type GenesisState struct { + SendEnabled bool `json:"send_enabled" yaml:"send_enabled"` + Balances []Balance `json:"balances" yaml:"balances"` + Supply sdk.Coins `json:"supply" yaml:"supply"` + DenomMetadata []Metadata `json:"denom_metadata" yaml:"denom_metadata"` +} +``` + +## Future Work + +In order for clients to avoid having to convert assets to the base denomination -- either manually or +via an endpoint, we may consider supporting automatic conversion of a given unit input. + +## Consequences + +### Positive + +* Provides clients, wallet providers and block explorers with additional data on + asset denomination to improve UX and remove any need to make assumptions on + denomination units. + +### Negative + +* A small amount of required additional storage in the `x/bank` module. The amount + of additional storage should be minimal as the amount of total assets should not + be large. + +### Neutral + +## References diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-027-deterministic-protobuf-serialization.md b/versioned_docs/version-0.46/integrate/architecture/adr-027-deterministic-protobuf-serialization.md new file mode 100644 index 000000000..a4602c264 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-027-deterministic-protobuf-serialization.md @@ -0,0 +1,314 @@ +# ADR 027: Deterministic Protobuf Serialization + +## Changelog + +* 2020-08-07: Initial Draft +* 2020-09-01: Further clarify rules + +## Status + +Proposed + +## Abstract + +Fully deterministic structure serialization, which works across many languages and clients, +is needed when signing messages. We need to be sure that whenever we serialize +a data structure, no matter in which supported language, the raw bytes +will stay the same. +[Protobuf](https://developers.google.com/protocol-buffers/docs/proto3) +serialization is not bijective (i.e. there exist a practically unlimited number of +valid binary representations for a given protobuf document)1. + +This document describes a deterministic serialization scheme for +a subset of protobuf documents, that covers this use case but can be reused in +other cases as well. + +### Context + +For signature verification in Cosmos SDK, the signer and verifier need to agree on +the same serialization of a `SignDoc` as defined in +[ADR-020](./adr-020-protobuf-transaction-encoding.md) without transmitting the +serialization. + +Currently, for block signatures we are using a workaround: we create a new [TxRaw](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L30) +instance (as defined in [adr-020-protobuf-transaction-encoding](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-020-protobuf-transaction-encoding.md#transactions)) +by converting all [Tx](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L13) +fields to bytes on the client side. This adds an additional manual +step when sending and signing transactions. + +### Decision + +The following encoding scheme is to be used by other ADRs, +and in particular for `SignDoc` serialization. + +## Specification + +### Scope + +This ADR defines a protobuf3 serializer. The output is a valid protobuf +serialization, such that every protobuf parser can parse it. + +No maps are supported in version 1 due to the complexity of defining a +deterministic serialization. This might change in future. Implementations must +reject documents containing maps as invalid input. + +### Background - Protobuf3 Encoding + +Most numeric types in protobuf3 are encoded as +[varints](https://developers.google.com/protocol-buffers/docs/encoding#varints). +Varints are at most 10 bytes, and since each varint byte has 7 bits of data, +varints are a representation of `uint70` (70-bit unsigned integer). When +encoding, numeric values are casted from their base type to `uint70`, and when +decoding, the parsed `uint70` is casted to the appropriate numeric type. + +The maximum valid value for a varint that complies with protobuf3 is +`FF FF FF FF FF FF FF FF FF 7F` (i.e. `2**70 -1`). If the field type is +`{,u,s}int64`, the highest 6 bits of the 70 are dropped during decoding, +introducing 6 bits of malleability. If the field type is `{,u,s}int32`, the +highest 38 bits of the 70 are dropped during decoding, introducing 38 bits of +malleability. + +Among other sources of non-determinism, this ADR eliminates the possibility of +encoding malleability. + +### Serialization rules + +The serialization is based on the +[protobuf3 encoding](https://developers.google.com/protocol-buffers/docs/encoding) +with the following additions: + +1. Fields must be serialized only once in ascending order +2. Extra fields or any extra data must not be added +3. [Default values](https://developers.google.com/protocol-buffers/docs/proto3#default) + must be omitted +4. `repeated` fields of scalar numeric types must use + [packed encoding](https://developers.google.com/protocol-buffers/docs/encoding#packed) +5. Varint encoding must not be longer than needed: + * No trailing zero bytes (in little endian, i.e. no leading zeroes in big + endian). Per rule 3 above, the default value of `0` must be omitted, so + this rule does not apply in such cases. + * The maximum value for a varint must be `FF FF FF FF FF FF FF FF FF 01`. + In other words, when decoded, the highest 6 bits of the 70-bit unsigned + integer must be `0`. (10-byte varints are 10 groups of 7 bits, i.e. + 70 bits, of which only the lowest 70-6=64 are useful.) + * The maximum value for 32-bit values in varint encoding must be `FF FF FF FF 0F` + with one exception (below). In other words, when decoded, the highest 38 + bits of the 70-bit unsigned integer must be `0`. + * The one exception to the above is _negative_ `int32`, which must be + encoded using the full 10 bytes for sign extension2. + * The maximum value for Boolean values in varint encoding must be `01` (i.e. + it must be `0` or `1`). Per rule 3 above, the default value of `0` must + be omitted, so if a Boolean is included it must have a value of `1`. + +While rule number 1. and 2. should be pretty straight forward and describe the +default behavior of all protobuf encoders the author is aware of, the 3rd rule +is more interesting. After a protobuf3 deserialization you cannot differentiate +between unset fields and fields set to the default value3. At +serialization level however, it is possible to set the fields with an empty +value or omitting them entirely. This is a significant difference to e.g. JSON +where a property can be empty (`""`, `0`), `null` or undefined, leading to 3 +different documents. + +Omitting fields set to default values is valid because the parser must assign +the default value to fields missing in the serialization4. For scalar +types, omitting defaults is required by the spec5. For `repeated` +fields, not serializing them is the only way to express empty lists. Enums must +have a first element of numeric value 0, which is the default6. And +message fields default to unset7. + +Omitting defaults allows for some amount of forward compatibility: users of +newer versions of a protobuf schema produce the same serialization as users of +older versions as long as newly added fields are not used (i.e. set to their +default value). + +### Implementation + +There are three main implementation strategies, ordered from the least to the +most custom development: + +* **Use a protobuf serializer that follows the above rules by default.** E.g. + [gogoproto](https://pkg.go.dev/github.com/gogo/protobuf/gogoproto) is known to + be compliant by in most cases, but not when certain annotations such as + `nullable = false` are used. It might also be an option to configure an + existing serializer accordingly. +* **Normalize default values before encoding them.** If your serializer follows + rule 1. and 2. and allows you to explicitly unset fields for serialization, + you can normalize default values to unset. This can be done when working with + [protobuf.js](https://www.npmjs.com/package/protobufjs): + + ```js + const bytes = SignDoc.encode({ + bodyBytes: body.length > 0 ? body : null, // normalize empty bytes to unset + authInfoBytes: authInfo.length > 0 ? authInfo : null, // normalize empty bytes to unset + chainId: chainId || null, // normalize "" to unset + accountNumber: accountNumber || null, // normalize 0 to unset + accountSequence: accountSequence || null, // normalize 0 to unset + }).finish(); + ``` + +* **Use a hand-written serializer for the types you need.** If none of the above + ways works for you, you can write a serializer yourself. For SignDoc this + would look something like this in Go, building on existing protobuf utilities: + + ```go + if !signDoc.body_bytes.empty() { + buf.WriteUVarInt64(0xA) // wire type and field number for body_bytes + buf.WriteUVarInt64(signDoc.body_bytes.length()) + buf.WriteBytes(signDoc.body_bytes) + } + + if !signDoc.auth_info.empty() { + buf.WriteUVarInt64(0x12) // wire type and field number for auth_info + buf.WriteUVarInt64(signDoc.auth_info.length()) + buf.WriteBytes(signDoc.auth_info) + } + + if !signDoc.chain_id.empty() { + buf.WriteUVarInt64(0x1a) // wire type and field number for chain_id + buf.WriteUVarInt64(signDoc.chain_id.length()) + buf.WriteBytes(signDoc.chain_id) + } + + if signDoc.account_number != 0 { + buf.WriteUVarInt64(0x20) // wire type and field number for account_number + buf.WriteUVarInt(signDoc.account_number) + } + + if signDoc.account_sequence != 0 { + buf.WriteUVarInt64(0x28) // wire type and field number for account_sequence + buf.WriteUVarInt(signDoc.account_sequence) + } + ``` + +### Test vectors + +Given the protobuf definition `Article.proto` + +```protobuf +package blog; +syntax = "proto3"; + +enum Type { + UNSPECIFIED = 0; + IMAGES = 1; + NEWS = 2; +}; + +enum Review { + UNSPECIFIED = 0; + ACCEPTED = 1; + REJECTED = 2; +}; + +message Article { + string title = 1; + string description = 2; + uint64 created = 3; + uint64 updated = 4; + bool public = 5; + bool promoted = 6; + Type type = 7; + Review review = 8; + repeated string comments = 9; + repeated string backlinks = 10; +}; +``` + +serializing the values + +```yaml +title: "The world needs change 🌳" +description: "" +created: 1596806111080 +updated: 0 +public: true +promoted: false +type: Type.NEWS +review: Review.UNSPECIFIED +comments: ["Nice one", "Thank you"] +backlinks: [] +``` + +must result in the serialization + +```text +0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 +``` + +When inspecting the serialized document, you see that every second field is +omitted: + +```sh +$ echo 0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 | xxd -r -p | protoc --decode_raw +1: "The world needs change \360\237\214\263" +3: 1596806111080 +5: 1 +7: 2 +9: "Nice one" +9: "Thank you" +``` + +## Consequences + +Having such an encoding available allows us to get deterministic serialization +for all protobuf documents we need in the context of Cosmos SDK signing. + +### Positive + +* Well defined rules that can be verified independent of a reference + implementation +* Simple enough to keep the barrier to implement transaction signing low +* It allows us to continue to use 0 and other empty values in SignDoc, avoiding + the need to work around 0 sequences. This does not imply the change from + https://github.com/cosmos/cosmos-sdk/pull/6949 should not be merged, but not + too important anymore. + +### Negative + +* When implementing transaction signing, the encoding rules above must be + understood and implemented. +* The need for rule number 3. adds some complexity to implementations. +* Some data structures may require custom code for serialization. Thus + the code is not very portable - it will require additional work for each + client implementing serialization to properly handle custom data structures. + +### Neutral + +### Usage in Cosmos SDK + +For the reasons mentioned above ("Negative" section) we prefer to keep workarounds +for shared data structure. Example: the aforementioned `TxRaw` is using raw bytes +as a workaround. This allows them to use any valid Protobuf library without +the need of implementing a custom serializer that adheres to this standard (and related risks of bugs). + +## References + +* 1 _When a message is serialized, there is no guaranteed order for + how its known or unknown fields should be written. Serialization order is an + implementation detail and the details of any particular implementation may + change in the future. Therefore, protocol buffer parsers must be able to parse + fields in any order._ from + https://developers.google.com/protocol-buffers/docs/encoding#order +* 2 https://developers.google.com/protocol-buffers/docs/encoding#signed_integers +* 3 _Note that for scalar message fields, once a message is parsed + there's no way of telling whether a field was explicitly set to the default + value (for example whether a boolean was set to false) or just not set at all: + you should bear this in mind when defining your message types. For example, + don't have a boolean that switches on some behavior when set to false if you + don't want that behavior to also happen by default._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 4 _When a message is parsed, if the encoded message does not + contain a particular singular element, the corresponding field in the parsed + object is set to the default value for that field._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 5 _Also note that if a scalar message field is set to its default, + the value will not be serialized on the wire._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 6 _For enums, the default value is the first defined enum value, + which must be 0._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 7 _For message fields, the field is not set. Its exact value is + language-dependent._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* Encoding rules and parts of the reasoning taken from + [canonical-proto3 Aaron Craelius](https://github.com/regen-network/canonical-proto3) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-028-public-key-addresses.md b/versioned_docs/version-0.46/integrate/architecture/adr-028-public-key-addresses.md new file mode 100644 index 000000000..8da5b70d0 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-028-public-key-addresses.md @@ -0,0 +1,329 @@ +# ADR 028: Public Key Addresses + +## Changelog + +* 2020/08/18: Initial version +* 2021/01/15: Analysis and algorithm update + +## Status + +Proposed + +## Abstract + +This ADR defines an address format for all addressable Cosmos SDK accounts. That includes: new public key algorithms, multisig public keys, and module accounts. + +## Context + +Issue [\#3685](https://github.com/cosmos/cosmos-sdk/issues/3685) identified that public key +address spaces are currently overlapping. We confirmed that it significantly decreases security of Cosmos SDK. + +### Problem + +An attacker can control an input for an address generation function. This leads to a birthday attack, which significantly decreases the security space. +To overcome this, we need to separate the inputs for different kind of account types: +a security break of one account type shouldn't impact the security of other account types. + +### Initial proposals + +One initial proposal was extending the address length and +adding prefixes for different types of addresses. + +@ethanfrey explained an alternate approach originally used in https://github.com/iov-one/weave: + +> I spent quite a bit of time thinking about this issue while building weave... The other cosmos Sdk. +> Basically I define a condition to be a type and format as human readable string with some binary data appended. This condition is hashed into an Address (again at 20 bytes). The use of this prefix makes it impossible to find a preimage for a given address with a different condition (eg ed25519 vs secp256k1). +> This is explained in depth here https://weave.readthedocs.io/en/latest/design/permissions.html +> And the code is here, look mainly at the top where we process conditions. https://github.com/iov-one/weave/blob/master/conditions.go + +And explained how this approach should be sufficiently collision resistant: + +> Yeah, AFAIK, 20 bytes should be collision resistance when the preimages are unique and not malleable. A space of 2^160 would expect some collision to be likely around 2^80 elements (birthday paradox). And if you want to find a collision for some existing element in the database, it is still 2^160. 2^80 only is if all these elements are written to state. +> The good example you brought up was eg. a public key bytes being a valid public key on two algorithms supported by the codec. Meaning if either was broken, you would break accounts even if they were secured with the safer variant. This is only as the issue when no differentiating type info is present in the preimage (before hashing into an address). +> I would like to hear an argument if the 20 bytes space is an actual issue for security, as I would be happy to increase my address sizes in weave. I just figured cosmos and ethereum and bitcoin all use 20 bytes, it should be good enough. And the arguments above which made me feel it was secure. But I have not done a deeper analysis. + +This led to the first proposal (which we proved to be not good enough): +we concatenate a key type with a public key, hash it and take the first 20 bytes of that hash, summarized as `sha256(keyTypePrefix || keybytes)[:20]`. + +### Review and Discussions + +In [\#5694](https://github.com/cosmos/cosmos-sdk/issues/5694) we discussed various solutions. +We agreed that 20 bytes it's not future proof, and extending the address length is the only way to allow addresses of different types, various signature types, etc. +This disqualifies the initial proposal. + +In the issue we discussed various modifications: + +* Choice of the hash function. +* Move the prefix out of the hash function: `keyTypePrefix + sha256(keybytes)[:20]` [post-hash-prefix-proposal]. +* Use double hashing: `sha256(keyTypePrefix + sha256(keybytes)[:20])`. +* Increase to keybytes hash slice from 20 byte to 32 or 40 bytes. We concluded that 32 bytes, produced by a good hash functions is future secure. + +### Requirements + +* Support currently used tools - we don't want to break an ecosystem, or add a long adaptation period. Ref: https://github.com/cosmos/cosmos-sdk/issues/8041 +* Try to keep the address length small - addresses are widely used in state, both as part of a key and object value. + +### Scope + +This ADR only defines a process for the generation of address bytes. For end-user interactions with addresses (through the API, or CLI, etc.), we still use bech32 to format these addresses as strings. This ADR doesn't change that. +Using Bech32 for string encoding gives us support for checksum error codes and handling of user typos. + +## Decision + +We define the following account types, for which we define the address function: + +1. simple accounts: represented by a regular public key (ie: secp256k1, sr25519) +2. naive multisig: accounts composed by other addressable objects (ie: naive multisig) +3. composed accounts with a native address key (ie: bls, group module accounts) +4. module accounts: basically any accounts which cannot sign transactions and which are managed internally by modules + +### Legacy Public Key Addresses Don't Change + +Currently (Jan 2021), the only officially supported Cosmos SDK user accounts are `secp256k1` basic accounts and legacy amino multisig. +They are used in existing Cosmos SDK zones. They use the following address formats: + +* secp256k1: `ripemd160(sha256(pk_bytes))[:20]` +* legacy amino multisig: `sha256(aminoCdc.Marshal(pk))[:20]` + +We don't want to change existing addresses. So the addresses for these two key types will remain the same. + +The current multisig public keys use amino serialization to generate the address. We will retain +those public keys and their address formatting, and call them "legacy amino" multisig public keys +in protobuf. We will also create multisig public keys without amino addresses to be described below. + +### Hash Function Choice + +As in other parts of the Cosmos SDK, we will use `sha256`. + +### Basic Address + +We start with defining a base hash algorithm for generating addresses. Notably, it's used for accounts represented by a single key pair. For each public key schema we have to have an associated `typ` string, which we discuss in a section below. `hash` is the cryptographic hash function defined in the previous section. + +```go +const A_LEN = 32 + +func Hash(typ string, key []byte) []byte { + return hash(hash(typ) + key)[:A_LEN] +} +``` + +The `+` is bytes concatenation, which doesn't use any separator. + +This algorithm is the outcome of a consultation session with a professional cryptographer. +Motivation: this algorithm keeps the address relatively small (length of the `typ` doesn't impact the length of the final address) +and it's more secure than [post-hash-prefix-proposal] (which uses the first 20 bytes of a pubkey hash, significantly reducing the address space). +Moreover the cryptographer motivated the choice of adding `typ` in the hash to protect against a switch table attack. + +We use the `address.Hash` function for generating addresses for all accounts represented by a single key: + +* simple public keys: `address.Hash(keyType, pubkey)` + +* aggregated keys (eg: BLS): `address.Hash(keyType, aggregatedPubKey)` +* modules: `address.Hash("module", moduleName)` + +### Composed Addresses + +For simple composed accounts (like new naive multisig), we generalize the `address.Hash`. The address is constructed by recursively creating addresses for the sub accounts, sorting the addresses and composing them into a single address. It ensures that the ordering of keys doesn't impact the resulting address. + +```go +// We don't need a PubKey interface - we need anything which is addressable. +type Addressable interface { + Address() []byte +} + +func Composed(typ string, subaccounts []Addressable) []byte { + addresses = map(subaccounts, \a -> LengthPrefix(a.Address())) + addresses = sort(addresses) + return address.Hash(typ, addresses[0] + ... + addresses[n]) +} +``` + +The `typ` parameter should be a schema descriptor, containing all significant attributes with deterministic serialization (eg: utf8 string). +`LengthPrefix` is a function which prepends 1 byte to the address. The value of that byte is the length of the address bits before prepending. The address must be at most 255 bits long. +We are using `LengthPrefix` to eliminate conflicts - it assures, that for 2 lists of addresses: `as = {a1, a2, ..., an}` and `bs = {b1, b2, ..., bm}` such that every `bi` and `ai` is at most 255 long, `concatenate(map(as, \a -> LengthPrefix(a))) = map(bs, \b -> LengthPrefix(b))` iff `as = bs`. + +Implementation Tip: account implementations should cache addresses. + +#### Multisig Addresses + +For new multisig public keys, we define the `typ` parameter not based on any encoding scheme (amino or protobuf). This avoids issues with non-determinism in the encoding scheme. + +Example: + +```proto +package cosmos.crypto.multisig; + +message PubKey { + uint32 threshold = 1; + repeated google.protobuf.Any pubkeys = 2; +} +``` + +```go +func (multisig PubKey) Address() { + // first gather all nested pub keys + var keys []address.Addressable // cryptotypes.PubKey implements Addressable + for _, _key := range multisig.Pubkeys { + keys = append(keys, key.GetCachedValue().(cryptotypes.PubKey)) + } + + // form the type from the message name (cosmos.crypto.multisig.PubKey) and the threshold joined together + prefix := fmt.Sprintf("%s/%d", proto.MessageName(multisig), multisig.Threshold) + + // use the Composed function defined above + return address.Composed(prefix, keys) +} +``` + +#### Module Account Addresses + +NOTE: this section is not finalize and it's in active discussion. + +In Basic Address section we defined a module account address as: + +```go +address.Hash("module", moduleName) +``` + +We use `"module"` as a schema type for all module derived addresses. Module accounts can have sub accounts. The derivation process has a defined order: module name, submodule key, subsubmodule key. +Module account addresses are heavily used in the Cosmos SDK so it makes sense to optimize the derivation process: instead of using of using `LengthPrefix` for the module name, we use a null byte (`'\x00'`) as a separator. This works, because null byte is not a part of a valid module name. + +```go +func Module(moduleName string, key []byte) []byte{ + return Hash("module", []byte(moduleName) + 0 + key) +} +``` + +**Example** A lending BTC pool address would be: + +```go +btcPool := address.Module("lending", btc.Addrress()}) +``` + +If we want to create an address for a module account depending on more than one key, we can concatenate them: + +```go +btcAtomAMM := address.Module("amm", btc.Addrress() + atom.Address()}) +``` + +#### Derived Addresses + +We must be able to cryptographically derive one address from another one. The derivation process must guarantee hash properties, hence we use the already defined `Hash` function: + +```go +func Derive(address []byte, derivationKey []byte) []byte { + return Hash(addres, derivationKey) +} +``` + +Note: `Module` is a special case of the more general _derived_ address, where we set the `"module"` string for the _from address_. + +**Example** For a cosmwasm smart-contract address we could use the following construction: + +```go +smartContractAddr := Derived(Module("cosmwasm", smartContractsNamespace), []{smartContractKey}) +``` + +### Schema Types + +A `typ` parameter used in `Hash` function SHOULD be unique for each account type. +Since all Cosmos SDK account types are serialized in the state, we propose to use the protobuf message name string. + +Example: all public key types have a unique protobuf message type similar to: + +```proto +package cosmos.crypto.sr25519; + +message PubKey { + bytes key = 1; +} +``` + +All protobuf messages have unique fully qualified names, in this example `cosmos.crypto.sr25519.PubKey`. +These names are derived directly from .proto files in a standardized way and used +in other places such as the type URL in `Any`s. We can easily obtain the name using +`proto.MessageName(msg)`. + +## Consequences + +### Backwards Compatibility + +This ADR is compatible with what was committed and directly supported in the Cosmos SDK repository. + +### Positive + +* a simple algorithm for generating addresses for new public keys, complex accounts and modules +* the algorithm generalizes _native composed keys_ +* increased security and collision resistance of addresses +* the approach is extensible for future use-cases - one can use other address types, as long as they don't conflict with the address length specified here (20 or 32 bytes). +* support new account types. + +### Negative + +* addresses do not communicate key type, a prefixed approach would have done this +* addresses are 60% longer and will consume more storage space +* requires a refactor of KVStore store keys to handle variable length addresses + +### Neutral + +* protobuf message names are used as key type prefixes + +## Further Discussions + +Some accounts can have a fixed name or may be constructed in other way (eg: modules). We were discussing an idea of an account with a predefined name (eg: `me.regen`), which could be used by institutions. +Without going into details, these kinds of addresses are compatible with the hash based addresses described here as long as they don't have the same length. +More specifically, any special account address must not have a length equal to 20 or 32 bytes. + +## Appendix: Consulting session + +End of Dec 2020 we had a session with [Alan Szepieniec](https://scholar.google.be/citations?user=4LyZn8oAAAAJ&hl=en) to consult the approach presented above. + +Alan general observations: + +* we don’t need 2-preimage resistance +* we need 32bytes address space for collision resistance +* when an attacker can control an input for object with an address then we have a problem with birthday attack +* there is an issue with smart-contracts for hashing +* sha2 mining can be use to breaking address pre-image + +Hashing algorithm + +* any attack breaking blake3 will break blake2 +* Alan is pretty confident about the current security analysis of the blake hash algorithm. It was a finalist, and the author is well known in security analysis. + +Algorithm: + +* Alan recommends to hash the prefix: `address(pub_key) = hash(hash(key_type) + pub_key)[:32]`, main benefits: + * we are free to user arbitrary long prefix names + * we still don’t risk collisions + * switch tables +* discussion about penalization -> about adding prefix post hash +* Aaron asked about post hash prefixes (`address(pub_key) = key_type + hash(pub_key)`) and differences. Alan noted that this approach has longer address space and it’s stronger. + +Algorithm for complex / composed keys: + +* merging tree like addresses with same algorithm are fine + +Module addresses: Should module addresses have different size to differentiate it? + +* we will need to set a pre-image prefix for module addresse to keept them in 32-byte space: `hash(hash('module') + module_key)` +* Aaron observation: we already need to deal with variable length (to not break secp256k1 keys). + +Discssion about arithmetic hash function for ZKP + +* Posseidon / Rescue +* Problem: much bigger risk because we don’t know much techniques and history of crypto-analysis of arithmetic constructions. It’s still a new ground and area of active research. + +Post quantum signature size + +* Alan suggestion: Falcon: speed / size ration - very good. +* Aaron - should we think about it? + Alan: based on early extrapolation this thing will get able to break EC cryptography in 2050 . But that’s a lot of uncertainty. But there is magic happening with recurions / linking / simulation and that can speedup the progress. + +Other ideas + +* Let’s say we use same key and two different address algorithms for 2 different use cases. Is it still safe to use it? Alan: if we want to hide the public key (which is not our use case), then it’s less secure but there are fixes. + +### References + +* [Notes](https://hackmd.io/_NGWI4xZSbKzj1BkCqyZMw) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-029-fee-grant-module.md b/versioned_docs/version-0.46/integrate/architecture/adr-029-fee-grant-module.md new file mode 100644 index 000000000..5e026d604 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-029-fee-grant-module.md @@ -0,0 +1,153 @@ +# ADR 029: Fee Grant Module + +## Changelog + +* 2020/08/18: Initial Draft +* 2021/05/05: Removed height based expiration support and simplified naming. + +## Status + +Accepted + +## Context + +In order to make blockchain transactions, the signing account must possess a sufficient balance of the right denomination +in order to pay fees. There are classes of transactions where needing to maintain a wallet with sufficient fees is a +barrier to adoption. + +For instance, when proper permissions are setup, someone may temporarily delegate the ability to vote on proposals to +a "burner" account that is stored on a mobile phone with only minimal security. + +Other use cases include workers tracking items in a supply chain or farmers submitting field data for analytics +or compliance purposes. + +For all of these use cases, UX would be significantly enhanced by obviating the need for these accounts to always +maintain the appropriate fee balance. This is especially true if we wanted to achieve enterprise adoption for something +like supply chain tracking. + +While one solution would be to have a service that fills up these accounts automatically with the appropriate fees, a better UX +would be provided by allowing these accounts to pull from a common fee pool account with proper spending limits. +A single pool would reduce the churn of making lots of small "fill up" transactions and also more effectively leverages +the resources of the organization setting up the pool. + +## Decision + +As a solution we propose a module, `x/feegrant` which allows one account, the "granter" to grant another account, the "grantee" +an allowance to spend the granter's account balance for fees within certain well-defined limits. + +Fee allowances are defined by the extensible `FeeAllowanceI` interface: + +```go +type FeeAllowanceI { + // Accept can use fee payment requested as well as timestamp of the current block + // to determine whether or not to process this. This is checked in + // Keeper.UseGrantedFees and the return values should match how it is handled there. + // + // If it returns an error, the fee payment is rejected, otherwise it is accepted. + // The FeeAllowance implementation is expected to update it's internal state + // and will be saved again after an acceptance. + // + // If remove is true (regardless of the error), the FeeAllowance will be deleted from storage + // (eg. when it is used up). (See call to RevokeFeeAllowance in Keeper.UseGrantedFees) + Accept(ctx sdk.Context, fee sdk.Coins, msgs []sdk.Msg) (remove bool, err error) + + // ValidateBasic should evaluate this FeeAllowance for internal consistency. + // Don't allow negative amounts, or negative periods for example. + ValidateBasic() error +} +``` + +Two basic fee allowance types, `BasicAllowance` and `PeriodicAllowance` are defined to support known use cases: + +```proto +// BasicAllowance implements FeeAllowanceI with a one-time grant of tokens +// that optionally expires. The delegatee can use up to SpendLimit to cover fees. +message BasicAllowance { + // spend_limit specifies the maximum amount of tokens that can be spent + // by this allowance and will be updated as tokens are spent. If it is + // empty, there is no spend limit and any amount of coins can be spent. + repeated cosmos_sdk.v1.Coin spend_limit = 1; + + // expiration specifies an optional time when this allowance expires + google.protobuf.Timestamp expiration = 2; +} + +// PeriodicAllowance extends FeeAllowanceI to allow for both a maximum cap, +// as well as a limit per time period. +message PeriodicAllowance { + BasicAllowance basic = 1; + + // period specifies the time duration in which period_spend_limit coins can + // be spent before that allowance is reset + google.protobuf.Duration period = 2; + + // period_spend_limit specifies the maximum number of coins that can be spent + // in the period + repeated cosmos_sdk.v1.Coin period_spend_limit = 3; + + // period_can_spend is the number of coins left to be spent before the period_reset time + repeated cosmos_sdk.v1.Coin period_can_spend = 4; + + // period_reset is the time at which this period resets and a new one begins, + // it is calculated from the start time of the first transaction after the + // last period ended + google.protobuf.Timestamp period_reset = 5; +} + +``` + +Allowances can be granted and revoked using `MsgGrantAllowance` and `MsgRevokeAllowance`: + +```proto +// MsgGrantAllowance adds permission for Grantee to spend up to Allowance +// of fees from the account of Granter. +message MsgGrantAllowance { + string granter = 1; + string grantee = 2; + google.protobuf.Any allowance = 3; + } + + // MsgRevokeAllowance removes any existing FeeAllowance from Granter to Grantee. + message MsgRevokeAllowance { + string granter = 1; + string grantee = 2; + } +``` + +In order to use allowances in transactions, we add a new field `granter` to the transaction `Fee` type: + +```proto +package cosmos.tx.v1beta1; + +message Fee { + repeated cosmos.base.v1beta1.Coin amount = 1; + uint64 gas_limit = 2; + string payer = 3; + string granter = 4; +} +``` + +`granter` must either be left empty or must correspond to an account which has granted +a fee allowance to fee payer (either the first signer or the value of the `payer` field). + +A new `AnteDecorator` named `DeductGrantedFeeDecorator` will be created in order to process transactions with `fee_payer` +set and correctly deduct fees based on fee allowances. + +## Consequences + +### Positive + +* improved UX for use cases where it is cumbersome to maintain an account balance just for fees + +### Negative + +### Neutral + +* a new field must be added to the transaction `Fee` message and a new `AnteDecorator` must be +created to use it + +## References + +* Blog article describing initial work: https://medium.com/regen-network/hacking-the-cosmos-cosmwasm-and-key-management-a08b9f561d1b +* Initial public specification: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56 +* Original subkeys proposal from B-harvest which influenced this design: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-030-authz-module.md b/versioned_docs/version-0.46/integrate/architecture/adr-030-authz-module.md new file mode 100644 index 000000000..1390d0f6b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-030-authz-module.md @@ -0,0 +1,259 @@ +# ADR 030: Authorization Module + +## Changelog + +* 2019-11-06: Initial Draft +* 2020-10-12: Updated Draft +* 2020-11-13: Accepted +* 2020-05-06: proto API updates, use `sdk.Msg` instead of `sdk.ServiceMsg` (the latter concept was removed from Cosmos SDK) +* 2022-04-20: Updated the `SendAuthorization` proto docs to clarify the `SpendLimit` is a required field. (Generic authorization can be used with bank msg type url to create limit less bank authorization) + +## Status + +Accepted + +## Abstract + +This ADR defines the `x/authz` module which allows accounts to grant authorizations to perform actions +on behalf of that account to other accounts. + +## Context + +The concrete use cases which motivated this module include: + +* the desire to delegate the ability to vote on proposals to other accounts besides the account which one has +delegated stake +* "sub-keys" functionality, as originally proposed in [\#4480](https://github.com/cosmos/cosmos-sdk/issues/4480) which +is a term used to describe the functionality provided by this module together with +the `fee_grant` module from [ADR 029](./adr-029-fee-grant-module.md) and the [group module](https://github.com/regen-network/cosmos-modules/tree/master/incubator/group). + +The "sub-keys" functionality roughly refers to the ability for one account to grant some subset of its capabilities to +other accounts with possibly less robust, but easier to use security measures. For instance, a master account representing +an organization could grant the ability to spend small amounts of the organization's funds to individual employee accounts. +Or an individual (or group) with a multisig wallet could grant the ability to vote on proposals to any one of the member +keys. + +The current +implementation is based on work done by the [Gaian's team at Hackatom Berlin 2019](https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation). + +## Decision + +We will create a module named `authz` which provides functionality for +granting arbitrary privileges from one account (the _granter_) to another account (the _grantee_). Authorizations +must be granted for a particular `Msg` service methods one by one using an implementation +of `Authorization` interface. + +### Types + +Authorizations determine exactly what privileges are granted. They are extensible +and can be defined for any `Msg` service method even outside of the module where +the `Msg` method is defined. `Authorization`s reference `Msg`s using their TypeURL. + +#### Authorization + +```go +type Authorization interface { + proto.Message + + // MsgTypeURL returns the fully-qualified Msg TypeURL (as described in ADR 020), + // which will process and accept or reject a request. + MsgTypeURL() string + + // Accept determines whether this grant permits the provided sdk.Msg to be performed, and if + // so provides an upgraded authorization instance. + Accept(ctx sdk.Context, msg sdk.Msg) (AcceptResponse, error) + + // ValidateBasic does a simple validation check that + // doesn't require access to any other information. + ValidateBasic() error +} + +// AcceptResponse instruments the controller of an authz message if the request is accepted +// and if it should be updated or deleted. +type AcceptResponse struct { + // If Accept=true, the controller can accept and authorization and handle the update. + Accept bool + // If Delete=true, the controller must delete the authorization object and release + // storage resources. + Delete bool + // Controller, who is calling Authorization.Accept must check if `Updated != nil`. If yes, + // it must use the updated version and handle the update on the storage level. + Updated Authorization +} +``` + +For example a `SendAuthorization` like this is defined for `MsgSend` that takes +a `SpendLimit` and updates it down to zero: + +```go +type SendAuthorization struct { + // SpendLimit specifies the maximum amount of tokens that can be spent + // by this authorization and will be updated as tokens are spent. This field is required. (Generic authorization + // can be used with bank msg type url to create limit less bank authorization). + SpendLimit sdk.Coins +} + +func (a SendAuthorization) MsgTypeURL() string { + return sdk.MsgTypeURL(&MsgSend{}) +} + +func (a SendAuthorization) Accept(ctx sdk.Context, msg sdk.Msg) (authz.AcceptResponse, error) { + mSend, ok := msg.(*MsgSend) + if !ok { + return authz.AcceptResponse{}, sdkerrors.ErrInvalidType.Wrap("type mismatch") + } + limitLeft, isNegative := a.SpendLimit.SafeSub(mSend.Amount) + if isNegative { + return authz.AcceptResponse{}, sdkerrors.ErrInsufficientFunds.Wrapf("requested amount is more than spend limit") + } + if limitLeft.IsZero() { + return authz.AcceptResponse{Accept: true, Delete: true}, nil + } + + return authz.AcceptResponse{Accept: true, Delete: false, Updated: &SendAuthorization{SpendLimit: limitLeft}}, nil +} +``` + +A different type of capability for `MsgSend` could be implemented +using the `Authorization` interface with no need to change the underlying +`bank` module. + +##### Small notes on `AcceptResponse` + +- The `AcceptResponse.Accept` field will be set to `true` if the authorization is accepted. +However, if it is rejected, the function `Accept` will raise an error (without setting `AcceptResponse.Accept` to `false`). + +- The `AcceptResponse.Updated` field will be set to a non-nil value only if there is a real change to the authorization. +If authorization remains the same (as is, for instance, always the case for a [`GenericAuthorization`](#genericauthorization)), +the field will be `nil`. + +### `Msg` Service + +```proto +service Msg { + // Grant grants the provided authorization to the grantee on the granter's + // account with the provided expiration time. + rpc Grant(MsgGrant) returns (MsgGrantResponse); + + // Exec attempts to execute the provided messages using + // authorizations granted to the grantee. Each message should have only + // one signer corresponding to the granter of the authorization. + rpc Exec(MsgExec) returns (MsgExecResponse); + + // Revoke revokes any authorization corresponding to the provided method name on the + // granter's account that has been granted to the grantee. + rpc Revoke(MsgRevoke) returns (MsgRevokeResponse); +} + +// Grant gives permissions to execute +// the provided method with expiration time. +message Grant { + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "Authorization"]; + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; +} + +message MsgGrant { + string granter = 1; + string grantee = 2; + + Grant grant = 3 [(gogoproto.nullable) = false]; +} + +message MsgExecResponse { + cosmos.base.abci.v1beta1.Result result = 1; +} + +message MsgExec { + string grantee = 1; + // Authorization Msg requests to execute. Each msg must implement Authorization interface + repeated google.protobuf.Any msgs = 2 [(cosmos_proto.accepts_interface) = "sdk.Msg"];; +} +``` + +### Router Middleware + +The `authz` `Keeper` will expose a `DispatchActions` method which allows other modules to send `Msg`s +to the router based on `Authorization` grants: + +```go +type Keeper interface { + // DispatchActions routes the provided msgs to their respective handlers if the grantee was granted an authorization + // to send those messages by the first (and only) signer of each msg. + DispatchActions(ctx sdk.Context, grantee sdk.AccAddress, msgs []sdk.Msg) sdk.Result` +} +``` + +### CLI + +#### `tx exec` Method + +When a CLI user wants to run a transaction on behalf of another account using `MsgExec`, they +can use the `exec` method. For instance `gaiacli tx gov vote 1 yes --from --generate-only | gaiacli tx authz exec --send-as --from ` +would send a transaction like this: + +```go +MsgExec { + Grantee: mykey, + Msgs: []sdk.Msg{ + MsgVote { + ProposalID: 1, + Voter: cosmos3thsdgh983egh823 + Option: Yes + } + } +} +``` + +#### `tx grant --from ` + +This CLI command will send a `MsgGrant` transaction. `authorization` should be encoded as +JSON on the CLI. + +#### `tx revoke --from ` + +This CLI command will send a `MsgRevoke` transaction. + +### Built-in Authorizations + +#### `SendAuthorization` + +```proto +// SendAuthorization allows the grantee to spend up to spend_limit coins from +// the granter's account. +message SendAuthorization { + repeated cosmos.base.v1beta1.Coin spend_limit = 1; +} +``` + +#### `GenericAuthorization` + +```proto +// GenericAuthorization gives the grantee unrestricted permissions to execute +// the provided method on behalf of the granter's account. +message GenericAuthorization { + option (cosmos_proto.implements_interface) = "Authorization"; + + // Msg, identified by it's type URL, to grant unrestricted permissions to execute + string msg = 1; +} +``` + +## Consequences + +### Positive + +* Users will be able to authorize arbitrary actions on behalf of their accounts to other +users, improving key management for many use cases +* The solution is more generic than previously considered approaches and the +`Authorization` interface approach can be extended to cover other use cases by +SDK users + +### Negative + +### Neutral + +## References + +* Initial Hackatom implementation: https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation +* Post-Hackatom spec: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#delegation-module +* B-Harvest subkeys spec: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-031-msg-service.md b/versioned_docs/version-0.46/integrate/architecture/adr-031-msg-service.md new file mode 100644 index 000000000..0fcc6b4df --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-031-msg-service.md @@ -0,0 +1,202 @@ +# ADR 031: Protobuf Msg Services + +## Changelog + +* 2020-10-05: Initial Draft +* 2021-04-21: Remove `ServiceMsg`s to follow Protobuf `Any`'s spec, see [#9063](https://github.com/cosmos/cosmos-sdk/issues/9063). + +## Status + +Accepted + +## Abstract + +We want to leverage protobuf `service` definitions for defining `Msg`s which will give us significant developer UX +improvements in terms of the code that is generated and the fact that return types will now be well defined. + +## Context + +Currently `Msg` handlers in the Cosmos SDK do have return values that are placed in the `data` field of the response. +These return values, however, are not specified anywhere except in the golang handler code. + +In early conversations [it was proposed](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc/edit) +that `Msg` return types be captured using a protobuf extension field, ex: + +```protobuf +package cosmos.gov; + +message MsgSubmitProposal + option (cosmos_proto.msg_return) = “uint64”; + string delegator_address = 1; + string validator_address = 2; + repeated sdk.Coin amount = 3; +} +``` + +This was never adopted, however. + +Having a well-specified return value for `Msg`s would improve client UX. For instance, +in `x/gov`, `MsgSubmitProposal` returns the proposal ID as a big-endian `uint64`. +This isn’t really documented anywhere and clients would need to know the internals +of the Cosmos SDK to parse that value and return it to users. + +Also, there may be cases where we want to use these return values programatically. +For instance, https://github.com/cosmos/cosmos-sdk/issues/7093 proposes a method for +doing inter-module Ocaps using the `Msg` router. A well-defined return type would +improve the developer UX for this approach. + +In addition, handler registration of `Msg` types tends to add a bit of +boilerplate on top of keepers and is usually done through manual type switches. +This isn't necessarily bad, but it does add overhead to creating modules. + +## Decision + +We decide to use protobuf `service` definitions for defining `Msg`s as well as +the code generated by them as a replacement for `Msg` handlers. + +Below we define how this will look for the `SubmitProposal` message from `x/gov` module. +We start with a `Msg` `service` definition: + +```proto +package cosmos.gov; + +service Msg { + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); +} + +// Note that for backwards compatibility this uses MsgSubmitProposal as the request +// type instead of the more canonical MsgSubmitProposalRequest +message MsgSubmitProposal { + google.protobuf.Any content = 1; + string proposer = 2; +} + +message MsgSubmitProposalResponse { + uint64 proposal_id; +} +``` + +While this is most commonly used for gRPC, overloading protobuf `service` definitions like this does not violate +the intent of the [protobuf spec](https://developers.google.com/protocol-buffers/docs/proto3#services) which says: +> If you don’t want to use gRPC, it’s also possible to use protocol buffers with your own RPC implementation. +With this approach, we would get an auto-generated `MsgServer` interface: + +In addition to clearly specifying return types, this has the benefit of generating client and server code. On the server +side, this is almost like an automatically generated keeper method and could maybe be used intead of keepers eventually +(see [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093)): + +```go +package gov + +type MsgServer interface { + SubmitProposal(context.Context, *MsgSubmitProposal) (*MsgSubmitProposalResponse, error) +} +``` + +On the client side, developers could take advantage of this by creating RPC implementations that encapsulate transaction +logic. Protobuf libraries that use asynchronous callbacks, like [protobuf.js](https://github.com/protobufjs/protobuf.js#using-services) +could use this to register callbacks for specific messages even for transactions that include multiple `Msg`s. + +Each `Msg` service method should have exactly one request parameter: its corresponding `Msg` type. For example, the `Msg` service method `/cosmos.gov.v1beta1.Msg/SubmitProposal` above has exactly one request parameter, namely the `Msg` type `/cosmos.gov.v1beta1.MsgSubmitProposal`. It is important the reader understands clearly the nomenclature difference between a `Msg` service (a Protobuf service) and a `Msg` type (a Protobuf message), and the differences in their fully-qualified name. + +This convention has been decided over the more canonical `Msg...Request` names mainly for backwards compatibility, but also for better readability in `TxBody.messages` (see [Encoding section](#encoding) below): transactions containing `/cosmos.gov.MsgSubmitProposal` read better than those containing `/cosmos.gov.v1beta1.MsgSubmitProposalRequest`. + +One consequence of this convention is that each `Msg` type can be the request parameter of only one `Msg` service method. However, we consider this limitation a good practice in explicitness. + +### Encoding + +Encoding of transactions generated with `Msg` services do not differ from current Protobuf transaction encoding as defined in [ADR-020](./adr-020-protobuf-transaction-encoding.md). We are encoding `Msg` types (which are exactly `Msg` service methods' request parameters) as `Any` in `Tx`s which involves packing the +binary-encoded `Msg` with its type URL. + +### Decoding + +Since `Msg` types are packed into `Any`, decoding transactions messages are done by unpacking `Any`s into `Msg` types. For more information, please refer to [ADR-020](./adr-020-protobuf-transaction-encoding.md#transactions). + +### Routing + +We propose to add a `msg_service_router` in BaseApp. This router is a key/value map which maps `Msg` types' `type_url`s to their corresponding `Msg` service method handler. Since there is a 1-to-1 mapping between `Msg` types and `Msg` service method, the `msg_service_router` has exactly one entry per `Msg` service method. + +When a transaction is processed by BaseApp (in CheckTx or in DeliverTx), its `TxBody.messages` are decoded as `Msg`s. Each `Msg`'s `type_url` is matched against an entry in the `msg_service_router`, and the respective `Msg` service method handler is called. + +For backward compatability, the old handlers are not removed yet. If BaseApp receives a legacy `Msg` with no correspoding entry in the `msg_service_router`, it will be routed via its legacy `Route()` method into the legacy handler. + +### Module Configuration + +In [ADR 021](./adr-021-protobuf-query-encoding.md), we introduced a method `RegisterQueryService` +to `AppModule` which allows for modules to register gRPC queriers. + +To register `Msg` services, we attempt a more extensible approach by converting `RegisterQueryService` +to a more generic `RegisterServices` method: + +```go +type AppModule interface { + RegisterServices(Configurator) + ... +} + +type Configurator interface { + QueryServer() grpc.Server + MsgServer() grpc.Server +} + +// example module: +func (am AppModule) RegisterServices(cfg Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper) +} +``` + +The `RegisterServices` method and the `Configurator` interface are intended to +evolve to satisfy the use cases discussed in [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) +and [\#7122](https://github.com/cosmos/cosmos-sdk/issues/7421). + +When `Msg` services are registered, the framework _should_ verify that all `Msg` types +implement the `sdk.Msg` interface and throw an error during initialization rather +than later when transactions are processed. + +### `Msg` Service Implementation + +Just like query services, `Msg` service methods can retrieve the `sdk.Context` +from the `context.Context` parameter method using the `sdk.UnwrapSDKContext` +method: + +```go +package gov + +func (k Keeper) SubmitProposal(goCtx context.Context, params *types.MsgSubmitProposal) (*MsgSubmitProposalResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + ... +} +``` + +The `sdk.Context` should have an `EventManager` already attached by BaseApp's `msg_service_router`. + +Separate handler definition is no longer needed with this approach. + +## Consequences + +This design changes how a module functionality is exposed and accessed. It deprecates the existing `Handler` interface and `AppModule.Route` in favor of [Protocol Buffer Services](https://developers.google.com/protocol-buffers/docs/proto3#services) and Service Routing described above. This dramatically simplifies the code. We don't need to create handlers and keepers any more. Use of Protocol Buffer auto-generated clients clearly separates the communication interfaces between the module and a modules user. The control logic (aka handlers and keepers) is not exposed any more. A module interface can be seen as a black box accessible through a client API. It's worth to note that the client interfaces are also generated by Protocol Buffers. + +This also allows us to change how we perform functional tests. Instead of mocking AppModules and Router, we will mock a client (server will stay hidden). More specifically: we will never mock `moduleA.MsgServer` in `moduleB`, but rather `moduleA.MsgClient`. One can think about it as working with external services (eg DBs, or online servers...). We assume that the transmission between clients and servers is correctly handled by generated Protocol Buffers. + +Finally, closing a module to client API opens desirable OCAP patterns discussed in ADR-033. Since server implementation and interface is hidden, nobody can hold "keepers"/servers and will be forced to relay on the client interface, which will drive developers for correct encapsulation and software engineering patterns. + +### Pros + +* communicates return type clearly +* manual handler registration and return type marshaling is no longer needed, just implement the interface and register it +* communication interface is automatically generated, the developer can now focus only on the state transition methods - this would improve the UX of [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) approach (1) if we chose to adopt that +* generated client code could be useful for clients and tests +* dramatically reduces and simplifies the code + +### Cons + +* using `service` definitions outside the context of gRPC could be confusing (but doesn’t violate the proto3 spec) + +## References + +* [Initial Github Issue \#7122](https://github.com/cosmos/cosmos-sdk/issues/7122) +* [proto 3 Language Guide: Defining Services](https://developers.google.com/protocol-buffers/docs/proto3#services) +* [Initial pre-`Any` `Msg` designs](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc) +* [ADR 020](./adr-020-protobuf-transaction-encoding.md) +* [ADR 021](./adr-021-protobuf-query-encoding.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-032-typed-events.md b/versioned_docs/version-0.46/integrate/architecture/adr-032-typed-events.md new file mode 100644 index 000000000..1e769f450 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-032-typed-events.md @@ -0,0 +1,319 @@ +# ADR 032: Typed Events + +## Changelog + +* 28-Sept-2020: Initial Draft + +## Authors + +* Anil Kumar (@anilcse) +* Jack Zampolin (@jackzampolin) +* Adam Bozanich (@boz) + +## Status + +Proposed + +## Abstract + +Currently in the Cosmos SDK, events are defined in the handlers for each message as well as `BeginBlock` and `EndBlock`. Each module doesn't have types defined for each event, they are implemented as `map[string]string`. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +## Context + +Currently in the Cosmos SDK, events are defined in the handlers for each message, meaning each module doesn't have a cannonical set of types for each event. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +[Our platform](http://github.com/ovrclk/akash) requires a number of programatic on chain interactions both on the provider (datacenter - to bid on new orders and listen for leases created) and user (application developer - to send the app manifest to the provider) side. In addition the Akash team is now maintaining the IBC [`relayer`](https://github.com/ovrclk/relayer), another very event driven process. In working on these core pieces of infrastructure, and integrating lessons learned from Kubernetes developement, our team has developed a standard method for defining and consuming typed events in Cosmos SDK modules. We have found that it is extremely useful in building this type of event driven application. + +As the Cosmos SDK gets used more extensively for apps like `peggy`, other peg zones, IBC, DeFi, etc... there will be an exploding demand for event driven applications to support new features desired by users. We propose upstreaming our findings into the Cosmos SDK to enable all Cosmos SDK applications to quickly and easily build event driven apps to aid their core application. Wallets, exchanges, explorers, and defi protocols all stand to benefit from this work. + +If this proposal is accepted, users will be able to build event driven Cosmos SDK apps in go by just writing `EventHandler`s for their specific event types and passing them to `EventEmitters` that are defined in the Cosmos SDK. + +The end of this proposal contains a detailed example of how to consume events after this refactor. + +This proposal is specifically about how to consume these events as a client of the blockchain, not for intermodule communication. + +## Decision + +**Step-1**: Implement additional functionality in the `types` package: `EmitTypedEvent` and `ParseTypedEvent` functions + +```go +// types/events.go + +// EmitTypedEvent takes typed event and emits converting it into sdk.Event +func (em *EventManager) EmitTypedEvent(event proto.Message) error { + evtType := proto.MessageName(event) + evtJSON, err := codec.ProtoMarshalJSON(event) + if err != nil { + return err + } + + var attrMap map[string]json.RawMessage + err = json.Unmarshal(evtJSON, &attrMap) + if err != nil { + return err + } + + var attrs []abci.EventAttribute + for k, v := range attrMap { + attrs = append(attrs, abci.EventAttribute{ + Key: []byte(k), + Value: v, + }) + } + + em.EmitEvent(Event{ + Type: evtType, + Attributes: attrs, + }) + + return nil +} + +// ParseTypedEvent converts abci.Event back to typed event +func ParseTypedEvent(event abci.Event) (proto.Message, error) { + concreteGoType := proto.MessageType(event.Type) + if concreteGoType == nil { + return nil, fmt.Errorf("failed to retrieve the message of type %q", event.Type) + } + + var value reflect.Value + if concreteGoType.Kind() == reflect.Ptr { + value = reflect.New(concreteGoType.Elem()) + } else { + value = reflect.Zero(concreteGoType) + } + + protoMsg, ok := value.Interface().(proto.Message) + if !ok { + return nil, fmt.Errorf("%q does not implement proto.Message", event.Type) + } + + attrMap := make(map[string]json.RawMessage) + for _, attr := range event.Attributes { + attrMap[string(attr.Key)] = attr.Value + } + + attrBytes, err := json.Marshal(attrMap) + if err != nil { + return nil, err + } + + err = jsonpb.Unmarshal(strings.NewReader(string(attrBytes)), protoMsg) + if err != nil { + return nil, err + } + + return protoMsg, nil +} +``` + +Here, the `EmitTypedEvent` is a method on `EventManager` which takes typed event as input and apply json serialization on it. Then it maps the JSON key/value pairs to `event.Attributes` and emits it in form of `sdk.Event`. `Event.Type` will be the type URL of the proto message. + +When we subscribe to emitted events on the tendermint websocket, they are emitted in the form of an `abci.Event`. `ParseTypedEvent` parses the event back to it's original proto message. + +**Step-2**: Add proto definitions for typed events for msgs in each module: + +For example, let's take `MsgSubmitProposal` of `gov` module and implement this event's type. + +```protobuf +// proto/cosmos/gov/v1beta1/gov.proto +// Add typed event definition + +package cosmos.gov.v1beta1; + +message EventSubmitProposal { + string from_address = 1; + uint64 proposal_id = 2; + TextProposal proposal = 3; +} +``` + +**Step-3**: Refactor event emission to use the typed event created and emit using `sdk.EmitTypedEvent`: + +```go +// x/gov/handler.go +func handleMsgSubmitProposal(ctx sdk.Context, keeper keeper.Keeper, msg types.MsgSubmitProposalI) (*sdk.Result, error) { + ... + types.Context.EventManager().EmitTypedEvent( + &EventSubmitProposal{ + FromAddress: fromAddress, + ProposalId: id, + Proposal: proposal, + }, + ) + ... +} +``` + +### How to subscribe to these typed events in `Client` + +> NOTE: Full code example below + +Users will be able to subscribe using `client.Context.Client.Subscribe` and consume events which are emitted using `EventHandler`s. + +Akash Network has built a simple [`pubsub`](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/pubsub/bus.go#L20). This can be used to subscribe to `abci.Events` and [publish](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L21) them as typed events. + +Please see the below code sample for more detail on this flow looks for clients. + +## Consequences + +### Positive + +* Improves consistency of implementation for the events currently in the Cosmos SDK +* Provides a much more ergonomic way to handle events and facilitates writing event driven applications +* This implementation will support a middleware ecosystem of `EventHandler`s + +### Negative + +## Detailed code example of publishing events + +This ADR also proposes adding affordances to emit and consume these events. This way developers will only need to write +`EventHandler`s which define the actions they desire to take. + +```go +// EventEmitter is a type that describes event emitter functions +// This should be defined in `types/events.go` +type EventEmitter func(context.Context, client.Context, ...EventHandler) error + +// EventHandler is a type of function that handles events coming out of the event bus +// This should be defined in `types/events.go` +type EventHandler func(proto.Message) error + +// Sample use of the functions below +func main() { + ctx, cancel := context.WithCancel(context.Background()) + + if err := TxEmitter(ctx, client.Context{}.WithNodeURI("tcp://localhost:26657"), SubmitProposalEventHandler); err != nil { + cancel() + panic(err) + } + + return +} + +// SubmitProposalEventHandler is an example of an event handler that prints proposal details +// when any EventSubmitProposal is emitted. +func SubmitProposalEventHandler(ev proto.Message) (err error) { + switch event := ev.(type) { + // Handle governance proposal events creation events + case govtypes.EventSubmitProposal: + // Users define business logic here e.g. + fmt.Println(ev.FromAddress, ev.ProposalId, ev.Proposal) + return nil + default: + return nil + } +} + +// TxEmitter is an example of an event emitter that emits just transaction events. This can and +// should be implemented somewhere in the Cosmos SDK. The Cosmos SDK can include an EventEmitters for tm.event='Tx' +// and/or tm.event='NewBlock' (the new block events may contain typed events) +func TxEmitter(ctx context.Context, cliCtx client.Context, ehs ...EventHandler) (err error) { + // Instantiate and start tendermint RPC client + client, err := cliCtx.GetNode() + if err != nil { + return err + } + + if err = client.Start(); err != nil { + return err + } + + // Start the pubsub bus + bus := pubsub.NewBus() + defer bus.Close() + + // Initialize a new error group + eg, ctx := errgroup.WithContext(ctx) + + // Publish chain events to the pubsub bus + eg.Go(func() error { + return PublishChainTxEvents(ctx, client, bus, simapp.ModuleBasics) + }) + + // Subscribe to the bus events + subscriber, err := bus.Subscribe() + if err != nil { + return err + } + + // Handle all the events coming out of the bus + eg.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + return nil + case <-subscriber.Done(): + return nil + case ev := <-subscriber.Events(): + for _, eh := range ehs { + if err = eh(ev); err != nil { + break + } + } + } + } + return nil + }) + + return group.Wait() +} + +// PublishChainTxEvents events using tmclient. Waits on context shutdown signals to exit. +func PublishChainTxEvents(ctx context.Context, client tmclient.EventsClient, bus pubsub.Bus, mb module.BasicManager) (err error) { + // Subscribe to transaction events + txch, err := client.Subscribe(ctx, "txevents", "tm.event='Tx'", 100) + if err != nil { + return err + } + + // Unsubscribe from transaction events on function exit + defer func() { + err = client.UnsubscribeAll(ctx, "txevents") + }() + + // Use errgroup to manage concurrency + g, ctx := errgroup.WithContext(ctx) + + // Publish transaction events in a goroutine + g.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + break + case ed := <-ch: + switch evt := ed.Data.(type) { + case tmtypes.EventDataTx: + if !evt.Result.IsOK() { + continue + } + // range over events, parse them using the basic manager and + // send them to the pubsub bus + for _, abciEv := range events { + typedEvent, err := sdk.ParseTypedEvent(abciEv) + if err != nil { + return er + } + if err := bus.Publish(typedEvent); err != nil { + bus.Close() + return + } + continue + } + } + } + } + return err + }) + + // Exit on error or context cancelation + return g.Wait() +} +``` + +## References + +* [Publish Custom Events via a bus](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L19-L58) +* [Consuming the events in `Client`](https://github.com/ovrclk/deploy/blob/bf6c633ab6c68f3026df59efd9982d6ca1bf0561/cmd/event-handlers.go#L57) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-033-protobuf-inter-module-comm.md b/versioned_docs/version-0.46/integrate/architecture/adr-033-protobuf-inter-module-comm.md new file mode 100644 index 000000000..09b650a61 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-033-protobuf-inter-module-comm.md @@ -0,0 +1,400 @@ +# ADR 033: Protobuf-based Inter-Module Communication + +## Changelog + +* 2020-10-05: Initial Draft + +## Status + +Proposed + +## Abstract + +This ADR introduces a system for permissioned inter-module communication leveraging the protobuf `Query` and `Msg` +service definitions defined in [ADR 021](./adr-021-protobuf-query-encoding.md) and +[ADR 031](./adr-031-msg-service.md) which provides: + +* stable protobuf based module interfaces to potentially later replace the keeper paradigm +* stronger inter-module object capabilities (OCAPs) guarantees +* module accounts and sub-account authorization + +## Context + +In the current Cosmos SDK documentation on the [Object-Capability Model](../core/ocap.md), it is stated that: + +> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +There is currently not a thriving ecosystem of Cosmos SDK modules. We hypothesize that this is in part due to: + +1. lack of a stable v1.0 Cosmos SDK to build modules off of. Module interfaces are changing, sometimes dramatically, from +point release to point release, often for good reasons, but this does not create a stable foundation to build on. +2. lack of a properly implemented object capability or even object-oriented encapsulation system which makes refactors +of module keeper interfaces inevitable because the current interfaces are poorly constrained. + +### `x/bank` Case Study + +Currently the `x/bank` keeper gives pretty much unrestricted access to any module which references it. For instance, the +`SetBalance` method allows the caller to set the balance of any account to anything, bypassing even proper tracking of supply. + +There appears to have been some later attempts to implement some semblance of OCAPs using module-level minting, staking +and burning permissions. These permissions allow a module to mint, burn or delegate tokens with reference to the module’s +own account. These permissions are actually stored as a `[]string` array on the `ModuleAccount` type in state. + +However, these permissions don’t really do much. They control what modules can be referenced in the `MintCoins`, +`BurnCoins` and `DelegateCoins***` methods, but for one there is no unique object capability token that controls access — +just a simple string. So the `x/upgrade` module could mint tokens for the `x/staking` module simple by calling +`MintCoins(“staking”)`. Furthermore, all modules which have access to these keeper methods, also have access to +`SetBalance` negating any other attempt at OCAPs and breaking even basic object-oriented encapsulation. + +## Decision + +Based on [ADR-021](./adr-021-protobuf-query-encoding.md) and [ADR-031](./adr-031-msg-service.md), we introduce the +Inter-Module Communication framework for secure module authorization and OCAPs. +When implemented, this could also serve as an alternative to the existing paradigm of passing keepers between +modules. The approach outlined here-in is intended to form the basis of a Cosmos SDK v1.0 that provides the necessary +stability and encapsulation guarantees that allow a thriving module ecosystem to emerge. + +Of particular note — the decision is to _enable_ this functionality for modules to adopt at their own discretion. +Proposals to migrate existing modules to this new paradigm will have to be a separate conversation, potentially +addressed as amendments to this ADR. + +### New "Keeper" Paradigm + +In [ADR 021](./adr-021-protobuf-query-encoding.md), a mechanism for using protobuf service definitions to define queriers +was introduced and in [ADR 31](./adr-031-msg-service.md), a mechanism for using protobuf service to define `Msg`s was added. +Protobuf service definitions generate two golang interfaces representing the client and server sides of a service plus +some helper code. Here is a minimal example for the bank `cosmos.bank.Msg/Send` message type: + +```go +package bank + +type MsgClient interface { + Send(context.Context, *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) +} + +type MsgServer interface { + Send(context.Context, *MsgSend) (*MsgSendResponse, error) +} +``` + +[ADR 021](./adr-021-protobuf-query-encoding.md) and [ADR 31](./adr-031-msg-service.md) specifies how modules can implement the generated `QueryServer` +and `MsgServer` interfaces as replacements for the legacy queriers and `Msg` handlers respectively. + +In this ADR we explain how modules can make queries and send `Msg`s to other modules using the generated `QueryClient` +and `MsgClient` interfaces and propose this mechanism as a replacement for the existing `Keeper` paradigm. To be clear, +this ADR does not necessitate the creation of new protobuf definitions or services. Rather, it leverages the same proto +based service interfaces already used by clients for inter-module communication. + +Using this `QueryClient`/`MsgClient` approach has the following key benefits over exposing keepers to external modules: + +1. Protobuf types are checked for breaking changes using [buf](https://buf.build/docs/breaking-overview) and because of +the way protobuf is designed this will give us strong backwards compatibility guarantees while allowing for forward +evolution. +2. The separation between the client and server interfaces will allow us to insert permission checking code in between +the two which checks if one module is authorized to send the specified `Msg` to the other module providing a proper +object capability system (see below). +3. The router for inter-module communication gives us a convenient place to handle rollback of transactions, +enabling atomicy of operations ([currently a problem](https://github.com/cosmos/cosmos-sdk/issues/8030)). Any failure within a module-to-module call would result in a failure of the entire +transaction + +This mechanism has the added benefits of: + +* reducing boilerplate through code generation, and +* allowing for modules in other languages either via a VM like CosmWasm or sub-processes using gRPC + +### Inter-module Communication + +To use the `Client` generated by the protobuf compiler we need a `grpc.ClientConn` [interface](https://github.com/regen-network/protobuf/blob/cosmos/grpc/types.go#L12) +implementation. For this we introduce +a new type, `ModuleKey`, which implements the `grpc.ClientConn` interface. `ModuleKey` can be thought of as the "private +key" corresponding to a module account, where authentication is provided through use of a special `Invoker()` function, +described in more detail below. + +Blockchain users (external clients) use their account's private key to sign transactions containing `Msg`s where they are listed as signers (each +message specifies required signers with `Msg.GetSigner`). The authentication checks is performed by `AnteHandler`. + +Here, we extend this process, by allowing modules to be identified in `Msg.GetSigners`. When a module wants to trigger the execution a `Msg` in another module, +its `ModuleKey` acts as the sender (through the `ClientConn` interface we describe below) and is set as a sole "signer". It's worth to note +that we don't use any cryptographic signature in this case. +For example, module `A` could use its `A.ModuleKey` to create `MsgSend` object for `/cosmos.bank.Msg/Send` transaction. `MsgSend` validation +will assure that the `from` account (`A.ModuleKey` in this case) is the signer. + +Here's an example of a hypothetical module `foo` interacting with `x/bank`: + +```go +package foo + + +type FooMsgServer { + // ... + + bankQuery bank.QueryClient + bankMsg bank.MsgClient +} + +func NewFooMsgServer(moduleKey RootModuleKey, ...) FooMsgServer { + // ... + + return FooMsgServer { + // ... + modouleKey: moduleKey, + bankQuery: bank.NewQueryClient(moduleKey), + bankMsg: bank.NewMsgClient(moduleKey), + } +} + +func (foo *FooMsgServer) Bar(ctx context.Context, req *MsgBarRequest) (*MsgBarResponse, error) { + balance, err := foo.bankQuery.Balance(&bank.QueryBalanceRequest{Address: fooMsgServer.moduleKey.Address(), Denom: "foo"}) + + ... + + res, err := foo.bankMsg.Send(ctx, &bank.MsgSendRequest{FromAddress: fooMsgServer.moduleKey.Address(), ...}) + + ... +} +``` + +This design is also intended to be extensible to cover use cases of more fine grained permissioning like minting by +denom prefix being restricted to certain modules (as discussed in +[#7459](https://github.com/cosmos/cosmos-sdk/pull/7459#discussion_r529545528)). + +### `ModuleKey`s and `ModuleID`s + +A `ModuleKey` can be thought of as a "private key" for a module account and a `ModuleID` can be thought of as the +corresponding "public key". From the [ADR 028](./adr-028-public-key-addresses.md), modules can have both a root module account and any number of sub-accounts +or derived accounts that can be used for different pools (ex. staking pools) or managed accounts (ex. group +accounts). We can also think of module sub-accounts as similar to derived keys - there is a root key and then some +derivation path. `ModuleID` is a simple struct which contains the module name and optional "derivation" path, +and forms its address based on the `AddressHash` method from [the ADR-028](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-028-public-key-addresses.md): + +```go +type ModuleID struct { + ModuleName string + Path []byte +} + +func (key ModuleID) Address() []byte { + return AddressHash(key.ModuleName, key.Path) +} +``` + +In addition to being able to generate a `ModuleID` and address, a `ModuleKey` contains a special function called +`Invoker` which is the key to safe inter-module access. The `Invoker` creates an `InvokeFn` closure which is used as an `Invoke` method in +the `grpc.ClientConn` interface and under the hood is able to route messages to the appropriate `Msg` and `Query` handlers +performing appropriate security checks on `Msg`s. This allows for even safer inter-module access than keeper's whose +private member variables could be manipulated through reflection. Golang does not support reflection on a function +closure's captured variables and direct manipulation of memory would be needed for a truly malicious module to bypass +the `ModuleKey` security. + +The two `ModuleKey` types are `RootModuleKey` and `DerivedModuleKey`: + +```go +type Invoker func(callInfo CallInfo) func(ctx context.Context, request, response interface{}, opts ...interface{}) error + +type CallInfo { + Method string + Caller ModuleID +} + +type RootModuleKey struct { + moduleName string + invoker Invoker +} + +func (rm RootModuleKey) Derive(path []byte) DerivedModuleKey { /* ... */} + +type DerivedModuleKey struct { + moduleName string + path []byte + invoker Invoker +} +``` + +A module can get access to a `DerivedModuleKey`, using the `Derive(path []byte)` method on `RootModuleKey` and then +would use this key to authenticate `Msg`s from a sub-account. Ex: + +```go +package foo + +func (fooMsgServer *MsgServer) Bar(ctx context.Context, req *MsgBar) (*MsgBarResponse, error) { + derivedKey := fooMsgServer.moduleKey.Derive(req.SomePath) + bankMsgClient := bank.NewMsgClient(derivedKey) + res, err := bankMsgClient.Balance(ctx, &bank.MsgSend{FromAddress: derivedKey.Address(), ...}) + ... +} +``` + +In this way, a module can gain permissioned access to a root account and any number of sub-accounts and send +authenticated `Msg`s from these accounts. The `Invoker` `callInfo.Caller` parameter is used under the hood to +distinguish between different module accounts, but either way the function returned by `Invoker` only allows `Msg`s +from either the root or a derived module account to pass through. + +Note that `Invoker` itself returns a function closure based on the `CallInfo` passed in. This will allow client implementations +in the future that cache the invoke function for each method type avoiding the overhead of hash table lookup. +This would reduce the performance overhead of this inter-module communication method to the bare minimum required for +checking permissions. + +To re-iterate, the closure only allows access to authorized calls. There is no access to anything else regardless of any +name impersonation. + +Below is a rough sketch of the implementation of `grpc.ClientConn.Invoke` for `RootModuleKey`: + +```go +func (key RootModuleKey) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...grpc.CallOption) error { + f := key.invoker(CallInfo {Method: method, Caller: ModuleID {ModuleName: key.moduleName}}) + return f(ctx, args, reply) +} +``` + +### `AppModule` Wiring and Requirements + +In [ADR 031](./adr-031-msg-service.md), the `AppModule.RegisterService(Configurator)` method was introduced. To support +inter-module communication, we extend the `Configurator` interface to pass in the `ModuleKey` and to allow modules to +specify their dependencies on other modules using `RequireServer()`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + + ModuleKey() ModuleKey + RequireServer(msgServer interface{}) +} +``` + +The `ModuleKey` is passed to modules in the `RegisterService` method itself so that `RegisterServices` serves as a single +entry point for configuring module services. This is intended to also have the side-effect of greatly reducing boilerplate in +`app.go`. For now, `ModuleKey`s will be created based on `AppModuleBasic.Name()`, but a more flexible system may be +introduced in the future. The `ModuleManager` will handle creation of module accounts behind the scenes. + +Because modules do not get direct access to each other anymore, modules may have unfulfilled dependencies. To make sure +that module dependencies are resolved at startup, the `Configurator.RequireServer` method should be added. The `ModuleManager` +will make sure that all dependencies declared with `RequireServer` can be resolved before the app starts. An example +module `foo` could declare it's dependency on `x/bank` like this: + +```go +package foo + +func (am AppModule) RegisterServices(cfg Configurator) { + cfg.RequireServer((*bank.QueryServer)(nil)) + cfg.RequireServer((*bank.MsgServer)(nil)) +} +``` + +### Security Considerations + +In addition to checking for `ModuleKey` permissions, a few additional security precautions will need to be taken by +the underlying router infrastructure. + +#### Recursion and Re-entry + +Recursive or re-entrant method invocations pose a potential security threat. This can be a problem if Module A +calls Module B and Module B calls module A again in the same call. + +One basic way for the router system to deal with this is to maintain a call stack which prevents a module from +being referenced more than once in the call stack so that there is no re-entry. A `map[string]interface{}` table +in the router could be used to perform this security check. + +#### Queries + +Queries in Cosmos SDK are generally un-permissioned so allowing one module to query another module should not pose +any major security threats assuming basic precautions are taken. The basic precaution that the router system will +need to take is making sure that the `sdk.Context` passed to query methods does not allow writing to the store. This +can be done for now with a `CacheMultiStore` as is currently done for `BaseApp` queries. + +### Internal Methods + +In many cases, we may wish for modules to call methods on other modules which are not exposed to clients at all. For this +purpose, we add the `InternalServer` method to `Configurator`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + InternalServer() grpc.Server +} +``` + +As an example, x/slashing's Slash must call x/staking's Slash, but we don't want to expose x/staking's Slash to end users +and clients. + +Internal protobuf services will be defined in a corresponding `internal.proto` file in the given module's +proto package. + +Services registered against `InternalServer` will be callable from other modules but not by external clients. + +An alternative solution to internal-only methods could involve hooks / plugins as discussed [here](https://github.com/cosmos/cosmos-sdk/pull/7459#issuecomment-733807753). +A more detailed evaluation of a hooks / plugin system will be addressed later in follow-ups to this ADR or as a separate +ADR. + +### Authorization + +By default, the inter-module router requires that messages are sent by the first signer returned by `GetSigners`. The +inter-module router should also accept authorization middleware such as that provided by [ADR 030](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-030-authz-module.md). +This middleware will allow accounts to otherwise specific module accounts to perform actions on their behalf. +Authorization middleware should take into account the need to grant certain modules effectively "admin" privileges to +other modules. This will be addressed in separate ADRs or updates to this ADR. + +### Future Work + +Other future improvements may include: + +* custom code generation that: + * simplifies interfaces (ex. generates code with `sdk.Context` instead of `context.Context`) + * optimizes inter-module calls - for instance caching resolved methods after first invocation +* combining `StoreKey`s and `ModuleKey`s into a single interface so that modules have a single OCAPs handle +* code generation which makes inter-module communication more performant +* decoupling `ModuleKey` creation from `AppModuleBasic.Name()` so that app's can override root module account names +* inter-module hooks and plugins + +## Alternatives + +### MsgServices vs `x/capability` + +The `x/capability` module does provide a proper object-capability implementation that can be used by any module in the +Cosmos SDK and could even be used for inter-module OCAPs as described in [\#5931](https://github.com/cosmos/cosmos-sdk/issues/5931). + +The advantages of the approach described in this ADR are mostly around how it integrates with other parts of the Cosmos SDK, +specifically: + +* protobuf so that: + * code generation of interfaces can be leveraged for a better dev UX + * module interfaces are versioned and checked for breakage using [buf](https://docs.buf.build/breaking-overview) +* sub-module accounts as per ADR 028 +* the general `Msg` passing paradigm and the way signers are specified by `GetSigners` + +Also, this is a complete replacement for keepers and could be applied to _all_ inter-module communication whereas the +`x/capability` approach in #5931 would need to be applied method by method. + +## Consequences + +### Backwards Compatibility + +This ADR is intended to provide a pathway to a scenario where there is greater long term compatibility between modules. +In the short-term, this will likely result in breaking certain `Keeper` interfaces which are too permissive and/or +replacing `Keeper` interfaces altogether. + +### Positive + +* an alternative to keepers which can more easily lead to stable inter-module interfaces +* proper inter-module OCAPs +* improved module developer DevX, as commented on by several particpants on + [Architecture Review Call, Dec 3](https://hackmd.io/E0wxxOvRQ5qVmTf6N_k84Q) +* lays the groundwork for what can be a greatly simplified `app.go` +* router can be setup to enforce atomic transactions for module-to-module calls + +### Negative + +* modules which adopt this will need significant refactoring + +### Neutral + +## Test Cases [optional] + +## References + +* [ADR 021](./adr-021-protobuf-query-encoding.md) +* [ADR 031](./adr-031-msg-service.md) +* [ADR 028](./adr-028-public-key-addresses.md) +* [ADR 030 draft](https://github.com/cosmos/cosmos-sdk/pull/7105) +* [Object-Capability Model](../docs/core/ocap.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-034-account-rekeying.md b/versioned_docs/version-0.46/integrate/architecture/adr-034-account-rekeying.md new file mode 100644 index 000000000..cd9b91469 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-034-account-rekeying.md @@ -0,0 +1,76 @@ +# ADR 034: Account Rekeying + +## Changelog + +* 30-09-2020: Initial Draft + +## Status + +PROPOSED + +## Abstract + +Account rekeying is a process hat allows an account to replace its authentication pubkey with a new one. + +## Context + +Currently, in the Cosmos SDK, the address of an auth `BaseAccount` is based on the hash of the public key. Once an account is created, the public key for the account is set in stone, and cannot be changed. This can be a problem for users, as key rotation is a useful security practice, but is not possible currently. Furthermore, as multisigs are a type of pubkey, once a multisig for an account is set, it can not be updated. This is problematic, as multisigs are often used by organizations or companies, who may need to change their set of multisig signers for internal reasons. + +Transferring all the assets of an account to a new account with the updated pubkey is not sufficient, because some "engagements" of an account are not easily transferable. For example, in staking, to transfer bonded Atoms, an account would have to unbond all delegations and wait the three week unbonding period. Even more significantly, for validator operators, ownership over a validator is not transferrable at all, meaning that the operator key for a validator can never be updated, leading to poor operational security for validators. + +## Decision + +We propose the addition of a new feature to `x/auth` that allows accounts to update the public key associated with their account, while keeping the address the same. + +This is possible because the Cosmos SDK `BaseAccount` stores the public key for an account in state, instead of making the assumption that the public key is included in the transaction (whether explicitly or implicitly through the signature) as in other blockchains such as Bitcoin and Ethereum. Because the public key is stored on chain, it is okay for the public key to not hash to the address of an account, as the address is not pertinent to the signature checking process. + +To build this system, we design a new Msg type as follows: + +```protobuf +service Msg { + rpc ChangePubKey(MsgChangePubKey) returns (MsgChangePubKeyResponse); +} + +message MsgChangePubKey { + string address = 1; + google.protobuf.Any pub_key = 2; +} + +message MsgChangePubKeyResponse {} +``` + +The MsgChangePubKey transaction needs to be signed by the existing pubkey in state. + +Once, approved, the handler for this message type, which takes in the AccountKeeper, will update the in-state pubkey for the account and replace it with the pubkey from the Msg. + +An account that has had its pubkey changed cannot be automatically pruned from state. This is because if pruned, the original pubkey of the account would be needed to recreate the same address, but the owner of the address may not have the original pubkey anymore. Currently, we do not automatically prune any accounts anyways, but we would like to keep this option open the road (this is the purpose of account numbers). To resolve this, we charge an additional gas fee for this operation to compensate for this this externality (this bound gas amount is configured as parameter `PubKeyChangeCost`). The bonus gas is charged inside the handler, using the `ConsumeGas` function. Furthermore, in the future, we can allow accounts that have rekeyed manually prune themselves using a new Msg type such as `MsgDeleteAccount`. Manually pruning accounts can give a gas refund as an incentive for performing the action. + +```go + amount := ak.GetParams(ctx).PubKeyChangeCost + ctx.GasMeter().ConsumeGas(amount, "pubkey change fee") +``` + +Everytime a key for an address is changed, we will store a log of this change in the state of the chain, thus creating a stack of all previous keys for an address and the time intervals for which they were active. This allows dapps and clients to easily query past keys for an account which may be useful for features such as verifying timestamped off-chain signed messages. + +## Consequences + +### Positive + +* Will allow users and validator operators to employ better operational security practices with key rotation. +* Will allow organizations or groups to easily change and add/remove multisig signers. + +### Negative + +Breaks the current assumed relationship between address and pubkeys as H(pubkey) = address. This has a couple of consequences. + +* This makes wallets that support this feature more complicated. For example, if an address on chain was updated, the corresponding key in the CLI wallet also needs to be updated. +* Cannot automatically prune accounts with 0 balance that have had their pubkey changed. + +### Neutral + +* While the purpose of this is intended to allow the owner of an account to update to a new pubkey they own, this could technically also be used to transfer ownership of an account to a new owner. For example, this could be use used to sell a staked position without unbonding or an account that has vesting tokens. However, the friction of this is very high as this would essentially have to be done as a very specific OTC trade. Furthermore, additional constraints could be added to prevent accouns with Vesting tokens to use this feature. +* Will require that PubKeys for an account are included in the genesis exports. + +## References + +* https://www.algorand.com/resources/blog/announcing-rekeying diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-035-rosetta-api-support.md b/versioned_docs/version-0.46/integrate/architecture/adr-035-rosetta-api-support.md new file mode 100644 index 000000000..01a81048b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-035-rosetta-api-support.md @@ -0,0 +1,211 @@ +# ADR 035: Rosetta API Support + +## Authors + +* Jonathan Gimeno (@jgimeno) +* David Grierson (@senormonito) +* Alessio Treglia (@alessio) +* Frojdy Dymylja (@fdymylja) + +## Changelog + +* 2021-05-12: the external library [cosmos-rosetta-gateway](https://github.com/tendermint/cosmos-rosetta-gateway) has been moved within the Cosmos SDK. + +## Context + +[Rosetta API](https://www.rosetta-api.org/) is an open-source specification and set of tools developed by Coinbase to +standardise blockchain interactions. + +Through the use of a standard API for integrating blockchain applications it will + +* Be easier for a user to interact with a given blockchain +* Allow exchanges to integrate new blockchains quickly and easily +* Enable application developers to build cross-blockchain applications such as block explorers, wallets and dApps at + considerably lower cost and effort. + +## Decision + +It is clear that adding Rosetta API support to the Cosmos SDK will bring value to all the developers and +Cosmos SDK based chains in the ecosystem. How it is implemented is key. + +The driving principles of the proposed design are: + +1. **Extensibility:** it must be as riskless and painless as possible for application developers to set-up network + configurations to expose Rosetta API-compliant services. +2. **Long term support:** This proposal aims to provide support for all the supported Cosmos SDK release series. +3. **Cost-efficiency:** Backporting changes to Rosetta API specifications from `master` to the various stable + branches of Cosmos SDK is a cost that needs to be reduced. + +We will achieve these delivering on these principles by the following: + +1. There will be a package `rosetta/lib` + for the implementation of the core Rosetta API features, particularly: + a. The types and interfaces (`Client`, `OfflineClient`...), this separates design from implementation detail. + b. The `Server` functionality as this is independent of the Cosmos SDK version. + c. The `Online/OfflineNetwork`, which is not exported, and implements the rosetta API using the `Client` interface to query the node, build tx and so on. + d. The `errors` package to extend rosetta errors. +2. Due to differences between the Cosmos release series, each series will have its own specific implementation of `Client` interface. +3. There will be two options for starting an API service in applications: + a. API shares the application process + b. API-specific process. + +## Architecture + +### The External Repo + +As section will describe the proposed external library, including the service implementation, plus the defined types and interfaces. + +#### Server + +`Server` is a simple `struct` that is started and listens to the port specified in the settings. This is meant to be used across all the Cosmos SDK versions that are actively supported. + +The constructor follows: + +`func NewServer(settings Settings) (Server, error)` + +`Settings`, which are used to construct a new server, are the following: + +```go +// Settings define the rosetta server settings +type Settings struct { + // Network contains the information regarding the network + Network *types.NetworkIdentifier + // Client is the online API handler + Client crgtypes.Client + // Listen is the address the handler will listen at + Listen string + // Offline defines if the rosetta service should be exposed in offline mode + Offline bool + // Retries is the number of readiness checks that will be attempted when instantiating the handler + // valid only for online API + Retries int + // RetryWait is the time that will be waited between retries + RetryWait time.Duration +} +``` + +#### Types + +Package types uses a mixture of rosetta types and custom defined type wrappers, that the client must parse and return while executing operations. + +##### Interfaces + +Every SDK version uses a different format to connect (rpc, gRPC, etc), query and build transactions, we have abstracted this in what is the `Client` interface. +The client uses rosetta types, whilst the `Online/OfflineNetwork` takes care of returning correctly parsed rosetta responses and errors. + +Each Cosmos SDK release series will have their own `Client` implementations. +Developers can implement their own custom `Client`s as required. + +```go +// Client defines the API the client implementation should provide. +type Client interface { + // Needed if the client needs to perform some action before connecting. + Bootstrap() error + // Ready checks if the servicer constraints for queries are satisfied + // for example the node might still not be ready, it's useful in process + // when the rosetta instance might come up before the node itself + // the servicer must return nil if the node is ready + Ready() error + + // Data API + + // Balances fetches the balance of the given address + // if height is not nil, then the balance will be displayed + // at the provided height, otherwise last block balance will be returned + Balances(ctx context.Context, addr string, height *int64) ([]*types.Amount, error) + // BlockByHashAlt gets a block and its transaction at the provided height + BlockByHash(ctx context.Context, hash string) (BlockResponse, error) + // BlockByHeightAlt gets a block given its height, if height is nil then last block is returned + BlockByHeight(ctx context.Context, height *int64) (BlockResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHash(ctx context.Context, hash string) (BlockTransactionsResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHeight(ctx context.Context, height *int64) (BlockTransactionsResponse, error) + // GetTx gets a transaction given its hash + GetTx(ctx context.Context, hash string) (*types.Transaction, error) + // GetUnconfirmedTx gets an unconfirmed Tx given its hash + // NOTE(fdymylja): NOT IMPLEMENTED YET! + GetUnconfirmedTx(ctx context.Context, hash string) (*types.Transaction, error) + // Mempool returns the list of the current non confirmed transactions + Mempool(ctx context.Context) ([]*types.TransactionIdentifier, error) + // Peers gets the peers currently connected to the node + Peers(ctx context.Context) ([]*types.Peer, error) + // Status returns the node status, such as sync data, version etc + Status(ctx context.Context) (*types.SyncStatus, error) + + // Construction API + + // PostTx posts txBytes to the node and returns the transaction identifier plus metadata related + // to the transaction itself. + PostTx(txBytes []byte) (res *types.TransactionIdentifier, meta map[string]interface{}, err error) + // ConstructionMetadataFromOptions + ConstructionMetadataFromOptions(ctx context.Context, options map[string]interface{}) (meta map[string]interface{}, err error) + OfflineClient +} + +// OfflineClient defines the functionalities supported without having access to the node +type OfflineClient interface { + NetworkInformationProvider + // SignedTx returns the signed transaction given the tx bytes (msgs) plus the signatures + SignedTx(ctx context.Context, txBytes []byte, sigs []*types.Signature) (signedTxBytes []byte, err error) + // TxOperationsAndSignersAccountIdentifiers returns the operations related to a transaction and the account + // identifiers if the transaction is signed + TxOperationsAndSignersAccountIdentifiers(signed bool, hexBytes []byte) (ops []*types.Operation, signers []*types.AccountIdentifier, err error) + // ConstructionPayload returns the construction payload given the request + ConstructionPayload(ctx context.Context, req *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) + // PreprocessOperationsToOptions returns the options given the preprocess operations + PreprocessOperationsToOptions(ctx context.Context, req *types.ConstructionPreprocessRequest) (options map[string]interface{}, err error) + // AccountIdentifierFromPublicKey returns the account identifier given the public key + AccountIdentifierFromPublicKey(pubKey *types.PublicKey) (*types.AccountIdentifier, error) +} +``` + +### 2. Cosmos SDK Implementation + +The Cosmos SDK implementation, based on version, takes care of satisfying the `Client` interface. +In Stargate, Launchpad and 0.37, we have introduced the concept of rosetta.Msg, this message is not in the shared repository as the sdk.Msg type differs between Cosmos SDK versions. + +The rosetta.Msg interface follows: + +```go +// Msg represents a cosmos-sdk message that can be converted from and to a rosetta operation. +type Msg interface { + sdk.Msg + ToOperations(withStatus, hasError bool) []*types.Operation + FromOperations(ops []*types.Operation) (sdk.Msg, error) +} +``` + +Hence developers who want to extend the rosetta set of supported operations just need to extend their module's sdk.Msgs with the `ToOperations` and `FromOperations` methods. + +### 3. API service invocation + +As stated at the start, application developers will have two methods for invocation of the Rosetta API service: + +1. Shared process for both application and API +2. Standalone API service + +#### Shared Process (Only Stargate) + +Rosetta API service could run within the same execution process as the application. This would be enabled via app.toml settings, and if gRPC is not enabled the rosetta instance would be spinned in offline mode (tx building capabilities only). + +#### Separate API service + +Client application developers can write a new command to launch a Rosetta API server as a separate process too, using the rosetta command contained in the `/server/rosetta` package. Construction of the command depends on Cosmos SDK version. Examples can be found inside `simd` for stargate, and `contrib/rosetta/simapp` for other release series. + +## Status + +Proposed + +## Consequences + +### Positive + +* Out-of-the-box Rosetta API support within Cosmos SDK. +* Blockchain interface standardisation + +## References + +* https://www.rosetta-api.org/ diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-036-arbitrary-signature.md b/versioned_docs/version-0.46/integrate/architecture/adr-036-arbitrary-signature.md new file mode 100644 index 000000000..d40929452 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-036-arbitrary-signature.md @@ -0,0 +1,132 @@ +# ADR 036: Arbitrary Message Signature Specification + +## Changelog + +* 28/10/2020 - Initial draft + +## Authors + +* Antoine Herzog (@antoineherzog) +* Zaki Manian (@zmanian) +* Aleksandr Bezobchuk (alexanderbez) [1] +* Frojdi Dymylja (@fdymylja) + +## Status + +Draft + +## Abstract + +Currently, in the Cosmos SDK, there is no convention to sign arbitrary message like on Ethereum. We propose with this specification, for Cosmos SDK ecosystem, a way to sign and validate off-chain arbitrary messages. + +This specification serves the purpose of covering every use case, this means that cosmos-sdk applications developers decide how to serialize and represent `Data` to users. + +## Context + +Having the ability to sign messages off-chain has proven to be a fundamental aspect of nearly any blockchain. The notion of signing messages off-chain has many added benefits such as saving on computational costs and reducing transaction throughput and overhead. Within the context of the Cosmos, some of the major applications of signing such data includes, but is not limited to, providing a cryptographic secure and verifiable means of proving validator identity and possibly associating it with some other framework or organization. In addition, having the ability to sign Cosmos messages with a Ledger or similar HSM device. + +Further context and use cases can be found in the references links. + +## Decision + +The aim is being able to sign arbitrary messages, even using Ledger or similar HSM devices. + +As a result signed messages should look roughly like Cosmos SDK messages but **must not** be a valid on-chain transaction. `chain-id`, `account_number` and `sequence` can all be assigned invalid values. + +Cosmos SDK 0.40 also introduces a concept of “auth_info” this can specify SIGN_MODES. + +A spec should include an `auth_info` that supports SIGN_MODE_DIRECT and SIGN_MODE_LEGACY_AMINO. + +Create the `offchain` proto definitions, we extend the auth module with `offchain` package to offer functionalities to verify and sign offline messages. + +An offchain transaction follows these rules: + +* the memo must be empty +* nonce, sequence number must be equal to 0 +* chain-id must be equal to “” +* fee gas must be equal to 0 +* fee amount must be an empty array + +Verification of an offchain transaction follows the same rules as an onchain one, except for the spec differences highlighted above. + +The first message added to the `offchain` package is `MsgSignData`. + +`MsgSignData` allows developers to sign arbitrary bytes valid offchain only. Where `Signer` is the account address of the signer. `Data` is arbitrary bytes which can represent `text`, `files`, `object`s. It's applications developers decision how `Data` should be deserialized, serialized and the object it can represent in their context. + +It's applications developers decision how `Data` should be treated, by treated we mean the serialization and deserialization process and the Object `Data` should represent. + +Proto definition: + +```proto +// MsgSignData defines an arbitrary, general-purpose, off-chain message +message MsgSignData { + // Signer is the sdk.AccAddress of the message signer + bytes Signer = 1 [(gogoproto.jsontag) = "signer", (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; + // Data represents the raw bytes of the content that is signed (text, json, etc) + bytes Data = 2 [(gogoproto.jsontag) = "data"]; +} +``` + +Signed MsgSignData json example: + +```json +{ + "type": "cosmos-sdk/StdTx", + "value": { + "msg": [ + { + "type": "sign/MsgSignData", + "value": { + "signer": "cosmos1hftz5ugqmpg9243xeegsqqav62f8hnywsjr4xr", + "data": "cmFuZG9t" + } + } + ], + "fee": { + "amount": [], + "gas": "0" + }, + "signatures": [ + { + "pub_key": { + "type": "tendermint/PubKeySecp256k1", + "value": "AqnDSiRoFmTPfq97xxEb2VkQ/Hm28cPsqsZm9jEVsYK9" + }, + "signature": "8y8i34qJakkjse9pOD2De+dnlc4KvFgh0wQpes4eydN66D9kv7cmCEouRrkka9tlW9cAkIL52ErB+6ye7X5aEg==" + } + ], + "memo": "" + } +} +``` + +## Consequences + +There is a specification on how messages, that are not meant to be broadcast to a live chain, should be formed. + +### Backwards Compatibility + +Backwards compatibility is maintained as this is a new message spec definition. + +### Positive + +* A common format that can be used by multiple applications to sign and verify off-chain messages. +* The specification is primitive which means it can cover every use case without limiting what is possible to fit inside it. +* It gives room for other off-chain messages specifications that aim to target more specific and common use cases such as off-chain-based authN/authZ layers [2]. + +### Negative + +* Current proposal requires a fixed relationship between an account address and a public key. +* Doesn't work with multisig accounts. + +## Further discussion + +* Regarding security in `MsgSignData`, the developer using `MsgSignData` is in charge of making the content laying in `Data` non-replayable when, and if, needed. +* the offchain package will be further extended with extra messages that target specific use cases such as, but not limited to, authentication in applications, payment channels, L2 solutions in general. + +## References + +1. https://github.com/cosmos/ics/pull/33 +2. https://github.com/cosmos/cosmos-sdk/pull/7727#discussion_r515668204 +3. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-722478477 +4. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-721062923 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-037-gov-split-vote.md b/versioned_docs/version-0.46/integrate/architecture/adr-037-gov-split-vote.md new file mode 100644 index 000000000..a2f457c33 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-037-gov-split-vote.md @@ -0,0 +1,111 @@ +# ADR 037: Governance split votes + +## Changelog + +* 2020/10/28: Intial draft + +## Status + +Accepted + +## Abstract + +This ADR defines a modification to the governance module that would allow a staker to split their votes into several voting options. For example, it could use 70% of its voting power to vote Yes and 30% of its voting power to vote No. + +## Context + +Currently, an address can cast a vote with only one options (Yes/No/Abstain/NoWithVeto) and use their full voting power behind that choice. + +However, often times the entity owning that address might not be a single individual. For example, a company might have different stakeholders who want to vote differently, and so it makes sense to allow them to split their voting power. Another example use case is exchanges. Many centralized exchanges often stake a portion of their users' tokens in their custody. Currently, it is not possible for them to do "passthrough voting" and giving their users voting rights over their tokens. However, with this system, exchanges can poll their users for voting preferences, and then vote on-chain proportionally to the results of the poll. + +## Decision + +We modify the vote structs to be + +```go +type WeightedVoteOption struct { + Option string + Weight sdk.Dec +} + +type Vote struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +And for backwards compatibility, we introduce `MsgVoteWeighted` while keeping `MsgVote`. + +```go +type MsgVote struct { + ProposalID int64 + Voter sdk.Address + Option Option +} + +type MsgVoteWeighted struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +The `ValidateBasic` of a `MsgVoteWeighted` struct would require that + +1. The sum of all the Rates is equal to 1.0 +2. No Option is repeated + +The governance tally function will iterate over all the options in a vote and add to the tally the result of the voter's voting power * the rate for that option. + +```go +tally() { + results := map[types.VoteOption]sdk.Dec + + for _, vote := range votes { + for i, weightedOption := range vote.Options { + results[weightedOption.Option] += getVotingPower(vote.voter) * weightedOption.Weight + } + } +} +``` + +The CLI command for creating a multi-option vote would be as such: + +```sh +simd tx gov vote 1 "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05" --from mykey +``` + +To create a single-option vote a user can do either + +```sh +simd tx gov vote 1 "yes=1" --from mykey +``` + +or + +```sh +simd tx gov vote 1 yes --from mykey +``` + +to maintain backwards compatibility. + +## Consequences + +### Backwards Compatibility + +* Previous VoteMsg types will remain the same and so clients will not have to update their procedure unless they want to support the WeightedVoteMsg feature. +* When querying a Vote struct from state, its structure will be different, and so clients wanting to display all voters and their respective votes will have to handle the new format and the fact that a single voter can have split votes. +* The result of querying the tally function should have the same API for clients. + +### Positive + +* Can make the voting process more accurate for addresses representing multiple stakeholders, often some of the largest addresses. + +### Negative + +* Is more complex than simple voting, and so may be harder to explain to users. However, this is mostly mitigated because the feature is opt-in. + +### Neutral + +* Relatively minor change to governance tally function. diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-038-state-listening.md b/versioned_docs/version-0.46/integrate/architecture/adr-038-state-listening.md new file mode 100644 index 000000000..74f92d2f6 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-038-state-listening.md @@ -0,0 +1,569 @@ +# ADR 038: KVStore state listening + +## Changelog + +* 11/23/2020: Initial draft +* 10/14/2022: + * Add `ListenCommit`, flatten the state writes in a block to a single batch. + * Remove listeners from cache stores, should only listen to `rootmulti.Store`. + * Remove `HaltAppOnDeliveryError()`, the errors are propogated by default, the implementations should return nil if don't want to propogate errors. + + +## Status + +Proposed + +## Abstract + +This ADR defines a set of changes to enable listening to state changes of individual KVStores and exposing these data to consumers. + +## Context + +Currently, KVStore data can be remotely accessed through [Queries](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/messages-and-queries.md#queries) +which proceed either through Tendermint and the ABCI, or through the gRPC server. +In addition to these request/response queries, it would be beneficial to have a means of listening to state changes as they occur in real time. + +## Decision + +We will modify the `CommitMultiStore` interface and its concrete (`rootmulti`) implementations and introduce a new `listenkv.Store` to allow listening to state changes in underlying KVStores. We don't need to listen to cache stores, because we can't be sure that the writes will be committed eventually, and the writes are duplicated in `rootmulti.Store` eventually, so we should only listen to `rootmulti.Store`. +We will introduce a plugin system for configuring and running streaming services that write these state changes and their surrounding ABCI message context to different destinations. + +### Listening interface + +In a new file, `store/types/listening.go`, we will create a `WriteListener` interface for streaming out state changes from a KVStore. + +```go +// WriteListener interface for streaming data out from a listenkv.Store +type WriteListener interface { + // if value is nil then it was deleted + // storeKey indicates the source KVStore, to facilitate using the same WriteListener across separate KVStores + // delete bool indicates if it was a delete; true: delete, false: set + OnWrite(storeKey StoreKey, key []byte, value []byte, delete bool) error +} +``` + +### Listener type + +We will create two concrete implementations of the `WriteListener` interface in `store/types/listening.go`, that writes out protobuf +encoded KV pairs to an underlying `io.Writer`, and simply accumulate them in memory. + +This will include defining a simple protobuf type for the KV pairs. In addition to the key and value fields this message +will include the StoreKey for the originating KVStore so that we can write out from separate KVStores to the same stream/file +and determine the source of each KV pair. + +```protobuf +message StoreKVPair { + optional string store_key = 1; // the store key for the KVStore this pair originates from + required bool set = 2; // true indicates a set operation, false indicates a delete operation + required bytes key = 3; + required bytes value = 4; +} +``` + +```go +// StoreKVPairWriteListener is used to configure listening to a KVStore by writing out length-prefixed +// protobuf encoded StoreKVPairs to an underlying io.Writer +type StoreKVPairWriteListener struct { + writer io.Writer + marshaller codec.BinaryCodec +} + +// NewStoreKVPairWriteListener wraps creates a StoreKVPairWriteListener with a provdied io.Writer and codec.BinaryCodec +func NewStoreKVPairWriteListener(w io.Writer, m codec.BinaryCodec) *StoreKVPairWriteListener { + return &StoreKVPairWriteListener{ + writer: w, + marshaller: m, + } +} + +// OnWrite satisfies the WriteListener interface by writing length-prefixed protobuf encoded StoreKVPairs +func (wl *StoreKVPairWriteListener) OnWrite(storeKey types.StoreKey, key []byte, value []byte, delete bool) error error { + kvPair := new(types.StoreKVPair) + kvPair.StoreKey = storeKey.Name() + kvPair.Delete = Delete + kvPair.Key = key + kvPair.Value = value + by, err := wl.marshaller.MarshalBinaryLengthPrefixed(kvPair) + if err != nil { + return err + } + if _, err := wl.writer.Write(by); err != nil { + return err + } + return nil +} +``` + +```golang +// MemoryListener listens to the state writes and accumulate the records in memory. +type MemoryListener struct { + key StoreKey + stateCache []StoreKVPair +} + +// NewMemoryListener creates a listener that accumulate the state writes in memory. +func NewMemoryListener(key StoreKey) *MemoryListener { + return &MemoryListener{key: key} +} + +// OnWrite implements WriteListener interface +func (fl *MemoryListener) OnWrite(storeKey StoreKey, key []byte, value []byte, delete bool) error { + fl.stateCache = append(fl.stateCache, StoreKVPair{ + StoreKey: storeKey.Name(), + Delete: delete, + Key: key, + Value: value, + }) + return nil +} + +// PopStateCache returns the current state caches and set to nil +func (fl *MemoryListener) PopStateCache() []StoreKVPair { + res := fl.stateCache + fl.stateCache = nil + return res +} + +// StoreKey returns the storeKey it listens to +func (fl *MemoryListener) StoreKey() StoreKey { + return fl.key +} +``` + +### ListenKVStore + +We will create a new `Store` type `listenkv.Store` that the `MultiStore` wraps around a `KVStore` to enable state listening. +We can configure the `Store` with a set of `WriteListener`s which stream the output to specific destinations. + +```go +// Store implements the KVStore interface with listening enabled. +// Operations are traced on each core KVStore call and written to any of the +// underlying listeners with the proper key and operation permissions +type Store struct { + parent types.KVStore + listeners []types.WriteListener + parentStoreKey types.StoreKey +} + +// NewStore returns a reference to a new traceKVStore given a parent +// KVStore implementation and a buffered writer. +func NewStore(parent types.KVStore, psk types.StoreKey, listeners []types.WriteListener) *Store { + return &Store{parent: parent, listeners: listeners, parentStoreKey: psk} +} + +// Set implements the KVStore interface. It traces a write operation and +// delegates the Set call to the parent KVStore. +func (s *Store) Set(key []byte, value []byte) { + types.AssertValidKey(key) + s.parent.Set(key, value) + s.onWrite(false, key, value) +} + +// Delete implements the KVStore interface. It traces a write operation and +// delegates the Delete call to the parent KVStore. +func (s *Store) Delete(key []byte) { + s.parent.Delete(key) + s.onWrite(true, key, nil) +} + +// onWrite writes a KVStore operation to all the WriteListeners +func (s *Store) onWrite(delete bool, key, value []byte) { + for _, l := range s.listeners { + if err := l.OnWrite(s.parentStoreKey, key, value, delete); err != nil { + // log error + } + } +} +``` + +### MultiStore interface updates + +We will update the `CommitMultiStore` interface to allow us to wrap a set of listeners around a specific `KVStore`. + +```go +type CommitMultiStore interface { + ... + + // ListeningEnabled returns if listening is enabled for the KVStore belonging the provided StoreKey + ListeningEnabled(key StoreKey) bool + + // AddListeners adds WriteListeners for the KVStore belonging to the provided StoreKey + // It appends the listeners to a current set, if one already exists + AddListeners(key StoreKey, listeners []WriteListener) +} +``` + +### MultiStore implementation updates + +We will modify all of the `CommitMultiStore` implementations to satisfy these new interfaces, and adjust the `rootmulti` `GetKVStore` method +to wrap the returned `KVStore` with a `listenkv.Store` if listening is turned on for that `Store`. + +```go +func (rs *Store) GetKVStore(key types.StoreKey) types.KVStore { + store := rs.stores[key].(types.KVStore) + + if rs.TracingEnabled() { + store = tracekv.NewStore(store, rs.traceWriter, rs.traceContext) + } + if rs.ListeningEnabled(key) { + store = listenkv.NewStore(key, store, rs.listeners[key]) + } + + return store +} +``` + +We will also adjust the `rootmulti` `CacheMultiStore` method to wrap the stores with `listenkv.Store` to enable listening when the cache layer writes. + +```go +func (rs *Store) CacheMultiStore() types.CacheMultiStore { + stores := make(map[types.StoreKey]types.CacheWrapper) + for k, v := range rs.stores { + store := v.(types.KVStore) + // Wire the listenkv.Store to allow listeners to observe the writes from the cache store, + // set same listeners on cache store will observe duplicated writes. + if rs.ListeningEnabled(k) { + store = listenkv.NewStore(store, k, rs.listeners[k]) + } + stores[k] = store + } + return cachemulti.NewStore(rs.db, stores, rs.keysByName, rs.traceWriter, rs.getTracingContext()) +} +``` + +### Exposing the data + +#### Streaming service + +We will introduce a new `StreamingService` interface for exposing `WriteListener` data streams to external consumers. +In addition to streaming state changes as `StoreKVPair`s, the interface satisfies an `ABCIListener` interface that plugs +into the BaseApp and relays ABCI requests and responses so that the service can observe those block metadatas as well. + +The `WriteListener`s of `StreamingService` listens to the `rootmulti.Store`, which is only written into at commit event by the cache store of `deliverState`. + +```go +// ABCIListener interface used to hook into the ABCI message processing of the BaseApp +type ABCIListener interface { + // ListenBeginBlock updates the streaming service with the latest BeginBlock messages + ListenBeginBlock(ctx types.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error + // ListenEndBlock updates the steaming service with the latest EndBlock messages + ListenEndBlock(ctx types.Context, req abci.RequestEndBlock, res abci.ResponseEndBlock) error + // ListenDeliverTx updates the steaming service with the latest DeliverTx messages + ListenDeliverTx(ctx types.Context, req abci.RequestDeliverTx, res abci.ResponseDeliverTx) error + // ListenCommit updates the steaming service with the latest Commit message, + // All the state writes of current block should have notified before this message. + ListenCommit(ctx types.Context, res abci.ResponseCommit) error +} + +// StreamingService interface for registering WriteListeners with the BaseApp and updating the service with the ABCI messages using the hooks +type StreamingService interface { + // Stream is the streaming service loop, awaits kv pairs and writes them to a destination stream or file + Stream(wg *sync.WaitGroup) error + // Listeners returns the streaming service's listeners for the BaseApp to register + Listeners() map[types.StoreKey][]store.WriteListener + // ABCIListener interface for hooking into the ABCI messages from inside the BaseApp + ABCIListener + // Closer interface + io.Closer +} +``` + +#### BaseApp registration + +We will add a new method to the `BaseApp` to enable the registration of `StreamingService`s: + +```go +// SetStreamingService is used to set a streaming service into the BaseApp hooks and load the listeners into the multistore +func (app *BaseApp) SetStreamingService(s StreamingService) { + // add the listeners for each StoreKey + for key, lis := range s.Listeners() { + app.cms.AddListeners(key, lis) + } + // register the StreamingService within the BaseApp + // BaseApp will pass BeginBlock, DeliverTx, and EndBlock requests and responses to the streaming services to update their ABCI context + app.abciListeners = append(app.abciListeners, s) +} +``` + +We will also modify the `BeginBlock`, `EndBlock`, and `DeliverTx` methods to pass ABCI requests and responses to any streaming service hooks registered +with the `BaseApp`. + +```go +func (app *BaseApp) BeginBlock(req abci.RequestBeginBlock) (res abci.ResponseBeginBlock) { + + ... + + defer func() { + // call the hooks with the BeginBlock messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenBeginBlock(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrapf(err, "BeginBlock listening hook failed, height: %d", req.Header.Height)) + } + } + }() + + return res +} +``` + +```go +func (app *BaseApp) EndBlock(req abci.RequestEndBlock) (res abci.ResponseEndBlock) { + + ... + + defer func() { + // Call the streaming service hooks with the EndBlock messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenEndBlock(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrapf(err, "EndBlock listening hook failed, height: %d", req.Height)) + } + } + }() + + return res +} +``` + +```go +func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) (res abci.ResponseDeliverTx) { + + defer func() { + // call the hooks with the DeliverTx messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenDeliverTx(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrap(err, "DeliverTx listening hook failed")) + } + } + }() + + ... + + return res +} +``` + +```golang +func (app *BaseApp) Commit() abci.ResponseCommit { + header := app.deliverState.ctx.BlockHeader() + retainHeight := app.GetBlockRetentionHeight(header.Height) + + // Write the DeliverTx state into branched storage and commit the MultiStore. + // The write to the DeliverTx state writes all state transitions to the root + // MultiStore (app.cms) so when Commit() is called is persists those values. + app.deliverState.ms.Write() + commitID := app.cms.Commit() + + res := abci.ResponseCommit{ + Data: commitID.Hash, + RetainHeight: retainHeight, + } + + // call the hooks with the Commit message + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenCommit(app.deliverState.ctx, res); err != nil { + panic(sdkerrors.Wrapf(err, "Commit listening hook failed, height: %d", header.Height)) + } + } + + app.logger.Info("commit synced", "commit", fmt.Sprintf("%X", commitID)) + ... +} +``` + +#### Error Handling And Async Consumers + +`ABCIListener`s are called synchronously inside the consensus state machine, the returned error causes panic which in turn halt the consensus state machine. The implementer should be careful not to break consensus unexpectedly or slow down it too much. + +For some async use cases, one can spawn a go-routine internanlly to avoid slow down consensus state machine, and handle the errors internally and always returns `nil` to avoid halting consensus state machine on error. + +Furthermore, for most of the cases, we only need to use the builtin file streamer to listen to state changes directly inside cosmos-sdk, the other consumers should subscribe to the file streamer output externally. + +#### File Streamer + +We provide a minimal filesystem based implementation inside cosmos-sdk, and provides options to write output files reliably, the output files can be further consumed by external consumers, so most of the state listeners actually don't need to live inside the sdk and node, which improves the node robustness and simplify sdk internals. + +The file streamer can be wired in app like this: +```golang +exposeStoreKeys := ... // decide the key list to listen +service, err := file.NewStreamingService(streamingDir, "", exposeStoreKeys, appCodec, logger) +bApp.SetStreamingService(service) +``` + +#### Plugin system + +We propose a plugin architecture to load and run `StreamingService` implementations. We will introduce a plugin +loading/preloading system that is used to load, initialize, inject, run, and stop Cosmos-SDK plugins. Each plugin +must implement the following interface: + +```go +// Plugin is the base interface for all kinds of cosmos-sdk plugins +// It will be included in interfaces of different Plugins +type Plugin interface { + // Name should return unique name of the plugin + Name() string + + // Version returns current version of the plugin + Version() string + + // Init is called once when the Plugin is being loaded + // The plugin is passed the AppOptions for configuration + // A plugin will not necessarily have a functional Init + Init(env serverTypes.AppOptions) error + + // Closer interface for shutting down the plugin process + io.Closer +} +``` + +The `Name` method returns a plugin's name. +The `Version` method returns a plugin's version. +The `Init` method initializes a plugin with the provided `AppOptions`. +The io.Closer is used to shut down the plugin service. + +For the purposes of this ADR we introduce a single kind of plugin- a state streaming plugin. +We will define a `StateStreamingPlugin` interface which extends the above `Plugin` interface to support a state streaming service. + +```go +// StateStreamingPlugin interface for plugins that load a baseapp.StreamingService onto a baseapp.BaseApp +type StateStreamingPlugin interface { + // Register configures and registers the plugin streaming service with the BaseApp + Register(bApp *baseapp.BaseApp, marshaller codec.BinaryCodec, keys map[string]*types.KVStoreKey) error + + // Start starts the background streaming process of the plugin streaming service + Start(wg *sync.WaitGroup) error + + // Plugin is the base Plugin interface + Plugin +} +``` + +The `Register` method is used during App construction to register the plugin's streaming service with an App's BaseApp using the BaseApp's `SetStreamingService` method. +The `Start` method is used during App construction to start the registered plugin streaming services and maintain synchronization with them. + +e.g. in `NewSimApp`: + +```go +func NewSimApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + loadLatest bool, + appOpts servertypes.AppOptions, + baseAppOptions ...func(*baseapp.BaseApp), +) *SimApp { + + ... + + keys := sdk.NewKVStoreKeys( + authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, + ) + + pluginsOnKey := fmt.Sprintf("%s.%s", plugin.PLUGINS_TOML_KEY, plugin.PLUGINS_ON_TOML_KEY) + if cast.ToBool(appOpts.Get(pluginsOnKey)) { + // this loads the preloaded and any plugins found in `plugins.dir` + pluginLoader, err := loader.NewPluginLoader(appOpts, logger) + if err != nil { + // handle error + } + + // initialize the loaded plugins + if err := pluginLoader.Initialize(); err != nil { + // handle error + } + + // register the plugin(s) with the BaseApp + if err := pluginLoader.Inject(bApp, appCodec, keys); err != nil { + // handle error + } + + // start the plugin services, optionally use wg to synchronize shutdown using io.Closer + wg := new(sync.WaitGroup) + if err := pluginLoader.Start(wg); err != nil { + // handler error + } + } + + ... + + return app +} +``` + + +#### Configuration + +The plugin system will be configured within an app's app.toml file. + +```toml +[plugins] + on = false # turn the plugin system, as a whole, on or off + enabled = ["list", "of", "plugin", "names", "to", "enable"] + dir = "the directory to load non-preloaded plugins from; defaults to cosmos-sdk/plugin/plugins" +``` + +There will be three parameters for configuring the plugin system: `plugins.on`, `plugins.enabled` and `plugins.dir`. +`plugins.on` is a bool that turns on or off the plugin system at large, `plugins.dir` directs the system to a directory +to load plugins from, and `plugins.enabled` provides `opt-in` semantics to plugin names to enable (including preloaded plugins). + +Configuration of a given plugin is ultimately specific to the plugin, but we will introduce some standards here: + +Plugin TOML configuration should be split into separate sub-tables for each kind of plugin (e.g. `plugins.streaming`). + +Within these sub-tables, the parameters for a specific plugin of that kind are included in another sub-table (e.g. `plugins.streaming.file`). +It is generally expected, but not required, that a streaming service plugin can be configured with a set of store keys +(e.g. `plugins.streaming.file.keys`) for the stores it listens to and a flag (e.g. `plugins.streaming.file.halt_app_on_delivery_error`) +that signifies whether the service operates in a fire-and-forget capacity, or stop the BaseApp when an error occurs in +any of `ListenBeginBlock`, `ListenEndBlock` and `ListenDeliverTx`. + +e.g. + +```toml +[plugins] + on = false # turn the plugin system, as a whole, on or off + enabled = ["list", "of", "plugin", "names", "to", "enable"] + dir = "the directory to load non-preloaded plugins from; defaults to " + [plugins.streaming] # a mapping of plugin-specific streaming service parameters, mapped to their plugin name + [plugins.streaming.file] # the specific parameters for the file streaming service plugin + keys = ["list", "of", "store", "keys", "we", "want", "to", "expose", "for", "this", "streaming", "service"] + write_dir = "path to the write directory" + prefix = "optional prefix to prepend to the generated file names" + halt_app_on_delivery_error = "false" # false == fire-and-forget; true == stop the application + [plugins.streaming.kafka] + keys = [] + topic_prefix = "block" # Optional prefix for topic names where data will be stored. + flush_timeout_ms = 5000 # Flush and wait for outstanding messages and requests to complete delivery when calling `StreamingService.Close(). (milliseconds) + halt_app_on_delivery_error = true # Whether or not to halt the application when plugin fails to deliver message(s). + ... +``` + +#### Encoding and decoding streams + +ADR-038 introduces the interfaces and types for streaming state changes out from KVStores, associating this +data with their related ABCI requests and responses, and registering a service for consuming this data and streaming it to some destination in a final format. +Instead of prescribing a final data format in this ADR, it is left to a specific plugin implementation to define and document this format. +We take this approach because flexibility in the final format is necessary to support a wide range of streaming service plugins. For example, +the data format for a streaming service that writes the data out to a set of files will differ from the data format that is written to a Kafka topic. + +## Consequences + +These changes will provide a means of subscribing to KVStore state changes in real time. + +### Backwards Compatibility + +* This ADR changes the `CommitMultiStore` interface, implementations supporting the previous version of these interfaces will not support the new ones + +### Positive + +* Ability to listen to KVStore state changes in real time and expose these events to external consumers + +### Negative + +* Changes `CommitMultiStore`interface + +### Neutral + +* Introduces additional- but optional- complexity to configuring and running a cosmos application +* If an application developer opts to use these features to expose data, they need to be aware of the ramifications/risks of that data exposure as it pertains to the specifics of their application diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-039-epoched-staking.md b/versioned_docs/version-0.46/integrate/architecture/adr-039-epoched-staking.md new file mode 100644 index 000000000..29418fc89 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-039-epoched-staking.md @@ -0,0 +1,122 @@ +# ADR 039: Epoched Staking + +## Changelog + +* 10-Feb-2021: Initial Draft + +## Authors + +* Dev Ojha (@valardragon) +* Sunny Aggarwal (@sunnya97) + +## Status + +Proposed + +## Abstract + +This ADR updates the proof of stake module to buffer the staking weight updates for a number of blocks before updating the consensus' staking weights. The length of the buffer is dubbed an epoch. The prior functionality of the staking module is then a special case of the abstracted module, with the epoch being set to 1 block. + +## Context + +The current proof of stake module takes the design decision to apply staking weight changes to the consensus engine immediately. This means that delegations and unbonds get applied immediately to the validator set. This decision was primarily done as it was implementationally simplest, and because we at the time believed that this would lead to better UX for clients. + +An alternative design choice is to allow buffering staking updates (delegations, unbonds, validators joining) for a number of blocks. This 'epoch'd proof of stake consensus provides the guarantee that the consensus weights for validators will not change mid-epoch, except in the event of a slash condition. + +Additionally, the UX hurdle may not be as significant as was previously thought. This is because it is possible to provide users immediate acknowledgement that their bond was recorded and will be executed. + +Furthermore, it has become clearer over time that immediate execution of staking events comes with limitations, such as: + +* Threshold based cryptography. One of the main limitations is that because the validator set can change so regularly, it makes the running of multiparty computation by a fixed validator set difficult. Many threshold-based cryptographic features for blockchains such as randomness beacons and threshold decryption require a computationally-expensive DKG process (will take much longer than 1 block to create). To productively use these, we need to guarantee that the result of the DKG will be used for a reasonably long time. It wouldn't be feasible to rerun the DKG every block. By epoching staking, it guarantees we'll only need to run a new DKG once every epoch. + +* Light client efficiency. This would lessen the overhead for IBC when there is high churn in the validator set. In the Tendermint light client bisection algorithm, the number of headers you need to verify is related to bounding the difference in validator sets between a trusted header and the latest header. If the difference is too great, you verify more header in between the two. By limiting the frequency of validator set changes, we can reduce the worst case size of IBC lite client proofs, which occurs when a validator set has high churn. + +* Fairness of deterministic leader election. Currently we have no ways of reasoning of fairness of deterministic leader election in the presence of staking changes without epochs (tendermint/spec#217). Breaking fairness of leader election is profitable for validators, as they earn additional rewards from being the proposer. Adding epochs at least makes it easier for our deterministic leader election to match something we can prove secure. (Albeit, we still haven’t proven if our current algorithm is fair with > 2 validators in the presence of stake changes) + +* Staking derivative design. Currently, reward distribution is done lazily using the F1 fee distribution. While saving computational complexity, lazy accounting requires a more stateful staking implementation. Right now, each delegation entry has to track the time of last withdrawal. Handling this can be a challenge for some staking derivatives designs that seek to provide fungibility for all tokens staked to a single validator. Force-withdrawing rewards to users can help solve this, however it is infeasible to force-withdraw rewards to users on a per block basis. With epochs, a chain could more easily alter the design to have rewards be forcefully withdrawn (iterating over delegator accounts only once per-epoch), and can thus remove delegation timing from state. This may be useful for certain staking derivative designs. + +## Design considerations + +### Slashing + +There is a design consideration for whether to apply a slash immediately or at the end of an epoch. A slash event should apply to only members who are actually staked during the time of the infraction, namely during the epoch the slash event occured. + +Applying it immediately can be viewed as offering greater consensus layer security, at potential costs to the aforementioned usecases. The benefits of immediate slashing for consensus layer security can be all be obtained by executing the validator jailing immediately (thus removing it from the validator set), and delaying the actual slash change to the validator's weight until the epoch boundary. For the use cases mentioned above, workarounds can be integrated to avoid problems, as follows: + +* For threshold based cryptography, this setting will have the threshold cryptography use the original epoch weights, while consensus has an update that lets it more rapidly benefit from additional security. If the threshold based cryptography blocks liveness of the chain, then we have effectively raised the liveness threshold of the remaining validators for the rest of the epoch. (Alternatively, jailed nodes could still contribute shares) This plan will fail in the extreme case that more than 1/3rd of the validators have been jailed within a single epoch. For such an extreme scenario, the chain already have its own custom incident response plan, and defining how to handle the threshold cryptography should be a part of that. +* For light client efficiency, there can be a bit included in the header indicating an intra-epoch slash (ala https://github.com/tendermint/spec/issues/199). +* For fairness of deterministic leader election, applying a slash or jailing within an epoch would break the guarantee we were seeking to provide. This then re-introduces a new (but significantly simpler) problem for trying to provide fairness guarantees. Namely, that validators can adversarially elect to remove themself from the set of proposers. From a security perspective, this could potentially be handled by two different mechanisms (or prove to still be too difficult to achieve). One is making a security statement acknowledging the ability for an adversary to force an ahead-of-time fixed threshold of users to drop out of the proposer set within an epoch. The second method would be to parameterize such that the cost of a slash within the epoch far outweights benefits due to being a proposer. However, this latter criterion is quite dubious, since being a proposer can have many advantageous side-effects in chains with complex state machines. (Namely, DeFi games such as Fomo3D) +* For staking derivative design, there is no issue introduced. This does not increase the state size of staking records, since whether a slash has occured is fully queryable given the validator address. + +### Token lockup + +When someone makes a transaction to delegate, even though they are not immediately staked, their tokens should be moved into a pool managed by the staking module which will then be used at the end of an epoch. This prevents concerns where they stake, and then spend those tokens not realizing they were already allocated for staking, and thus having their staking tx fail. + +### Pipelining the epochs + +For threshold based cryptography in particular, we need a pipeline for epoch changes. This is because when we are in epoch N, we want the epoch N+1 weights to be fixed so that the validator set can do the DKG accordingly. So if we are currently in epoch N, the stake weights for epoch N+1 should already be fixed, and new stake changes should be getting applied to epoch N + 2. + +This can be handled by making a parameter for the epoch pipeline length. This parameter should not be alterable except during hard forks, to mitigate implementation complexity of switching the pipeline length. + +With pipeline length 1, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+1. +With pipeline length 2, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+2. + +### Rewards + +Even though all staking updates are applied at epoch boundaries, rewards can still be distributed immediately when they are claimed. This is because they do not affect the current stake weights, as we do not implement auto-bonding of rewards. If such a feature were to be implemented, it would have to be setup so that rewards are auto-bonded at the epoch boundary. + +### Parameterizing the epoch length + +When choosing the epoch length, there is a trade-off queued state/computation buildup, and countering the previously discussed limitations of immediate execution if they apply to a given chain. + +Until an ABCI mechanism for variable block times is introduced, it is ill-advised to be using high epoch lengths due to the computation buildup. This is because when a block's execution time is greater than the expected block time from Tendermint, rounds may increment. + +## Decision + +**Step-1**: Implement buffering of all staking and slashing messages. + +First we create a pool for storing tokens that are being bonded, but should be applied at the epoch boundary called the `EpochDelegationPool`. Then, we have two separate queues, one for staking, one for slashing. We describe what happens on each message being delivered below: + +### Staking messages + +* **MsgCreateValidator**: Move user's self-bond to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the self-bond, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +* **MsgEditValidator**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **MsgDelegate**: Move user's funds to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the delegation, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +* **MsgBeginRedelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **MsgUndelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. + +### Slashing messages + +* **MsgUnjail**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **Slash Event**: Whenever a slash event is created, it gets queued in the slashing module to apply at the end of the epoch. The queues should be setup such that this slash applies immediately. + +### Evidence Messages + +* **MsgSubmitEvidence**: This gets executed immediately, and the validator gets jailed immediately. However in slashing, the actual slash event gets queued. + +Then we add methods to the end blockers, to ensure that at the epoch boundary the queues are cleared and delegation updates are applied. + +**Step-2**: Implement querying of queued staking txs. + +When querying the staking activity of a given address, the status should return not only the amount of tokens staked, but also if there are any queued stake events for that address. This will require more work to be done in the querying logic, to trace the queued upcoming staking events. + +As an initial implementation, this can be implemented as a linear search over all queued staking events. However, for chains that need long epochs, they should eventually build additional support for nodes that support querying to be able to produce results in constant time. (This is do-able by maintaining an auxilliary hashmap for indexing upcoming staking events by address) + +**Step-3**: Adjust gas + +Currently gas represents the cost of executing a transaction when its done immediately. (Merging together costs of p2p overhead, state access overhead, and computational overhead) However, now a transaction can cause computation in a future block, namely at the epoch boundary. + +To handle this, we should initially include parameters for estimating the amount of future computation (denominated in gas), and add that as a flat charge needed for the message. +We leave it as out of scope for how to weight future computation versus current computation in gas pricing, and have it set such that the are weighted equally for now. + +## Consequences + +### Positive + +* Abstracts the proof of stake module that allows retaining the existing functionality +* Enables new features such as validator-set based threshold cryptography + +### Negative + +* Increases complexity of integrating more complex gas pricing mechanisms, as they now have to consider future execution costs as well. +* When epoch > 1, validators can no longer leave the network immediately, and must wait until an epoch boundary. diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-040-storage-and-smt-state-commitments.md b/versioned_docs/version-0.46/integrate/architecture/adr-040-storage-and-smt-state-commitments.md new file mode 100644 index 000000000..f60e3adcf --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-040-storage-and-smt-state-commitments.md @@ -0,0 +1,289 @@ +# ADR 040: Storage and SMT State Commitments + +## Changelog + +* 2020-01-15: Draft + +## Status + +DRAFT Not Implemented + +## Abstract + +Sparse Merkle Tree ([SMT](https://osf.io/8mcnh/)) is a version of a Merkle Tree with various storage and performance optimizations. This ADR defines a separation of state commitments from data storage and the Cosmos SDK transition from IAVL to SMT. + +## Context + +Currently, Cosmos SDK uses IAVL for both state [commitments](https://cryptography.fandom.com/wiki/Commitment_scheme) and data storage. + +IAVL has effectively become an orphaned project within the Cosmos ecosystem and it's proven to be an inefficient state commitment data structure. +In the current design, IAVL is used for both data storage and as a Merkle Tree for state commitments. IAVL is meant to be a standalone Merkelized key/value database, however it's using a KV DB engine to store all tree nodes. So, each node is stored in a separate record in the KV DB. This causes many inefficiencies and problems: + +* Each object query requires a tree traversal from the root. Subsequent queries for the same object are cached on the Cosmos SDK level. +* Each edge traversal requires a DB query. +* Creating snapshots is [expensive](https://github.com/cosmos/cosmos-sdk/issues/7215#issuecomment-684804950). It takes about 30 seconds to export less than 100 MB of state (as of March 2020). +* Updates in IAVL may trigger tree reorganization and possible O(log(n)) hashes re-computation, which can become a CPU bottleneck. +* The node structure is pretty expensive - it contains a standard tree node elements (key, value, left and right element) and additional metadata such as height, version (which is not required by the Cosmos SDK). The entire node is hashed, and that hash is used as the key in the underlying database, [ref](https://github.com/cosmos/iavl/blob/master/docs/node/node.md +). + +Moreover, the IAVL project lacks support and a maintainer and we already see better and well-established alternatives. Instead of optimizing the IAVL, we are looking into other solutions for both storage and state commitments. + +## Decision + +We propose to separate the concerns of state commitment (**SC**), needed for consensus, and state storage (**SS**), needed for state machine. Finally we replace IAVL with [Celestia's SMT](https://github.com/lazyledger/smt). Celestia SMT is based on Diem (called jellyfish) design [*] - it uses a compute-optimised SMT by replacing subtrees with only default values with a single node (same approach is used by Ethereum2) and implements compact proofs. + +The storage model presented here doesn't deal with data structure nor serialization. It's a Key-Value database, where both key and value are binaries. The storage user is responsible for data serialization. + +### Decouple state commitment from storage + +Separation of storage and commitment (by the SMT) will allow the optimization of different components according to their usage and access patterns. + +`SC` (SMT) is used to commit to a data and compute Merkle proofs. `SS` is used to directly access data. To avoid collisions, both `SS` and `SC` will use a separate storage namespace (they could use the same database underneath). `SS` will store each record directly (mapping `(key, value)` as `key → value`). + +SMT is a merkle tree structure: we don't store keys directly. For every `(key, value)` pair, `hash(key)` is used as leaf path (we hash a key to uniformly distribute leaves in the tree) and `hash(value)` as the leaf contents. The tree structure is specified in more depth [below](#smt-for-state-commitment). + +For data access we propose 2 additional KV buckets (implemented as namespaces for the key-value pairs, sometimes called [column family](https://github.com/facebook/rocksdb/wiki/Terminology)): + +1. B1: `key → value`: the principal object storage, used by a state machine, behind the Cosmos SDK `KVStore` interface: provides direct access by key and allows prefix iteration (KV DB backend must support it). +2. B2: `hash(key) → key`: a reverse index to get a key from an SMT path. Internally the SMT will store `(key, value)` as `prefix || hash(key) || hash(value)`. So, we can get an object value by composing `hash(key) → B2 → B1`. +3. We could use more buckets to optimize the app usage if needed. + +We propose to use a KV database for both `SS` and `SC`. The store interface will allow to use the same physical DB backend for both `SS` and `SC` as well two separate DBs. The latter option allows for the separation of `SS` and `SC` into different hardware units, providing support for more complex setup scenarios and improving overall performance: one can use different backends (eg RocksDB and Badger) as well as independently tuning the underlying DB configuration. + +### Requirements + +State Storage requirements: + +* range queries +* quick (key, value) access +* creating a snapshot +* historical versioning +* pruning (garbage collection) + +State Commitment requirements: + +* fast updates +* tree path should be short +* query historical commitment proofs using ICS-23 standard +* pruning (garbage collection) + +### SMT for State Commitment + +A Sparse Merkle tree is based on the idea of a complete Merkle tree of an intractable size. The assumption here is that as the size of the tree is intractable, there would only be a few leaf nodes with valid data blocks relative to the tree size, rendering a sparse tree. + +The full specification can be found at [Celestia](https://github.com/celestiaorg/celestia-specs/blob/ec98170398dfc6394423ee79b00b71038879e211/src/specs/data_structures.md#sparse-merkle-tree). In summary: + +* The SMT consists of a binary Merkle tree, constructed in the same fashion as described in [Certificate Transparency (RFC-6962)](https://tools.ietf.org/html/rfc6962), but using as the hashing function SHA-2-256 as defined in [FIPS 180-4](https://doi.org/10.6028/NIST.FIPS.180-4). +* Leaves and internal nodes are hashed differently: the one-byte `0x00` is prepended for leaf nodes while `0x01` is prepended for internal nodes. +* Default values are given to leaf nodes with empty leaves. +* While the above rule is sufficient to pre-compute the values of intermediate nodes that are roots of empty subtrees, a further simplification is to extend this default value to all nodes that are roots of empty subtrees. The 32-byte zero is used as the default value. This rule takes precedence over the above one. +* An internal node that is the root of a subtree that contains exactly one non-empty leaf is replaced by that leaf's leaf node. + +### Snapshots for storage sync and state versioning + +Below, with simple _snapshot_ we refer to a database snapshot mechanism, not to a _ABCI snapshot sync_. The latter will be referred as _snapshot sync_ (which will directly use DB snapshot as described below). + +Database snapshot is a view of DB state at a certain time or transaction. It's not a full copy of a database (it would be too big). Usually a snapshot mechanism is based on a _copy on write_ and it allows DB state to be efficiently delivered at a certain stage. +Some DB engines support snapshotting. Hence, we propose to reuse that functionality for the state sync and versioning (described below). We limit the supported DB engines to ones which efficiently implement snapshots. In a final section we discuss the evaluated DBs. + +One of the Stargate core features is a _snapshot sync_ delivered in the `/snapshot` package. It provides a way to trustlessly sync a blockchain without repeating all transactions from the genesis. This feature is implemented in Cosmos SDK and requires storage support. Currently IAVL is the only supported backend. It works by streaming to a client a snapshot of a `SS` at a certain version together with a header chain. + +A new database snapshot will be created in every `EndBlocker` and identified by a block height. The `root` store keeps track of the available snapshots to offer `SS` at a certain version. The `root` store implements the `RootStore` interface described below. In essence, `RootStore` encapsulates a `Committer` interface. `Committer` has a `Commit`, `SetPruning`, `GetPruning` functions which will be used for creating and removing snapshots. The `rootStore.Commit` function creates a new snapshot and increments the version on each call, and checks if it needs to remove old versions. We will need to update the SMT interface to implement the `Committer` interface. +NOTE: `Commit` must be called exactly once per block. Otherwise we risk going out of sync for the version number and block height. +NOTE: For the Cosmos SDK storage, we may consider splitting that interface into `Committer` and `PruningCommitter` - only the multiroot should implement `PruningCommitter` (cache and prefix store don't need pruning). + +Number of historical versions for `abci.RequestQuery` and state sync snapshots is part of a node configuration, not a chain configuration (configuration implied by the blockchain consensus). A configuration should allow to specify number of past blocks and number of past blocks modulo some number (eg: 100 past blocks and one snapshot every 100 blocks for past 2000 blocks). Archival nodes can keep all past versions. + +Pruning old snapshots is effectively done by a database. Whenever we update a record in `SC`, SMT won't update nodes - instead it creates new nodes on the update path, without removing the old one. Since we are snapshotting each block, we need to change that mechanism to immediately remove orphaned nodes from the database. This is a safe operation - snapshots will keep track of the records and make it available when accessing past versions. + +To manage the active snapshots we will either use a DB _max number of snapshots_ option (if available), or we will remove DB snapshots in the `EndBlocker`. The latter option can be done efficiently by identifying snapshots with block height and calling a store function to remove past versions. + +#### Accessing old state versions + +One of the functional requirements is to access old state. This is done through `abci.RequestQuery` structure. The version is specified by a block height (so we query for an object by a key `K` at block height `H`). The number of old versions supported for `abci.RequestQuery` is configurable. Accessing an old state is done by using available snapshots. +`abci.RequestQuery` doesn't need old state of `SC` unless the `prove=true` parameter is set. The SMT merkle proof must be included in the `abci.ResponseQuery` only if both `SC` and `SS` have a snapshot for requested version. + +Moreover, Cosmos SDK could provide a way to directly access a historical state. However, a state machine shouldn't do that - since the number of snapshots is configurable, it would lead to nondeterministic execution. + +We positively [validated](https://github.com/cosmos/cosmos-sdk/discussions/8297) a versioning and snapshot mechanism for querying old state with regards to the database we evaluated. + +### State Proofs + +For any object stored in State Store (SS), we have corresponding object in `SC`. A proof for object `V` identified by a key `K` is a branch of `SC`, where the path corresponds to the key `hash(K)`, and the leaf is `hash(K, V)`. + +### Rollbacks + +We need to be able to process transactions and roll-back state updates if a transaction fails. This can be done in the following way: during transaction processing, we keep all state change requests (writes) in a `CacheWrapper` abstraction (as it's done today). Once we finish the block processing, in the `Endblocker`, we commit a root store - at that time, all changes are written to the SMT and to the `SS` and a snapshot is created. + +### Committing to an object without saving it + +We identified use-cases, where modules will need to save an object commitment without storing an object itself. Sometimes clients are receiving complex objects, and they have no way to prove a correctness of that object without knowing the storage layout. For those use cases it would be easier to commit to the object without storing it directly. + +### Refactor MultiStore + +The Stargate `/store` implementation (store/v1) adds an additional layer in the SDK store construction - the `MultiStore` structure. The multistore exists to support the modularity of the Cosmos SDK - each module is using its own instance of IAVL, but in the current implementation, all instances share the same database. The latter indicates, however, that the implementation doesn't provide true modularity. Instead it causes problems related to race condition and atomic DB commits (see: [\#6370](https://github.com/cosmos/cosmos-sdk/issues/6370) and [discussion](https://github.com/cosmos/cosmos-sdk/discussions/8297#discussioncomment-757043)). + +We propose to reduce the multistore concept from the SDK, and to use a single instance of `SC` and `SS` in a `RootStore` object. To avoid confusion, we should rename the `MultiStore` interface to `RootStore`. The `RootStore` will have the following interface; the methods for configuring tracing and listeners are omitted for brevity. + +```go +// Used where read-only access to versions is needed. +type BasicRootStore interface { + Store + GetKVStore(StoreKey) KVStore + CacheRootStore() CacheRootStore +} + +// Used as the main app state, replacing CommitMultiStore. +type CommitRootStore interface { + BasicRootStore + Committer + Snapshotter + + GetVersion(uint64) (BasicRootStore, error) + SetInitialVersion(uint64) error + + ... // Trace and Listen methods +} + +// Replaces CacheMultiStore for branched state. +type CacheRootStore interface { + BasicRootStore + Write() + + ... // Trace and Listen methods +} + +// Example of constructor parameters for the concrete type. +type RootStoreConfig struct { + Upgrades *StoreUpgrades + InitialVersion uint64 + + ReservePrefix(StoreKey, StoreType) +} +``` + + + + +In contrast to `MultiStore`, `RootStore` doesn't allow to dynamically mount sub-stores or provide an arbitrary backing DB for individual sub-stores. + +NOTE: modules will be able to use a special commitment and their own DBs. For example: a module which will use ZK proofs for state can store and commit this proof in the `RootStore` (usually as a single record) and manage the specialized store privately or using the `SC` low level interface. + +#### Compatibility support + +To ease the transition to this new interface for users, we can create a shim which wraps a `CommitMultiStore` but provides a `CommitRootStore` interface, and expose functions to safely create and access the underlying `CommitMultiStore`. + +The new `RootStore` and supporting types can be implemented in a `store/v2alpha1` package to avoid breaking existing code. + +#### Merkle Proofs and IBC + +Currently, an IBC (v1.0) Merkle proof path consists of two elements (`["", ""]`), with each key corresponding to a separate proof. These are each verified according to individual [ICS-23 specs](https://github.com/cosmos/ibc-go/blob/f7051429e1cf833a6f65d51e6c3df1609290a549/modules/core/23-commitment/types/merkle.go#L17), and the result hash of each step is used as the committed value of the next step, until a root commitment hash is obtained. +The root hash of the proof for `""` is hashed with the `""` to validate against the App Hash. + +This is not compatible with the `RootStore`, which stores all records in a single Merkle tree structure, and won't produce separate proofs for the store- and record-key. Ideally, the store-key component of the proof could just be omitted, and updated to use a "no-op" spec, so only the record-key is used. However, because the IBC verification code hardcodes the `"ibc"` prefix and applies it to the SDK proof as a separate element of the proof path, this isn't possible without a breaking change. Breaking this behavior would severely impact the Cosmos ecosystem which already widely adopts the IBC module. Requesting an update of the IBC module across the chains is a time consuming effort and not easily feasible. + +As a workaround, the `RootStore` will have to use two separate SMTs (they could use the same underlying DB): one for IBC state and one for everything else. A simple Merkle map that reference these SMTs will act as a Merkle Tree to create a final App hash. The Merkle map is not stored in a DBs - it's constructed in the runtime. The IBC substore key must be `"ibc"`. + +The workaround can still guarantee atomic syncs: the [proposed DB backends](#evaluated-kv-databases) support atomic transactions and efficient rollbacks, which will be used in the commit phase. + +The presented workaround can be used until the IBC module is fully upgraded to supports single-element commitment proofs. + +### Optimization: compress module key prefixes + +We consider a compression of prefix keys by creating a mapping from module key to an integer, and serializing the integer using varint coding. Varint coding assures that different values don't have common byte prefix. For Merkle Proofs we can't use prefix compression - so it should only apply for the `SS` keys. Moreover, the prefix compression should be only applied for the module namespace. More precisely: + +* each module has it's own namespace; +* when accessing a module namespace we create a KVStore with embedded prefix; +* that prefix will be compressed only when accessing and managing `SS`. + +We need to assure that the codes won't change. We can fix the mapping in a static variable (provided by an app) or SS state under a special key. + +TODO: need to make decision about the key compression. + +## Optimization: SS key compression + +Some objects may be saved with key, which contains a Protobuf message type. Such keys are long. We could save a lot of space if we can map Protobuf message types in varints. + +TODO: finalize this or move to another ADR. + +## Migration + +Using the new store will require a migration. 2 Migrations are proposed: + +1. Genesis export -- it will reset the blockchain history. +2. In place migration: we can reuse `UpgradeKeeper.SetUpgradeHandler` to provide the migration logic: + +```go +app.UpgradeKeeper.SetUpgradeHandler("adr-40", func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + + storev2.Migrate(iavlstore, v2.store) + + // RunMigrations returns the VersionMap + // with the updated module ConsensusVersions + return app.mm.RunMigrations(ctx, vm) +}) +``` + +The `Migrate` function will read all entries from a store/v1 DB and save them to the AD-40 combined KV store. +Cache layer should not be used and the operation must finish with a single Commit call. + +Inserting records to the `SC` (SMT) component is the bottleneck. Unfortunately SMT doesn't support batch transactions. +Adding batch transactions to `SC` layer is considered as a feature after the main release. + +## Consequences + +### Backwards Compatibility + +This ADR doesn't introduce any Cosmos SDK level API changes. + +We change the storage layout of the state machine, a storage hard fork and network upgrade is required to incorporate these changes. SMT provides a merkle proof functionality, however it is not compatible with ICS23. Updating the proofs for ICS23 compatibility is required. + +### Positive + +* Decoupling state from state commitment introduce better engineering opportunities for further optimizations and better storage patterns. +* Performance improvements. +* Joining SMT based camp which has wider and proven adoption than IAVL. Example projects which decided on SMT: Ethereum2, Diem (Libra), Trillan, Tezos, Celestia. +* Multistore removal fixes a longstanding issue with the current MultiStore design. +* Simplifies merkle proofs - all modules, except IBC, have only one pass for merkle proof. + +### Negative + +* Storage migration +* LL SMT doesn't support pruning - we will need to add and test that functionality. +* `SS` keys will have an overhead of a key prefix. This doesn't impact `SC` because all keys in `SC` have same size (they are hashed). + +### Neutral + +* Deprecating IAVL, which is one of the core proposals of Cosmos Whitepaper. + +## Alternative designs + +Most of the alternative designs were evaluated in [state commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h). + +Ethereum research published [Verkle Trie](https://dankradfeist.de/ethereum/2021/06/18/verkle-trie-for-eth1.html) - an idea of combining polynomial commitments with merkle tree in order to reduce the tree height. This concept has a very good potential, but we think it's too early to implement it. The current, SMT based design could be easily updated to the Verkle Trie once other research implement all necessary libraries. The main advantage of the design described in this ADR is the separation of state commitments from the data storage and designing a more powerful interface. + +## Further Discussions + +### Evaluated KV Databases + +We verified existing databases KV databases for evaluating snapshot support. The following databases provide efficient snapshot mechanism: Badger, RocksDB, [Pebble](https://github.com/cockroachdb/pebble). Databases which don't provide such support or are not production ready: boltdb, leveldb, goleveldb, membdb, lmdb. + +### RDBMS + +Use of RDBMS instead of simple KV store for state. Use of RDBMS will require a Cosmos SDK API breaking change (`KVStore` interface) and will allow better data extraction and indexing solutions. Instead of saving an object as a single blob of bytes, we could save it as record in a table in the state storage layer, and as a `hash(key, protobuf(object))` in the SMT as outlined above. To verify that an object registered in RDBMS is same as the one committed to SMT, one will need to load it from RDBMS, marshal using protobuf, hash and do SMT search. + +### Off Chain Store + +We were discussing use case where modules can use a support database, which is not automatically committed. Module will responsible for having a sound storage model and can optionally use the feature discussed in __Committing to an object without saving it_ section. + +## References + +* [IAVL What's Next?](https://github.com/cosmos/cosmos-sdk/issues/7100) +* [IAVL overview](https://docs.google.com/document/d/16Z_hW2rSAmoyMENO-RlAhQjAG3mSNKsQueMnKpmcBv0/edit#heading=h.yd2th7x3o1iv) of it's state v0.15 +* [State commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h) +* [Celestia (LazyLedger) SMT](https://github.com/lazyledger/smt) +* Facebook Diem (Libra) SMT [design](https://developers.diem.com/papers/jellyfish-merkle-tree/2021-01-14.pdf) +* [Trillian Revocation Transparency](https://github.com/google/trillian/blob/master/docs/papers/RevocationTransparency.pdf), [Trillian Verifiable Data Structures](https://github.com/google/trillian/blob/master/docs/papers/VerifiableDataStructures.pdf). +* Design and implementation [discussion](https://github.com/cosmos/cosmos-sdk/discussions/8297). +* [How to Upgrade IBC Chains and their Clients](https://github.com/cosmos/ibc-go/blob/main/docs/ibc/upgrades/quick-guide.md) +* [ADR-40 Effect on IBC](https://github.com/cosmos/ibc-go/discussions/256) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-041-in-place-store-migrations.md b/versioned_docs/version-0.46/integrate/architecture/adr-041-in-place-store-migrations.md new file mode 100644 index 000000000..b0ff8e4e7 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-041-in-place-store-migrations.md @@ -0,0 +1,167 @@ +# ADR 041: In-Place Store Migrations + +## Changelog + +* 17.02.2021: Initial Draft + +## Status + +Accepted + +## Abstract + +This ADR introduces a mechanism to perform in-place state store migrations during chain software upgrades. + +## Context + +When a chain upgrade introduces state-breaking changes inside modules, the current procedure consists of exporting the whole state into a JSON file (via the `simd export` command), running migration scripts on the JSON file (`simd migrate` command), clearing the stores (`simd unsafe-reset-all` command), and starting a new chain with the migrated JSON file as new genesis (optionally with a custom initial block height). An example of such a procedure can be seen [in the Cosmos Hub 3->4 migration guide](https://github.com/cosmos/gaia/blob/v4.0.3/docs/migration/cosmoshub-3.md#upgrade-procedure). + +This procedure is cumbersome for multiple reasons: + +* The procedure takes time. It can take hours to run the `export` command, plus some additional hours to run `InitChain` on the fresh chain using the migrated JSON. +* The exported JSON file can be heavy (~100MB-1GB), making it difficult to view, edit and transfer, which in turn introduces additional work to solve these problems (such as [streaming genesis](https://github.com/cosmos/cosmos-sdk/issues/6936)). + +## Decision + +We propose a migration procedure based on modifying the KV store in-place without involving the JSON export-process-import flow described above. + +### Module `ConsensusVersion` + +We introduce a new method on the `AppModule` interface: + +```go +type AppModule interface { + // --snip-- + ConsensusVersion() uint64 +} +``` + +This methods returns an `uint64` which serves as state-breaking version of the module. It MUST be incremented on each consensus-breaking change introduced by the module. To avoid potential errors with default values, the initial version of a module MUST be set to 1. In the Cosmos SDK, version 1 corresponds to the modules in the v0.41 series. + +### Module-Specific Migration Functions + +For each consensus-breaking change introduced by the module, a migration script from ConsensusVersion `N` to version `N+1` MUST be registered in the `Configurator` using its newly-added `RegisterMigration` method. All modules receive a reference to the configurator in their `RegisterServices` method on `AppModule`, and this is where the migration functions should be registered. The migration functions should be registered in increasing order. + +```go +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) + // etc. +} +``` + +For example, if the new ConsensusVersion of a module is `N` , then `N-1` migration functions MUST be registered in the configurator. + +In the Cosmos SDK, the migration functions are handled by each module's keeper, because the keeper holds the `sdk.StoreKey` used to perform in-place store migrations. To not overload the keeper, a `Migrator` wrapper is used by each module to handle the migration functions: + +```go +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + BaseKeeper +} +``` + +Migration functions should live inside the `migrations/` folder of each module, and be called by the Migrator's methods. We propose the format `Migrate{M}to{N}` for method names. + +```go +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v043bank.MigrateStore(ctx, m.keeper.storeKey) // v043bank is package `x/bank/migrations/v043`. +} +``` + +Each module's migration functions are specific to the module's store evolutions, and are not described in this ADR. An example of x/bank store key migrations after the introduction of ADR-028 length-prefixed addresses can be seen in this [store.go code](https://github.com/cosmos/cosmos-sdk/blob/36f68eb9e041e20a5bb47e216ac5eb8b91f95471/x/bank/legacy/v043/store.go#L41-L62). + +### Tracking Module Versions in `x/upgrade` + +We introduce a new prefix store in `x/upgrade`'s store. This store will track each module's current version, it can be modelized as a `map[string]uint64` of module name to module ConsensusVersion, and will be used when running the migrations (see next section for details). The key prefix used is `0x1`, and the key/value format is: + +```text +0x2 | {bytes(module_name)} => BigEndian(module_consensus_version) +``` + +The initial state of the store is set from `app.go`'s `InitChainer` method. + +The UpgradeHandler signature needs to be updated to take a `VersionMap`, as well as return an upgraded `VersionMap` and an error: + +```diff +- type UpgradeHandler func(ctx sdk.Context, plan Plan) ++ type UpgradeHandler func(ctx sdk.Context, plan Plan, versionMap VersionMap) (VersionMap, error) +``` + +To apply an upgrade, we query the `VersionMap` from the `x/upgrade` store and pass it into the handler. The handler runs the actual migration functions (see next section), and if successful, returns an updated `VersionMap` to be stored in state. + +```diff +func (k UpgradeKeeper) ApplyUpgrade(ctx sdk.Context, plan types.Plan) { + // --snip-- +- handler(ctx, plan) ++ updatedVM, err := handler(ctx, plan, k.GetModuleVersionMap(ctx)) // k.GetModuleVersionMap() fetches the VersionMap stored in state. ++ if err != nil { ++ return err ++ } ++ ++ // Set the updated consensus versions to state ++ k.SetModuleVersionMap(ctx, updatedVM) +} +``` + +A gRPC query endpoint to query the `VersionMap` stored in `x/upgrade`'s state will also be added, so that app developers can double-check the `VersionMap` before the upgrade handler runs. + +### Running Migrations + +Once all the migration handlers are registered inside the configurator (which happens at startup), running migrations can happen by calling the `RunMigrations` method on `module.Manager`. This function will loop through all modules, and for each module: + +* Get the old ConsensusVersion of the module from its `VersionMap` argument (let's call it `M`). +* Fetch the new ConsensusVersion of the module from the `ConsensusVersion()` method on `AppModule` (call it `N`). +* If `N>M`, run all registered migrations for the module sequentially `M -> M+1 -> M+2...` until `N`. + * There is a special case where there is no ConsensusVersion for the module, as this means that the module has been newly added during the upgrade. In this case, no migration function is run, and the module's current ConsensusVersion is saved to `x/upgrade`'s store. + +If a required migration is missing (e.g. if it has not been registered in the `Configurator`), then the `RunMigrations` function will error. + +In practice, the `RunMigrations` method should be called from inside an `UpgradeHandler`. + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + return app.mm.RunMigrations(ctx, vm) +}) +``` + +Assuming a chain upgrades at block `n`, the procedure should run as follows: + +* the old binary will halt in `BeginBlock` when starting block `N`. In its store, the ConsensusVersions of the old binary's modules are stored. +* the new binary will start at block `N`. The UpgradeHandler is set in the new binary, so will run at `BeginBlock` of the new binary. Inside `x/upgrade`'s `ApplyUpgrade`, the `VersionMap` will be retrieved from the (old binary's) store, and passed into the `RunMigrations` functon, migrating all module stores in-place before the modules' own `BeginBlock`s. + +## Consequences + +### Backwards Compatibility + +This ADR introduces a new method `ConsensusVersion()` on `AppModule`, which all modules need to implement. It also alters the UpgradeHandler function signature. As such, it is not backwards-compatible. + +While modules MUST register their migration functions when bumping ConsensusVersions, running those scripts using an upgrade handler is optional. An application may perfectly well decide to not call the `RunMigrations` inside its upgrade handler, and continue using the legacy JSON migration path. + +### Positive + +* Perform chain upgrades without manipulating JSON files. +* While no benchmark has been made yet, it is probable that in-place store migrations will take less time than JSON migrations. The main reason supporting this claim is that both the `simd export` command on the old binary and the `InitChain` function on the new binary will be skipped. + +### Negative + +* Module developers MUST correctly track consensus-breaking changes in their modules. If a consensus-breaking change is introduced in a module without its corresponding `ConsensusVersion()` bump, then the `RunMigrations` function won't detect the migration, and the chain upgrade might be unsuccessful. Documentation should clearly reflect this. + +### Neutral + +* The Cosmos SDK will continue to support JSON migrations via the existing `simd export` and `simd migrate` commands. +* The current ADR does not allow creating, renaming or deleting stores, only modifying existing store keys and values. The Cosmos SDK already has the `StoreLoader` for those operations. + +## Further Discussions + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/discussions/8429 +* Implementation of `ConsensusVersion` and `RunMigrations`: https://github.com/cosmos/cosmos-sdk/pull/8485 +* Issue discussing `x/upgrade` design: https://github.com/cosmos/cosmos-sdk/issues/8514 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-042-group-module.md b/versioned_docs/version-0.46/integrate/architecture/adr-042-group-module.md new file mode 100644 index 000000000..74ba17f43 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-042-group-module.md @@ -0,0 +1,279 @@ +# ADR 042: Group Module + +## Changelog + +* 2020/04/09: Initial Draft + +## Status + +Draft + +## Abstract + +This ADR defines the `x/group` module which allows the creation and management of on-chain multi-signature accounts and enables voting for message execution based on configurable decision policies. + +## Context + +The legacy amino multi-signature mechanism of the Cosmos SDK has certain limitations: + +* Key rotation is not possible, although this can be solved with [account rekeying](adr-034-account-rekeying.md). +* Thresholds can't be changed. +* UX is cumbersome for non-technical users ([#5661](https://github.com/cosmos/cosmos-sdk/issues/5661)). +* It requires `legacy_amino` sign mode ([#8141](https://github.com/cosmos/cosmos-sdk/issues/8141)). + +While the group module is not meant to be a total replacement for the current multi-signature accounts, it provides a solution to the limitations described above, with a more flexible key management system where keys can be added, updated or removed, as well as configurable thresholds. +It's meant to be used with other access control modules such as [`x/feegrant`](./adr-029-fee-grant-module.md) ans [`x/authz`](adr-030-authz-module.md) to simplify key management for individuals and organizations. + +The proof of concept of the group module can be found in https://github.com/regen-network/regen-ledger/tree/master/proto/regen/group/v1alpha1 and https://github.com/regen-network/regen-ledger/tree/master/x/group. + +## Decision + +We propose merging the `x/group` module with its supporting [ORM/Table Store package](https://github.com/regen-network/regen-ledger/tree/master/orm) ([#7098](https://github.com/cosmos/cosmos-sdk/issues/7098)) into the Cosmos SDK and continuing development here. There will be a dedicated ADR for the ORM package. + +### Group + +A group is a composition of accounts with associated weights. It is not +an account and doesn't have a balance. It doesn't in and of itself have any +sort of voting or decision weight. +Group members can create proposals and vote on them through group accounts using different decision policies. + +It has an `admin` account which can manage members in the group, update the group +metadata and set a new admin. + +```proto +message GroupInfo { + + // group_id is the unique ID of this group. + uint64 group_id = 1; + + // admin is the account address of the group's admin. + string admin = 2; + + // metadata is any arbitrary metadata to attached to the group. + bytes metadata = 3; + + // version is used to track changes to a group's membership structure that + // would break existing proposals. Whenever a member weight has changed, + // or any member is added or removed, the version is incremented and will + // invalidate all proposals from older versions. + uint64 version = 4; + + // total_weight is the sum of the group members' weights. + string total_weight = 5; +} +``` + +```proto +message GroupMember { + + // group_id is the unique ID of the group. + uint64 group_id = 1; + + // member is the member data. + Member member = 2; +} + +// Member represents a group member with an account address, +// non-zero weight and metadata. +message Member { + + // address is the member's account address. + string address = 1; + + // weight is the member's voting weight that should be greater than 0. + string weight = 2; + + // metadata is any arbitrary metadata to attached to the member. + bytes metadata = 3; +} +``` + +### Group Account + +A group account is an account associated with a group and a decision policy. +A group account does have a balance. + +Group accounts are abstracted from groups because a single group may have +multiple decision policies for different types of actions. Managing group +membership separately from decision policies results in the least overhead +and keeps membership consistent across different policies. The pattern that +is recommended is to have a single master group account for a given group, +and then to create separate group accounts with different decision policies +and delegate the desired permissions from the master account to +those "sub-accounts" using the [`x/authz` module](adr-030-authz-module.md). + +```proto +message GroupAccountInfo { + + // address is the group account address. + string address = 1; + + // group_id is the ID of the Group the GroupAccount belongs to. + uint64 group_id = 2; + + // admin is the account address of the group admin. + string admin = 3; + + // metadata is any arbitrary metadata of this group account. + bytes metadata = 4; + + // version is used to track changes to a group's GroupAccountInfo structure that + // invalidates active proposal from old versions. + uint64 version = 5; + + // decision_policy specifies the group account's decision policy. + google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "DecisionPolicy"]; +} +``` + +Similarly to a group admin, a group account admin can update its metadata, decision policy or set a new group account admin. + +A group account can also be an admin or a member of a group. +For instance, a group admin could be another group account which could "elects" the members or it could be the same group that elects itself. + +### Decision Policy + +A decision policy is the mechanism by which members of a group can vote on +proposals. + +All decision policies should have a minimum and maximum voting window. +The minimum voting window is the minimum duration that must pass in order +for a proposal to potentially pass, and it may be set to 0. The maximum voting +window is the maximum time that a proposal may be voted on and executed if +it reached enough support before it is closed. +Both of these values must be less than a chain-wide max voting window parameter. + +We define the `DecisionPolicy` interface that all decision policies must implement: + +```go +type DecisionPolicy interface { + codec.ProtoMarshaler + + ValidateBasic() error + GetTimeout() types.Duration + Allow(tally Tally, totalPower string, votingDuration time.Duration) (DecisionPolicyResult, error) + Validate(g GroupInfo) error +} + +type DecisionPolicyResult struct { + Allow bool + Final bool +} +``` + +#### Threshold decision policy + +A threshold decision policy defines a minimum support votes (_yes_), based on a tally +of voter weights, for a proposal to pass. For +this decision policy, abstain and veto are treated as no support (_no_). + +```proto +message ThresholdDecisionPolicy { + + // threshold is the minimum weighted sum of support votes for a proposal to succeed. + string threshold = 1; + + // voting_period is the duration from submission of a proposal to the end of voting period + // Within this period, votes and exec messages can be submitted. + google.protobuf.Duration voting_period = 2 [(gogoproto.nullable) = false]; +} +``` + +### Proposal + +Any member of a group can submit a proposal for a group account to decide upon. +A proposal consists of a set of `sdk.Msg`s that will be executed if the proposal +passes as well as any metadata associated with the proposal. These `sdk.Msg`s get validated as part of the `Msg/CreateProposal` request validation. They should also have their signer set as the group account. + +Internally, a proposal also tracks: + +* its current `Status`: submitted, closed or aborted +* its `Result`: unfinalized, accepted or rejected +* its `VoteState` in the form of a `Tally`, which is calculated on new votes and when executing the proposal. + +```proto +// Tally represents the sum of weighted votes. +message Tally { + option (gogoproto.goproto_getters) = false; + + // yes_count is the weighted sum of yes votes. + string yes_count = 1; + + // no_count is the weighted sum of no votes. + string no_count = 2; + + // abstain_count is the weighted sum of abstainers. + string abstain_count = 3; + + // veto_count is the weighted sum of vetoes. + string veto_count = 4; +} +``` + +### Voting + +Members of a group can vote on proposals. There are four choices to choose while voting - yes, no, abstain and veto. Not +all decision policies will support them. Votes can contain some optional metadata. +In the current implementation, the voting window begins as soon as a proposal +is submitted. + +Voting internally updates the proposal `VoteState` as well as `Status` and `Result` if needed. + +### Executing Proposals + +Proposals will not be automatically executed by the chain in this current design, +but rather a user must submit a `Msg/Exec` transaction to attempt to execute the +proposal based on the current votes and decision policy. A future upgrade could +automate this and have the group account (or a fee granter) pay. + +#### Changing Group Membership + +In the current implementation, updating a group or a group account after submitting a proposal will make it invalid. It will simply fail if someone calls `Msg/Exec` and will eventually be garbage collected. + +### Notes on current implementation + +This section outlines the current implementation used in the proof of concept of the group module but this could be subject to changes and iterated on. + +#### ORM + +The [ORM package](https://github.com/cosmos/cosmos-sdk/discussions/9156) defines tables, sequences and secondary indexes which are used in the group module. + +Groups are stored in state as part of a `groupTable`, the `group_id` being an auto-increment integer. Group members are stored in a `groupMemberTable`. + +Group accounts are stored in a `groupAccountTable`. The group account address is generated based on an auto-increment integer which is used to derive the group module `RootModuleKey` into a `DerivedModuleKey`, as stated in [ADR-033](adr-033-protobuf-inter-module-comm.md#modulekeys-and-moduleids). The group account is added as a new `ModuleAccount` through `x/auth`. + +Proposals are stored as part of the `proposalTable` using the `Proposal` type. The `proposal_id` is an auto-increment integer. + +Votes are stored in the `voteTable`. The primary key is based on the vote's `proposal_id` and `voter` account address. + +#### ADR-033 to route proposal messages + +Inter-module communication introduced by [ADR-033](adr-033-protobuf-inter-module-comm.md) can be used to route a proposal's messages using the `DerivedModuleKey` corresponding to the proposal's group account. + +## Consequences + +### Positive + +* Improved UX for multi-signature accounts allowing key rotation and custom decision policies. + +### Negative + +### Neutral + +* It uses ADR 033 so it will need to be implemented within the Cosmos SDK, but this doesn't imply necessarily any large refactoring of existing Cosmos SDK modules. +* The current implementation of the group module uses the ORM package. + +## Further Discussions + +* Convergence of `/group` and `x/gov` as both support proposals and voting: https://github.com/cosmos/cosmos-sdk/discussions/9066 +* `x/group` possible future improvements: + * Execute proposals on submission (https://github.com/regen-network/regen-ledger/issues/288) + * Withdraw a proposal (https://github.com/regen-network/cosmos-modules/issues/41) + * Make `Tally` more flexible and support non-binary choices + +## References + +* Initial specification: + * https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#group-module + * [#5236](https://github.com/cosmos/cosmos-sdk/pull/5236) +* Proposal to add `x/group` into the Cosmos SDK: [#7633](https://github.com/cosmos/cosmos-sdk/issues/7633) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-043-nft-module.md b/versioned_docs/version-0.46/integrate/architecture/adr-043-nft-module.md new file mode 100644 index 000000000..7d4498bf8 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-043-nft-module.md @@ -0,0 +1,340 @@ +# ADR 43: NFT Module + +## Changelog + +* 2021-05-01: Initial Draft +* 2021-07-02: Review updates + +## Status + +PROPOSED + +## Abstract + +This ADR defines the `x/nft` module which is a generic implementation of NFTs, roughly "compatible" with ERC721. **Applications using the `x/nft` module must implement the following functions**: + +* `MsgNewClass` - Receive the user's request to create a class, and call the `NewClass` of the `x/nft` module. +* `MsgUpdateClass` - Receive the user's request to update a class, and call the `UpdateClass` of the `x/nft` module. +* `MsgMintNFT` - Receive the user's request to mint a nft, and call the `MintNFT` of the `x/nft` module. +* `BurnNFT` - Receive the user's request to burn a nft, and call the `BurnNFT` of the `x/nft` module. +* `UpdateNFT` - Receive the user's request to update a nft, and call the `UpdateNFT` of the `x/nft` module. + +## Context + +NFTs are more than just crypto art, which is very helpful for accruing value to the Cosmos ecosystem. As a result, Cosmos Hub should implement NFT functions and enable a unified mechanism for storing and sending the ownership representative of NFTs as discussed in https://github.com/cosmos/cosmos-sdk/discussions/9065. + +As discussed in [#9065](https://github.com/cosmos/cosmos-sdk/discussions/9065), several potential solutions can be considered: + +* irismod/nft and modules/incubator/nft +* CW721 +* DID NFTs +* interNFT + +Since functions/use cases of NFTs are tightly connected with their logic, it is almost impossible to support all the NFTs' use cases in one Cosmos SDK module by defining and implementing different transaction types. + +Considering generic usage and compatibility of interchain protocols including IBC and Gravity Bridge, it is preferred to have a generic NFT module design which handles the generic NFTs logic. +This design idea can enable composability that application-specific functions should be managed by other modules on Cosmos Hub or on other Zones by importing the NFT module. + +The current design is based on the work done by [IRISnet team](https://github.com/irisnet/irismod/tree/master/modules/nft) and an older implementation in the [Cosmos repository](https://github.com/cosmos/modules/tree/master/incubator/nft). + +## Decision + +We create a `x/nft` module, which contains the following functionality: + +* Store NFTs and track their ownership. +* Expose `Keeper` interface for composing modules to transfer, mint and burn NFTs. +* Expose external `Message` interface for users to transfer ownership of their NFTs. +* Query NFTs and their supply information. + +The proposed module is a base module for NFT app logic. It's goal it to provide a common layer for storage, basic transfer functionality and IBC. The module should not be used as a standalone. +Instead an app should create a specialized module to handle app specific logic (eg: NFT ID construction, royalty), user level minting and burning. Moreover an app specialized module should handle auxiliary data to support the app logic (eg indexes, ORM, business data). + +All data carried over IBC must be part of the `NFT` or `Class` type described below. The app specific NFT data should be encoded in `NFT.data` for cross-chain integrity. Other objects related to NFT, which are not important for integrity can be part of the app specific module. + +### Types + +We propose two main types: + +* `Class` -- describes NFT class. We can think about it as a smart contract address. +* `NFT` -- object representing unique, non fungible asset. Each NFT is associated with a Class. + +#### Class + +NFT **Class** is comparable to an ERC-721 smart contract (provides description of a smart contract), under which a collection of NFTs can be created and managed. + +```protobuf +message Class { + string id = 1; + string name = 2; + string symbol = 3; + string description = 4; + string uri = 5; + string uri_hash = 6; + google.protobuf.Any data = 7; +} +``` + +* `id` is an alphanumeric identifier of the NFT class; it is used as the primary index for storing the class; _required_ +* `name` is a descriptive name of the NFT class; _optional_ +* `symbol` is the symbol usually shown on exchanges for the NFT class; _optional_ +* `description` is a detailed description of the NFT class; _optional_ +* `uri` is a URI for the class metadata stored off chain. It should be a JSON file that contains metadata about the NFT class and NFT data schema ([OpenSea example](https://docs.opensea.io/docs/contract-level-metadata)); _optional_ +* `uri_hash` is a hash of the document pointed by uri; _optional_ +* `data` is app specific metadata of the class; _optional_ + +#### NFT + +We define a general model for `NFT` as follows. + +```protobuf +message NFT { + string class_id = 1; + string id = 2; + string uri = 3; + string uri_hash = 4; + google.protobuf.Any data = 10; +} +``` + +* `class_id` is the identifier of the NFT class where the NFT belongs; _required_,`[a-zA-Z][a-zA-Z0-9/:-]{2,100}` +* `id` is an alphanumeric identifier of the NFT, unique within the scope of its class. It is specified by the creator of the NFT and may be expanded to use DID in the future. `class_id` combined with `id` uniquely identifies an NFT and is used as the primary index for storing the NFT; _required_,`[a-zA-Z][a-zA-Z0-9/:-]{2,100}` + + ```text + {class_id}/{id} --> NFT (bytes) + ``` + +* `uri` is a URI for the NFT metadata stored off chain. Should point to a JSON file that contains metadata about this NFT (Ref: [ERC721 standard and OpenSea extension](https://docs.opensea.io/docs/metadata-standards)); _required_ +* `uri_hash` is a hash of the document pointed by uri; _optional_ +* `data` is an app specific data of the NFT. CAN be used by composing modules to specify additional properties of the NFT; _optional_ + +This ADR doesn't specify values that `data` can take; however, best practices recommend upper-level NFT modules clearly specify their contents. Although the value of this field doesn't provide the additional context required to manage NFT records, which means that the field can technically be removed from the specification, the field's existence allows basic informational/UI functionality. + +### `Keeper` Interface + +```go +type Keeper interface { + NewClass(class Class) + UpdateClass(class Class) + + Mint(nft NFT,receiver sdk.AccAddress) // updates totalSupply + Burn(classId string, nftId string) // updates totalSupply + Update(nft NFT) + Transfer(classId string, nftId string, receiver sdk.AccAddress) + + GetClass(classId string) Class + GetClasses() []Class + + GetNFT(classId string, nftId string) NFT + GetNFTsOfClassByOwner(classId string, owner sdk.AccAddress) []NFT + GetNFTsOfClass(classId string) []NFT + + GetOwner(classId string, nftId string) sdk.AccAddress + GetBalance(classId string, owner sdk.AccAddress) uint64 + GetTotalSupply(classId string) uint64 +} +``` + +Other business logic implementations should be defined in composing modules that import `x/nft` and use its `Keeper`. + +### `Msg` Service + +```protobuf +service Msg { + rpc Send(MsgSend) returns (MsgSendResponse); +} + +message MsgSend { + string class_id = 1; + string id = 2; + string sender = 3; + string reveiver = 4; +} +message MsgSendResponse {} +``` + +`MsgSend` can be used to transfer the ownership of an NFT to another address. + +The implementation outline of the server is as follows: + +```go +type msgServer struct{ + k Keeper +} + +func (m msgServer) Send(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { + // check current ownership + assertEqual(msg.Sender, m.k.GetOwner(msg.ClassId, msg.Id)) + + // transfer ownership + m.k.Transfer(msg.ClassId, msg.Id, msg.Receiver) + + return &types.MsgSendResponse{}, nil +} +``` + +The query service methods for the `x/nft` module are: + +```proto +service Query { + // Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721 + rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/balance/{owner}/{class_id}"; + } + + // Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721 + rpc Owner(QueryOwnerRequest) returns (QueryOwnerResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/owner/{class_id}/{id}"; + } + + // Supply queries the number of NFTs from the given class, same as totalSupply of ERC721. + rpc Supply(QuerySupplyRequest) returns (QuerySupplyResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/supply/{class_id}"; + } + + // NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in ERC721Enumerable + rpc NFTs(QueryNFTsRequest) returns (QueryNFTsResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts"; + } + + // NFT queries an NFT based on its class and id. + rpc NFT(QueryNFTRequest) returns (QueryNFTResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts/{class_id}/{id}"; + } + + // Class queries an NFT class based on its id + rpc Class(QueryClassRequest) returns (QueryClassResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes/{class_id}"; + } + + // Classes queries all NFT classes + rpc Classes(QueryClassesRequest) returns (QueryClassesResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes"; + } +} + +// QueryBalanceRequest is the request type for the Query/Balance RPC method +message QueryBalanceRequest { + string class_id = 1; + string owner = 2; +} + +// QueryBalanceResponse is the response type for the Query/Balance RPC method +message QueryBalanceResponse { + uint64 amount = 1; +} + +// QueryOwnerRequest is the request type for the Query/Owner RPC method +message QueryOwnerRequest { + string class_id = 1; + string id = 2; +} + +// QueryOwnerResponse is the response type for the Query/Owner RPC method +message QueryOwnerResponse { + string owner = 1; +} + +// QuerySupplyRequest is the request type for the Query/Supply RPC method +message QuerySupplyRequest { + string class_id = 1; +} + +// QuerySupplyResponse is the response type for the Query/Supply RPC method +message QuerySupplyResponse { + uint64 amount = 1; +} + +// QueryNFTstRequest is the request type for the Query/NFTs RPC method +message QueryNFTsRequest { + string class_id = 1; + string owner = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +// QueryNFTsResponse is the response type for the Query/NFTs RPC methods +message QueryNFTsResponse { + repeated cosmos.nft.v1beta1.NFT nfts = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryNFTRequest is the request type for the Query/NFT RPC method +message QueryNFTRequest { + string class_id = 1; + string id = 2; +} + +// QueryNFTResponse is the response type for the Query/NFT RPC method +message QueryNFTResponse { + cosmos.nft.v1beta1.NFT nft = 1; +} + +// QueryClassRequest is the request type for the Query/Class RPC method +message QueryClassRequest { + string class_id = 1; +} + +// QueryClassResponse is the response type for the Query/Class RPC method +message QueryClassResponse { + cosmos.nft.v1beta1.Class class = 1; +} + +// QueryClassesRequest is the request type for the Query/Classes RPC method +message QueryClassesRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryClassesResponse is the response type for the Query/Classes RPC method +message QueryClassesResponse { + repeated cosmos.nft.v1beta1.Class classes = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} +``` + +### Interoperability + +Interoperability is all about reusing assets between modules and chains. The former one is achieved by ADR-33: Protobuf client - server communication. At the time of writing ADR-33 is not finalized. The latter is achieved by IBC. Here we will focus on the IBC side. +IBC is implemented per module. Here, we aligned that NFTs will be recorded and managed in the x/nft. This requires creation of a new IBC standard and implementation of it. + +For IBC interoperability, NFT custom modules MUST use the NFT object type understood by the IBC client. So, for x/nft interoperability, custom NFT implementations (example: x/cryptokitty) should use the canonical x/nft module and proxy all NFT balance keeping functionality to x/nft or else re-implement all functionality using the NFT object type understood by the IBC client. In other words: x/nft becomes the standard NFT registry for all Cosmos NFTs (example: x/cryptokitty will register a kitty NFT in x/nft and use x/nft for book keeping). This was [discussed](https://github.com/cosmos/cosmos-sdk/discussions/9065#discussioncomment-873206) in the context of using x/bank as a general asset balance book. Not using x/nft will require implementing another module for IBC. + +## Consequences + +### Backward Compatibility + +No backward incompatibilities. + +### Forward Compatibility + +This specification conforms to the ERC-721 smart contract specification for NFT identifiers. Note that ERC-721 defines uniqueness based on (contract address, uint256 tokenId), and we conform to this implicitly because a single module is currently aimed to track NFT identifiers. Note: use of the (mutable) data field to determine uniqueness is not safe.s + +### Positive + +* NFT identifiers available on Cosmos Hub. +* Ability to build different NFT modules for the Cosmos Hub, e.g., ERC-721. +* NFT module which supports interoperability with IBC and other cross-chain infrastructures like Gravity Bridge + +### Negative + +* New IBC app is required for x/nft +* CW721 adapter is required + +### Neutral + +* Other functions need more modules. For example, a custody module is needed for NFT trading function, a collectible module is needed for defining NFT properties. + +## Further Discussions + +For other kinds of applications on the Hub, more app-specific modules can be developed in the future: + +* `x/nft/custody`: custody of NFTs to support trading functionality. +* `x/nft/marketplace`: selling and buying NFTs using sdk.Coins. +* `x/fractional`: a module to split an ownership of an asset (NFT or other assets) for multiple stakeholder. `x/group` should work for most of the cases. + +Other networks in the Cosmos ecosystem could design and implement their own NFT modules for specific NFT applications and use cases. + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/discussions/9065 +* x/nft: initialize module: https://github.com/cosmos/cosmos-sdk/pull/9174 +* [ADR 033](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-033-protobuf-inter-module-comm.md) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-044-protobuf-updates-guidelines.md b/versioned_docs/version-0.46/integrate/architecture/adr-044-protobuf-updates-guidelines.md new file mode 100644 index 000000000..6c0b33bc8 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-044-protobuf-updates-guidelines.md @@ -0,0 +1,138 @@ +# ADR 044: Guidelines for Updating Protobuf Definitions + +## Changelog + +* 28.06.2021: Initial Draft +* 02.12.2021: Add `Since:` comment for new fields + +## Status + +Draft + +## Abstract + +This ADR provides guidelines and recommended practices when updating Protobuf definitions. These guidelines are targeting module developers. + +## Context + +The Cosmos SDK maintains a set of [Protobuf definitions](https://github.com/cosmos/cosmos-sdk/tree/main/proto/cosmos). It is important to correctly design Protobuf definitions to avoid any breaking changes within the same version. The reasons are to not break tooling (including indexers and explorers), wallets and other third-party integrations. + +When making changes to these Protobuf definitions, the Cosmos SDK currently only follows [Buf's](https://docs.buf.build/) recommendations. We noticed however that Buf's recommendations might still result in breaking changes in the SDK in some cases. For example: + +* Adding fields to `Msg`s. Adding fields is a not a Protobuf spec-breaking operation. However, when adding new fields to `Msg`s, the unknown field rejection will throw an error when sending the new `Msg` to an older node. +* Marking fields as `reserved`. Protobuf proposes the `reserved` keyword for removing fields without the need to bump the package version. However, by doing so, client backwards compatibility is broken as Protobuf doesn't generate anything for `reserved` fields. See [#9446](https://github.com/cosmos/cosmos-sdk/issues/9446) for more details on this issue. + +Moreover, module developers often face other questions around Protobuf definitions such as "Can I rename a field?" or "Can I deprecate a field?" This ADR aims to answer all these questions by providing clear guidelines about allowed updates for Protobuf definitions. + +## Decision + +We decide to keep [Buf's](https://docs.buf.build/) recommendations with the following exceptions: + +* `UNARY_RPC`: the Cosmos SDK currently does not support streaming RPCs. +* `COMMENT_FIELD`: the Cosmos SDK allows fields with no comments. +* `SERVICE_SUFFIX`: we use the `Query` and `Msg` service naming convention, which doesn't use the `-Service` suffix. +* `PACKAGE_VERSION_SUFFIX`: some packages, such as `cosmos.crypto.ed25519`, don't use a version suffix. +* `RPC_REQUEST_STANDARD_NAME`: Requests for the `Msg` service don't have the `-Request` suffix to keep backwards compatibility. + +On top of Buf's recommendations we add the following guidelines that are specific to the Cosmos SDK. + +### Updating Protobuf Definition Without Bumping Version + +#### 1. `Msg`s MUST NOT have new fields + +When processing `Msg`s, the Cosmos SDK's antehandlers are strict and don't allow unknown fields in `Msg`s. This is checked by the unknown field rejection in the [`codec/unknownproto` package](https://github.com/cosmos/cosmos-sdk/blob/master/codec/unknownproto). + +Now imagine a v0.43 node accepting a `MsgExample` transaction, and in v0.44 the chain developer decides to add a field to `MsgExample`. A client developer, which only manipulates Protobuf definitions, would see that `MsgExample` has a new field, and will populate it. However, sending the new `MsgExample` to an old v0.43 node would cause the v0.43 node to reject the `MsgExample` because of the unknown field. The expectation that the same Protobuf version can be used across multiple node versions MUST be guaranteed. + +For this reason, module developers MUST NOT add new fields to existing `Msg`s. + +It is worth mentioning that this does not limit adding fields to a `Msg`, but also to all nested structs and `Any`s inside a `Msg`. + +#### 2. Non-`Msg`-related Protobuf definitions MAY have new fields, but MUST add a `Since:` comment + +On the other hand, module developers MAY add new fields to Protobuf definitions related to the `Query` service or to objects which are saved in the store. This recommendation follows the Protobuf specification, but is added in this document for clarity. + +The SDK requires the Protobuf comment of the new field to contain one line with the following format: + +```protobuf +// Since: cosmos-sdk {, ...} +``` + +Where each `version` denotes a minor ("0.45") or patch ("0.44.5") version from which the field is available. This will greatly help client libraries, who can optionally use reflection or custom code generation to show/hide these fields depending on the targetted node version. + +As examples, the following comments are valid: + +```protobuf +// Since: cosmos-sdk 0.44 + +// Since: cosmos-sdk 0.42.11, 0.44.5 +``` + +and the following ones are NOT valid: + +```protobuf +// Since cosmos-sdk v0.44 + +// since: cosmos-sdk 0.44 + +// Since: cosmos-sdk 0.42.11 0.44.5 + +// Since: Cosmos SDK 0.42.11, 0.44.5 +``` + +#### 3. Fields MAY be marked as `deprecated`, and nodes MAY implement a protocol-breaking change for handling these fields + +Protobuf supports the [`deprecated` field option](https://developers.google.com/protocol-buffers/docs/proto#options), and this option MAY be used on any field, including `Msg` fields. If a node handles a Protobuf message with a non-empty deprecated field, the node MAY change its behavior upon processing it, even in a protocol-breaking way. When possible, the node MUST handle backwards compatibility without breaking the consensus (unless we increment the proto version). + +As an example, the Cosmos SDK v0.42 to v0.43 update contained two Protobuf-breaking changes, listed below. Instead of bumping the package versions from `v1beta1` to `v1`, the SDK team decided to follow this guideline, by reverting the breaking changes, marking those changes as deprecated, and modifying the node implementation when processing messages with deprecated fields. More specifically: + +* The Cosmos SDK recently removed support for [time-based software upgrades](https://github.com/cosmos/cosmos-sdk/pull/8849). As such, the `time` field has been marked as deprecated in `cosmos.upgrade.v1beta1.Plan`. Moreover, the node will reject any proposal containing an upgrade Plan whose `time` field is non-empty. +* The Cosmos SDK now supports [governance split votes](./adr-037-gov-split-vote.md). When querying for votes, the returned `cosmos.gov.v1beta1.Vote` message has its `option` field (used for 1 vote option) deprecated in favor of its `options` field (allowing multiple vote options). Whenever possible, the SDK still populates the deprecated `option` field, that is, if and only if the `len(options) == 1` and `options[0].Weight == 1.0`. + +#### 4. Fields MUST NOT be renamed + +Whereas the official Protobuf recommendations do not prohibit renaming fields, as it does not break the Protobuf binary representation, the SDK explicitly forbids renaming fields in Protobuf structs. The main reason for this choice is to avoid introducing breaking changes for clients, which often rely on hard-coded fields from generated types. Moreover, renaming fields will lead to client-breaking JSON representations of Protobuf definitions, used in REST endpoints and in the CLI. + +### Incrementing Protobuf Package Version + +TODO, needs architecture review. Some topics: + +* Bumping versions frequency +* When bumping versions, should the Cosmos SDK support both versions? + * i.e. v1beta1 -> v1, should we have two folders in the Cosmos SDK, and handlers for both versions? +* mention ADR-023 Protobuf naming + +## Consequences + +> This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ADR must explain how the author proposes to deal with these incompatibilities. ADR submissions without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +* less pain to tool developers +* more compatibility in the ecosystem +* ... + +### Negative + +{negative consequences} + +### Neutral + +* more rigor in Protobuf review + +## Further Discussions + +This ADR is still in the DRAFT stage, and the "Incrementing Protobuf Package Version" will be filled in once we make a decision on how to correctly do it. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +* [#9445](https://github.com/cosmos/cosmos-sdk/issues/9445) Release proto definitions v1 +* [#9446](https://github.com/cosmos/cosmos-sdk/issues/9446) Address v1beta1 proto breaking changes diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-045-check-delivertx-middlewares.md b/versioned_docs/version-0.46/integrate/architecture/adr-045-check-delivertx-middlewares.md new file mode 100644 index 000000000..60172977c --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-045-check-delivertx-middlewares.md @@ -0,0 +1,312 @@ +# ADR 045: BaseApp `{Check,Deliver}Tx` as Middlewares + +## Changelog + +* 20.08.2021: Initial draft. +* 07.12.2021: Update `tx.Handler` interface ([\#10693](https://github.com/cosmos/cosmos-sdk/pull/10693)). +* 17.05.2022: ADR is abandoned, as middlewares are deemed too hard to reason about. + +## Status + +ABANDONED. Replacement is being discussed in [#11955](https://github.com/cosmos/cosmos-sdk/issues/11955). + +## Abstract + +This ADR replaces the current BaseApp `runTx` and antehandlers design with a middleware-based design. + +## Context + +BaseApp's implementation of ABCI `{Check,Deliver}Tx()` and its own `Simulate()` method call the `runTx` method under the hood, which first runs antehandlers, then executes `Msg`s. However, the [transaction Tips](https://github.com/cosmos/cosmos-sdk/issues/9406) and [refunding unused gas](https://github.com/cosmos/cosmos-sdk/issues/2150) use cases require custom logic to be run after the `Msg`s execution. There is currently no way to achieve this. + +An naive solution would be to add post-`Msg` hooks to BaseApp. However, the Cosmos SDK team thinks in parallel about the bigger picture of making app wiring simpler ([#9181](https://github.com/cosmos/cosmos-sdk/discussions/9182)), which includes making BaseApp more lightweight and modular. + +## Decision + +We decide to transform Baseapp's implementation of ABCI `{Check,Deliver}Tx` and its own `Simulate` methods to use a middleware-based design. + +The two following interfaces are the base of the middleware design, and are defined in `types/tx`: + +```go +type Handler interface { + CheckTx(ctx context.Context, req Request, checkReq RequestCheckTx) (Response, ResponseCheckTx, error) + DeliverTx(ctx context.Context, req Request) (Response, error) + SimulateTx(ctx context.Context, req Request (Response, error) +} + +type Middleware func(Handler) Handler +``` + +where we define the following arguments and return types: + +```go +type Request struct { + Tx sdk.Tx + TxBytes []byte +} + +type Response struct { + GasWanted uint64 + GasUsed uint64 + // MsgResponses is an array containing each Msg service handler's response + // type, packed in an Any. This will get proto-serialized into the `Data` field + // in the ABCI Check/DeliverTx responses. + MsgResponses []*codectypes.Any + Log string + Events []abci.Event +} + +type RequestCheckTx struct { + Type abci.CheckTxType +} + +type ResponseCheckTx struct { + Priority int64 +} +``` + +Please note that because CheckTx handles separate logic related to mempool priotization, its signature is different than DeliverTx and SimulateTx. + +BaseApp holds a reference to a `tx.Handler`: + +```go +type BaseApp struct { + // other fields + txHandler tx.Handler +} +``` + +Baseapp's ABCI `{Check,Deliver}Tx()` and `Simulate()` methods simply call `app.txHandler.{Check,Deliver,Simulate}Tx()` with the relevant arguments. For example, for `DeliverTx`: + +```go +func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { + var abciRes abci.ResponseDeliverTx + ctx := app.getContextForTx(runTxModeDeliver, req.Tx) + res, err := app.txHandler.DeliverTx(ctx, tx.Request{TxBytes: req.Tx}) + if err != nil { + abciRes = sdkerrors.ResponseDeliverTx(err, uint64(res.GasUsed), uint64(res.GasWanted), app.trace) + return abciRes + } + + abciRes, err = convertTxResponseToDeliverTx(res) + if err != nil { + return sdkerrors.ResponseDeliverTx(err, uint64(res.GasUsed), uint64(res.GasWanted), app.trace) + } + + return abciRes +} + +// convertTxResponseToDeliverTx converts a tx.Response into a abci.ResponseDeliverTx. +func convertTxResponseToDeliverTx(txRes tx.Response) (abci.ResponseDeliverTx, error) { + data, err := makeABCIData(txRes) + if err != nil { + return abci.ResponseDeliverTx{}, nil + } + + return abci.ResponseDeliverTx{ + Data: data, + Log: txRes.Log, + Events: txRes.Events, + }, nil +} + +// makeABCIData generates the Data field to be sent to ABCI Check/DeliverTx. +func makeABCIData(txRes tx.Response) ([]byte, error) { + return proto.Marshal(&sdk.TxMsgData{MsgResponses: txRes.MsgResponses}) +} +``` + +The implementations are similar for `BaseApp.CheckTx` and `BaseApp.Simulate`. + +`baseapp.txHandler`'s three methods' implementations can obviously be monolithic functions, but for modularity we propose a middleware composition design, where a middleware is simply a function that takes a `tx.Handler`, and returns another `tx.Handler` wrapped around the previous one. + +### Implementing a Middleware + +In practice, middlewares are created by Go function that takes as arguments some parameters needed for the middleware, and returns a `tx.Middleware`. + +For example, for creating an arbitrary `MyMiddleware`, we can implement: + +```go +// myTxHandler is the tx.Handler of this middleware. Note that it holds a +// reference to the next tx.Handler in the stack. +type myTxHandler struct { + // next is the next tx.Handler in the middleware stack. + next tx.Handler + // some other fields that are relevant to the middleware can be added here +} + +// NewMyMiddleware returns a middleware that does this and that. +func NewMyMiddleware(arg1, arg2) tx.Middleware { + return func (txh tx.Handler) tx.Handler { + return myTxHandler{ + next: txh, + // optionally, set arg1, arg2... if they are needed in the middleware + } + } +} + +// Assert myTxHandler is a tx.Handler. +var _ tx.Handler = myTxHandler{} + +func (h myTxHandler) CheckTx(ctx context.Context, req Request, checkReq RequestcheckTx) (Response, ResponseCheckTx, error) { + // CheckTx specific pre-processing logic + + // run the next middleware + res, checkRes, err := txh.next.CheckTx(ctx, req, checkReq) + + // CheckTx specific post-processing logic + + return res, checkRes, err +} + +func (h myTxHandler) DeliverTx(ctx context.Context, req Request) (Response, error) { + // DeliverTx specific pre-processing logic + + // run the next middleware + res, err := txh.next.DeliverTx(ctx, tx, req) + + // DeliverTx specific post-processing logic + + return res, err +} + +func (h myTxHandler) SimulateTx(ctx context.Context, req Request) (Response, error) { + // SimulateTx specific pre-processing logic + + // run the next middleware + res, err := txh.next.SimulateTx(ctx, tx, req) + + // SimulateTx specific post-processing logic + + return res, err +} +``` + +### Composing Middlewares + +While BaseApp simply holds a reference to a `tx.Handler`, this `tx.Handler` itself is defined using a middleware stack. The Cosmos SDK exposes a base (i.e. innermost) `tx.Handler` called `RunMsgsTxHandler`, which executes messages. + +Then, the app developer can compose multiple middlewares on top on the base `tx.Handler`. Each middleware can run pre-and-post-processing logic around its next middleware, as described in the section above. Conceptually, as an example, given the middlewares `A`, `B`, and `C` and the base `tx.Handler` `H` the stack looks like: + +```text +A.pre + B.pre + C.pre + H # The base tx.handler, for example `RunMsgsTxHandler` + C.post + B.post +A.post +``` + +We define a `ComposeMiddlewares` function for composing middlewares. It takes the base handler as first argument, and middlewares in the "outer to inner" order. For the above stack, the final `tx.Handler` is: + +```go +txHandler := middleware.ComposeMiddlewares(H, A, B, C) +``` + +The middleware is set in BaseApp via its `SetTxHandler` setter: + +```go +// simapp/app.go + +txHandler := middleware.ComposeMiddlewares(...) +app.SetTxHandler(txHandler) +``` + +The app developer can define their own middlewares, or use the Cosmos SDK's pre-defined middlewares from `middleware.NewDefaultTxHandler()`. + +### Middlewares Maintained by the Cosmos SDK + +While the app developer can define and compose the middlewares of their choice, the Cosmos SDK provides a set of middlewares that caters for the ecosystem's most common use cases. These middlewares are: + +| Middleware | Description | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RunMsgsTxHandler | This is the base `tx.Handler`. It replaces the old baseapp's `runMsgs`, and executes a transaction's `Msg`s. | +| TxDecoderMiddleware | This middleware takes in transaction raw bytes, and decodes them into a `sdk.Tx`. It replaces the `baseapp.txDecoder` field, so that BaseApp stays as thin as possible. Since most middlewares read the contents of the `sdk.Tx`, the TxDecoderMiddleware should be run first in the middleware stack. | +| {Antehandlers} | Each antehandler is converted to its own middleware. These middlewares perform signature verification, fee deductions and other validations on the incoming transaction. | +| IndexEventsTxMiddleware | This is a simple middleware that chooses which events to index in Tendermint. Replaces `baseapp.indexEvents` (which unfortunately still exists in baseapp too, because it's used to index Begin/EndBlock events) | +| RecoveryTxMiddleware | This index recovers from panics. It replaces baseapp.runTx's panic recovery described in [ADR-022](./adr-022-custom-panic-handling.md). | +| GasTxMiddleware | This replaces the [`Setup`](https://github.com/cosmos/cosmos-sdk/blob/v0.43.0/x/auth/ante/setup.go) Antehandler. It sets a GasMeter on sdk.Context. Note that before, GasMeter was set on sdk.Context inside the antehandlers, and there was some mess around the fact that antehandlers had their own panic recovery system so that the GasMeter could be read by baseapp's recovery system. Now, this mess is all removed: one middleware sets GasMeter, another one handles recovery. | + +### Similarities and Differences between Antehandlers and Middlewares + +The middleware-based design builds upon the existing antehandlers design described in [ADR-010](./adr-010-modular-antehandler.md). Even though the final decision of ADR-010 was to go with the "Simple Decorators" approach, the middleware design is actually very similar to the other [Decorator Pattern](./adr-010-modular-antehandler.md#decorator-pattern) proposal, also used in [weave](https://github.com/iov-one/weave). + +#### Similarities with Antehandlers + +* Designed as chaining/composing small modular pieces. +* Allow code reuse for `{Check,Deliver}Tx` and for `Simulate`. +* Set up in `app.go`, and easily customizable by app developers. +* Order is important. + +#### Differences with Antehandlers + +* The Antehandlers are run before `Msg` execution, whereas middlewares can run before and after. +* The middleware approach uses separate methods for `{Check,Deliver,Simulate}Tx`, whereas the antehandlers pass a `simulate bool` flag and uses the `sdkCtx.Is{Check,Recheck}Tx()` flags to determine in which transaction mode we are. +* The middleware design lets each middleware hold a reference to the next middleware, whereas the antehandlers pass a `next` argument in the `AnteHandle` method. +* The middleware design use Go's standard `context.Context`, whereas the antehandlers use `sdk.Context`. + +## Consequences + +### Backwards Compatibility + +Since this refactor removes some logic away from BaseApp and into middlewares, it introduces API-breaking changes for app developers. Most notably, instead of creating an antehandler chain in `app.go`, app developers need to create a middleware stack: + +```diff +- anteHandler, err := ante.NewAnteHandler( +- ante.HandlerOptions{ +- AccountKeeper: app.AccountKeeper, +- BankKeeper: app.BankKeeper, +- SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), +- FeegrantKeeper: app.FeeGrantKeeper, +- SigGasConsumer: ante.DefaultSigVerificationGasConsumer, +- }, +-) ++txHandler, err := authmiddleware.NewDefaultTxHandler(authmiddleware.TxHandlerOptions{ ++ Debug: app.Trace(), ++ IndexEvents: indexEvents, ++ LegacyRouter: app.legacyRouter, ++ MsgServiceRouter: app.msgSvcRouter, ++ LegacyAnteHandler: anteHandler, ++ TxDecoder: encodingConfig.TxConfig.TxDecoder, ++}) +if err != nil { + panic(err) +} +- app.SetAnteHandler(anteHandler) ++ app.SetTxHandler(txHandler) +``` + +Other more minor API breaking changes will also be provided in the CHANGELOG. As usual, the Cosmos SDK will provide a release migration document for app developers. + +This ADR does not introduce any state-machine-, client- or CLI-breaking changes. + +### Positive + +* Allow custom logic to be run before an after `Msg` execution. This enables the [tips](https://github.com/cosmos/cosmos-sdk/issues/9406) and [gas refund](https://github.com/cosmos/cosmos-sdk/issues/2150) uses cases, and possibly other ones. +* Make BaseApp more lightweight, and defer complex logic to small modular components. +* Separate paths for `{Check,Deliver,Simulate}Tx` with different returns types. This allows for improved readability (replace `if sdkCtx.IsRecheckTx() && !simulate {...}` with separate methods) and more flexibility (e.g. returning a `priority` in `ResponseCheckTx`). + +### Negative + +* It is hard to understand at first glance the state updates that would occur after a middleware runs given the `sdk.Context` and `tx`. A middleware can have an arbitrary number of nested middleware being called within its function body, each possibly doing some pre- and post-processing before calling the next middleware on the chain. Thus to understand what a middleware is doing, one must also understand what every other middleware further along the chain is also doing, and the order of middlewares matters. This can get quite complicated to understand. +* API-breaking changes for app developers. + +### Neutral + +No neutral consequences. + +## Further Discussions + +* [#9934](https://github.com/cosmos/cosmos-sdk/discussions/9934) Decomposing BaseApp's other ABCI methods into middlewares. +* Replace `sdk.Tx` interface with the concrete protobuf Tx type in the `tx.Handler` methods signature. + +## Test Cases + +We update the existing baseapp and antehandlers tests to use the new middleware API, but keep the same test cases and logic, to avoid introducing regressions. Existing CLI tests will also be left untouched. + +For new middlewares, we introduce unit tests. Since middlewares are purposefully small, unit tests suit well. + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/issues/9585 +* Implementation: [#9920 BaseApp refactor](https://github.com/cosmos/cosmos-sdk/pull/9920) and [#10028 Antehandlers migration](https://github.com/cosmos/cosmos-sdk/pull/10028) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-046-module-params.md b/versioned_docs/version-0.46/integrate/architecture/adr-046-module-params.md new file mode 100644 index 000000000..6c068e4e0 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-046-module-params.md @@ -0,0 +1,184 @@ +# ADR 046: Module Params + +## Changelog + +* Sep 22, 2021: Initial Draft + +## Status + +Proposed + +## Abstract + +This ADR describes an alternative approach to how Cosmos SDK modules use, interact, +and store their respective parameters. + +## Context + +Currently, in the Cosmos SDK, modules that require the use of parameters use the +`x/params` module. The `x/params` works by having modules define parameters, +typically via a simple `Params` structure, and registering that structure in +the `x/params` module via a unique `Subspace` that belongs to the respective +registering module. The registering module then has unique access to its respective +`Subspace`. Through this `Subspace`, the module can get and set its `Params` +structure. + +In addition, the Cosmos SDK's `x/gov` module has direct support for changing +parameters on-chain via a `ParamChangeProposal` governance proposal type, where +stakeholders can vote on suggested parameter changes. + +There are various tradeoffs to using the `x/params` module to manage individual +module parameters. Namely, managing parameters essentially comes for "free" in +that developers only need to define the `Params` struct, the `Subspace`, and the +various auxiliary functions, e.g. `ParamSetPairs`, on the `Params` type. However, +there are some notable drawbacks. These drawbacks include the fact that parameters +are serialized in state via JSON which is extremely slow. In addition, parameter +changes via `ParamChangeProposal` governance proposals have no way of reading from +or writing to state. In other words, it is currently not possible to have any +state transitions in the application during an attempt to change param(s). + +## Decision + +We will build off of the alignment of `x/gov` and `x/authz` work per +[#9810](https://github.com/cosmos/cosmos-sdk/pull/9810). Namely, module developers +will create one or more unique parameter data structures that must be serialized +to state. The Param data structures must implement `sdk.Msg` interface with respective +Protobuf Msg service method which will validate and update the parameters with all +necessary changes. The `x/gov` module via the work done in +[#9810](https://github.com/cosmos/cosmos-sdk/pull/9810), will dispatch Param +messages, which will be handled by Protobuf Msg services. + +Note, it is up to developers to decide how to structure their parameters and +the respective `sdk.Msg` messages. Consider the parameters currently defined in +`x/auth` using the `x/params` module for parameter management: + +```protobuf +message Params { + uint64 max_memo_characters = 1; + uint64 tx_sig_limit = 2; + uint64 tx_size_cost_per_byte = 3; + uint64 sig_verify_cost_ed25519 = 4; + uint64 sig_verify_cost_secp256k1 = 5; +} +``` + +Developers can choose to either create a unique data structure for every field in +`Params` or they can create a single `Params` structure as outlined above in the +case of `x/auth`. + +In the former, `x/params`, approach, a `sdk.Msg` would need to be created for every single +field along with a handler. This can become burdensome if there are a lot of +parameter fields. In the latter case, there is only a single data structure and +thus only a single message handler, however, the message handler might have to be +more sophisticated in that it might need to understand what parameters are being +changed vs what parameters are untouched. + +Params change proposals are made using the `x/gov` module. Execution is done through +`x/authz` authorization to the root `x/gov` module's account. + +Continuing to use `x/auth`, we demonstrate a more complete example: + +```go +type Params struct { + MaxMemoCharacters uint64 + TxSigLimit uint64 + TxSizeCostPerByte uint64 + SigVerifyCostED25519 uint64 + SigVerifyCostSecp256k1 uint64 +} + +type MsgUpdateParams struct { + MaxMemoCharacters uint64 + TxSigLimit uint64 + TxSizeCostPerByte uint64 + SigVerifyCostED25519 uint64 + SigVerifyCostSecp256k1 uint64 +} + +type MsgUpdateParamsResponse struct {} + +func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // verification logic... + + // persist params + params := ParamsFromMsg(msg) + ms.SaveParams(ctx, params) + + return &types.MsgUpdateParamsResponse{}, nil +} + +func ParamsFromMsg(msg *types.MsgUpdateParams) Params { + // ... +} +``` + +A gRPC `Service` query should also be provided, for example: + +```protobuf +service Query { + // ... + + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos//v1beta1/params"; + } +} + +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false]; +} +``` + +## Consequences + +As a result of implementing the module parameter methodology, we gain the ability +for module parameter changes to be stateful and extensible to fit nearly every +application's use case. We will be able to emit events (and trigger hooks registered +to that events using the work proposed in [even hooks](https://github.com/cosmos/cosmos-sdk/discussions/9656)), +call other Msg service methods or perform migration. +In addition, there will be significant gains in performance when it comes to reading +and writing parameters from and to state, especially if a specific set of parameters +are read on a consistent basis. + +However, this methodology will require developers to implement more types and +Msg service metohds which can become burdensome if many parameters exist. In addition, +developers are required to implement persistance logics of module parameters. +However, this should be trivial. + +### Backwards Compatibility + +The new method for working with module parameters is naturally not backwards +compatible with the existing `x/params` module. However, the `x/params` will +remain in the Cosmos SDK and will be marked as deprecated with no additional +functionality being added apart from potential bug fixes. Note, the `x/params` +module may be removed entirely in a future release. + +### Positive + +* Module parameters are serialized more efficiently +* Modules are able to react on parameters changes and perform additional actions. +* Special events can be emitted, allowing hooks to be triggered. + +### Negative + +* Module parameters becomes slightly more burdensome for module developers: + * Modules are now responsible for persisting and retrieving parameter state + * Modules are now required to have unique message handlers to handle parameter + changes per unique parameter data structure. + +### Neutral + +* Requires [#9810](https://github.com/cosmos/cosmos-sdk/pull/9810) to be reviewed + and merged. + + + +## References + +* https://github.com/cosmos/cosmos-sdk/pull/9810 +* https://github.com/cosmos/cosmos-sdk/issues/9438 +* https://github.com/cosmos/cosmos-sdk/discussions/9913 diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-047-extend-upgrade-plan.md b/versioned_docs/version-0.46/integrate/architecture/adr-047-extend-upgrade-plan.md new file mode 100644 index 000000000..0df030062 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-047-extend-upgrade-plan.md @@ -0,0 +1,245 @@ +# ADR 047: Extend Upgrade Plan + +## Changelog + +- Nov, 23, 2021: Initial Draft + +## Status + +PROPOSED Not Implemented + +## Abstract + +This ADR expands the existing x/upgrade `Plan` proto message to include new fields for defining pre-run and post-run processes within upgrade tooling. +It also defines a structure for providing downloadable artifacts involved in an upgrade. + +## Context + +The `upgrade` module in conjunction with Cosmovisor are designed to facilitate and automate a blockchain's transition from one version to another. + +Users submit a software upgrade governance proposal containing an upgrade `Plan`. +The [Plan](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/proto/cosmos/upgrade/v1beta1/upgrade.proto#L12) currently contains the following fields: +- `name`: A short string identifying the new version. +- `height`: The chain height at which the upgrade is to be performed. +- `info`: A string containing information about the upgrade. + +The `info` string can be anything. +However, Cosmovisor will try to use the `info` field to automatically download a new version of the blockchain executable. +For the auto-download to work, Cosmovisor expects it to be either a stringified JSON object (with a specific structure defined through documentation), or a URL that will return such JSON. +The JSON object identifies URLs used to download the new blockchain executable for different platforms (OS and Architecture, e.g. "linux/amd64"). +Such a URL can either return the executable file directly or can return an archive containing the executable and possibly other assets. + +If the URL returns an archive, it is decompressed into `{DAEMON_HOME}/cosmovisor/{upgrade name}`. +Then, if `{DAEMON_HOME}/cosmovisor/{upgrade name}/bin/{DAEMON_NAME}` does not exist, but `{DAEMON_HOME}/cosmovisor/{upgrade name}/{DAEMON_NAME}` does, the latter is copied to the former. +If the URL returns something other than an archive, it is downloaded to `{DAEMON_HOME}/cosmovisor/{upgrade name}/bin/{DAEMON_NAME}`. + +If an upgrade height is reached and the new version of the executable version isn't available, Cosmovisor will stop running. + +Both `DAEMON_HOME` and `DAEMON_NAME` are [environment variables used to configure Cosmovisor](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.0.0/cosmovisor/README.md#command-line-arguments-and-environment-variables). + +Currently, there is no mechanism that makes Cosmovisor run a command after the upgraded chain has been restarted. + +The current upgrade process has this timeline: +1. An upgrade governance proposal is submitted and approved. +1. The upgrade height is reached. +1. The `x/upgrade` module writes the `upgrade_info.json` file. +1. The chain halts. +1. Cosmovisor backs up the data directory (if set up to do so). +1. Cosmovisor downloads the new executable (if not already in place). +1. Cosmovisor executes the `${DAEMON_NAME} pre-upgrade`. +1. Cosmovisor restarts the app using the new version and same args originally provided. + +## Decision + +### Protobuf Updates + +We will update the `x/upgrade.Plan` message for providing upgrade instructions. +The upgrade instructions will contain a list of artifacts available for each platform. +It allows for the definition of a pre-run and post-run commands. +These commands are not consensus guaranteed; they will be executed by Cosmosvisor (or other) during its upgrade handling. + +```protobuf +message Plan { + // ... (existing fields) + + UpgradeInstructions instructions = 6; +} +``` + +The new `UpgradeInstructions instructions` field MUST be optional. + +```protobuf +message UpgradeInstructions { + string pre_run = 1; + string post_run = 2; + repeated Artifact artifacts = 3; + string description = 4; +} +``` + +All fields in the `UpgradeInstructions` are optional. +- `pre_run` is a command to run prior to the upgraded chain restarting. + If defined, it will be executed after halting and downloading the new artifact but before restarting the upgraded chain. + The working directory this command runs from MUST be `{DAEMON_HOME}/cosmovisor/{upgrade name}`. + This command MUST behave the same as the current [pre-upgrade](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/docs/migrations/pre-upgrade.md) command. + It does not take in any command-line arguments and is expected to terminate with the following exit codes: + + | Exit status code | How it is handled in Cosmosvisor | + |------------------|---------------------------------------------------------------------------------------------------------------------| + | `0` | Assumes `pre-upgrade` command executed successfully and continues the upgrade. | + | `1` | Default exit code when `pre-upgrade` command has not been implemented. | + | `30` | `pre-upgrade` command was executed but failed. This fails the entire upgrade. | + | `31` | `pre-upgrade` command was executed but failed. But the command is retried until exit code `1` or `30` are returned. | + If defined, then the app supervisors (e.g. Cosmovisor) MUST NOT run `app pre-run`. +- `post_run` is a command to run after the upgraded chain has been started. If defined, this command MUST be only executed at most once by an upgrading node. + The output and exit code SHOULD be logged but SHOULD NOT affect the running of the upgraded chain. + The working directory this command runs from MUST be `{DAEMON_HOME}/cosmovisor/{upgrade name}`. +- `artifacts` define items to be downloaded. + It SHOULD have only one entry per platform. +- `description` contains human-readable information about the upgrade and might contain references to external resources. + It SHOULD NOT be used for structured processing information. + +```protobuf +message Artifact { + string platform = 1; + string url = 2; + string checksum = 3; + string checksum_algo = 4; +} +``` + +- `platform` is a required string that SHOULD be in the format `{OS}/{CPU}`, e.g. `"linux/amd64"`. + The string `"any"` SHOULD also be allowed. + An `Artifact` with a `platform` of `"any"` SHOULD be used as a fallback when a specific `{OS}/{CPU}` entry is not found. + That is, if an `Artifact` exists with a `platform` that matches the system's OS and CPU, that should be used; + otherwise, if an `Artifact` exists with a `platform` of `any`, that should be used; + otherwise no artifact should be downloaded. +- `url` is a required URL string that MUST conform to [RFC 1738: Uniform Resource Locators](https://www.ietf.org/rfc/rfc1738.txt). + A request to this `url` MUST return either an executable file or an archive containing either `bin/{DAEMON_NAME}` or `{DAEMON_NAME}`. + The URL should not contain checksum - it should be specified by the `checksum` attribute. +- `checksum` is a checksum of the expected result of a request to the `url`. + It is not required, but is recommended. + If provided, it MUST be a hex encoded checksum string. + Tools utilizing these `UpgradeInstructions` MUST fail if a `checksum` is provided but is different from the checksum of the result returned by the `url`. +- `checksum_algo` is a string identify the algorithm used to generate the `checksum`. + Recommended algorithms: `sha256`, `sha512`. + Algorithms also supported (but not recommended): `sha1`, `md5`. + If a `checksum` is provided, a `checksum_algo` MUST also be provided. + +A `url` is not required to contain a `checksum` query parameter. +If the `url` does contain a `checksum` query parameter, the `checksum` and `checksum_algo` fields MUST also be populated, and their values MUST match the value of the query parameter. +For example, if the `url` is `"https://example.com?checksum=md5:d41d8cd98f00b204e9800998ecf8427e"`, then the `checksum` field must be `"d41d8cd98f00b204e9800998ecf8427e"` and the `checksum_algo` field must be `"md5"`. + +### Upgrade Module Updates + +If an upgrade `Plan` does not use the new `UpgradeInstructions` field, existing functionality will be maintained. +The parsing of the `info` field as either a URL or `binaries` JSON will be deprecated. +During validation, if the `info` field is used as such, a warning will be issued, but not an error. + +We will update the creation of the `upgrade-info.json` file to include the `UpgradeInstructions`. + +We will update the optional validation available via CLI to account for the new `Plan` structure. +We will add the following validation: +1. If `UpgradeInstructions` are provided: + 1. There MUST be at least one entry in `artifacts`. + 1. All of the `artifacts` MUST have a unique `platform`. + 1. For each `Artifact`, if the `url` contains a `checksum` query parameter: + 1. The `checksum` query parameter value MUST be in the format of `{checksum_algo}:{checksum}`. + 1. The `{checksum}` from the query parameter MUST equal the `checksum` provided in the `Artifact`. + 1. The `{checksum_algo}` from the query parameter MUST equal the `checksum_algo` provided in the `Artifact`. +1. The following validation is currently done using the `info` field. We will apply similar validation to the `UpgradeInstructions`. + For each `Artifact`: + 1. The `platform` MUST have the format `{OS}/{CPU}` or be `"any"`. + 1. The `url` field MUST NOT be empty. + 1. The `url` field MUST be a proper URL. + 1. A `checksum` MUST be provided either in the `checksum` field or as a query parameter in the `url`. + 1. If the `checksum` field has a value and the `url` also has a `checksum` query parameter, the two values MUST be equal. + 1. The `url` MUST return either a file or an archive containing either `bin/{DAEMON_NAME}` or `{DAEMON_NAME}`. + 1. If a `checksum` is provided (in the field or as a query param), the checksum of the result of the `url` MUST equal the provided checksum. + +Downloading of an `Artifact` will happen the same way that URLs from `info` are currently downloaded. + +### Cosmovisor Updates + +If the `upgrade-info.json` file does not contain any `UpgradeInstructions`, existing functionality will be maintained. + +We will update Cosmovisor to look for and handle the new `UpgradeInstructions` in `upgrade-info.json`. +If the `UpgradeInstructions` are provided, we will do the following: +1. The `info` field will be ignored. +1. The `artifacts` field will be used to identify the artifact to download based on the `platform` that Cosmovisor is running in. +1. If a `checksum` is provided (either in the field or as a query param in the `url`), and the downloaded artifact has a different checksum, the upgrade process will be interrupted and Cosmovisor will exit with an error. +1. If a `pre_run` command is defined, it will be executed at the same point in the process where the `app pre-upgrade` command would have been executed. + It will be executed using the same environment as other commands run by Cosmovisor. +1. If a `post_run` command is defined, it will be executed after executing the command that restarts the chain. + It will be executed in a background process using the same environment as the other commands. + Any output generated by the command will be logged. + Once complete, the exit code will be logged. + +We will deprecate the use of the `info` field for anything other than human readable information. +A warning will be logged if the `info` field is used to define the assets (either by URL or JSON). + +The new upgrade timeline is very similar to the current one. Changes are in bold: +1. An upgrade governance proposal is submitted and approved. +1. The upgrade height is reached. +1. The `x/upgrade` module writes the `upgrade_info.json` file **(now possibly with `UpgradeInstructions`)**. +1. The chain halts. +1. Cosmovisor backs up the data directory (if set up to do so). +1. Cosmovisor downloads the new executable (if not already in place). +1. Cosmovisor executes **the `pre_run` command if provided**, or else the `${DAEMON_NAME} pre-upgrade` command. +1. Cosmovisor restarts the app using the new version and same args originally provided. +1. **Cosmovisor immediately runs the `post_run` command in a detached process.** + +## Consequences + +### Backwards Compatibility + +Since the only change to existing definitions is the addition of the `instructions` field to the `Plan` message, and that field is optional, there are no backwards incompatibilities with respects to the proto messages. +Additionally, current behavior will be maintained when no `UpgradeInstructions` are provided, so there are no backwards incompatibilities with respects to either the upgrade module or Cosmovisor. + +### Forwards Compatibility + +In order to utilize the `UpgradeInstructions` as part of a software upgrade, both of the following must be true: +1. The chain must already be using a sufficiently advanced version of the Cosmos SDK. +1. The chain's nodes must be using a sufficiently advanced version of Cosmovisor. + +### Positive + +1. The structure for defining artifacts is clearer since it is now defined in the proto instead of in documentation. +1. Availability of a pre-run command becomes more obvious. +1. A post-run command becomes possible. + +### Negative + +1. The `Plan` message becomes larger. This is negligible because A) the `x/upgrades` module only stores at most one upgrade plan, and B) upgrades are rare enough that the increased gas cost isn't a concern. +1. There is no option for providing a URL that will return the `UpgradeInstructions`. +1. The only way to provide multiple assets (executables and other files) for a platform is to use an archive as the platform's artifact. + +### Neutral + +1. Existing functionality of the `info` field is maintained when the `UpgradeInstructions` aren't provided. + +## Further Discussions + +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r698708349): + Consider different names for `UpgradeInstructions instructions` (either the message type or field name). +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r754655072): + 1. Consider putting the `string platform` field inside `UpgradeInstructions` and make `UpgradeInstructions` a repeated field in `Plan`. + 1. Consider using a `oneof` field in the `Plan` which could either be `UpgradeInstructions` or else a URL that should return the `UpgradeInstructions`. + 1. Consider allowing `info` to either be a JSON serialized version of `UpgradeInstructions` or else a URL that returns that. +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r755462876): + Consider not including the `UpgradeInstructions.description` field, using the `info` field for that purpose instead. +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r754643691): + Consider allowing multiple artifacts to be downloaded for any given `platform` by adding a `name` field to the `Artifact` message. +1. [PR #10502 Comment](https://github.com/cosmos/cosmos-sdk/pull/10602#discussion_r781438288) + Allow the new `UpgradeInstructions` to be provided via URL. +1. [PR #10502 Comment](https://github.com/cosmos/cosmos-sdk/pull/10602#discussion_r781438288) + Allow definition of a `signer` for assets (as an alternative to using a `checksum`). + +## References + +- [Current upgrade.proto](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/proto/cosmos/upgrade/v1beta1/upgrade.proto) +- [Upgrade Module README](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/x/upgrade/spec/README.md) +- [Cosmovisor README](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.0.0/cosmovisor/README.md) +- [Pre-upgrade README](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/docs/migrations/pre-upgrade.md) +- [Draft/POC PR #10032](https://github.com/cosmos/cosmos-sdk/pull/10032) +- [RFC 1738: Uniform Resource Locators](https://www.ietf.org/rfc/rfc1738.txt) diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-048-consensus-fees.md b/versioned_docs/version-0.46/integrate/architecture/adr-048-consensus-fees.md new file mode 100644 index 000000000..4ce4c8137 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-048-consensus-fees.md @@ -0,0 +1,203 @@ +# ADR 048: Multi Tire Gas Price System + +## Changelog + +- Dec 1, 2021: Initial Draft + +## Status + +Rejected + +## Abstract + +This ADR describes a flexible mechanism to maintain a consensus level gas prices, in which one can choose a multi-tier gas price system or EIP-1559 like one through configuration. + +## Context + +Currently, each validator configures it's own `minimal-gas-prices` in `app.yaml`. But setting a proper minimal gas price is critical to protect network from dos attack, and it's hard for all the validators to pick a sensible value, so we propose to maintain a gas price in consensus level. + +Since tendermint 0.35 has supported mempool prioritization, we can take advantage of that to implement more sophisticated gas fee system. + +## Multi-Tier Price System + +We propose a multi-tier price system on consensus to provide maximum flexibility: + +- Tier 1: a constant gas price, which could only be modified occasionally through governance proposal. +- Tier 2: a dynamic gas price which is adjusted according to previous block load. +- Tier 3: a dynamic gas price which is adjusted according to previous block load at a higher speed. + +The gas price of higher tier should bigger than the lower tier. + +The transaction fees are charged with the exact gas price calculated on consensus. + +The parameter schema is like this: + +```protobuf +message TierParams { + uint32 priority = 1 // priority in tendermint mempool + Coin initial_gas_price = 2 // + uint32 parent_gas_target = 3 // the target saturation of block + uint32 change_denominator = 4 // decides the change speed + Coin min_gas_price = 5 // optional lower bound of the price adjustment + Coin max_gas_price = 6 // optional upper bound of the price adjustment +} + +message Params { + repeated TierParams tiers = 1; +} +``` + +### Extension Options + +We need to allow user to specify the tier of service for the transaction, to support it in an extensible way, we add an extension option in `AuthInfo`: + +```protobuf +message ExtensionOptionsTieredTx { + uint32 fee_tier = 1 +} +``` + +The value of `fee_tier` is just the index to the `tiers` parameter list. + +We also change the semantic of existing `fee` field of `Tx`, instead of charging user the exact `fee` amount, we treat it as a fee cap, while the actual amount of fee charged is decided dynamically. If the `fee` is smaller than dynamic one, the transaction won't be included in current block and ideally should stay in the mempool until the consensus gas price drop. The mempool can eventually prune old transactions. + +### Tx Prioritization + +Transactions are prioritized based on the tier, the higher the tier, the higher the priority. + +Within the same tier, follow the default Tendermint order (currently FIFO). Be aware of that the mempool tx ordering logic is not part of consensus and can be modified by malicious validator. + +This mechanism can be easily composed with prioritization mechanisms: +* we can add extra tiers out of a user control: + * Example 1: user can set tier 0, 10 or 20, but the protocol will create tiers 0, 1, 2 ... 29. For example IBC transactions will go to tier `user_tier + 5`: if user selected tier 1, then the transaction will go to tier 15. + * Example 2: we can reserve tier 4, 5, ... only for special transaction types. For example, tier 5 is reserved for evidence tx. So if submits a bank.Send transaction and set tier 5, it will be delegated to tier 3 (the max tier level available for any transaction). + * Example 3: we can enforce that all transactions of a sepecific type will go to specific tier. For example, tier 100 will be reserved for evidence transactions and all evidence transactions will always go to that tier. + +### `min-gas-prices` + +Deprecate the current per-validator `min-gas-prices` configuration, since it would confusing for it to work together with the consensus gas price. + +### Adjust For Block Load + +For tier 2 and tier 3 transactions, the gas price is adjusted according to previous block load, the logic could be similar to EIP-1559: + +```python +def adjust_gas_price(gas_price, parent_gas_used, tier): + if parent_gas_used == tier.parent_gas_target: + return gas_price + elif parent_gas_used > tier.parent_gas_target: + gas_used_delta = parent_gas_used - tier.parent_gas_target + gas_price_delta = max(gas_price * gas_used_delta // tier.parent_gas_target // tier.change_speed, 1) + return gas_price + gas_price_delta + else: + gas_used_delta = parent_gas_target - parent_gas_used + gas_price_delta = gas_price * gas_used_delta // parent_gas_target // tier.change_speed + return gas_price - gas_price_delta +``` + +### Block Segment Reservation + +Ideally we should reserve block segments for each tier, so the lower tiered transactions won't be completely squeezed out by higher tier transactions, which will force user to use higher tier, and the system degraded to a single tier. + +We need help from tendermint to implement this. + +## Implementation + +We can make each tier's gas price strategy fully configurable in protocol parameters, while providing a sensible default one. + +Pseudocode in python-like syntax: + +```python +interface TieredTx: + def tier(self) -> int: + pass + +def tx_tier(tx): + if isinstance(tx, TieredTx): + return tx.tier() + else: + # default tier for custom transactions + return 0 + # NOTE: we can add more rules here per "Tx Prioritization" section + +class TierParams: + 'gas price strategy parameters of one tier' + priority: int # priority in tendermint mempool + initial_gas_price: Coin + parent_gas_target: int + change_speed: Decimal # 0 means don't adjust for block load. + +class Params: + 'protocol parameters' + tiers: List[TierParams] + +class State: + 'consensus state' + # total gas used in last block, None when it's the first block + parent_gas_used: Optional[int] + # gas prices of last block for all tiers + gas_prices: List[Coin] + +def begin_block(): + 'Adjust gas prices' + for i, tier in enumerate(Params.tiers): + if State.parent_gas_used is None: + # initialized gas price for the first block + State.gas_prices[i] = tier.initial_gas_price + else: + # adjust gas price according to gas used in previous block + State.gas_prices[i] = adjust_gas_price(State.gas_prices[i], State.parent_gas_used, tier) + +def mempoolFeeTxHandler_checkTx(ctx, tx): + # the minimal-gas-price configured by validator, zero in deliver_tx context + validator_price = ctx.MinGasPrice() + consensus_price = State.gas_prices[tx_tier(tx)] + min_price = max(validator_price, consensus_price) + + # zero means infinity for gas price cap + if tx.gas_price() > 0 and tx.gas_price() < min_price: + return 'insufficient fees' + return next_CheckTx(ctx, tx) + +def txPriorityHandler_checkTx(ctx, tx): + res, err := next_CheckTx(ctx, tx) + # pass priority to tendermint + res.Priority = Params.tiers[tx_tier(tx)].priority + return res, err + +def end_block(): + 'Update block gas used' + State.parent_gas_used = block_gas_meter.consumed() +``` + +### Dos attack protection + +To fully saturate the blocks and prevent other transactions from executing, attacker need to use transactions of highest tier, the cost would be significantly higher than the default tier. + +If attacker spam with lower tier transactions, user can mitigate by sending higher tier transactions. + +## Consequences + +### Backwards Compatibility + +- New protocol parameters. +- New consensus states. +- New/changed fields in transaction body. + +### Positive + +- The default tier keeps the same predictable gas price experience for client. +- The higher tier's gas price can adapt to block load. +- No priority conflict with custom priority based on transaction types, since this proposal only occupy three priority levels. +- Possibility to compose different priority rules with tiers + +### Negative + +- Wallets & tools need to update to support the new `tier` parameter, and semantic of `fee` field is changed. + +### Neutral + +## References + +- https://eips.ethereum.org/EIPS/eip-1559 +- https://iohk.io/en/blog/posts/2021/11/26/network-traffic-and-tiered-pricing/ diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-049-state-sync-hooks.md b/versioned_docs/version-0.46/integrate/architecture/adr-049-state-sync-hooks.md new file mode 100644 index 000000000..e1616c226 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-049-state-sync-hooks.md @@ -0,0 +1,160 @@ +# ADR 049: State Sync Hooks + +## Changelog + +- Jan 19, 2022: Initial Draft + +## Status + +Draft, Under Implementation + +## Abstract + +This ADR outlines a hooks-based mechanism for application modules to provide additional state (outside of the IAVL tree) to be used +during state sync. + +## Context + +New clients use state-sync to download snapshots of module state from peers. Currently, the snapshot consists of a +stream of `SnapshotStoreItem` and `SnapshotIAVLItem`, which means that application modules that define their state outside of the IAVL +tree cannot include their state as part of the state-sync process. + +Note, Even though the module state data is outside of the tree, for determinism we require that the hash of the external data should +be posted in the IAVL tree. + +## Decision + +A simple proposal based on our existing implementation is that, we can add two new message types: `SnapshotExtensionMeta` +and `SnapshotExtensionPayload`, and they are appended to the existing multi-store stream with `SnapshotExtensionMeta` +acting as a delimiter between extensions. As the chunk hashes should be able to ensure data integrity, we don't need +a delimiter to mark the end of the snapshot stream. + +Besides, we provide `Snapshotter` and `ExtensionSnapshotter` interface for modules to implement snapshotters, which will handle both taking +snapshot and the restoration. Each module could have mutiple snapshotters, and for modules with additional state, they should +implement `ExtensionSnapshotter` as extension snapshotters. When setting up the application, the snapshot `Manager` should call +`RegisterExtensions([]ExtensionSnapshotter…)` to register all the extension snapshotters. + +```proto +// SnapshotItem is an item contained in a rootmulti.Store snapshot. +// On top of the exsiting SnapshotStoreItem and SnapshotIAVLItem, we add two new options for the item. +message SnapshotItem { + // item is the specific type of snapshot item. + oneof item { + SnapshotStoreItem store = 1; + SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; + SnapshotExtensionMeta extension = 3; + SnapshotExtensionPayload extension_payload = 4; + } +} + +// SnapshotExtensionMeta contains metadata about an external snapshotter. +// One module may need multiple snapshotters, so each module may have multiple SnapshotExtensionMeta. +message SnapshotExtensionMeta { + // the name of the ExtensionSnapshotter, and it is registered to snapshotter manager when setting up the application + // name should be unique for each ExtensionSnapshotter as we need to alphabetically order their snapshots to get + // deterministic snapshot stream. + string name = 1; + // this is used by each ExtensionSnapshotter to decide the format of payloads included in SnapshotExtensionPayload message + // it is used within the snapshotter/namespace, not global one for all modules + uint32 format = 2; +} + +// SnapshotExtensionPayload contains payloads of an external snapshotter. +message SnapshotExtensionPayload { + bytes payload = 1; +} +``` + +When we create a snapshot stream, the `multistore` snapshot is always placed at the beginning of the binary stream, and other extension snapshots are alphabetically ordered by the name of the corresponding `ExtensionSnapshotter`. + +The snapshot stream would look like as follows: + +```go +// multi-store snapshot +{SnapshotStoreItem | SnapshotIAVLItem, ...} +// extension1 snapshot +SnapshotExtensionMeta +{SnapshotExtensionPayload, ...} +// extension2 snapshot +SnapshotExtensionMeta +{SnapshotExtensionPayload, ...} +``` + +We add an `extensions` field to snapshot `Manager` for extension snapshotters. The `multistore` snapshotter is a special one and it doesn't need a name because it is always placed at the beginning of the binary stream. + +```go +type Manager struct { + store *Store + multistore types.Snapshotter + extensions map[string]types.ExtensionSnapshotter + mtx sync.Mutex + operation operation + chRestore chan<- io.ReadCloser + chRestoreDone <-chan restoreDone + restoreChunkHashes [][]byte + restoreChunkIndex uint32 +} +``` + +For extension snapshotters that implement the `ExtensionSnapshotter` interface, their names should be registered to the snapshot `Manager` by +calling `RegisterExtensions` when setting up the application. The snapshotters will handle both taking snapshot and restoration. + +```go +// RegisterExtensions register extension snapshotters to manager +func (m *Manager) RegisterExtensions(extensions ...types.ExtensionSnapshotter) error +``` + +On top of the existing `Snapshotter` interface for the `multistore`, we add `ExtensionSnapshotter` interface for the extension snapshotters. Three more function signatures: `SnapshotFormat()`, `SupportedFormats()` and `SnapshotName()` are added to `ExtensionSnapshotter`. + +```go +// ExtensionSnapshotter is an extension Snapshotter that is appended to the snapshot stream. +// ExtensionSnapshotter has an unique name and manages it's own internal formats. +type ExtensionSnapshotter interface { + Snapshotter + + // SnapshotName returns the name of snapshotter, it should be unique in the manager. + SnapshotName() string + + // SnapshotFormat returns the default format used to take a snapshot. + SnapshotFormat() uint32 + + // SupportedFormats returns a list of formats it can restore from. + SupportedFormats() []uint32 +} +``` + +## Consequences + +As a result of this implementation, we are able to create snapshots of binary chunk stream for the state that we maintain outside of the IAVL Tree, CosmWasm blobs for example. And new clients are able to fetch sanpshots of state for all modules that have implemented the corresponding interface from peer nodes. + + +### Backwards Compatibility + +This ADR introduces new proto message types, add an `extensions` field in snapshot `Manager`, and add new `ExtensionSnapshotter` interface, so this is not backwards compatible if we have extensions. + +But for applications that does not have the state data outside of the IAVL tree for any module, the snapshot stream is backwards-compatible. + +### Positive + +- State maintained outside of IAVL tree like CosmWasm blobs can create snapshots by implementing extension snapshotters, and being fetched by new clients via state-sync. + +### Negative + +### Neutral + +- All modules that maintain state outside of IAVL tree need to implement `ExtensionSnapshotter` and the snapshot `Manager` need to call `RegisterExtensions` when setting up the application. + +## Further Discussions + +While an ADR is in the DRAFT or PROPOSED stage, this section should contain a summary of issues to be solved in future iterations (usually referencing comments from a pull-request discussion). +Later, this section can optionally list ideas or improvements the author or reviewers found during the analysis of this ADR. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +- https://github.com/cosmos/cosmos-sdk/pull/10961 +- https://github.com/cosmos/cosmos-sdk/issues/7340 +- https://hackmd.io/gJoyev6DSmqqkO667WQlGw diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-053-go-module-refactoring.md b/versioned_docs/version-0.46/integrate/architecture/adr-053-go-module-refactoring.md new file mode 100644 index 000000000..9093ae9d9 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-053-go-module-refactoring.md @@ -0,0 +1,109 @@ +# ADR 053: Go Module Refactoring + +## Changelog + +* 2022-04-27: First Draft + +## Status + +PROPOSED + +## Abstract + +The current SDK is built as a single monolithic go module. This ADR describes +how we refactor the SDK into smaller independently versioned go modules +for ease of maintenance. + +## Context + +Go modules impose certain requirements on software projects with respect to +stable version numbers (anything above 0.x) in that [any API breaking changes +necessitate a major version](https://go.dev/doc/modules/release-workflow#breaking) +increase which technically creates a new go module +(with a v2, v3, etc. suffix). + +[Keeping modules API compatible](https://go.dev/blog/module-compatibility) in +this way requires a fair amount of fair thought and discipline. + +The Cosmos SDK is a fairly large project which originated before go modules +came into existence and has always been under a v0.x release even though +it has been used in production for years now, not because it isn't production +quality software, but rather because the API compatibility guarantees required +by go modules are fairly complex to adhere to with such a large project. +Up to now, it has generally been deemed more important to be able to break the +API if needed rather than require all users update all package import paths +to accommodate breaking changes causing v2, v3, etc. releases. This is in +addition to the other complexities related to protobuf generated code that will +be addressed in a separate ADR. + +Nevertheless, the desire for semantic versioning has been [strong in the +community](https://github.com/cosmos/cosmos-sdk/discussions/10162) and the +single go module release process has made it very hard to +release small changes to isolated features in a timely manner. Release cycles +often exceed six months which means small improvements done in a day or +two get bottle-necked by everything else in the monolithic release cycle. + +## Decision + +To improve the current situation, the SDK is being refactored into multiple +go modules within the current repository. There has been a [fair amount of +debate](https://github.com/cosmos/cosmos-sdk/discussions/10582#discussioncomment-1813377) +as to how to do this, with some developers arguing for larger vs smaller +module scopes. There are pros and cons to both approaches (which will be +discussed below in the [Consequences](#consequences) section), but the +approach being adopted is the following: +* a go module should generally be scoped to a specific coherent set of +functionality (such as math, errors, store, etc.) +* when code is removed from the core SDK and moved to a new module path, every +effort should be made to avoid API breaking changes in the existing code using +aliases and wrapper types (as done in https://github.com/cosmos/cosmos-sdk/pull/10779 +and https://github.com/cosmos/cosmos-sdk/pull/11788) +* new go modules should be moved to a standalone domain (`cosmossdk.io`) before +being tagged as `v1.0.0` to accommodate the possibility that they may be +better served by a standalone repository in the future +* all go modules should follow the guidelines in https://go.dev/blog/module-compatibility +before `v1.0.0` is tagged and should make use of `internal` packages to limit +the exposed API surface +* the new go module's API may deviate from the existing code where there are +clear improvements to be made or to remove legacy dependencies (for instance on +amino or gogo proto), as long the old package attempts +to avoid API breakage with aliases and wrappers +* care should be taken when simply trying to turn an existing package into a +new go module: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository. +In general, it seems safer to just create a new module path (appending v2, v3, etc. +if necessary), rather than trying to make an old package a new module. + +## Consequences + +### Backwards Compatibility + +If the above guidelines are followed to use aliases or wrapper types pointing +in existing APIs that point back to the new go modules, there should be no or +very limited breaking changes to existing APIs. + +### Positive + +* standalone pieces of software will reach `v1.0.0` sooner +* new features to specific functionality will be released sooner + +### Negative + +* there will be more go module versions to update in the SDK itself and +per-project, although most of these will hopefully be indirect + +### Neutral + +## Further Discussions + +Further discussions are occurring in primarily in +https://github.com/cosmos/cosmos-sdk/discussions/10582 and within +the Cosmos SDK Framework Working Group. + +## References + +* https://go.dev/doc/modules/release-workflow +* https://go.dev/blog/module-compatibility +* https://github.com/cosmos/cosmos-sdk/discussions/10162 +* https://github.com/cosmos/cosmos-sdk/discussions/10582 +* https://github.com/cosmos/cosmos-sdk/pull/10779 +* https://github.com/cosmos/cosmos-sdk/pull/11788 \ No newline at end of file diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-055-orm.md b/versioned_docs/version-0.46/integrate/architecture/adr-055-orm.md new file mode 100644 index 000000000..71a759526 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-055-orm.md @@ -0,0 +1,111 @@ +# ADR 055: ORM + +## Changelog + +* 2022-04-27: First draft + +## Status + +ACCEPTED Implemented + +## Abstract + +In order to make it easier for developers to build Cosmos SDK modules and for clients to query, index and verify proofs +against state data, we have implemented an ORM (object-relational mapping) layer for the Cosmos SDK. + +## Context + +Historically modules in the Cosmos SDK have always used the key-value store directly and created various handwritten +functions for managing key format as well as constructing secondary indexes. This consumes a significant amount of +time when building a module and is error-prone. Because key formats are non-standard, sometimes poorly documented, +and subject to change, it is hard for clients to generically index, query and verify merkle proofs against state data. + +The known first instance of an "ORM" in the Cosmos ecosystem was in [weave](https://github.com/iov-one/weave/tree/master/orm). +A later version was built for [regen-ledger](https://github.com/regen-network/regen-ledger/tree/157181f955823149e1825263a317ad8e16096da4/orm) for +use in the group module and later [ported to the SDK](https://github.com/cosmos/cosmos-sdk/tree/35d3312c3be306591fcba39892223f1244c8d108/x/group/internal/orm) +just for that purpose. + +While these earlier designs made it significantly easier to write state machines, they still required a lot of manual +configuration, didn't expose state format directly to clients, and were limited in their support of different types +of index keys, composite keys, and range queries. + +Discussions about the design continued in https://github.com/cosmos/cosmos-sdk/discussions/9156 and more +sophisticated proofs of concept were created in https://github.com/allinbits/cosmos-sdk-poc/tree/master/runtime/orm +and https://github.com/cosmos/cosmos-sdk/pull/10454. + +## Decision + +These prior efforts culminated in the creation of the Cosmos SDK `orm` go module which uses protobuf annotations +for specifying ORM table definitions. This ORM is based on the new `google.golang.org/protobuf/reflect/protoreflect` +API and supports: +* sorted indexes for all simple protobuf types (except `bytes`, `enum`, `float`, `double`) as well as `Timestamp` and `Duration` +* unsorted `bytes` and `enum` indexes +* composite primary and secondary keys +* unique indexes +* auto-incrementing `uint64` primary keys +* complex prefix and range queries +* paginated queries +* complete logical decoding of KV-store data + +Almost all the information needed to decode state directly is specified in .proto files. Each table definition specifies +an ID which is unique per .proto file and each index within a table is unique within that table. Clients then only need +to know the name of a module and the prefix ORM data for a specific .proto file within that module in order to decode +state data directly. This additional information will be exposed directly through app configs which will be explained +in a future ADR related to app wiring. + +The ORM makes optimizations around storage space by not repeating values in the primary key in the key value +when storing primary key records. For example, if the object `{"a":0,"b":1}` has the primary key `a`, it will +be stored in the key value store as `Key: '0', Value: {"b":1}` (with more efficient protobuf binary encoding). +Also, the generated code from https://github.com/cosmos/cosmos-proto does optimizations around the +`google.golang.org/protobuf/reflect/protoreflect` API to improve performance. + +A code generator is included with the ORM which creates type safe wrappers around the ORM's dynamic `Table` +implementation and is the recommended way for modules to use the ORM. + +The ORM tests provide a simplified bank module demonstration which illustrates: +- [ORM proto options](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/internal/testpb/bank.proto) +- [Generated Code](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/internal/testpb/bank.cosmos_orm.go) +- [Example Usage in a Module Keeper](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/model/ormdb/module_test.go) + +## Consequences + +### Backwards Compatibility + +State machine code that adopts the ORM will need migrations as the state layout is generally backwards incompatible. +These state machines will also need to migrate to https://github.com/cosmos/cosmos-proto at least for state data. + +### Positive + +* easier to build modules +* easier to add secondary indexes to state +* possible to write a generic indexer for ORM state +* easier to write clients that do state proofs +* possible to automatically write query layers rather than needing to manually implement gRPC queries + +### Negative + +* worse performance than handwritten keys (for now). See [Further Discussions](#further-discussions) +for potential improvements + +### Neutral + +## Further Discussions + +Further discussions will happen within the Cosmos SDK Framework Working Group. Current planned and ongoing work includes: +* automatically generate client-facing query layer +* client-side query libraries that transparently verify light client proofs +* index ORM data to SQL databases +* improve performance by: + * optimizing existing reflection based code to avoid unnecessary gets when doing deletes & updates of simple tables + * more sophisticated code generation such as making fast path reflection even faster (avoiding `switch` statements), + or even fully generating code that equals handwritten performance + + +## References + +* https://github.com/iov-one/weave/tree/master/orm). +* https://github.com/regen-network/regen-ledger/tree/157181f955823149e1825263a317ad8e16096da4/orm +* https://github.com/cosmos/cosmos-sdk/tree/35d3312c3be306591fcba39892223f1244c8d108/x/group/internal/orm +* https://github.com/cosmos/cosmos-sdk/discussions/9156 +* https://github.com/allinbits/cosmos-sdk-poc/tree/master/runtime/orm +* https://github.com/cosmos/cosmos-sdk/pull/10454 \ No newline at end of file diff --git a/versioned_docs/version-0.46/integrate/architecture/adr-template.md b/versioned_docs/version-0.46/integrate/architecture/adr-template.md new file mode 100644 index 000000000..dae4dfd44 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/architecture/adr-template.md @@ -0,0 +1,60 @@ +# ADR {ADR-NUMBER}: {TITLE} + +## Changelog + +* {date}: {changelog} + +## Status + +{DRAFT | PROPOSED} Not Implemented + +> Please have a look at the [PROCESS](./PROCESS.md#adr-status) page. +> Use DRAFT if the ADR is in a draft stage (draft PR) or PROPOSED if it's in review. + +## Abstract + +> "If you can't explain it simply, you don't understand it well enough." Provide a simplified and layman-accessible explanation of the ADR. +> A short (~200 word) description of the issue being addressed. + +## Context + +> This section describes the forces at play, including technological, political, social, and project local. These forces are probably in tension, and should be called out as such. The language in this section is value-neutral. It is simply describing facts. It should clearly explain the problem and motivation that the proposal aims to resolve. +> {context body} + +## Decision + +> This section describes our response to these forces. It is stated in full sentences, with active voice. "We will ..." +> {decision body} + +## Consequences + +> This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ADR must explain how the author proposes to deal with these incompatibilities. ADR submissions without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +{positive consequences} + +### Negative + +{negative consequences} + +### Neutral + +{neutral consequences} + +## Further Discussions + +While an ADR is in the DRAFT or PROPOSED stage, this section should contain a summary of issues to be solved in future iterations (usually referencing comments from a pull-request discussion). +Later, this section can optionally list ideas or improvements the author or reviewers found during the analysis of this ADR. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +* {reference link} diff --git a/versioned_docs/version-0.46/integrate/building-modules/README.md b/versioned_docs/version-0.46/integrate/building-modules/README.md new file mode 100644 index 000000000..8dd53c945 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/README.md @@ -0,0 +1,23 @@ + + +# Building Modules + +This repository contains documentation on concepts developers need to know in order to build modules for Cosmos SDK applications. + +1. [Introduction to Cosmos SDK Modules](./intro.md) +2. [`AppModule` Interface and Module Manager](./module-manager.md) +3. [Messages and Queries](./messages-and-queries.md) +4. [`Msg` services - Processing Messages](./msg-services.md) +5. [Query Services - Processing Queries](./query-services.md) +6. [BeginBlocker and EndBlocker](./beginblock-endblock.md) +7. [`Keeper`s](./keeper.md) +8. [Invariants](./invariants.md) +9. [Genesis](./genesis.md) +10. [Module Interfaces](./module-interfaces.md) +11. [Standard Module Structure](./structure.md) +12. [Errors](./errors.md) +13. [In-Place Store Migrations](./upgrade.md) diff --git a/versioned_docs/version-0.46/integrate/building-modules/beginblock-endblock.md b/versioned_docs/version-0.46/integrate/building-modules/beginblock-endblock.md new file mode 100644 index 000000000..e324018fc --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/beginblock-endblock.md @@ -0,0 +1,39 @@ + + +# BeginBlocker and EndBlocker + +`BeginBlocker` and `EndBlocker` are optional methods module developers can implement in their module. They will be triggered at the beginning and at the end of each block respectively, when the [`BeginBlock`](../core/baseapp.md#beginblock) and [`EndBlock`](../core/baseapp.md#endblock) ABCI messages are received from the underlying consensus engine. {synopsis} + +## Pre-requisite Readings + +* [Module Manager](./module-manager.md) {prereq} + +## BeginBlocker and EndBlocker + +`BeginBlocker` and `EndBlocker` are a way for module developers to add automatic execution of logic to their module. This is a powerful tool that should be used carefully, as complex automatic functions can slow down or even halt the chain. + +When needed, `BeginBlocker` and `EndBlocker` are implemented as part of the [`AppModule` interface](./module-manager.md#appmodule). The `BeginBlock` and `EndBlock` methods of the interface implemented in `module.go` generally defer to `BeginBlocker` and `EndBlocker` methods respectively, which are usually implemented in `abci.go`. + +The actual implementation of `BeginBlocker` and `EndBlocker` in `abci.go` are very similar to that of a [`Msg` service](./msg-services.md): + +* They generally use the [`keeper`](./keeper.md) and [`ctx`](../core/context.md) to retrieve information about the latest state. +* If needed, they use the `keeper` and `ctx` to trigger state-transitions. +* If needed, they can emit [`events`](../core/events.md) via the `ctx`'s `EventManager`. + +A specificity of the `EndBlocker` is that it can return validator updates to the underlying consensus engine in the form of an [`[]abci.ValidatorUpdates`](https://docs.tendermint.com/master/spec/abci/abci.html#validatorupdate). This is the preferred way to implement custom validator changes. + +It is possible for developers to define the order of execution between the `BeginBlocker`/`EndBlocker` functions of each of their application's modules via the module's manager `SetOrderBeginBlocker`/`SetOrderEndBlocker` methods. For more on the module manager, click [here](./module-manager.md#manager). + +See an example implementation of `BeginBlocker` from the `distribution` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/distribution/abci.go#L14-L38 + +and an example implementation of `EndBlocker` from the `staking` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/abci.go#L22-L27 + +## Next {hide} + +Learn about [`keeper`s](./keeper.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/errors.md b/versioned_docs/version-0.46/integrate/building-modules/errors.md new file mode 100644 index 000000000..9e7b970fc --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/errors.md @@ -0,0 +1,50 @@ + + +# Errors + +This document outlines the recommended usage and APIs for error handling in Cosmos SDK modules. {synopsis} + +Modules are encouraged to define and register their own errors to provide better +context on failed message or handler execution. Typically, these errors should be +common or general errors which can be further wrapped to provide additional specific +execution context. + +## Registration + +Modules should define and register their custom errors in `x/{module}/errors.go`. +Registration of errors is handled via the [`errors` package](https://github.com/cosmos/cosmos-sdk/blob/main/errors/errors.go). + +Example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/distribution/types/errors.go#L1-L21 + +Each custom module error must provide the codespace, which is typically the module name +(e.g. "distribution") and is unique per module, and a uint32 code. Together, the codespace and code +provide a globally unique Cosmos SDK error. Typically, the code is monotonically increasing but does not +necessarily have to be. The only restrictions on error codes are the following: + +* Must be greater than one, as a code value of one is reserved for internal errors. +* Must be unique within the module. + +Note, the Cosmos SDK provides a core set of *common* errors. These errors are defined in [`types/errors/errors.go`](https://github.com/cosmos/cosmos-sdk/blob/main/types/errors/errors.go). + +## Wrapping + +The custom module errors can be returned as their concrete type as they already fulfill the `error` +interface. However, module errors can be wrapped to provide further context and meaning to failed +execution. + +Example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/keeper/keeper.go#L143-L184 + +Regardless if an error is wrapped or not, the Cosmos SDK's `errors` package provides a function to determine if +an error is of a particular kind via `Is`. + +## ABCI + +If a module error is registered, the Cosmos SDK `errors` package allows ABCI information to be extracted +through the `ABCIInfo` function. The package also provides `ResponseCheckTx` and `ResponseDeliverTx` as +auxiliary functions to automatically get `CheckTx` and `DeliverTx` responses from an error. diff --git a/versioned_docs/version-0.46/integrate/building-modules/genesis.md b/versioned_docs/version-0.46/integrate/building-modules/genesis.md new file mode 100644 index 000000000..9e9c57738 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/genesis.md @@ -0,0 +1,60 @@ + + +# Module Genesis + +Modules generally handle a subset of the state and, as such, they need to define the related subset of the genesis file as well as methods to initialize, verify and export it. {synopsis} + +## Pre-requisite Readings + +* [Module Manager](./module-manager.md) {prereq} +* [Keepers](./keeper.md) {prereq} + +## Type Definition + +The subset of the genesis state defined from a given module is generally defined in a `genesis.proto` file ([more info](../core/encoding.md#gogoproto) on how to define protobuf messages). The struct defining the module's subset of the genesis state is usually called `GenesisState` and contains all the module-related values that need to be initialized during the genesis process. + +See an example of `GenesisState` protobuf message definition from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/auth/v1beta1/genesis.proto + +Next we present the main genesis-related methods that need to be implemented by module developers in order for their module to be used in Cosmos SDK applications. + +### `DefaultGenesis` + +The `DefaultGenesis()` method is a simple method that calls the constructor function for `GenesisState` with the default value for each parameter. See an example from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/module.go#L45-L49 + +### `ValidateGenesis` + +The `ValidateGenesis(data GenesisState)` method is called to verify that the provided `genesisState` is correct. It should perform validity checks on each of the parameters listed in `GenesisState`. See an example from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/types/genesis.go#L61-L74 + +## Other Genesis Methods + +Other than the methods related directly to `GenesisState`, module developers are expected to implement two other methods as part of the [`AppModuleGenesis` interface](./module-manager.md#appmodulegenesis) (only if the module needs to initialize a subset of state in genesis). These methods are [`InitGenesis`](#initgenesis) and [`ExportGenesis`](#exportgenesis). + +### `InitGenesis` + +The `InitGenesis` method is executed during [`InitChain`](../core/baseapp.md#initchain) when the application is first started. Given a `GenesisState`, it initializes the subset of the state managed by the module by using the module's [`keeper`](./keeper.md) setter function on each parameter within the `GenesisState`. + +The [module manager](./module-manager.md#manager) of the application is responsible for calling the `InitGenesis` method of each of the application's modules in order. This order is set by the application developer via the manager's `SetOrderGenesisMethod`, which is called in the [application's constructor function](../basics/app-anatomy.md#constructor-function). + +See an example of `InitGenesis` from the `auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/keeper/genesis.go#L8-L27 + +### `ExportGenesis` + +The `ExportGenesis` method is executed whenever an export of the state is made. It takes the latest known version of the subset of the state managed by the module and creates a new `GenesisState` out of it. This is mainly used when the chain needs to be upgraded via a hard fork. + +See an example of `ExportGenesis` from the `auth` module. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/keeper/genesis.go#L29-L41 + +## Next {hide} + +Learn about [modules interfaces](module-interfaces.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/intro.md b/versioned_docs/version-0.46/integrate/building-modules/intro.md new file mode 100644 index 000000000..a6b088549 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/intro.md @@ -0,0 +1,92 @@ + + +# Introduction to Cosmos SDK Modules + +Modules define most of the logic of Cosmos SDK applications. Developers compose modules together using the Cosmos SDK to build their custom application-specific blockchains. This document outlines the basic concepts behind SDK modules and how to approach module management. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/app-anatomy.md) {prereq} +* [Lifecycle of a Cosmos SDK transaction](../basics/tx-lifecycle.md) {prereq} + +## Role of Modules in a Cosmos SDK Application + +The Cosmos SDK can be thought of as the Ruby-on-Rails of blockchain development. It comes with a core that provides the basic functionalities every blockchain application needs, like a [boilerplate implementation of the ABCI](../core/baseapp.md) to communicate with the underlying consensus engine, a [`multistore`](../core/store.md#multistore) to persist state, a [server](../core/node.md) to form a full-node and [interfaces](./module-interfaces.md) to handle queries. + +On top of this core, the Cosmos SDK enables developers to build modules that implement the business logic of their application. In other words, SDK modules implement the bulk of the logic of applications, while the core does the wiring and enables modules to be composed together. The end goal is to build a robust ecosystem of open-source Cosmos SDK modules, making it increasingly easier to build complex blockchain applications. + +Cosmos SDK modules can be seen as little state-machines within the state-machine. They generally define a subset of the state using one or more `KVStore`s in the [main multistore](../core/store.md), as well as a subset of [message types](./messages-and-queries.md#messages). These messages are routed by one of the main components of Cosmos SDK core, [`BaseApp`](../core/baseapp.md), to a module Protobuf [`Msg` service](./msg-services.md) that defines them. + +```text + + + | + | Transaction relayed from the full-node's consensus engine + | to the node's application via DeliverTx + | + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | + | Message routed to the correct + | module to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to the underlying consensus engine (e.g. Tendermint) + | (0=Ok, 1=Err) + v +``` + +As a result of this architecture, building a Cosmos SDK application usually revolves around writing modules to implement the specialized logic of the application and composing them with existing modules to complete the application. Developers will generally work on modules that implement logic needed for their specific use case that do not exist yet, and will use existing modules for more generic functionalities like staking, accounts, or token management. + +## How to Approach Building Modules as a Developer + +While there are no definitive guidelines for writing modules, here are some important design principles developers should keep in mind when building them: + +* **Composability**: Cosmos SDK applications are almost always composed of multiple modules. This means developers need to carefully consider the integration of their module not only with the core of the Cosmos SDK, but also with other modules. The former is achieved by following standard design patterns outlined [here](#main-components-of-sdk-modules), while the latter is achieved by properly exposing the store(s) of the module via the [`keeper`](./keeper.md). +* **Specialization**: A direct consequence of the **composability** feature is that modules should be **specialized**. Developers should carefully establish the scope of their module and not batch multiple functionalities into the same module. This separation of concerns enables modules to be re-used in other projects and improves the upgradability of the application. **Specialization** also plays an important role in the [object-capabilities model](../core/ocap.md) of the Cosmos SDK. +* **Capabilities**: Most modules need to read and/or write to the store(s) of other modules. However, in an open-source environment, it is possible for some modules to be malicious. That is why module developers need to carefully think not only about how their module interacts with other modules, but also about how to give access to the module's store(s). The Cosmos SDK takes a capabilities-oriented approach to inter-module security. This means that each store defined by a module is accessed by a `key`, which is held by the module's [`keeper`](./keeper.md). This `keeper` defines how to access the store(s) and under what conditions. Access to the module's store(s) is done by passing a reference to the module's `keeper`. + +## Main Components of Cosmos SDK Modules + +Modules are by convention defined in the `./x/` subfolder (e.g. the `bank` module will be defined in the `./x/bank` folder). They generally share the same core components: + +* A [`keeper`](./keeper.md), used to access the module's store(s) and update the state. +* A [`Msg` service](./messages-and-queries.md#messages), used to process messages when they are routed to the module by [`BaseApp`](../core/baseapp.md#message-routing) and trigger state-transitions. +* A [query service](./query-services.md), used to process user queries when they are routed to the module by [`BaseApp`](../core/baseapp.md#query-routing). +* Interfaces, for end users to query the subset of the state defined by the module and create `message`s of the custom types defined in the module. + +In addition to these components, modules implement the `AppModule` interface in order to be managed by the [`module manager`](./module-manager.md). + +Please refer to the [structure document](./structure.md) to learn about the recommended structure of a module's directory. + +## Next {hide} + +Read more on the [`AppModule` interface and the `module manager`](./module-manager.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/invariants.md b/versioned_docs/version-0.46/integrate/building-modules/invariants.md new file mode 100644 index 000000000..0cbb0adac --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/invariants.md @@ -0,0 +1,80 @@ + + +# Invariants + +An invariant is a property of the application that should always be true. In the context of the Cosmos SDK, an `Invariant` is a function that checks for a particular invariant. These functions are useful to detect bugs early on and act upon them to limit their potential consequences (e.g. by halting the chain). They are also useful in the development process of the application to detect bugs via simulations. {synopsis} + +## Pre-requisite Readings + +* [Keepers](./keeper.md) {prereq} + +## Implementing `Invariant`s + +An `Invariant` is a function that checks for a particular invariant within a module. Module `Invariant`s must follow the `Invariant` type: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/invariant.go#L9 + +The `string` return value is the invariant message, which can be used when printing logs, and the `bool` return value is the actual result of the invariant check. + +In practice, each module implements `Invariant`s in a `keeper/invariants.go` file within the module's folder. The standard is to implement one `Invariant` function per logical grouping of invariants with the following model: + +```go +// Example for an Invariant that checks balance-related invariants + +func BalanceInvariants(k Keeper) sdk.Invariant { + return func(ctx sdk.Context) (string, bool) { + // Implement checks for balance-related invariants + } +} +``` + +Additionally, module developers should generally implement an `AllInvariants` function that runs all the `Invariant`s functions of the module: + +```go +// AllInvariants runs all invariants of the module. +// In this example, the module implements two Invariants: BalanceInvariants and DepositsInvariants + +func AllInvariants(k Keeper) sdk.Invariant { + + return func(ctx sdk.Context) (string, bool) { + res, stop := BalanceInvariants(k)(ctx) + if stop { + return res, stop + } + + return DepositsInvariant(k)(ctx) + } +} +``` + +Finally, module developers need to implement the `RegisterInvariants` method as part of the [`AppModule` interface](./module-manager.md#appmodule). Indeed, the `RegisterInvariants` method of the module, implemented in the `module/module.go` file, typically only defers the call to a `RegisterInvariants` method implemented in the `keeper/invariants.go` file. The `RegisterInvariants` method registers a route for each `Invariant` function in the [`InvariantRegistry`](#invariant-registry): + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/keeper/invariants.go#L12-L21 + +For more, see an example of [`Invariant`s implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/keeper/invariants.go). + +## Invariant Registry + +The `InvariantRegistry` is a registry where the `Invariant`s of all the modules of an application are registered. There is only one `InvariantRegistry` per **application**, meaning module developers need not implement their own `InvariantRegistry` when building a module. **All module developers need to do is to register their modules' invariants in the `InvariantRegistry`, as explained in the section above**. The rest of this section gives more information on the `InvariantRegistry` itself, and does not contain anything directly relevant to module developers. + +At its core, the `InvariantRegistry` is defined in the Cosmos SDK as an interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/invariant.go#L14-L17 + +Typically, this interface is implemented in the `keeper` of a specific module. The most used implementation of an `InvariantRegistry` can be found in the `crisis` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/crisis/keeper/keeper.go#L49-L53 + + The `InvariantRegistry` is therefore typically instantiated by instantiating the `keeper` of the `crisis` module in the [application's constructor function](../basics/app-anatomy.md#constructor-function). + +`Invariant`s can be checked manually via [`message`s](./messages-and-queries.md), but most often they are checked automatically at the end of each block. Here is an example from the `crisis` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/crisis/abci.go#L12-L21 + +In both cases, if one of the `Invariant`s returns false, the `InvariantRegistry` can trigger special logic (e.g. have the application panic and print the `Invariant`s message in the log). + +## Next {hide} + +Learn about [genesis functionalities](./genesis.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/keeper.md b/versioned_docs/version-0.46/integrate/building-modules/keeper.md new file mode 100644 index 000000000..78712a91b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/keeper.md @@ -0,0 +1,85 @@ + + +# Keepers + +`Keeper`s refer to a Cosmos SDK abstraction whose role is to manage access to the subset of the state defined by various modules. `Keeper`s are module-specific, i.e. the subset of state defined by a module can only be accessed by a `keeper` defined in said module. If a module needs to access the subset of state defined by another module, a reference to the second module's internal `keeper` needs to be passed to the first one. This is done in `app.go` during the instantiation of module keepers. {synopsis} + +## Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](./intro.md) {prereq} + +## Motivation + +The Cosmos SDK is a framework that makes it easy for developers to build complex decentralized applications from scratch, mainly by composing modules together. As the ecosystem of open-source modules for the Cosmos SDK expands, it will become increasingly likely that some of these modules contain vulnerabilities, as a result of the negligence or malice of their developer. + +The Cosmos SDK adopts an [object-capabilities-based approach](../core/ocap.md) to help developers better protect their application from unwanted inter-module interactions, and `keeper`s are at the core of this approach. A `keeper` can be considered quite literally to be the gatekeeper of a module's store(s). Each store (typically an [`IAVL` Store](../core/store.md#iavl-store)) defined within a module comes with a `storeKey`, which grants unlimited access to it. The module's `keeper` holds this `storeKey` (which should otherwise remain unexposed), and defines [methods](#implementing-methods) for reading and writing to the store(s). + +The core idea behind the object-capabilities approach is to only reveal what is necessary to get the work done. In practice, this means that instead of handling permissions of modules through access-control lists, module `keeper`s are passed a reference to the specific instance of the other modules' `keeper`s that they need to access (this is done in the [application's constructor function](../basics/app-anatomy.md#constructor-function)). As a consequence, a module can only interact with the subset of state defined in another module via the methods exposed by the instance of the other module's `keeper`. This is a great way for developers to control the interactions that their own module can have with modules developed by external developers. + +## Type Definition + +`keeper`s are generally implemented in a `/keeper/keeper.go` file located in the module's folder. By convention, the type `keeper` of a module is simply named `Keeper` and usually follows the following structure: + +```go +type Keeper struct { + // External keepers, if any + + // Store key(s) + + // codec +} +``` + +For example, here is the type definition of the `keeper` from the `staking` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/keeper/keeper.go#L21-L29 + +Let us go through the different parameters: + +* An expected `keeper` is a `keeper` external to a module that is required by the internal `keeper` of said module. External `keeper`s are listed in the internal `keeper`'s type definition as interfaces. These interfaces are themselves defined in an `expected_keepers.go` file in the root of the module's folder. In this context, interfaces are used to reduce the number of dependencies, as well as to facilitate the maintenance of the module itself. +* `storeKey`s grant access to the store(s) of the [multistore](../core/store.md) managed by the module. They should always remain unexposed to external modules. +* `cdc` is the [codec](../core/encoding.md) used to marshall and unmarshall structs to/from `[]byte`. The `cdc` can be any of `codec.BinaryCodec`, `codec.JSONCodec` or `codec.Codec` based on your requirements. It can be either a proto or amino codec as long as they implement these interfaces. + +Of course, it is possible to define different types of internal `keeper`s for the same module (e.g. a read-only `keeper`). Each type of `keeper` comes with its own constructor function, which is called from the [application's constructor function](../basics/app-anatomy.md). This is where `keeper`s are instantiated, and where developers make sure to pass correct instances of modules' `keeper`s to other modules that require them. + +## Implementing Methods + +`Keeper`s primarily expose getter and setter methods for the store(s) managed by their module. These methods should remain as simple as possible and strictly be limited to getting or setting the requested value, as validity checks should have already been performed via the `ValidateBasic()` method of the [`message`](./messages-and-queries.md#messages) and the [`Msg` server](./msg-services.md) when `keeper`s' methods are called. + +Typically, a *getter* method will have the following signature + +```go +func (k Keeper) Get(ctx sdk.Context, key string) returnType +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. Then it's preferred to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. If it exists, get the `[]byte` value stored at location `[]byte(key)` using the `Get(key []byte)` method of the store. +3. Unmarshall the retrieved value from `[]byte` to `returnType` using the codec `cdc`. Return the value. + +Similarly, a *setter* method will have the following signature + +```go +func (k Keeper) Set(ctx sdk.Context, key string, value valueType) +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. It's preferred to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. Marshal `value` to `[]byte` using the codec `cdc`. +3. Set the encoded value in the store at location `key` using the `Set(key []byte, value []byte)` method of the store. + +For more, see an example of `keeper`'s [methods implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/keeper/keeper.go). + +The [module `KVStore`](../core/store.md#kvstore-and-commitkvstore-interfaces) also provides an `Iterator()` method which returns an `Iterator` object to iterate over a domain of keys. + +This is an example from the `auth` module to iterate accounts: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/keeper/account.go#L76-L90 + +## Next {hide} + +Learn about [invariants](./invariants.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/messages-and-queries.md b/versioned_docs/version-0.46/integrate/building-modules/messages-and-queries.md new file mode 100644 index 000000000..6e075bf42 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/messages-and-queries.md @@ -0,0 +1,115 @@ + + +# Messages and Queries + +`Msg`s and `Queries` are the two primary objects handled by modules. Most of the core components defined in a module, like `Msg` services, `keeper`s and `Query` services, exist to process `message`s and `queries`. {synopsis} + +## Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](./intro.md) {prereq} + +## Messages + +`Msg`s are objects whose end-goal is to trigger state-transitions. They are wrapped in [transactions](../core/transactions.md), which may contain one or more of them. + +When a transaction is relayed from the underlying consensus engine to the Cosmos SDK application, it is first decoded by [`BaseApp`](../core/baseapp.md). Then, each message contained in the transaction is extracted and routed to the appropriate module via `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's [`Msg` service](./msg-services.md). For a more detailed explanation of the lifecycle of a transaction, click [here](../basics/tx-lifecycle.md). + +### `Msg` Services + +Defining Protobuf `Msg` services is the recommended way to handle messages. A Protobuf `Msg` service should be created for each module, typically in `tx.proto` (see more info about [conventions and naming](../core/encoding.md#faq)). It must have an RPC service method defined for each message in the module. + +See an example of a `Msg` service definition from `x/bank` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L12-L19 + +Each `Msg` service method must have exactly one argument, which must implement the `sdk.Msg` interface, and a Protobuf response. The naming convention is to call the RPC argument `Msg` and the RPC response `MsgResponse`. For example: + +```protobuf + rpc Send(MsgSend) returns (MsgSendResponse); +``` + +`sdk.Msg` interface is a simplified version of the Amino `LegacyMsg` interface described [below](#legacy-amino-msgs) with only `ValidateBasic()` and `GetSigners()` methods. For backwards compatibility with [Amino `LegacyMsg`s](#legacy-amino-msgs), existing `LegacyMsg` types should be used as the request parameter for `service` RPC definitions. Newer `sdk.Msg` types, which only support `service` definitions, should use canonical `Msg...` name. + +The Cosmos SDK uses Protobuf definitions to generate client and server code: + +* `MsgServer` interface defines the server API for the `Msg` service and its implementation is described as part of the [`Msg` services](./msg-services.md) documentation. +* Structures are generated for all RPC request and response types. + +A `RegisterMsgServer` method is also generated and should be used to register the module's `MsgServer` implementation in `RegisterServices` method from the [`AppModule` interface](./module-manager.md#appmodule). + +In order for clients (CLI and grpc-gateway) to have these URLs registered, the Cosmos SDK provides the function `RegisterMsgServiceDesc(registry codectypes.InterfaceRegistry, sd *grpc.ServiceDesc)` that should be called inside module's [`RegisterInterfaces`](module-manager.md#appmodulebasic) method, using the proto-generated `&_Msg_serviceDesc` as `*grpc.ServiceDesc` argument. + +### Legacy Amino `LegacyMsg`s + +The following way of defining messages is deprecated and using [`Msg` services](#msg-services) is preferred. + +Amino `LegacyMsg`s can be defined as protobuf messages. The messages definition usually includes a list of parameters needed to process the message that will be provided by end-users when they want to create a new transaction containing said message. + +A `LegacyMsg` is typically accompanied by a standard constructor function, that is called from one of the [module's interface](./module-interfaces.md). `message`s also need to implement the `sdk.Msg` interface: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/tx_msg.go#L10-L22 + +It extends `proto.Message` and contains the following methods: + +* `Route() string`: Name of the route for this message. Typically all `message`s in a module have the same route, which is most often the module's name. +* `Type() string`: Type of the message, used primarily in [events](../core/events.md). This should return a message-specific `string`, typically the denomination of the message itself. +* [`ValidateBasic() error`](../basics/tx-lifecycle.md#ValidateBasic). +* `GetSignBytes() []byte`: Return the canonical byte representation of the message. Used to generate a signature. +* `GetSigners() []AccAddress`: Return the list of signers. The Cosmos SDK will make sure that each `message` contained in a transaction is signed by all the signers listed in the list returned by this method. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/migrations/legacytx/stdsign.go#L20-L36 + +See an example implementation of a `message` from the `gov` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/gov/types/v1/msgs.go#L106-L138 + +## Queries + +A `query` is a request for information made by end-users of applications through an interface and processed by a full-node. A `query` is received by a full-node through its consensus engine and relayed to the application via the ABCI. It is then routed to the appropriate module via `BaseApp`'s `QueryRouter` so that it can be processed by the module's query service (./query-services.md). For a deeper look at the lifecycle of a `query`, click [here](../basics/query-lifecycle.md). + +### gRPC Queries + +Queries should be defined using [Protobuf services](https://developers.google.com/protocol-buffers/docs/proto#services). A `Query` service should be created per module in `query.proto`. This service lists endpoints starting with `rpc`. + +Here's an example of such a `Query` service definition: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/auth/v1beta1/query.proto#L13-L59 + +As `proto.Message`s, generated `Response` types implement by default `String()` method of [`fmt.Stringer`](https://pkg.go.dev/fmt#Stringer). + +A `RegisterQueryServer` method is also generated and should be used to register the module's query server in the `RegisterServices` method from the [`AppModule` interface](./module-manager.md#appmodule). + +### Legacy Queries + +Before the introduction of Protobuf and gRPC in the Cosmos SDK, there was usually no specific `query` object defined by module developers, contrary to `message`s. Instead, the Cosmos SDK took the simpler approach of using a simple `path` to define each `query`. The `path` contains the `query` type and all the arguments needed to process it. For most module queries, the `path` should look like the following: + +```text +queryCategory/queryRoute/queryType/arg1/arg2/... +``` + +where: + +* `queryCategory` is the category of the `query`, typically `custom` for module queries. It is used to differentiate between different kinds of queries within `BaseApp`'s [`Query` method](../core/baseapp.md#query). +* `queryRoute` is used by `BaseApp`'s [`queryRouter`](../core/baseapp.md#query-routing) to map the `query` to its module. Usually, `queryRoute` should be the name of the module. +* `queryType` is used by the module's [`querier`](./query-services.md#legacy-queriers) to map the `query` to the appropriate `querier function` within the module. +* `args` are the actual arguments needed to process the `query`. They are filled out by the end-user. Note that for bigger queries, you might prefer passing arguments in the `Data` field of the request `req` instead of the `path`. + +The `path` for each `query` must be defined by the module developer in the module's [command-line interface file](./module-interfaces.md#query-commands).Overall, there are 3 mains components module developers need to implement in order to make the subset of the state defined by their module queryable: + +* A [`querier`](./query-services.md#legacy-queriers), to process the `query` once it has been [routed to the module](../core/baseapp.md#query-routing). +* [Query commands](./module-interfaces.md#query-commands) in the module's CLI file, where the `path` for each `query` is specified. +* `query` return types. Typically defined in a file `types/querier.go`, they specify the result type of each of the module's `queries`. These custom types must implement the `String()` method of [`fmt.Stringer`](https://pkg.go.dev/fmt#Stringer). + +### Store Queries + +Store queries query directly for store keys. They use `clientCtx.QueryABCI(req abci.RequestQuery)` to return the full `abci.ResponseQuery` with inclusion Merkle proofs. + +See following examples: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/abci.go#L756-L777 + +## Next {hide} + +Learn about [`Msg` services](./msg-services.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/module-interfaces.md b/versioned_docs/version-0.46/integrate/building-modules/module-interfaces.md new file mode 100644 index 000000000..91dca7a53 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/module-interfaces.md @@ -0,0 +1,139 @@ + + +# Module Interfaces + +This document details how to build CLI and REST interfaces for a module. Examples from various Cosmos SDK modules are included. {synopsis} + +## Prerequisite Readings + +* [Building Modules Intro](./intro.md) {prereq} + +## CLI + +One of the main interfaces for an application is the [command-line interface](../core/cli.md). This entrypoint adds commands from the application's modules enabling end-users to create [**messages**](./messages-and-queries.md#messages) wrapped in transactions and [**queries**](./messages-and-queries.md#queries). The CLI files are typically found in the module's `./client/cli` folder. + +### Transaction Commands + +In order to create messages that trigger state changes, end-users must create [transactions](../core/transactions.md) that wrap and deliver the messages. A transaction command creates a transaction that includes one or more messages. + +Transaction commands typically have their own `tx.go` file that lives within the module's `./client/cli` folder. The commands are specified in getter functions and the name of the function should include the name of the command. + +Here is an example from the `x/bank` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/client/cli/tx.go#L35-L71 + +In the example, `NewSendTxCmd()` creates and returns the transaction command for a transaction that wraps and delivers `MsgSend`. `MsgSend` is the message used to send tokens from one account to another. + +In general, the getter function does the following: + +* **Constructs the command:** Read the [Cobra Documentation](https://pkg.go.dev/github.com/spf13/cobra) for more detailed information on how to create commands. + * **Use:** Specifies the format of the user input required to invoke the command. In the example above, `send` is the name of the transaction command and `[from_key_or_address]`, `[to_address]`, and `[amount]` are the arguments. + * **Args:** The number of arguments the user provides. In this case, there are exactly three: `[from_key_or_address]`, `[to_address]`, and `[amount]`. + * **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + * **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new transaction. + * The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientTxContext(cmd)`. The `clientCtx` contains information relevant to transaction handling, including information about the user. In this example, the `clientCtx` is used to retrieve the address of the sender by calling `clientCtx.GetFromAddress()`. + * If applicable, the command's arguments are parsed. In this example, the arguments `[to_address]` and `[amount]` are both parsed. + * A [message](./messages-and-queries.md) is created using the parsed arguments and information from the `clientCtx`. The constructor function of the message type is called directly. In this case, `types.NewMsgSend(fromAddr, toAddr, amount)`. Its good practice to call [`msg.ValidateBasic()`](../basics/tx-lifecycle.md#ValidateBasic) and other validation methods before broadcasting the message. + * Depending on what the user wants, the transaction is either generated offline or signed and broadcasted to the preconfigured node using `tx.GenerateOrBroadcastTxCLI(clientCtx, flags, msg)`. +* **Adds transaction flags:** All transaction commands must add a set of transaction [flags](#flags). The transaction flags are used to collect additional information from the user (e.g. the amount of fees the user is willing to pay). The transaction flags are added to the constructed command using `AddTxFlagsToCmd(cmd)`. +* **Returns the command:** Finally, the transaction command is returned. + +Each module must implement `NewTxCmd()`, which aggregates all of the transaction commands of the module. Here is an example from the `x/bank` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/client/cli/tx.go#L17-L33 + +Each module must also implement the `GetTxCmd()` method for `AppModuleBasic` that simply returns `NewTxCmd()`. This allows the root command to easily aggregate all of the transaction commands for each module. Here is an example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/module.go#L70-L73 + +### Query Commands + +[Queries](./messages-and-queries.md#queries) allow users to gather information about the application or network state; they are routed by the application and processed by the module in which they are defined. Query commands typically have their own `query.go` file in the module's `./client/cli` folder. Like transaction commands, they are specified in getter functions. Here is an example of a query command from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/client/cli/query.go#L83-L125 + +In the example, `GetAccountCmd()` creates and returns a query command that returns the state of an account based on the provided account address. + +In general, the getter function does the following: + +* **Constructs the command:** Read the [Cobra Documentation](https://pkg.go.dev/github.com/spf13/cobra) for more detailed information on how to create commands. + * **Use:** Specifies the format of the user input required to invoke the command. In the example above, `account` is the name of the query command and `[address]` is the argument. + * **Args:** The number of arguments the user provides. In this case, there is exactly one: `[address]`. + * **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + * **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new query. + * The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientQueryContext(cmd)`. The `clientCtx` contains information relevant to query handling. + * If applicable, the command's arguments are parsed. In this example, the argument `[address]` is parsed. + * A new `queryClient` is initialized using `NewQueryClient(clientCtx)`. The `queryClient` is then used to call the appropriate [query](./messages-and-queries.md#grpc-queries). + * The `clientCtx.PrintProto` method is used to format the `proto.Message` object so that the results can be printed back to the user. +* **Adds query flags:** All query commands must add a set of query [flags](#flags). The query flags are added to the constructed command using `AddQueryFlagsToCmd(cmd)`. +* **Returns the command:** Finally, the query command is returned. + +Each module must implement `GetQueryCmd()`, which aggregates all of the query commands of the module. Here is an example from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/client/cli/query.go#L25-L42 + +Each module must also implement the `GetQueryCmd()` method for `AppModuleBasic` that returns the `GetQueryCmd()` function. This allows for the root command to easily aggregate all of the query commands for each module. Here is an example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/client/cli/query.go#L32-L50 + +### Flags + +[Flags](../core/cli.md#flags) allow users to customize commands. `--fees` and `--gas-prices` are examples of flags that allow users to set the [fees](../basics/gas-fees.md) and gas prices for their transactions. + +Flags that are specific to a module are typically created in a `flags.go` file in the module's `./client/cli` folder. When creating a flag, developers set the value type, the name of the flag, the default value, and a description about the flag. Developers also have the option to mark flags as _required_ so that an error is thrown if the user does not include a value for the flag. + +Here is an example that adds the `--from` flag to a command: + +```go +cmd.Flags().String(FlagFrom, "", "Name or address of private key with which to sign") +``` + +In this example, the value of the flag is a `String`, the name of the flag is `from` (the value of the `FlagFrom` constant), the default value of the flag is `""`, and there is a description that will be displayed when a user adds `--help` to the command. + +Here is an example that marks the `--from` flag as _required_: + +```go +cmd.MarkFlagRequired(FlagFrom) +``` + +For more detailed information on creating flags, visit the [Cobra Documentation](https://github.com/spf13/cobra). + +As mentioned in [transaction commands](#transaction-commands), there is a set of flags that all transaction commands must add. This is done with the `AddTxFlagsToCmd` method defined in the Cosmos SDK's `./client/flags` package. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/flags/flags.go#L103-L131 + +Since `AddTxFlagsToCmd(cmd *cobra.Command)` includes all of the basic flags required for a transaction command, module developers may choose not to add any of their own (specifying arguments instead may often be more appropriate). + +Similarly, there is a `AddQueryFlagsToCmd(cmd *cobra.Command)` to add common flags to a module query command. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/flags/flags.go#L92-L101 + +## gRPC + +[gRPC](https://grpc.io/) is a Remote Procedure Call (RPC) framework. RPC is the preferred way for external clients like wallets and exchanges to interact with a blockchain. + +In addition to providing an ABCI query pathway, the Cosmos SDK provides a gRPC proxy server that routes gRPC query requests to ABCI query requests. + +In order to do that, modules must implement `RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux)` on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. + +Here's an example from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/module.go#L61-L66 + +## gRPC-gateway REST + +Applications need to support web services that use HTTP requests (e.g. a web wallet like [Keplr](https://keplr.app)). [grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) translates REST calls into gRPC calls, which might be useful for clients that do not use gRPC. + +Modules that want to expose REST queries should add `google.api.http` annotations to their `rpc` methods, such as in the example below from the `x/auth` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/auth/v1beta1/query.proto#L13-L59 + +gRPC gateway is started in-process along with the application and Tendermint. It can be enabled or disabled by setting gRPC Configuration `enable` in [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). + +The Cosmos SDK provides a command for generating [Swagger](https://swagger.io/) documentation (`protoc-gen-swagger`). Setting `swagger` in [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) defines if swagger documentation should be automatically registered. + +## Next {hide} + +Read about the recommended [module structure](./structure.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/module-manager.md b/versioned_docs/version-0.46/integrate/building-modules/module-manager.md new file mode 100644 index 000000000..edcab0388 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/module-manager.md @@ -0,0 +1,151 @@ + + +# Module Manager + +Cosmos SDK modules need to implement the [`AppModule` interfaces](#application-module-interfaces), in order to be managed by the application's [module manager](#module-manager). The module manager plays an important role in [`message` and `query` routing](../core/baseapp.md#routing), and allows application developers to set the order of execution of a variety of functions like [`BeginBlocker` and `EndBlocker`](../basics/app-anatomy.md#begingblocker-and-endblocker). {synopsis} + +## Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](./intro.md) + +## Application Module Interfaces + +Application module interfaces exist to facilitate the composition of modules together to form a functional Cosmos SDK application. There are 3 main application module interfaces: + +* [`AppModuleBasic`](#appmodulebasic) for independent module functionalities. +* [`AppModule`](#appmodule) for inter-dependent module functionalities (except genesis-related functionalities). +* [`AppModuleGenesis`](#appmodulegenesis) for inter-dependent genesis-related module functionalities. + +The `AppModuleBasic` interface exists to define independent methods of the module, i.e. those that do not depend on other modules in the application. This allows for the construction of the basic application structure early in the application definition, generally in the `init()` function of the [main application file](../basics/app-anatomy.md#core-application-file). + +The `AppModule` interface exists to define inter-dependent module methods. Many modules need to interact with other modules, typically through [`keeper`s](./keeper.md), which means there is a need for an interface where modules list their `keeper`s and other methods that require a reference to another module's object. `AppModule` interface also enables the module manager to set the order of execution between module's methods like `BeginBlock` and `EndBlock`, which is important in cases where the order of execution between modules matters in the context of the application. + +Lastly the interface for genesis functionality `AppModuleGenesis` is separated out from full module functionality `AppModule` so that modules which +are only used for genesis can take advantage of the `Module` patterns without having to define many placeholder functions. + +### `AppModuleBasic` + +The `AppModuleBasic` interface defines the independent methods modules need to implement. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/module/module.go#L47-L60 + +Let us go through the methods: + +* `Name()`: Returns the name of the module as a `string`. +* `RegisterLegacyAminoCodec(*codec.LegacyAmino)`: 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`. +* `RegisterInterfaces(codectypes.InterfaceRegistry)`: Registers a module's interface types and their concrete implementations as `proto.Message`. +* `DefaultGenesis(codec.JSONCodec)`: Returns a default [`GenesisState`](./genesis.md#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. +* `ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`: Used to validate the `GenesisState` defined by a module, given in its `json.RawMessage` form. It will usually unmarshall the `json` before running a custom [`ValidateGenesis`](./genesis.md#validategenesis) function defined by the module developer. +* `RegisterGRPCGatewayRoutes(client.Context, *runtime.ServeMux)`: Registers gRPC routes for the module. +* `GetTxCmd()`: Returns the root [`Tx` command](./module-interfaces.md#tx) for the module. The subcommands of this root command are used by end-users to generate new transactions containing [`message`s](./messages-and-queries.md#queries) defined in the module. +* `GetQueryCmd()`: Return the root [`query` command](./module-interfaces.md#query) for the module. The subcommands of this root command are used by end-users to generate new queries to the subset of the state defined by the module. + +All the `AppModuleBasic` of an application are managed by the [`BasicManager`](#basicmanager). + +### `AppModuleGenesis` + +The `AppModuleGenesis` interface is a simple embedding of the `AppModuleBasic` interface with two added methods. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/module/module.go#L140-L146 + +Let us go through the two added methods: + +* `InitGenesis(sdk.Context, codec.JSONCodec, json.RawMessage)`: Initializes the subset of the state managed by the module. It is called at genesis (i.e. when the chain is first started). +* `ExportGenesis(sdk.Context, codec.JSONCodec)`: Exports the latest subset of the state managed by the module to be used in a new genesis file. `ExportGenesis` is called for each module when a new chain is started from the state of an existing chain. + +It does not have its own manager, and exists separately from [`AppModule`](#appmodule) only for modules that exist only to implement genesis functionalities, so that they can be managed without having to implement all of `AppModule`'s methods. If the module is not only used during genesis, `InitGenesis(sdk.Context, codec.JSONCodec, json.RawMessage)` and `ExportGenesis(sdk.Context, codec.JSONCodec)` will generally be defined as methods of the concrete type implementing the `AppModule` interface. + +### `AppModule` + +The `AppModule` interface defines the inter-dependent methods that modules need to implement. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/module/module.go#L148-L176 + +`AppModule`s are managed by the [module manager](#manager). This interface embeds the `AppModuleGenesis` interface so that the manager can access all the independent and genesis inter-dependent methods of the module. This means that a concrete type implementing the `AppModule` interface must either implement all the methods of `AppModuleGenesis` (and by extension `AppModuleBasic`), or include a concrete type that does as parameter. + +Let us go through the methods of `AppModule`: + +* `RegisterInvariants(sdk.InvariantRegistry)`: Registers the [`invariants`](./invariants.md) of the module. If an invariant deviates from its predicted value, the [`InvariantRegistry`](./invariants.md#registry) triggers appropriate logic (most often the chain will be halted). +* `Route()` (deprecated): Returns the route for [`message`s](./messages-and-queries.md#messages) to be routed to the module by [`BaseApp`](../core/baseapp.md#message-routing). +* `QuerierRoute()` (deprecated): Returns the name of the module's query route, for [`queries`](./messages-and-queries.md#queries) to be routes to the module by [`BaseApp`](../core/baseapp.md#query-routing). +* `LegacyQuerierHandler(*codec.LegacyAmino)` (deprecated): Returns a [`querier`](./query-services.md#legacy-queriers) given the query `path`, in order to process the `query`. +* `RegisterServices(Configurator)`: Allows a module to register services. +* `BeginBlock(sdk.Context, abci.RequestBeginBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the beginning of each block. Implement empty if no logic needs to be triggered at the beginning of each block for this module. +* `EndBlock(sdk.Context, abci.RequestEndBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the end of each block. This is also where the module can inform the underlying consensus engine of validator set changes (e.g. the `staking` module). Implement empty if no logic needs to be triggered at the end of each block for this module. + +### Implementing the Application Module Interfaces + +Typically, the various application module interfaces are implemented in a file called `module.go`, located in the module's folder (e.g. `./x/module/module.go`). + +Almost every module needs to implement the `AppModuleBasic` and `AppModule` interfaces. If the module is only used for genesis, it will implement `AppModuleGenesis` instead of `AppModule`. The concrete type that implements the interface can add parameters that are required for the implementation of the various methods of the interface. For example, the `Route()` function often calls a `NewMsgServerImpl(k keeper)` function defined in `keeper/msg_server.go` and therefore needs to pass the module's [`keeper`](./keeper.md) as a parameter. + +```go +// example +type AppModule struct { + AppModuleBasic + keeper Keeper +} +``` + +In the example above, you can see that the `AppModule` concrete type references an `AppModuleBasic`, and not an `AppModuleGenesis`. That is because `AppModuleGenesis` only needs to be implemented in modules that focus on genesis-related functionalities. In most modules, the concrete `AppModule` type will have a reference to an `AppModuleBasic` and implement the two added methods of `AppModuleGenesis` directly in the `AppModule` type. + +If no parameter is required (which is often the case for `AppModuleBasic`), just declare an empty concrete type like so: + +```go +type AppModuleBasic struct{} +``` + +## Module Managers + +Module managers are used to manage collections of `AppModuleBasic` and `AppModule`. + +### `BasicManager` + +The `BasicManager` is a structure that lists all the `AppModuleBasic` of an application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/module/module.go#L62-L72 + +It implements the following methods: + +* `NewBasicManager(modules ...AppModuleBasic)`: Constructor function. It takes a list of the application's `AppModuleBasic` and builds a new `BasicManager`. This function is generally called in the `init()` function of [`app.go`](../basics/app-anatomy.md#core-application-file) to quickly initialize the independent elements of the application's modules (click [here](https://github.com/cosmos/gaia/blob/main/app/app.go#L59-L74) to see an example). +* `RegisterLegacyAminoCodec(cdc *codec.LegacyAmino)`: Registers the [`codec.LegacyAmino`s](../core/encoding.md#amino) of each of the application's `AppModuleBasic`. This function is usually called early on in the [application's construction](../basics/app-anatomy.md#constructor). +* `RegisterInterfaces(registry codectypes.InterfaceRegistry)`: Registers interface types and implementations of each of the application's `AppModuleBasic`. +* `DefaultGenesis(cdc codec.JSONCodec)`: Provides default genesis information for modules in the application by calling the [`DefaultGenesis(cdc codec.JSONCodec)`](./genesis.md#defaultgenesis) function of each module. It is used to construct a default genesis file for the application. +* `ValidateGenesis(cdc codec.JSONCodec, txEncCfg client.TxEncodingConfig, genesis map[string]json.RawMessage)`: Validates the genesis information modules by calling the [`ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`](./genesis.md#validategenesis) function of each module. +* `RegisterGRPCGatewayRoutes(clientCtx client.Context, rtr *runtime.ServeMux)`: Registers gRPC routes for modules. +* `AddTxCommands(rootTxCmd *cobra.Command)`: Adds modules' transaction commands to the application's [`rootTxCommand`](../core/cli.md#transaction-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../core/cli.md). +* `AddQueryCommands(rootQueryCmd *cobra.Command)`: Adds modules' query commands to the application's [`rootQueryCommand`](../core/cli.md#query-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../core/cli.md). + +### `Manager` + +The `Manager` is a structure that holds all the `AppModule` of an application, and defines the order of execution between several key components of these modules: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/module/module.go#L216-L225 + +The module manager is used throughout the application whenever an action on a collection of modules is required. It implements the following methods: + +* `NewManager(modules ...AppModule)`: Constructor function. It takes a list of the application's `AppModule`s and builds a new `Manager`. It is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +* `SetOrderInitGenesis(moduleNames ...string)`: Sets the order in which the [`InitGenesis`](./genesis.md#initgenesis) function of each module will be called when the application is first started. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). + + To initialize modules successfully, module dependencies should be considered. For example, the `genutil` module must occur after `staking` module so that the pools are properly initialized with tokens from genesis accounts, the `genutils` module must also occur after `auth` so that it can access the params from auth, `capability` module should be initialized before all other modules so that it can initialize any capabilities. +* `SetOrderExportGenesis(moduleNames ...string)`: Sets the order in which the [`ExportGenesis`](./genesis.md#exportgenesis) function of each module will be called in case of an export. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +* `SetOrderBeginBlockers(moduleNames ...string)`: Sets the order in which the `BeginBlock()` function of each module will be called at the beginning of each block. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +* `SetOrderEndBlockers(moduleNames ...string)`: Sets the order in which the `EndBlock()` function of each module will be called at the end of each block. This function is generally called from the application's main [constructor function](../basics/app-anatomy.md#constructor-function). +* `SetOrderMigrations(moduleNames ...string)`: Sets the order of migrations to be run. If not set then migrations will be run with an order defined in `DefaultMigrationsOrder`. +* `RegisterInvariants(ir sdk.InvariantRegistry)`: Registers the [invariants](./invariants.md) of each module. +* `RegisterRoutes(router sdk.Router, queryRouter sdk.QueryRouter, legacyQuerierCdc *codec.LegacyAmino)`: Registers legacy [`Msg`](./messages-and-queries.md#messages) and [`querier`](./query-services.md#legacy-queriers) routes. +* `RegisterServices(cfg Configurator)`: Registers all module services. +* `InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, genesisData map[string]json.RawMessage)`: Calls the [`InitGenesis`](./genesis.md#initgenesis) function of each module when the application is first started, in the order defined in `OrderInitGenesis`. Returns an `abci.ResponseInitChain` to the underlying consensus engine, which can contain validator updates. +* `ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec)`: Calls the [`ExportGenesis`](./genesis.md#exportgenesis) function of each module, in the order defined in `OrderExportGenesis`. The export constructs a genesis file from a previously existing state, and is mainly used when a hard-fork upgrade of the chain is required. +* `BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock)`: At the beginning of each block, this function is called from [`BaseApp`](../core/baseapp.md#beginblock) and, in turn, calls the [`BeginBlock`](./beginblock-endblock.md) function of each module, in the order defined in `OrderBeginBlockers`. It creates a child [context](../core/context.md) with an event manager to aggregate [events](../core/events.md) emitted from all modules. The function returns an `abci.ResponseBeginBlock` which contains the aforementioned events. +* `EndBlock(ctx sdk.Context, req abci.RequestEndBlock)`: At the end of each block, this function is called from [`BaseApp`](../core/baseapp.md#endblock) and, in turn, calls the [`EndBlock`](./beginblock-endblock.md) function of each module, in the order defined in `OrderEndBlockers`. It creates a child [context](../core/context.md) with an event manager to aggregate [events](../core/events.md) emitted from all modules. The function returns an `abci.ResponseEndBlock` which contains the aforementioned events, as well as validator set updates (if any). + +Here's an example of a concrete integration within an application: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/simapp/app.go#L342-L409 + +## Next {hide} + +Learn more about [`message`s and `queries`](./messages-and-queries.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/msg-services.md b/versioned_docs/version-0.46/integrate/building-modules/msg-services.md new file mode 100644 index 000000000..164160ef5 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/msg-services.md @@ -0,0 +1,100 @@ + + +# `Msg` Services + +A Protobuf `Msg` service processes [messages](./messages-and-queries.md#messages). Protobuf `Msg` services are specific to the module in which they are defined, and only process messages defined within the said module. They are called from `BaseApp` during [`DeliverTx`](../core/baseapp.md#delivertx). {synopsis} + +## Pre-requisite Readings + +* [Module Manager](./module-manager.md) {prereq} +* [Messages and Queries](./messages-and-queries.md) {prereq} + +## Implementation of a module `Msg` service + +Each module should define a Protobuf `Msg` service, which will be responsible for processing requests (implementing `sdk.Msg`) and returning responses. + +As further described in [ADR 031](../architecture/adr-031-msg-service.md), this approach has the advantage of clearly specifying return types and generating server and client code. + +Protobuf generates a `MsgServer` interface based on a definition of `Msg` service. It is the role of the module developer to implement this interface, by implementing the state transition logic that should happen upon receival of each `sdk.Msg`. As an example, here is the generated `MsgServer` interface for `x/bank`, which exposes two `sdk.Msg`s: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/types/tx.pb.go#L288-L294 + +When possible, the existing module's [`Keeper`](keeper.md) should implement `MsgServer`, otherwise a `msgServer` struct that embeds the `Keeper` can be created, typically in `./keeper/msg_server.go`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/keeper/msg_server.go#L14-L16 + +`msgServer` methods can retrieve the `sdk.Context` from the `context.Context` parameter method using the `sdk.UnwrapSDKContext`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/keeper/msg_server.go#L27-L27 + +`sdk.Msg` processing usually follows these 3 steps: + +### Validation + +Before a `msgServer` method is executed, the message's [`ValidateBasic()`](../basics/tx-lifecycle.md#ValidateBasic) method has already been called. Since `msg.ValidateBasic()` performs only the most basic checks, this stage must perform all other validation (both *stateful* and *stateless*) to make sure the `message` is valid. Checks performed in the `msgServer` method can be more expensive and the signer is charged gas for these operations. +For example, a `msgServer` method for a `transfer` message might check that the sending account has enough funds to actually perform the transfer. + +It is recommended to implement all validation checks in a separate function that passes state values as arguments. This implementation simplifies testing. As expected, expensive validation functions charge additional gas. Example: + +```go +ValidateMsgA(msg MsgA, now Time, gm GasMeter) error { + if now.Before(msg.Expire) { + return sdkerrrors.ErrInvalidRequest.Wrap("msg expired") + } + gm.ConsumeGas(1000, "signature verification") + return signatureVerificaton(msg.Prover, msg.Data) +} +``` + +### State Transition + +After the validation is successful, the `msgServer` method uses the [`keeper`](./keeper.md) functions to access the state and perform a state transition. + +### Events + +Before returning, `msgServer` methods generally emit one or more [events](../core/events.md) by using the `EventManager` held in the `ctx`. Use the new `EmitTypedEvent` function that uses protobuf-based event types: + +```go +ctx.EventManager().EmitTypedEvent( + &group.EventABC{Key1: Value1, Key2, Value2}) +``` + +or the older `EmitEvent` function: + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, // e.g. sdk.EventTypeMessage for a message, types.CustomEventType for a custom event defined in the module + sdk.NewAttribute(key1, value1), + sdk.NewAttribute(key2, value2), + ), +) +``` + +These events are relayed back to the underlying consensus engine and can be used by service providers to implement services around the application. Click [here](../core/events.md) to learn more about events. + +The invoked `msgServer` method returns a `proto.Message` response and an `error`. These return values are then wrapped into an `*sdk.Result` or an `error` using `sdk.WrapServiceResult(ctx sdk.Context, res proto.Message, err error)`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/baseapp/msg_service_router.go#L127 + +This method takes care of marshaling the `res` parameter to protobuf and attaching any events on the `ctx.EventManager()` to the `sdk.Result`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/base/abci/v1beta1/abci.proto#L88-L109 + +This diagram shows a typical structure of a Protobuf `Msg` service, and how the message propagates through the module. + +![Transaction flow](./transaction_flow.svg) + +## Telemetry + +New [telemetry metrics](../core/telemetry.md) can be created from `msgServer` methods when handling messages. + +This is an example from the `x/auth/vesting` module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/vesting/msg_server.go#L73-L85 + +## Next {hide} + +Learn about [query services](./query-services.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/query-services.md b/versioned_docs/version-0.46/integrate/building-modules/query-services.md new file mode 100644 index 000000000..4618480a6 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/query-services.md @@ -0,0 +1,77 @@ + + +# Query Services + +A Protobuf Query service processes [`queries`](./messages-and-queries.md#queries). Query services are specific to the module in which they are defined, and only process `queries` defined within said module. They are called from `BaseApp`'s [`Query` method](../core/baseapp.md#query). {synopsis} + +## Pre-requisite Readings + +* [Module Manager](./module-manager.md) {prereq} +* [Messages and Queries](./messages-and-queries.md) {prereq} + +## `Querier` type + +The `querier` type defined in the Cosmos SDK will be deprecated in favor of [gRPC Services](#grpc-service). It specifies the typical structure of a `querier` function: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/types/queryable.go#L9 + +Let us break it down: + +* The [`Context`](../core/context.md) contains all the necessary information needed to process the `query`, as well as a branch of the latest state. It is primarily used by the [`keeper`](./keeper.md) to access the state. +* The `path` is an array of `string`s that contains the type of the query, and that can also contain `query` arguments. See [`queries`](./messages-and-queries.md#queries) for more information. +* The `req` itself is primarily used to retrieve arguments if they are too large to fit in the `path`. This is done using the `Data` field of `req`. +* The result in `[]byte` returned to `BaseApp`, marshalled using the application's [`codec`](../core/encoding.md). + +## Implementation of a module query service + +### gRPC Service + +When defining a Protobuf `Query` service, a `QueryServer` interface is generated for each module with all the service methods: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +These custom queries methods should be implemented by a module's keeper, typically in `./keeper/grpc_query.go`. The first parameter of these methods is a generic `context.Context`, whereas querier methods generally need an instance of `sdk.Context` to read +from the store. Therefore, the Cosmos SDK provides a function `sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +Here's an example implementation for the bank module: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/keeper/grpc_query.go + +### Legacy Queriers + +Module legacy `querier`s are typically implemented in a `./keeper/querier.go` file inside the module's folder. The [module manager](./module-manager.md) is used to add the module's `querier`s to the [application's `queryRouter`](../core/baseapp.md#query-routing) via the `NewQuerier()` method. Typically, the manager's `NewQuerier()` method simply calls a `NewQuerier()` method defined in `keeper/querier.go`, which looks like the following: + +```go +func NewQuerier(keeper Keeper) sdk.Querier { + return func(ctx sdk.Context, path []string, req abci.RequestQuery) ([]byte, error) { + switch path[0] { + case QueryType1: + return queryType1(ctx, path[1:], req, keeper) + + case QueryType2: + return queryType2(ctx, path[1:], req, keeper) + + default: + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unknown %s query endpoint: %s", types.ModuleName, path[0]) + } + } +} +``` + +This simple switch returns a `querier` function specific to the type of the received `query`. At this point of the [query lifecycle](../basics/query-lifecycle.md), the first element of the `path` (`path[0]`) contains the type of the query. The following elements are either empty or contain arguments needed to process the query. + +The `querier` functions themselves are pretty straightforward. They generally fetch a value or values from the state using the [`keeper`](./keeper.md). Then, they marshall the value(s) using the [`codec`](../core/encoding.md) and return the `[]byte` obtained as result. + +For a deeper look at `querier`s, see this [example implementation of a `querier` function](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/gov/keeper/querier.go) from the bank module. + +## Next {hide} + +Learn about [`BeginBlocker` and `EndBlocker`](./beginblock-endblock.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/simulator.md b/versioned_docs/version-0.46/integrate/building-modules/simulator.md new file mode 100644 index 000000000..4c2196dad --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/simulator.md @@ -0,0 +1,122 @@ +# Module Simulation + +## Prerequisites + +* [Cosmos Blockchain Simulator](./../using-the-sdk/simulation.md) + +## Synopsis + +This document details how to define each module simulation functions to be +integrated with the application `SimulationManager`. + +* [Simulation package](#simulation-package) + * [Store decoders](#store-decoders) + * [Randomized genesis](#randomized-genesis) + * [Randomized parameter changes](#randomized-parameter-changes) + * [Random weighted operations](#random-weighted-operations) + * [Random proposal contents](#random-proposal-contents) +* [Registering simulation functions](#registering-simulation-functions) +* [App Simulator manager](#app-simulator-manager) + +## Simulation package + +Every module that implements the Cosmos SDK simulator needs to have a `x//simulation` +package which contains the primary functions required by the fuzz tests: store +decoders, randomized genesis state and parameters, weighted operations and proposal +contents. + +### Store decoders + +Registering the store decoders is required for the `AppImportExport`. This allows +for the key-value pairs from the stores to be decoded (_i.e_ unmarshalled) +to their corresponding types. In particular, it matches the key to a concrete type +and then unmarshals the value from the `KVPair` to the type provided. + +You can use the example [here](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/distribution/simulation/decoder.go) from the distribution module to implement your store decoders. + +### Randomized genesis + +The simulator tests different scenarios and values for genesis parameters +in order to fully test the edge cases of specific modules. The `simulator` package from each module must expose a `RandomizedGenState` function to generate the initial random `GenesisState` from a given seed. + +Once the module genesis parameter are generated randomly (or with the key and +values defined in a `params` file), they are marshaled to JSON format and added +to the app genesis JSON to use it on the simulations. + +You can check an example on how to create the randomized genesis [here](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/simulation/genesis.go). + +### Randomized parameter changes + +The simulator is able to test parameter changes at random. The simulator package from each module must contain a `RandomizedParams` func that will simulate parameter changes of the module throughout the simulations lifespan. + +You can see how an example of what is needed to fully test parameter changes [here](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/simulation/params.go) + +### Random weighted operations + +Operations are one of the crucial parts of the Cosmos SDK simulation. They are the transactions +(`Msg`) that are simulated with random field values. The sender of the operation +is also assigned randomly. + +Operations on the simulation are simulated using the full [transaction cycle](../core/transactions.md) of a +`ABCI` application that exposes the `BaseApp`. + +Shown below is how weights are set: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/simulation/operations.go#L17-L75 + +As you can see, the weights are predefined in this case. Options exist to override this behavior with different weights. One option is to use `*rand.Rand` to define a random weight for the operation, or you can inject your own predefined weights. + +Here is how one can override the above package `simappparams`. + ++++ https://github.com/cosmos/gaia/blob/main/sims.mk#L9-L22 + +For the last test a tool called runsim is used, this is used to parallelize go test instances, provide info to Github and slack integrations to provide information to your team on how the simulations are running. + +### Random proposal contents + +Randomized governance proposals are also supported on the Cosmos SDK simulator. Each +module must define the governance proposal `Content`s that they expose and register +them to be used on the parameters. + +## Registering simulation functions + +Now that all the required functions are defined, we need to integrate them into the module pattern within the `module.go`: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/distribution/module.go + +## App Simulator manager + +The following step is setting up the `SimulatorManager` at the app level. This +is required for the simulation test files on the next step. + +```go +type CustomApp struct { + ... + sm *module.SimulationManager +} +``` + +Then at the instantiation of the application, we create the `SimulationManager` +instance in the same way we create the `ModuleManager` but this time we only pass +the modules that implement the simulation functions from the `AppModuleSimulation` +interface described above. + +```go +func NewCustomApp(...) { + // create the simulation manager and define the order of the modules for deterministic simulations + app.sm = module.NewSimulationManager( + auth.NewAppModule(app.accountKeeper), + bank.NewAppModule(app.bankKeeper, app.accountKeeper), + supply.NewAppModule(app.supplyKeeper, app.accountKeeper), + ov.NewAppModule(app.govKeeper, app.accountKeeper, app.supplyKeeper), + mint.NewAppModule(app.mintKeeper), + distr.NewAppModule(app.distrKeeper, app.accountKeeper, app.supplyKeeper, app.stakingKeeper), + staking.NewAppModule(app.stakingKeeper, app.accountKeeper, app.supplyKeeper), + slashing.NewAppModule(app.slashingKeeper, app.accountKeeper, app.stakingKeeper), + ) + + // register the store decoders for simulation tests + app.sm.RegisterStoreDecoders() + ... +} +``` diff --git a/versioned_docs/version-0.46/integrate/building-modules/11-structure.md b/versioned_docs/version-0.46/integrate/building-modules/structure.md similarity index 83% rename from versioned_docs/version-0.46/integrate/building-modules/11-structure.md rename to versioned_docs/version-0.46/integrate/building-modules/structure.md index 3520dfa48..70885833f 100644 --- a/versioned_docs/version-0.46/integrate/building-modules/11-structure.md +++ b/versioned_docs/version-0.46/integrate/building-modules/structure.md @@ -1,12 +1,10 @@ ---- -sidebar_position: 1 ---- + # Recommended Folder Structure -:::note Synopsis -This document outlines the recommended structure of Cosmos SDK modules. These ideas are meant to be applied as suggestions. Application developers are encouraged to improve upon and contribute to module structure and development design. -::: +This document outlines the recommended structure of Cosmos SDK modules. These ideas are meant to be applied as suggestions. Application developers are encouraged to improve upon and contribute to module structure and development design. {synopsis} ## Structure @@ -52,13 +50,18 @@ x/{module_name} │   └── querier.go ├── module │   └── module.go -│   └── abci.go ├── simulation │   ├── decoder.go │   ├── genesis.go │   ├── operations.go │   └── params.go +├── spec +│   ├── 01_concepts.md +│   ├── 02_state.md +│   ├── 03_messages.md +│   └── 04_events.md ├── {module_name}.pb.go +├── abci.go ├── codec.go ├── errors.go ├── events.go @@ -70,24 +73,27 @@ x/{module_name} ├── msgs.go ├── params.go ├── query.pb.go -├── tx.pb.go -└── 05-depinject.md +└── tx.pb.go ``` -* `client/`: The module's CLI client functionality implementation and the module's CLI testing suite. +* `client/`: The module's CLI client functionality implementation and the module's integration testing suite. * `exported/`: The module's exported types - typically interface types. If a module relies on keepers from another module, it is expected to receive the keepers as interface contracts through the `expected_keepers.go` file (see below) in order to avoid a direct dependency on the module implementing the keepers. However, these interface contracts can define methods that operate on and/or return types that are specific to the module that is implementing the keepers and this is where `exported/` comes into play. The interface types that are defined in `exported/` use canonical types, allowing for the module to receive the keepers as interface contracts through the `expected_keepers.go` file. This pattern allows for code to remain DRY and also alleviates import cycle chaos. * `keeper/`: The module's `Keeper` and `MsgServer` implementation. * `module/`: The module's `AppModule` and `AppModuleBasic` implementation. - * `abci.go`: The module's `BeginBlocker` and `EndBlocker` implementations (this file is only required if `BeginBlocker` and/or `EndBlocker` need to be defined). -* `simulation/`: The module's [simulation](14-simulator.md) package defines functions used by the blockchain simulator application (`simapp`). -* `REAMDE.md`: The module's specification documents outlining important concepts, state storage structure, and message and event type definitions. Learn more how to write module specs in the [spec guidelines](../spec/SPEC_MODULE.md). +* `simulation/`: The module's [simulation](./simulator.html) package defines functions used by the blockchain simulator application (`simapp`). +* `spec/`: The module's specification documents outlining important concepts, state storage structure, and message and event type definitions. * The root directory includes type definitions for messages, events, and genesis state, including the type definitions generated by Protocol Buffers. + * `abci.go`: The module's `BeginBlocker` and `EndBlocker` implementations (this file is only required if `BeginBlocker` and/or `EndBlocker` need to be defined). * `codec.go`: The module's registry methods for interface types. * `errors.go`: The module's sentinel errors. * `events.go`: The module's event types and constructors. - * `expected_keepers.go`: The module's [expected keeper](06-keeper.md#type-definition) interfaces. + * `expected_keepers.go`: The module's [expected keeper](./keeper.html#type-definition) interfaces. * `genesis.go`: The module's genesis state methods and helper functions. * `keys.go`: The module's store keys and associated helper functions. * `msgs.go`: The module's message type definitions and associated methods. * `params.go`: The module's parameter type definitions and associated methods. * `*.pb.go`: The module's type definitions generated by Protocol Buffers (as defined in the respective `*.proto` files above). + +## Next {hide} + +Learn about [Errors](./errors.md) {hide} diff --git a/versioned_docs/version-0.46/integrate/building-modules/transaction_flow.svg b/versioned_docs/version-0.46/integrate/building-modules/transaction_flow.svg new file mode 100644 index 000000000..1ae962de3 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/transaction_flow.svg @@ -0,0 +1,48 @@ +UserUserbaseAppbaseApprouterrouterhandlerhandlermsgServermsgServerkeeperkeeperContext.EventManagerContext.EventManagerTransaction Type<Tx>Route(ctx, msgRoute)handlerMsg<Tx>(Context, Msg(...))<Tx>(Context, Msg)alt[addresses invalid, denominations wrong, etc.]errorperform action, update contextresults, error codeEmit relevant eventsmaybe wrap results in more structureresult, error coderesults, error code \ No newline at end of file diff --git a/versioned_docs/version-0.46/integrate/building-modules/upgrade.md b/versioned_docs/version-0.46/integrate/building-modules/upgrade.md new file mode 100644 index 000000000..863066ca7 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/building-modules/upgrade.md @@ -0,0 +1,57 @@ + + +# Upgrading Modules + +[In-Place Store Migrations](../core/upgrade.md) allow your modules to upgrade to new versions that include breaking changes. This document outlines how to build modules to take advantage of this functionality. {synopsis} + +## Prerequisite Readings + +* [In-Place Store Migration](../core/upgrade.md) {prereq} + +## Consensus Version + +Successful upgrades of existing modules require each `AppModule` to implement the function `ConsensusVersion() uint64`. + +* The versions must be hard-coded by the module developer. +* The initial version **must** be set to 1. + +Consensus versions serve as state-breaking versions of app modules and must be incremented when the module introduces breaking changes. + +## Registering Migrations + +To register the functionality that takes place during a module upgrade, you must register which migrations you want to take place. + +Migration registration takes place in the `Configurator` using the `RegisterMigration` method. The `AppModule` reference to the configurator is in the `RegisterServices` method. + +You can register one or more migrations. If you register more than one migration script, list the migrations in increasing order and ensure there are enough migrations that lead to the desired consensus version. For example, to migrate to version 3 of a module, register separate migrations for version 1 and version 2 as shown in the following example: + +```golang +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) +} +``` + +Since these migrations are functions that need access to a Keeper's store, use a wrapper around the keepers called `Migrator` as shown in this example: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/keeper/migrations.go#L9-L27 + +## Writing Migration Scripts + +To define the functionality that takes place during an upgrade, write a migration script and place the functions in a `migrations/` directory. For example, to write migration scripts for the bank module, place the functions in `x/bank/migrations/`. Use the recommended naming convention for these functions. For example, `v043bank` is the script that migrates the package `x/bank/migrations/v043`: + +```golang +// Migrating bank module from version 1 to 2 +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v043bank.MigrateStore(ctx, m.keeper.storeKey) // v043bank is package `x/bank/migrations/v043`. +} +``` + +To see example code of changes that were implemented in a migration of balance keys, check out [migrateBalanceKeys](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/migrations/v043/store.go#L50-L71). For context, this code introduced migrations of the bank store that updated addresses to be prefixed by their length in bytes as outlined in [ADR-028](../architecture/adr-028-public-key-addresses.md). diff --git a/versioned_docs/version-0.46/integrate/ibc/README.md b/versioned_docs/version-0.46/integrate/ibc/README.md new file mode 100644 index 000000000..872e5c0dc --- /dev/null +++ b/versioned_docs/version-0.46/integrate/ibc/README.md @@ -0,0 +1,9 @@ + + +# IBC + +See the official [`ibc-go` documentation](https://ibc.cosmos.network). diff --git a/versioned_docs/version-0.46/integrate/migrations/README.md b/versioned_docs/version-0.46/integrate/migrations/README.md new file mode 100644 index 000000000..b5e08ec46 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/migrations/README.md @@ -0,0 +1,13 @@ + + +# Migrations + +This document contains all the migration guides to update your app and modules to the current Cosmos SDK. + +1. Chain Upgrade Guide to v0.46: + * See [UPGRADING.md (TODO)](https://github.com/cosmos/cosmos-sdk/blob/main/UPGRADING.md) for breaking changes and deprecations upgrade instructions. + * See [Release Notes](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/RELEASE_NOTES.md) and [changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/CHANGELOG.md) for the exhaustive list of API and State Machine breaking changes. diff --git a/versioned_docs/version-0.46/integrate/migrations/pre-upgrade.md b/versioned_docs/version-0.46/integrate/migrations/pre-upgrade.md new file mode 100644 index 000000000..00b4c54e2 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/migrations/pre-upgrade.md @@ -0,0 +1,55 @@ +# Pre-Upgrade Handling + +Cosmovisor supports custom pre-upgrade handling. Use pre-upgrade handling when you need to implement application config changes that are required in the newer version before you perform the upgrade. + +Using Cosmovisor pre-upgrade handling is optional. If pre-upgrade handling is not implemented, the upgrade continues. + +For example, make the required new-version changes to `app.toml` settings during the pre-upgrade handling. The pre-upgrade handling process means that the file does not have to be manually updated after the upgrade. + +Before the application binary is upgraded, Cosmovisor calls a `pre-upgrade` command that can be implemented by the application. + +The `pre-upgrade` command does not take in any command-line arguments and is expected to terminate with the following exit codes: + +| Exit status code | How it is handled in Cosmosvisor | +|------------------|---------------------------------------------------------------------------------------------------------------------| +| `0` | Assumes `pre-upgrade` command executed successfully and continues the upgrade. | +| `1` | Default exit code when `pre-upgrade` command has not been implemented. | +| `30` | `pre-upgrade` command was executed but failed. This fails the entire upgrade. | +| `31` | `pre-upgrade` command was executed but failed. But the command is retried until exit code `1` or `30` are returned. | + +## Sample + +Here is a sample structure of the `pre-upgrade` command: + +```go +func preUpgradeCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "pre-upgrade", + Short: "Pre-upgrade command", + Long: "Pre-upgrade command to implement custom pre-upgrade handling", + Run: func(cmd *cobra.Command, args []string) { + + err := HandlePreUpgrade() + + if err != nil { + os.Exit(30) + } + + os.Exit(0) + + }, + } + + return cmd +} +``` + +Ensure that the pre-upgrade command has been registered in the application: + +```go +rootCmd.AddCommand( + // .. + preUpgradeCommand(), + // .. + ) +``` diff --git a/versioned_docs/version-0.46/integrate/modules/auth/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/auth/01_concepts.md new file mode 100644 index 000000000..e028ebe8e --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/01_concepts.md @@ -0,0 +1,43 @@ + + +# Concepts + +**Note:** The auth module is different from the [authz module](../modules/authz/). + +The differences are: + +* `auth` - authentication of accounts and transactions for Cosmos SDK applications and is responsible for specifying the base transaction and account types. +* `authz` - authorization for accounts to perform actions on behalf of other accounts and enables a granter to grant authorizations to a grantee that allows the grantee to execute messages on behalf of the granter. + +## Gas & Fees + +Fees serve two purposes for an operator of the network. + +Fees limit the growth of the state stored by every full node and allow for +general purpose censorship of transactions of little economic value. Fees +are best suited as an anti-spam mechanism where validators are disinterested in +the use of the network and identities of users. + +Fees are determined by the gas limits and gas prices transactions provide, where +`fees = ceil(gasLimit * gasPrices)`. Txs incur gas costs for all state reads/writes, +signature verification, as well as costs proportional to the tx size. Operators +should set minimum gas prices when starting their nodes. They must set the unit +costs of gas in each token denomination they wish to support: + +`simd start ... --minimum-gas-prices=0.00001stake;0.05photinos` + +When adding transactions to mempool or gossipping transactions, validators check +if the transaction's gas prices, which are determined by the provided fees, meet +any of the validator's minimum gas prices. In other words, a transaction must +provide a fee of at least one denomination that matches a validator's minimum +gas price. + +Tendermint does not currently provide fee based mempool prioritization, and fee +based mempool filtering is local to node and not part of consensus. But with +minimum gas prices set, such a mechanism could be implemented by node operators. + +Because the market value for tokens will fluctuate, validators are expected to +dynamically adjust their minimum gas prices to a level that would encourage the +use of the network. diff --git a/versioned_docs/version-0.46/integrate/modules/auth/02_state.md b/versioned_docs/version-0.46/integrate/modules/auth/02_state.md new file mode 100644 index 000000000..560e93421 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/02_state.md @@ -0,0 +1,73 @@ + + +# State + +## Accounts + +Accounts contain authentication information for a uniquely identified external user of an SDK blockchain, +including public key, address, and account number / sequence number for replay protection. For efficiency, +since account balances must also be fetched to pay fees, account structs also store the balance of a user +as `sdk.Coins`. + +Accounts are exposed externally as an interface, and stored internally as +either a base account or vesting account. Module clients wishing to add more +account types may do so. + +* `0x01 | Address -> ProtocolBuffer(account)` + +### Account Interface + +The account interface exposes methods to read and write standard account information. +Note that all of these methods operate on an account struct confirming to the +interface - in order to write the account to the store, the account keeper will +need to be used. + +```go +// AccountI is an interface used to store coins at a given address within state. +// It presumes a notion of sequence numbers for replay protection, +// a notion of account numbers for replay protection for previously pruned accounts, +// and a pubkey for authentication purposes. +// +// Many complex conditions can be used in the concrete struct which implements AccountI. +type AccountI interface { + proto.Message + + GetAddress() sdk.AccAddress + SetAddress(sdk.AccAddress) error // errors if already set. + + GetPubKey() crypto.PubKey // can return nil. + SetPubKey(crypto.PubKey) error + + GetAccountNumber() uint64 + SetAccountNumber(uint64) error + + GetSequence() uint64 + SetSequence(uint64) error + + // Ensure that account implements stringer + String() string +} +``` + +#### Base Account + +A base account is the simplest and most common account type, which just stores all requisite +fields directly in a struct. + +```protobuf +// BaseAccount defines a base account type. It contains all the necessary fields +// for basic account functionality. Any custom account type should extend this +// type for additional functionality (e.g. vesting). +message BaseAccount { + string address = 1; + google.protobuf.Any pub_key = 2; + uint64 account_number = 3; + uint64 sequence = 4; +} +``` + +### Vesting Account + +See [Vesting](05_vesting.md). diff --git a/versioned_docs/version-0.46/integrate/modules/auth/03_antehandlers.md b/versioned_docs/version-0.46/integrate/modules/auth/03_antehandlers.md new file mode 100644 index 000000000..3227d8dff --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/03_antehandlers.md @@ -0,0 +1,40 @@ + + +# AnteHandlers + +The `x/auth` module presently has no transaction handlers of its own, but does expose the special `AnteHandler`, used for performing basic validity checks on a transaction, such that it could be thrown out of the mempool. +The `AnteHandler` can be seen as a set of decorators that check transactions within the current context, per [ADR 010](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-010-modular-antehandler.md). + +Note that the `AnteHandler` is called on both `CheckTx` and `DeliverTx`, as Tendermint proposers presently have the ability to include in their proposed block transactions which fail `CheckTx`. + +## Decorators + +The auth module provides `AnteDecorator`s that are recursively chained together into a single `AnteHandler` in the following order: + +* `SetUpContextDecorator`: Sets the `GasMeter` in the `Context` and wraps the next `AnteHandler` with a defer clause to recover from any downstream `OutOfGas` panics in the `AnteHandler` chain to return an error with information on gas provided and gas used. + +* `RejectExtensionOptionsDecorator`: Rejects all extension options which can optionally be included in protobuf transactions. + +* `MempoolFeeDecorator`: Checks if the `tx` fee is above local mempool `minFee` parameter during `CheckTx`. + +* `ValidateBasicDecorator`: Calls `tx.ValidateBasic` and returns any non-nil error. + +* `TxTimeoutHeightDecorator`: Check for a `tx` height timeout. + +* `ValidateMemoDecorator`: Validates `tx` memo with application parameters and returns any non-nil error. + +* `ConsumeGasTxSizeDecorator`: Consumes gas proportional to the `tx` size based on application parameters. + +* `DeductFeeDecorator`: Deducts the `FeeAmount` from first signer of the `tx`. If the `x/feegrant` module is enabled and a fee granter is set, it deducts fees from the fee granter account. + +* `SetPubKeyDecorator`: Sets the pubkey from a `tx`'s signers that does not already have its corresponding pubkey saved in the state machine and in the current context. + +* `ValidateSigCountDecorator`: Validates the number of signatures in `tx` based on app-parameters. + +* `SigGasConsumeDecorator`: Consumes parameter-defined amount of gas for each signature. This requires pubkeys to be set in context for all signers as part of `SetPubKeyDecorator`. + +* `SigVerificationDecorator`: Verifies all signatures are valid. This requires pubkeys to be set in context for all signers as part of `SetPubKeyDecorator`. + +* `IncrementSequenceDecorator`: Increments the account sequence for each signer to prevent replay attacks. diff --git a/versioned_docs/version-0.46/integrate/modules/auth/04_keepers.md b/versioned_docs/version-0.46/integrate/modules/auth/04_keepers.md new file mode 100644 index 000000000..268ced5c3 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/04_keepers.md @@ -0,0 +1,47 @@ + + +# Keepers + +The auth module only exposes one keeper, the account keeper, which can be used to read and write accounts. + +## Account Keeper + +Presently only one fully-permissioned account keeper is exposed, which has the ability to both read and write +all fields of all accounts, and to iterate over all stored accounts. + +```go +// AccountKeeperI is the interface contract that x/auth's keeper implements. +type AccountKeeperI interface { + // Return a new account with the next account number and the specified address. Does not save the new account to the store. + NewAccountWithAddress(sdk.Context, sdk.AccAddress) types.AccountI + + // Return a new account with the next account number. Does not save the new account to the store. + NewAccount(sdk.Context, types.AccountI) types.AccountI + + // Check if an account exists in the store. + HasAccount(sdk.Context, sdk.AccAddress) bool + + // Retrieve an account from the store. + GetAccount(sdk.Context, sdk.AccAddress) types.AccountI + + // Set an account in the store. + SetAccount(sdk.Context, types.AccountI) + + // Remove an account from the store. + RemoveAccount(sdk.Context, types.AccountI) + + // Iterate over all accounts, calling the provided function. Stop iteration when it returns true. + IterateAccounts(sdk.Context, func(types.AccountI) bool) + + // Fetch the public key of an account at a specified address + GetPubKey(sdk.Context, sdk.AccAddress) (crypto.PubKey, error) + + // Fetch the sequence of an account at a specified address. + GetSequence(sdk.Context, sdk.AccAddress) (uint64, error) + + // Fetch the next account number, and increment the internal counter. + GetNextAccountNumber(sdk.Context) uint64 +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/auth/05_vesting.md b/versioned_docs/version-0.46/integrate/modules/auth/05_vesting.md new file mode 100644 index 000000000..2108c658c --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/05_vesting.md @@ -0,0 +1,630 @@ + + +# Vesting + +* [Vesting](#vesting) + * [Intro and Requirements](#intro-and-requirements) + * [Note](#note) + * [Vesting Account Types](#vesting-account-types) + * [BaseVestingAccount](#basevestingaccount) + * [ContinuousVestingAccount](#continuousvestingaccount) + * [DelayedVestingAccount](#delayedvestingaccount) + * [Period](#period) + * [PeriodicVestingAccount](#periodicvestingaccount) + * [PermanentLockedAccount](#permanentlockedaccount) + * [Vesting Account Specification](#vesting-account-specification) + * [Determining Vesting & Vested Amounts](#determining-vesting--vested-amounts) + * [Continuously Vesting Accounts](#continuously-vesting-accounts) + * [Periodic Vesting Accounts](#periodic-vesting-accounts) + * [Delayed/Discrete Vesting Accounts](#delayeddiscrete-vesting-accounts) + * [Transferring/Sending](#transferringsending) + * [Keepers/Handlers](#keepershandlers) + * [Delegating](#delegating) + * [Keepers/Handlers](#keepershandlers-1) + * [Undelegating](#undelegating) + * [Keepers/Handlers](#keepershandlers-2) + * [Keepers & Handlers](#keepers--handlers) + * [Genesis Initialization](#genesis-initialization) + * [Examples](#examples) + * [Simple](#simple) + * [Slashing](#slashing) + * [Periodic Vesting](#periodic-vesting) + * [Glossary](#glossary) + +## Intro and Requirements + +This specification defines the vesting account implementation that is used by +the Cosmos Hub. The requirements for this vesting account is that it should be +initialized during genesis with a starting balance `X` and a vesting end +time `ET`. A vesting account may be initialized with a vesting start time `ST` +and a number of vesting periods `P`. If a vesting start time is included, the +vesting period does not begin until start time is reached. If vesting periods +are included, the vesting occurs over the specified number of periods. + +For all vesting accounts, the owner of the vesting account is able to delegate +and undelegate from validators, however they cannot transfer coins to another +account until those coins are vested. This specification allows for four +different kinds of vesting: + +* Delayed vesting, where all coins are vested once `ET` is reached. +* Continous vesting, where coins begin to vest at `ST` and vest linearly with +respect to time until `ET` is reached +* Periodic vesting, where coins begin to vest at `ST` and vest periodically +according to number of periods and the vesting amount per period. +The number of periods, length per period, and amount per period are +configurable. A periodic vesting account is distinguished from a continuous +vesting account in that coins can be released in staggered tranches. For +example, a periodic vesting account could be used for vesting arrangements +where coins are relased quarterly, yearly, or over any other function of +tokens over time. +* Permanent locked vesting, where coins are locked forever. Coins in this account can +still be used for delegating and for governance votes even while locked. + +## Note + +Vesting accounts can be initialized with some vesting and non-vesting coins. +The non-vesting coins would be immediately transferable. DelayedVesting and +ContinuousVesting accounts can be created with normal messages after genesis. +Other types of vesting accounts must be created at genesis, or as +part of a manual network upgrade. The current specification only allows +for _unconditional_ vesting (ie. there is no possibility of reaching `ET` and +having coins fail to vest). + +## Vesting Account Types + +```go +// VestingAccount defines an interface that any vesting account type must +// implement. +type VestingAccount interface { + Account + + GetVestedCoins(Time) Coins + GetVestingCoins(Time) Coins + + // TrackDelegation performs internal vesting accounting necessary when + // delegating from a vesting account. It accepts the current block time, the + // delegation amount and balance of all coins whose denomination exists in + // the account's original vesting balance. + TrackDelegation(Time, Coins, Coins) + + // TrackUndelegation performs internal vesting accounting necessary when a + // vesting account performs an undelegation. + TrackUndelegation(Coins) + + GetStartTime() int64 + GetEndTime() int64 +} +``` + +### BaseVestingAccount + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L10-L24 + +### ContinuousVestingAccount + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L26-L34 + +### DelayedVestingAccount + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L36-L44 + +### Period + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L46-L53 + +```go +// Stores all vesting periods passed as part of a PeriodicVestingAccount +type Periods []Period + +``` + +### PeriodicVestingAccount + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L55-L64 + +In order to facilitate less ad-hoc type checking and assertions and to support +flexibility in account balance usage, the existing `x/bank` `ViewKeeper` interface +is updated to contain the following: + +```go +type ViewKeeper interface { + // ... + + // Calculates the total locked account balance. + LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + + // Calculates the total spendable balance that can be sent to other accounts. + SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins +} +``` + +### PermanentLockedAccount + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/vesting/v1beta1/vesting.proto#L55-L64 + +## Vesting Account Specification + +Given a vesting account, we define the following in the proceeding operations: + +* `OV`: The original vesting coin amount. It is a constant value. +* `V`: The number of `OV` coins that are still _vesting_. It is derived by +`OV`, `StartTime` and `EndTime`. This value is computed on demand and not on a +per-block basis. +* `V'`: The number of `OV` coins that are _vested_ (unlocked). This value is +computed on demand and not a per-block basis. +* `DV`: The number of delegated _vesting_ coins. It is a variable value. It is +stored and modified directly in the vesting account. +* `DF`: The number of delegated _vested_ (unlocked) coins. It is a variable +value. It is stored and modified directly in the vesting account. +* `BC`: The number of `OV` coins less any coins that are transferred +(which can be negative or delegated). It is considered to be balance of the +embedded base account. It is stored and modified directly in the vesting account. + +### Determining Vesting & Vested Amounts + +It is important to note that these values are computed on demand and not on a +mandatory per-block basis (e.g. `BeginBlocker` or `EndBlocker`). + +#### Continuously Vesting Accounts + +To determine the amount of coins that are vested for a given block time `T`, the +following is performed: + +1. Compute `X := T - StartTime` +2. Compute `Y := EndTime - StartTime` +3. Compute `V' := OV * (X / Y)` +4. Compute `V := OV - V'` + +Thus, the total amount of _vested_ coins is `V'` and the remaining amount, `V`, +is _vesting_. + +```go +func (cva ContinuousVestingAccount) GetVestedCoins(t Time) Coins { + if t <= cva.StartTime { + // We must handle the case where the start time for a vesting account has + // been set into the future or when the start of the chain is not exactly + // known. + return ZeroCoins + } else if t >= cva.EndTime { + return cva.OriginalVesting + } + + x := t - cva.StartTime + y := cva.EndTime - cva.StartTime + + return cva.OriginalVesting * (x / y) +} + +func (cva ContinuousVestingAccount) GetVestingCoins(t Time) Coins { + return cva.OriginalVesting - cva.GetVestedCoins(t) +} +``` + +### Periodic Vesting Accounts + +Periodic vesting accounts require calculating the coins released during each +period for a given block time `T`. Note that multiple periods could have passed +when calling `GetVestedCoins`, so we must iterate over each period until the +end of that period is after `T`. + +1. Set `CT := StartTime` +2. Set `V' := 0` + +For each Period P: + + 1. Compute `X := T - CT` + 2. IF `X >= P.Length` + 1. Compute `V' += P.Amount` + 2. Compute `CT += P.Length` + 3. ELSE break + 3. Compute `V := OV - V'` + +```go +func (pva PeriodicVestingAccount) GetVestedCoins(t Time) Coins { + if t < pva.StartTime { + return ZeroCoins + } + ct := pva.StartTime // The start of the vesting schedule + vested := 0 + periods = pva.GetPeriods() + for _, period := range periods { + if t - ct < period.Length { + break + } + vested += period.Amount + ct += period.Length // increment ct to the start of the next vesting period + } + return vested +} + +func (pva PeriodicVestingAccount) GetVestingCoins(t Time) Coins { + return pva.OriginalVesting - cva.GetVestedCoins(t) +} +``` + +#### Delayed/Discrete Vesting Accounts + +Delayed vesting accounts are easier to reason about as they only have the full +amount vesting up until a certain time, then all the coins become vested (unlocked). +This does not include any unlocked coins the account may have initially. + +```go +func (dva DelayedVestingAccount) GetVestedCoins(t Time) Coins { + if t >= dva.EndTime { + return dva.OriginalVesting + } + + return ZeroCoins +} + +func (dva DelayedVestingAccount) GetVestingCoins(t Time) Coins { + return dva.OriginalVesting - dva.GetVestedCoins(t) +} +``` + +### Transferring/Sending + +At any given time, a vesting account may transfer: `min((BC + DV) - V, BC)`. + +In other words, a vesting account may transfer the minimum of the base account +balance and the base account balance plus the number of currently delegated +vesting coins less the number of coins vested so far. + +However, given that account balances are tracked via the `x/bank` module and that +we want to avoid loading the entire account balance, we can instead determine +the locked balance, which can be defined as `max(V - DV, 0)`, and infer the +spendable balance from that. + +```go +func (va VestingAccount) LockedCoins(t Time) Coins { + return max(va.GetVestingCoins(t) - va.DelegatedVesting, 0) +} +``` + +The `x/bank` `ViewKeeper` can then provide APIs to determine locked and spendable +coins for any account: + +```go +func (k Keeper) LockedCoins(ctx Context, addr AccAddress) Coins { + acc := k.GetAccount(ctx, addr) + if acc != nil { + if acc.IsVesting() { + return acc.LockedCoins(ctx.BlockTime()) + } + } + + // non-vesting accounts do not have any locked coins + return NewCoins() +} +``` + +#### Keepers/Handlers + +The corresponding `x/bank` keeper should appropriately handle sending coins +based on if the account is a vesting account or not. + +```go +func (k Keeper) SendCoins(ctx Context, from Account, to Account, amount Coins) { + bc := k.GetBalances(ctx, from) + v := k.LockedCoins(ctx, from) + + spendable := bc - v + newCoins := spendable - amount + assert(newCoins >= 0) + + from.SetBalance(newCoins) + to.AddBalance(amount) + + // save balances... +} +``` + +### Delegating + +For a vesting account attempting to delegate `D` coins, the following is performed: + +1. Verify `BC >= D > 0` +2. Compute `X := min(max(V - DV, 0), D)` (portion of `D` that is vesting) +3. Compute `Y := D - X` (portion of `D` that is free) +4. Set `DV += X` +5. Set `DF += Y` + +```go +func (va VestingAccount) TrackDelegation(t Time, balance Coins, amount Coins) { + assert(balance <= amount) + x := min(max(va.GetVestingCoins(t) - va.DelegatedVesting, 0), amount) + y := amount - x + + va.DelegatedVesting += x + va.DelegatedFree += y +} +``` + +**Note** `TrackDelegation` only modifies the `DelegatedVesting` and `DelegatedFree` +fields, so upstream callers MUST modify the `Coins` field by subtracting `amount`. + +#### Keepers/Handlers + +```go +func DelegateCoins(t Time, from Account, amount Coins) { + if isVesting(from) { + from.TrackDelegation(t, amount) + } else { + from.SetBalance(sc - amount) + } + + // save account... +} +``` + +### Undelegating + +For a vesting account attempting to undelegate `D` coins, the following is performed: +NOTE: `DV < D` and `(DV + DF) < D` may be possible due to quirks in the rounding of +delegation/undelegation logic. + +1. Verify `D > 0` +2. Compute `X := min(DF, D)` (portion of `D` that should become free, prioritizing free coins) +3. Compute `Y := min(DV, D - X)` (portion of `D` that should remain vesting) +4. Set `DF -= X` +5. Set `DV -= Y` + +```go +func (cva ContinuousVestingAccount) TrackUndelegation(amount Coins) { + x := min(cva.DelegatedFree, amount) + y := amount - x + + cva.DelegatedFree -= x + cva.DelegatedVesting -= y +} +``` + +**Note** `TrackUnDelegation` only modifies the `DelegatedVesting` and `DelegatedFree` +fields, so upstream callers MUST modify the `Coins` field by adding `amount`. + +**Note**: If a delegation is slashed, the continuous vesting account ends up +with an excess `DV` amount, even after all its coins have vested. This is because +undelegating free coins are prioritized. + +**Note**: The undelegation (bond refund) amount may exceed the delegated +vesting (bond) amount due to the way undelegation truncates the bond refund, +which can increase the validator's exchange rate (tokens/shares) slightly if the +undelegated tokens are non-integral. + +#### Keepers/Handlers + +```go +func UndelegateCoins(to Account, amount Coins) { + if isVesting(to) { + if to.DelegatedFree + to.DelegatedVesting >= amount { + to.TrackUndelegation(amount) + // save account ... + } + } else { + AddBalance(to, amount) + // save account... + } +} +``` + +## Keepers & Handlers + +The `VestingAccount` implementations reside in `x/auth`. However, any keeper in +a module (e.g. staking in `x/staking`) wishing to potentially utilize any vesting +coins, must call explicit methods on the `x/bank` keeper (e.g. `DelegateCoins`) +opposed to `SendCoins` and `SubtractCoins`. + +In addition, the vesting account should also be able to spend any coins it +receives from other users. Thus, the bank module's `MsgSend` handler should +error if a vesting account is trying to send an amount that exceeds their +unlocked coin amount. + +See the above specification for full implementation details. + +## Genesis Initialization + +To initialize both vesting and non-vesting accounts, the `GenesisAccount` struct +includes new fields: `Vesting`, `StartTime`, and `EndTime`. Accounts meant to be +of type `BaseAccount` or any non-vesting type have `Vesting = false`. The +genesis initialization logic (e.g. `initFromGenesisState`) must parse +and return the correct accounts accordingly based off of these fields. + +```go +type GenesisAccount struct { + // ... + + // vesting account fields + OriginalVesting sdk.Coins `json:"original_vesting"` + DelegatedFree sdk.Coins `json:"delegated_free"` + DelegatedVesting sdk.Coins `json:"delegated_vesting"` + StartTime int64 `json:"start_time"` + EndTime int64 `json:"end_time"` +} + +func ToAccount(gacc GenesisAccount) Account { + bacc := NewBaseAccount(gacc) + + if gacc.OriginalVesting > 0 { + if ga.StartTime != 0 && ga.EndTime != 0 { + // return a continuous vesting account + } else if ga.EndTime != 0 { + // return a delayed vesting account + } else { + // invalid genesis vesting account provided + panic() + } + } + + return bacc +} +``` + +## Examples + +### Simple + +Given a continuous vesting account with 10 vesting coins. + +```text +OV = 10 +DF = 0 +DV = 0 +BC = 10 +V = 10 +V' = 0 +``` + +1. Immediately receives 1 coin + + ```text + BC = 11 + ``` + +2. Time passes, 2 coins vest + + ```text + V = 8 + V' = 2 + ``` + +3. Delegates 4 coins to validator A + + ```text + DV = 4 + BC = 7 + ``` + +4. Sends 3 coins + + ```text + BC = 4 + ``` + +5. More time passes, 2 more coins vest + + ```text + V = 6 + V' = 4 + ``` + +6. Sends 2 coins. At this point the account cannot send anymore until further +coins vest or it receives additional coins. It can still however, delegate. + + ```text + BC = 2 + ``` + +### Slashing + +Same initial starting conditions as the simple example. + +1. Time passes, 5 coins vest + + ```text + V = 5 + V' = 5 + ``` + +2. Delegate 5 coins to validator A + + ```text + DV = 5 + BC = 5 + ``` + +3. Delegate 5 coins to validator B + + ```text + DF = 5 + BC = 0 + ``` + +4. Validator A gets slashed by 50%, making the delegation to A now worth 2.5 coins +5. Undelegate from validator A (2.5 coins) + + ```text + DF = 5 - 2.5 = 2.5 + BC = 0 + 2.5 = 2.5 + ``` + +6. Undelegate from validator B (5 coins). The account at this point can only +send 2.5 coins unless it receives more coins or until more coins vest. +It can still however, delegate. + + ```text + DV = 5 - 2.5 = 2.5 + DF = 2.5 - 2.5 = 0 + BC = 2.5 + 5 = 7.5 + ``` + + Notice how we have an excess amount of `DV`. + +### Periodic Vesting + +A vesting account is created where 100 tokens will be released over 1 year, with +1/4 of tokens vesting each quarter. The vesting schedule would be as follows: + +```yaml +Periods: +- amount: 25stake, length: 7884000 +- amount: 25stake, length: 7884000 +- amount: 25stake, length: 7884000 +- amount: 25stake, length: 7884000 +``` + +```text +OV = 100 +DF = 0 +DV = 0 +BC = 100 +V = 100 +V' = 0 +``` + +1. Immediately receives 1 coin + + ```text + BC = 101 + ``` + +2. Vesting period 1 passes, 25 coins vest + + ```text + V = 75 + V' = 25 + ``` + +3. During vesting period 2, 5 coins are transfered and 5 coins are delegated + + ```text + DV = 5 + BC = 91 + ``` + +4. Vesting period 2 passes, 25 coins vest + + ```text + V = 50 + V' = 50 + ``` + +## Glossary + +* OriginalVesting: The amount of coins (per denomination) that are initially +part of a vesting account. These coins are set at genesis. +* StartTime: The BFT time at which a vesting account starts to vest. +* EndTime: The BFT time at which a vesting account is fully vested. +* DelegatedFree: The tracked amount of coins (per denomination) that are +delegated from a vesting account that have been fully vested at time of delegation. +* DelegatedVesting: The tracked amount of coins (per denomination) that are +delegated from a vesting account that were vesting at time of delegation. +* ContinuousVestingAccount: A vesting account implementation that vests coins +linearly over time. +* DelayedVestingAccount: A vesting account implementation that only fully vests +all coins at a given time. +* PeriodicVestingAccount: A vesting account implementation that vests coins +according to a custom vesting schedule. +* PermanentLockedAccount: It does not ever release coins, locking them indefinitely. +Coins in this account can still be used for delegating and for governance votes even while locked. diff --git a/versioned_docs/version-0.46/integrate/modules/auth/06_params.md b/versioned_docs/version-0.46/integrate/modules/auth/06_params.md new file mode 100644 index 000000000..414e1888f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/06_params.md @@ -0,0 +1,15 @@ + + +# Parameters + +The auth module contains the following parameters: + +| Key | Type | Example | +| ---------------------- | --------------- | ------- | +| MaxMemoCharacters | uint64 | 256 | +| TxSigLimit | uint64 | 7 | +| TxSizeCostPerByte | uint64 | 10 | +| SigVerifyCostED25519 | uint64 | 590 | +| SigVerifyCostSecp256k1 | uint64 | 1000 | diff --git a/versioned_docs/version-0.46/integrate/modules/auth/07_client.md b/versioned_docs/version-0.46/integrate/modules/auth/07_client.md new file mode 100644 index 000000000..bcfdc6f6f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/07_client.md @@ -0,0 +1,421 @@ + + +# Client + +# Auth + +## CLI + +A user can query and interact with the `auth` module using the CLI. + +### Query + +The `query` commands allow users to query `auth` state. + +```bash +simd query auth --help +``` + +#### account + +The `account` command allow users to query for an account by it's address. + +```bash +simd query auth account [address] [flags] +``` + +Example: + +```bash +simd query auth account cosmos1... +``` + +Example Output: + +```bash +'@type': /cosmos.auth.v1beta1.BaseAccount +account_number: "0" +address: cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2 +pub_key: + '@type': /cosmos.crypto.secp256k1.PubKey + key: ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD +sequence: "1" +``` + +#### accounts + +The `accounts` command allow users to query all the available accounts. + +```bash +simd query auth accounts [flags] +``` + +Example: + +```bash +simd query auth accounts +``` + +Example Output: + +```bash +accounts: +- '@type': /cosmos.auth.v1beta1.BaseAccount + account_number: "0" + address: cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2 + pub_key: + '@type': /cosmos.crypto.secp256k1.PubKey + key: ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD + sequence: "1" +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "8" + address: cosmos1yl6hdjhmkf37639730gffanpzndzdpmhwlkfhr + pub_key: null + sequence: "0" + name: transfer + permissions: + - minter + - burner +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "4" + address: cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh + pub_key: null + sequence: "0" + name: bonded_tokens_pool + permissions: + - burner + - staking +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "5" + address: cosmos1tygms3xhhs3yv487phx3dw4a95jn7t7lpm470r + pub_key: null + sequence: "0" + name: not_bonded_tokens_pool + permissions: + - burner + - staking +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "6" + address: cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn + pub_key: null + sequence: "0" + name: gov + permissions: + - burner +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "3" + address: cosmos1jv65s3grqf6v6jl3dp4t6c9t9rk99cd88lyufl + pub_key: null + sequence: "0" + name: distribution + permissions: [] +- '@type': /cosmos.auth.v1beta1.BaseAccount + account_number: "1" + address: cosmos147k3r7v2tvwqhcmaxcfql7j8rmkrlsemxshd3j + pub_key: null + sequence: "0" +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "7" + address: cosmos1m3h30wlvsf8llruxtpukdvsy0km2kum8g38c8q + pub_key: null + sequence: "0" + name: mint + permissions: + - minter +- '@type': /cosmos.auth.v1beta1.ModuleAccount + base_account: + account_number: "2" + address: cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta + pub_key: null + sequence: "0" + name: fee_collector + permissions: [] +pagination: + next_key: null + total: "0" +``` + +#### params + +The `params` command allow users to query the current auth parameters. + +```bash +simd query auth params [flags] +``` + +Example: + +```bash +simd query auth params +``` + +Example Output: + +```bash +max_memo_characters: "256" +sig_verify_cost_ed25519: "590" +sig_verify_cost_secp256k1: "1000" +tx_sig_limit: "7" +tx_size_cost_per_byte: "10" +``` + +## gRPC + +A user can query the `auth` module using gRPC endpoints. + +### Account + +The `account` endpoint allow users to query for an account by it's address. + +```bash +cosmos.auth.v1beta1.Query/Account +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.auth.v1beta1.Query/Account +``` + +Example Output: + +```bash +{ + "account":{ + "@type":"/cosmos.auth.v1beta1.BaseAccount", + "address":"cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2", + "pubKey":{ + "@type":"/cosmos.crypto.secp256k1.PubKey", + "key":"ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD" + }, + "sequence":"1" + } +} +``` + +### Accounts + +The `accounts` endpoint allow users to query all the available accounts. + +```bash +cosmos.auth.v1beta1.Query/Accounts +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.auth.v1beta1.Query/Accounts +``` + +Example Output: + +```bash +{ + "accounts":[ + { + "@type":"/cosmos.auth.v1beta1.BaseAccount", + "address":"cosmos1zwg6tpl8aw4rawv8sgag9086lpw5hv33u5ctr2", + "pubKey":{ + "@type":"/cosmos.crypto.secp256k1.PubKey", + "key":"ApDrE38zZdd7wLmFS9YmqO684y5DG6fjZ4rVeihF/AQD" + }, + "sequence":"1" + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1yl6hdjhmkf37639730gffanpzndzdpmhwlkfhr", + "accountNumber":"8" + }, + "name":"transfer", + "permissions":[ + "minter", + "burner" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh", + "accountNumber":"4" + }, + "name":"bonded_tokens_pool", + "permissions":[ + "burner", + "staking" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1tygms3xhhs3yv487phx3dw4a95jn7t7lpm470r", + "accountNumber":"5" + }, + "name":"not_bonded_tokens_pool", + "permissions":[ + "burner", + "staking" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn", + "accountNumber":"6" + }, + "name":"gov", + "permissions":[ + "burner" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1jv65s3grqf6v6jl3dp4t6c9t9rk99cd88lyufl", + "accountNumber":"3" + }, + "name":"distribution" + }, + { + "@type":"/cosmos.auth.v1beta1.BaseAccount", + "accountNumber":"1", + "address":"cosmos147k3r7v2tvwqhcmaxcfql7j8rmkrlsemxshd3j" + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos1m3h30wlvsf8llruxtpukdvsy0km2kum8g38c8q", + "accountNumber":"7" + }, + "name":"mint", + "permissions":[ + "minter" + ] + }, + { + "@type":"/cosmos.auth.v1beta1.ModuleAccount", + "baseAccount":{ + "address":"cosmos17xpfvakm2amg962yls6f84z3kell8c5lserqta", + "accountNumber":"2" + }, + "name":"fee_collector" + } + ], + "pagination":{ + "total":"9" + } +} +``` + +### Params + +The `params` endpoint allow users to query the current auth parameters. + +```bash +cosmos.auth.v1beta1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.auth.v1beta1.Query/Params +``` + +Example Output: + +```bash +{ + "params": { + "maxMemoCharacters": "256", + "txSigLimit": "7", + "txSizeCostPerByte": "10", + "sigVerifyCostEd25519": "590", + "sigVerifyCostSecp256k1": "1000" + } +} +``` + +## REST + +A user can query the `auth` module using REST endpoints. + +### Account + +The `account` endpoint allow users to query for an account by it's address. + +```bash +/cosmos/auth/v1beta1/account?address={address} +``` + +### Accounts + +The `accounts` endpoint allow users to query all the available accounts. + +```bash +/cosmos/auth/v1beta1/accounts +``` + +### Params + +The `params` endpoint allow users to query the current auth parameters. + +```bash +/cosmos/auth/v1beta1/params +``` + +# Vesting + +## CLI + +A user can query and interact with the `vesting` module using the CLI. + +### Transactions + +The `tx` commands allow users to interact with the `vesting` module. + +```bash +simd tx vesting --help +``` + +#### create-periodic-vesting-account + +The `create-periodic-vesting-account` command creates a new vesting account funded with an allocation of tokens, where a sequence of coins and period length in seconds. Periods are sequential, in that the duration of of a period only starts at the end of the previous period. The duration of the first period starts upon account creation. + +```bash +simd tx vesting create-periodic-vesting-account [to_address] [periods_json_file] [flags] +``` + +Example: + +```bash +simd tx vesting create-periodic-vesting-account cosmos1.. periods.json +``` + +#### create-vesting-account + +The `create-vesting-account` command creates a new vesting account funded with an allocation of tokens. The account can either be a delayed or continuous vesting account, which is determined by the '--delayed' flag. All vesting accouts created will have their start time set by the committed block's time. The end_time must be provided as a UNIX epoch timestamp. + +```bash +simd tx vesting create-vesting-account [to_address] [amount] [end_time] [flags] +``` + +Example: + +```bash +simd tx vesting create-vesting-account cosmos1.. 100stake 2592000 +``` diff --git a/versioned_docs/version-0.46/integrate/modules/auth/README.md b/versioned_docs/version-0.46/integrate/modules/auth/README.md new file mode 100644 index 000000000..1090bb6ba --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/auth/README.md @@ -0,0 +1,45 @@ + + +# `auth` + +## Abstract + +This document specifies the auth module of the Cosmos SDK. + +The auth module is responsible for specifying the base transaction and account types +for an application, since the SDK itself is agnostic to these particulars. It contains +the middlewares, where all basic transaction validity checks (signatures, nonces, auxiliary fields) +are performed, and exposes the account keeper, which allows other modules to read, write, and modify accounts. + +This module is used in the Cosmos Hub. + +## Contents + +1. **[Concepts](01_concepts.md)** + * [Gas & Fees](01_concepts.md#gas-&-fees) +2. **[State](02_state.md)** + * [Accounts](02_state.md#accounts) +3. **[AnteHandlers](03_antehandlers.md)** +4. **[Keepers](04_keepers.md)** + * [Account Keeper](04_keepers.md#account-keeper) +5. **[Vesting](05_vesting.md)** + * [Intro and Requirements](05_vesting.md#intro-and-requirements) + * [Vesting Account Types](05_vesting.md#vesting-account-types) + * [Vesting Account Specification](05_vesting.md#vesting-account-specification) + * [Keepers & Handlers](05_vesting.md#keepers-&-handlers) + * [Genesis Initialization](05_vesting.md#genesis-initialization) + * [Examples](05_vesting.md#examples) + * [Glossary](05_vesting.md#glossary) +6. **[Parameters](06_params.md)** +7. **[Client](07_client.md)** + * **[Auth](07_client.md#auth)** + * [CLI](07_client.md#cli) + * [gRPC](07_client.md#grpc) + * [REST](07_client.md#rest) + * **[Vesting](07_client.md#vesting)** + * [CLI](07_client.md#vesting#cli) diff --git a/versioned_docs/version-0.46/integrate/modules/authz/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/authz/01_concepts.md new file mode 100644 index 000000000..ffe810b59 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/authz/01_concepts.md @@ -0,0 +1,55 @@ + + +# Concepts + +## Authorization and Grant + +The `x/authz` module defines interfaces and messages grant authorizations to perform actions +on behalf of one account to other accounts. The design is defined in the [ADR 030](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-030-authz-module.md). + +A *grant* is an allowance to execute a Msg by the grantee on behalf of the granter. +Authorization is an interface that must be implemented by a concrete authorization logic to validate and execute grants. Authorizations are extensible and can be defined for any Msg service method even outside of the module where the Msg method is defined. See the `SendAuthorization` example in the next section for more details. + +**Note:** The authz module is different from the [auth (authentication)](../modules/auth/) module that is responsible for specifying the base transaction and account types. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/authz/authorizations.go#L11-L25 + +## Built-in Authorizations + +The Cosmos SDK `x/authz` module comes with following authorization types: + +### GenericAuthorization + +`GenericAuthorization` implements the `Authorization` interface that gives unrestricted permission to execute the provided Msg on behalf of granter's account. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/authz/v1beta1/authz.proto#L13-L20 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/authz/generic_authorization.go#L16-L29 + +* `msg` stores Msg type URL. + +### SendAuthorization + +`SendAuthorization` implements the `Authorization` interface for the `cosmos.bank.v1beta1.MsgSend` Msg. It takes a (positive) `SpendLimit` that specifies the maximum amount of tokens the grantee can spend. The `SpendLimit` is updated as the tokens are spent. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/bank/v1beta1/authz.proto#L10-L19 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/bank/types/send_authorization.go#L23-L38 + +* `spend_limit` keeps track of how many coins are left in the authorization. + +### StakeAuthorization + +`StakeAuthorization` implements the `Authorization` interface for messages in the [staking module](https://docs.cosmos.network/v0.44/modules/staking/). It takes an `AuthorizationType` to specify whether you want to authorise delegating, undelegating or redelegating (i.e. these have to be authorised seperately). It also takes a required `MaxTokens` that keeps track of a limit to the amount of tokens that can be delegated/undelegated/redelegated. If left empty, the amount is unlimited. Additionally, this Msg takes an `AllowList` or a `DenyList`, which allows you to select which validators you allow or deny grantees to stake with. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/authz.proto#L10-L33 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/staking/types/authz.go#L15-L35 + +## Gas + +In order to prevent DoS attacks, granting `StakeAuthorization`s with `x/authz` incurs gas. `StakeAuthorization` allows you to authorize another account to delegate, undelegate, or redelegate to validators. The authorizer can define a list of validators they allow or deny delegations to. The Cosmos SDK iterates over these lists and charge 10 gas for each validator in both of the lists. + +Since the state maintaining a list for granter, grantee pair with same expiration, we are iterating over the list to remove the grant (incase of any revoke of paritcular `msgType`) from the list and we are charging 20 gas per iteration. diff --git a/versioned_docs/version-0.46/integrate/modules/authz/02_state.md b/versioned_docs/version-0.46/integrate/modules/authz/02_state.md new file mode 100644 index 000000000..ac5df1022 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/authz/02_state.md @@ -0,0 +1,23 @@ + + +# State + +## Grant + +Grants are identified by combining granter address (the address bytes of the granter), grantee address (the address bytes of the grantee) and Authorization type (its type URL). Hence we only allow one grant for the (granter, grantee, Authorization) triple. + +* Grant: `0x01 | granter_address_len (1 byte) | granter_address_bytes | grantee_address_len (1 byte) | grantee_address_bytes | msgType_bytes-> ProtocolBuffer(AuthorizationGrant)` + +The grant object encapsulates an `Authorization` type and an expiration timestamp: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/authz/v1beta1/authz.proto#L22-L30 + +## GrantQueue + +We are maintaining a queue for authz pruning, whenever a grant created an item will be added to `GrantQueue` with a key of granter, grantee, expiration and value added as array of msg type urls. + +* GrantQueue: `0x02 | granter_address_len (1 byte) | granter_address_bytes | grantee_address_len (1 byte) | grantee_address_bytes | expiration_bytes -> ProtocalBuffer([]string{msgTypeUrls})` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/authz/keeper/keys.go#L78-L93 diff --git a/versioned_docs/version-0.46/integrate/modules/authz/03_messages.md b/versioned_docs/version-0.46/integrate/modules/authz/03_messages.md new file mode 100644 index 000000000..2dfca9c7c --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/authz/03_messages.md @@ -0,0 +1,46 @@ + + +# Messages + +In this section we describe the processing of messages for the authz module. + +## MsgGrant + +An authorization grant is created using the `MsgGrant` message. +If there is already a grant for the `(granter, grantee, Authorization)` triple, then the new grant overwrites the previous one. To update or extend an existing grant, a new grant with the same `(granter, grantee, Authorization)` triple should be created. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/authz/v1beta1/tx.proto#L32-L41 + +The message handling should fail if: + +* both granter and grantee have the same address. +* provided `Expiration` time is less than current unix timestamp (but a grant will be created if no `expiration` time is provided since `expiration` is optional). +* provided `Grant.Authorization` is not implemented. +* `Authorization.MsgTypeURL()` is not defined in the router (there is no defined handler in the app router to handle that Msg types). + +## MsgRevoke + +A grant can be removed with the `MsgRevoke` message. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/authz/v1beta1/tx.proto#L66-L72 + +The message handling should fail if: + +* both granter and grantee have the same address. +* provided `MsgTypeUrl` is empty. + +NOTE: The `MsgExec` message removes a grant if the grant has expired. + +## MsgExec + +When a grantee wants to execute a transaction on behalf of a granter, they must send `MsgExec`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/authz/v1beta1/tx.proto#L51-L59 + +The message handling should fail if: + +* provided `Authorization` is not implemented. +* grantee doesn't have permission to run the transaction. +* if granted authorization is expired. diff --git a/versioned_docs/version-0.46/integrate/modules/authz/04_events.md b/versioned_docs/version-0.46/integrate/modules/authz/04_events.md new file mode 100644 index 000000000..1729b49a7 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/authz/04_events.md @@ -0,0 +1,7 @@ + + +# Events + +The authz module emits proto events defined in [the Protobuf reference](https://buf.build/cosmos/cosmos-sdk/docs/main/cosmos.authz.v1beta1#cosmos.authz.v1beta1.EventGrant). diff --git a/versioned_docs/version-0.46/integrate/modules/authz/05_client.md b/versioned_docs/version-0.46/integrate/modules/authz/05_client.md new file mode 100644 index 000000000..f2ca6cc94 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/authz/05_client.md @@ -0,0 +1,172 @@ + + +# Client + +## CLI + +A user can query and interact with the `authz` module using the CLI. + +### Query + +The `query` commands allow users to query `authz` state. + +```bash +simd query authz --help +``` + +#### grants + +The `grants` command allows users to query grants for a granter-grantee pair. If the message type URL is set, it selects grants only for that message type. + +```bash +simd query authz grants [granter-addr] [grantee-addr] [msg-type-url]? [flags] +``` + +Example: + +```bash +simd query authz grants cosmos1.. cosmos1.. /cosmos.bank.v1beta1.MsgSend +``` + +Example Output: + +```bash +grants: +- authorization: + '@type': /cosmos.bank.v1beta1.SendAuthorization + spend_limit: + - amount: "100" + denom: stake + expiration: "2022-01-01T00:00:00Z" +pagination: null +``` + +### Transactions + +The `tx` commands allow users to interact with the `authz` module. + +```bash +simd tx authz --help +``` + +#### exec + +The `exec` command allows a grantee to execute a transaction on behalf of granter. + +```bash + simd tx authz exec [tx-json-file] --from [grantee] [flags] +``` + +Example: + +```bash +simd tx authz exec tx.json --from=cosmos1.. +``` + +#### grant + +The `grant` command allows a granter to grant an authorization to a grantee. + +```bash +simd tx authz grant --from [flags] +``` + +Example: + +```bash +simd tx authz grant cosmos1.. send --spend-limit=100stake --from=cosmos1.. +``` + +#### revoke + +The `revoke` command allows a granter to revoke an authorization from a grantee. + +```bash +simd tx authz revoke [grantee] [msg-type-url] --from=[granter] [flags] +``` + +Example: + +```bash +simd tx authz revoke cosmos1.. /cosmos.bank.v1beta1.MsgSend --from=cosmos1.. +``` + +## gRPC + +A user can query the `authz` module using gRPC endpoints. + +### Grants + +The `Grants` endpoint allows users to query grants for a granter-grantee pair. If the message type URL is set, it selects grants only for that message type. + +```bash +cosmos.authz.v1beta1.Query/Grants +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"granter":"cosmos1..","grantee":"cosmos1..","msg_type_url":"/cosmos.bank.v1beta1.MsgSend"}' \ + localhost:9090 \ + cosmos.authz.v1beta1.Query/Grants +``` + +Example Output: + +```bash +{ + "grants": [ + { + "authorization": { + "@type": "/cosmos.bank.v1beta1.SendAuthorization", + "spendLimit": [ + { + "denom":"stake", + "amount":"100" + } + ] + }, + "expiration": "2022-01-01T00:00:00Z" + } + ] +} +``` + +## REST + +A user can query the `authz` module using REST endpoints. + +```bash +/cosmos/authz/v1beta1/grants +``` + +Example: + +```bash +curl "localhost:1317/cosmos/authz/v1beta1/grants?granter=cosmos1..&grantee=cosmos1..&msg_type_url=/cosmos.bank.v1beta1.MsgSend" +``` + +Example Output: + +```bash +{ + "grants": [ + { + "authorization": { + "@type": "/cosmos.bank.v1beta1.SendAuthorization", + "spend_limit": [ + { + "denom": "stake", + "amount": "100" + } + ] + }, + "expiration": "2022-01-01T00:00:00Z" + } + ], + "pagination": null +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/authz/README.md b/versioned_docs/version-0.46/integrate/modules/authz/README.md new file mode 100644 index 000000000..ac73d76db --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/authz/README.md @@ -0,0 +1,30 @@ + + +# `authz` + +## Contents + +## Abstract + +`x/authz` is an implementation of a Cosmos SDK module, per [ADR 30](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-030-authz-module.md), that allows +granting arbitrary privileges from one account (the granter) to another account (the grantee). Authorizations must be granted for a particular Msg service method one by one using an implementation of the `Authorization` interface. + +1. **[Concept](01_concepts.md)** + * [Authorization and Grant](01_concepts.md#Authorization-and-Grant) + * [Built-in Authorizations](01_concepts.md#Built-in-Authorizations) + * [Gas](01_concepts.md#gas) +2. **[State](02_state.md)** +3. **[Messages](03_messages.md)** + * [MsgGrant](03_messages.md#MsgGrant) + * [MsgRevoke](03_messages.md#MsgRevoke) + * [MsgExec](03_messages.md#MsgExec) +4. **[Events](04_events.md)** +5. **[Client](05_client.md)** + * [CLI](05_client.md#cli) + * [gRPC](05_client.md#grpc) + * [REST](05_client.md#rest) diff --git a/versioned_docs/version-0.46/integrate/modules/bank/01_state.md b/versioned_docs/version-0.46/integrate/modules/bank/01_state.md new file mode 100644 index 000000000..f24725242 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/bank/01_state.md @@ -0,0 +1,19 @@ + + +# State + +The `x/bank` module keeps state of three primary objects: + +1. Account balances +2. Denomination metadata +3. The total supply of all balances + +In addition, the `x/bank` module keeps the following indexes to manage the +aforementioned state: + +* Supply Index: `0x0 | byte(denom) -> byte(amount)` +* Denom Metadata Index: `0x1 | byte(denom) -> ProtocolBuffer(Metadata)` +* Balances Index: `0x2 | byte(address length) | []byte(address) | []byte(balance.Denom) -> ProtocolBuffer(balance)` +* Reverse Denomination to Address Index: `0x03 | byte(denom) | 0x00 | []byte(address) -> 0` diff --git a/versioned_docs/version-0.46/integrate/modules/bank/02_keepers.md b/versioned_docs/version-0.46/integrate/modules/bank/02_keepers.md new file mode 100644 index 000000000..71d35942b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/bank/02_keepers.md @@ -0,0 +1,135 @@ + + +# Keepers + +The bank module provides these exported keeper interfaces that can be +passed to other modules that read or update account balances. Modules +should use the least-permissive interface that provides the functionality they +require. + +Best practices dictate careful review of `bank` module code to ensure that +permissions are limited in the way that you expect. + +## Blocklisting Addresses + +The `x/bank` module accepts a map of addresses that are considered blocklisted +from directly and explicitly receiving funds through means such as `MsgSend` and +`MsgMultiSend` and direct API calls like `SendCoinsFromModuleToAccount`. + +Typically, these addresses are module accounts. If these addresses receive funds +outside the expected rules of the state machine, invariants are likely to be +broken and could result in a halted network. + +By providing the `x/bank` module with a blocklisted set of addresses, an error occurs for the operation if a user or client attempts to directly or indirectly send funds to a blocklisted account, for example, by using [IBC](https://ibc.cosmos.network). + +## Common Types + +### Input + +An input of a multiparty transfer + +```protobuf +// Input models transaction input. +message Input { + string address = 1; + repeated cosmos.base.v1beta1.Coin coins = 2; +} +``` + +### Output + +An output of a multiparty transfer. + +```protobuf +// Output models transaction outputs. +message Output { + string address = 1; + repeated cosmos.base.v1beta1.Coin coins = 2; +} +``` + +## BaseKeeper + +The base keeper provides full-permission access: the ability to arbitrary modify any account's balance and mint or burn coins. + +Restricted permission to mint per module could be achieved by using baseKeeper with `WithMintCoinsRestriction` to give specific restrictions to mint (e.g. only minting certain denom). + +```go +// Keeper defines a module interface that facilitates the transfer of coins +// between accounts. +type Keeper interface { + SendKeeper + WithMintCoinsRestriction(NewRestrictionFn BankMintingRestrictionFn) BaseKeeper + + InitGenesis(sdk.Context, *types.GenesisState) + ExportGenesis(sdk.Context) *types.GenesisState + + GetSupply(ctx sdk.Context, denom string) sdk.Coin + GetPaginatedTotalSupply(ctx sdk.Context, pagination *query.PageRequest) (sdk.Coins, *query.PageResponse, error) + IterateTotalSupply(ctx sdk.Context, cb func(sdk.Coin) bool) + GetDenomMetaData(ctx sdk.Context, denom string) (types.Metadata, bool) + SetDenomMetaData(ctx sdk.Context, denomMetaData types.Metadata) + IterateAllDenomMetaData(ctx sdk.Context, cb func(types.Metadata) bool) + + SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromModuleToModule(ctx sdk.Context, senderModule, recipientModule string, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error + BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error + + DelegateCoins(ctx sdk.Context, delegatorAddr, moduleAccAddr sdk.AccAddress, amt sdk.Coins) error + UndelegateCoins(ctx sdk.Context, moduleAccAddr, delegatorAddr sdk.AccAddress, amt sdk.Coins) error + + types.QueryServer +} +``` + +## SendKeeper + +The send keeper provides access to account balances and the ability to transfer coins between +accounts. The send keeper does not alter the total supply (mint or burn coins). + +```go +// SendKeeper defines a module interface that facilitates the transfer of coins +// between accounts without the possibility of creating coins. +type SendKeeper interface { + ViewKeeper + + InputOutputCoins(ctx sdk.Context, inputs []types.Input, outputs []types.Output) error + SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error + + GetParams(ctx sdk.Context) types.Params + SetParams(ctx sdk.Context, params types.Params) + + IsSendEnabledCoin(ctx sdk.Context, coin sdk.Coin) bool + IsSendEnabledCoins(ctx sdk.Context, coins ...sdk.Coin) error + + BlockedAddr(addr sdk.AccAddress) bool +} +``` + +## ViewKeeper + +The view keeper provides read-only access to account balances. The view keeper does not have balance alteration functionality. All balance lookups are `O(1)`. + +```go +// ViewKeeper defines a module interface that facilitates read only access to +// account balances. +type ViewKeeper interface { + 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) []types.Balance + GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin + LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins + + IterateAccountBalances(ctx sdk.Context, addr sdk.AccAddress, cb func(coin sdk.Coin) (stop bool)) + IterateAllBalances(ctx sdk.Context, cb func(address sdk.AccAddress, coin sdk.Coin) (stop bool)) +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/bank/03_messages.md b/versioned_docs/version-0.46/integrate/modules/bank/03_messages.md new file mode 100644 index 000000000..a6d237945 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/bank/03_messages.md @@ -0,0 +1,28 @@ + + +# Messages + +## MsgSend + +Send coins from one address to another. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L21-L32 + +The message will fail under the following conditions: + +* The coins do not have sending enabled +* The `to` address is restricted + +## MsgMultiSend + +Send coins from and to a series of different address. If any of the receiving addresses do not correspond to an existing account, a new account is created. ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L37-L45 + +The message will fail under the following conditions: + +* Any of the coins do not have sending enabled +* Any of the `to` addresses are restricted +* Any of the coins are locked +* The inputs and outputs do not correctly correspond to one another diff --git a/versioned_docs/version-0.46/integrate/modules/bank/04_events.md b/versioned_docs/version-0.46/integrate/modules/bank/04_events.md new file mode 100644 index 000000000..e71b82057 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/bank/04_events.md @@ -0,0 +1,149 @@ + + +# Events + +The bank module emits the following events: + +## Handlers + +### MsgSend + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | ------------------ | +| transfer | recipient | {recipientAddress} | +| transfer | amount | {amount} | +| message | module | bank | +| message | action | send | +| message | sender | {senderAddress} | + +### MsgMultiSend + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | ------------------ | +| transfer | recipient | {recipientAddress} | +| transfer | amount | {amount} | +| message | module | bank | +| message | action | multisend | +| message | sender | {senderAddress} | + +## Keeper events + +In addition to handlers events, the bank keeper will produce events when the following methods are called (or any method which ends up calling them) + +### MintCoins + +```json +{ + "type": "coinbase", + "attributes": [ + { + "key": "minter", + "value": "{{sdk.AccAddress of the module minting coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being minted}}", + "index": true + } + ] +} +``` + +```json +{ + "type": "coin_received", + "attributes": [ + { + "key": "receiver", + "value": "{{sdk.AccAddress of the module minting coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being received}}", + "index": true + } + ] +} +``` + +### BurnCoins + +```json +{ + "type": "burn", + "attributes": [ + { + "key": "burner", + "value": "{{sdk.AccAddress of the module burning coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being burned}}", + "index": true + } + ] +} +``` + +```json +{ + "type": "coin_spent", + "attributes": [ + { + "key": "spender", + "value": "{{sdk.AccAddress of the module burning coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being burned}}", + "index": true + } + ] +} +``` + +### addCoins + +```json +{ + "type": "coin_received", + "attributes": [ + { + "key": "receiver", + "value": "{{sdk.AccAddress of the address beneficiary of the coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being received}}", + "index": true + } + ] +} +``` + +### subUnlockedCoins/DelegateCoins + +```json +{ + "type": "coin_spent", + "attributes": [ + { + "key": "spender", + "value": "{{sdk.AccAddress of the address which is spending coins}}", + "index": true + }, + { + "key": "amount", + "value": "{{sdk.Coins being spent}}", + "index": true + } + ] +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/bank/05_params.md b/versioned_docs/version-0.46/integrate/modules/bank/05_params.md new file mode 100644 index 000000000..8d254243c --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/bank/05_params.md @@ -0,0 +1,24 @@ + + +# Parameters + +The bank module contains the following parameters: + +| Key | Type | Example | +| ------------------ | ------------- | ---------------------------------- | +| SendEnabled | []SendEnabled | [{denom: "stake", enabled: true }] | +| DefaultSendEnabled | bool | true | + +## SendEnabled + +The send enabled parameter is an array of SendEnabled entries mapping coin +denominations to their send_enabled status. Entries in this list take +precedence over the `DefaultSendEnabled` setting. + +## DefaultSendEnabled + +The default send enabled value controls send transfer capability for all +coin denominations unless specifically included in the array of `SendEnabled` +parameters. diff --git a/versioned_docs/version-0.46/integrate/modules/bank/06_client.md b/versioned_docs/version-0.46/integrate/modules/bank/06_client.md new file mode 100644 index 000000000..2377b0d92 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/bank/06_client.md @@ -0,0 +1,390 @@ + + +# Client + +## CLI + +A user can query and interact with the `bank` module using the CLI. + +### Query + +The `query` commands allow users to query `bank` state. + +```sh +simd query bank --help +``` + +#### balances + +The `balances` command allows users to query account balances by address. + +```sh +simd query bank balances [address] [flags] +``` + +Example: + +```sh +simd query bank balances cosmos1.. +``` + +Example Output: + +```yml +balances: +- amount: "1000000000" + denom: stake +pagination: + next_key: null + total: "0" +``` + +#### denom-metadata + +The `denom-metadata` command allows users to query metadata for coin denominations. A user can query metadata for a single denomination using the `--denom` flag or all denominations without it. + +```sh +simd query bank denom-metadata [flags] +``` + +Example: + +```sh +simd query bank denom-metadata --denom stake +``` + +Example Output: + +```yml +metadata: + base: stake + denom_units: + - aliases: + - STAKE + denom: stake + description: native staking token of simulation app + display: stake + name: SimApp Token + symbol: STK +``` + +#### total + +The `total` command allows users to query the total supply of coins. A user can query the total supply for a single coin using the `--denom` flag or all coins without it. + +```sh +simd query bank total [flags] +``` + +Example: + +```sh +simd query bank total --denom stake +``` + +Example Output: + +```yml +amount: "10000000000" +denom: stake +``` + +### Transactions + +The `tx` commands allow users to interact with the `bank` module. + +```sh +simd tx bank --help +``` + +#### send + +The `send` command allows users to send funds from one account to another. + +```sh +simd tx bank send [from_key_or_address] [to_address] [amount] [flags] +``` + +Example: + +```sh +simd tx bank send cosmos1.. cosmos1.. 100stake +``` + +## gRPC + +A user can query the `bank` module using gRPC endpoints. + +### Balance + +The `Balance` endpoint allows users to query account balance by address for a given denomination. + +```sh +cosmos.bank.v1beta1.Query/Balance +``` + +Example: + +```sh +grpcurl -plaintext \ + -d '{"address":"cosmos1..","denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/Balance +``` + +Example Output: + +```json +{ + "balance": { + "denom": "stake", + "amount": "1000000000" + } +} +``` + +### AllBalances + +The `AllBalances` endpoint allows users to query account balance by address for all denominations. + +```sh +cosmos.bank.v1beta1.Query/AllBalances +``` + +Example: + +```sh +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +Example Output: + +```json +{ + "balances": [ + { + "denom": "stake", + "amount": "1000000000" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### DenomMetadata + +The `DenomMetadata` endpoint allows users to query metadata for a single coin denomination. + +```sh +cosmos.bank.v1beta1.Query/DenomMetadata +``` + +Example: + +```sh +grpcurl -plaintext \ + -d '{"denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/DenomMetadata +``` + +Example Output: + +```json +{ + "metadata": { + "description": "native staking token of simulation app", + "denomUnits": [ + { + "denom": "stake", + "aliases": [ + "STAKE" + ] + } + ], + "base": "stake", + "display": "stake", + "name": "SimApp Token", + "symbol": "STK" + } +} +``` + +### DenomsMetadata + +The `DenomsMetadata` endpoint allows users to query metadata for all coin denominations. + +```sh +cosmos.bank.v1beta1.Query/DenomsMetadata +``` + +Example: + +```sh +grpcurl -plaintext \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/DenomsMetadata +``` + +Example Output: + +```json +{ + "metadatas": [ + { + "description": "native staking token of simulation app", + "denomUnits": [ + { + "denom": "stake", + "aliases": [ + "STAKE" + ] + } + ], + "base": "stake", + "display": "stake", + "name": "SimApp Token", + "symbol": "STK" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### DenomOwners + +The `DenomOwners` endpoint allows users to query metadata for a single coin denomination. + +```sh +cosmos.bank.v1beta1.Query/DenomOwners +``` + +Example: + +```sh +grpcurl -plaintext \ + -d '{"denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/DenomOwners +``` + +Example Output: + +```json +{ + "denomOwners": [ + { + "address": "cosmos1..", + "balance": { + "denom": "stake", + "amount": "5000000000" + } + }, + { + "address": "cosmos1..", + "balance": { + "denom": "stake", + "amount": "5000000000" + } + }, + ], + "pagination": { + "total": "2" + } +} +``` + +### TotalSupply + +The `TotalSupply` endpoint allows users to query the total supply of all coins. + +```sh +cosmos.bank.v1beta1.Query/TotalSupply +``` + +Example: + +```sh +grpcurl -plaintext \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/TotalSupply +``` + +Example Output: + +```json +{ + "supply": [ + { + "denom": "stake", + "amount": "10000000000" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### SupplyOf + +The `SupplyOf` endpoint allows users to query the total supply of a single coin. + +```sh +cosmos.bank.v1beta1.Query/SupplyOf +``` + +Example: + +```sh +grpcurl -plaintext \ + -d '{"denom":"stake"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/SupplyOf +``` + +Example Output: + +```json +{ + "amount": { + "denom": "stake", + "amount": "10000000000" + } +} +``` + +### Params + +The `Params` endpoint allows users to query the parameters of the `bank` module. + +```sh +cosmos.bank.v1beta1.Query/Params +``` + +Example: + +```sh +grpcurl -plaintext \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "defaultSendEnabled": true + } +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/bank/README.md b/versioned_docs/version-0.46/integrate/modules/bank/README.md new file mode 100644 index 000000000..ec5d1df2f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/bank/README.md @@ -0,0 +1,106 @@ + + +# `x/bank` + +## Abstract + +This document specifies the bank module of the Cosmos SDK. + +The bank module is responsible for handling multi-asset coin transfers between +accounts and tracking special-case pseudo-transfers which must work differently +with particular kinds of accounts (notably delegating/undelegating for vesting +accounts). It exposes several interfaces with varying capabilities for secure +interaction with other modules which must alter user balances. + +In addition, the bank module tracks and provides query support for the total +supply of all assets used in the application. + +This module will be used in the Cosmos Hub. + +## Supply + +The `supply` functionality: + +* passively tracks the total supply of coins within a chain, +* provides a pattern for modules to hold/interact with `Coins`, and +* introduces the invariant check to verify a chain's total supply. + +### Total Supply + +The total `Supply` of the network is equal to the sum of all coins from the +account. The total supply is updated every time a `Coin` is minted (eg: as part +of the inflation mechanism) or burned (eg: due to slashing or if a governance +proposal is vetoed). + +## Module Accounts + +The supply functionality introduces a new type of `auth.Account` which can be used by +modules to allocate tokens and in special cases mint or burn tokens. At a base +level these module accounts are capable of sending/receiving tokens to and from +`auth.Account`s and other module accounts. This design replaces previous +alternative designs where, to hold tokens, modules would burn the incoming +tokens from the sender account, and then track those tokens internally. Later, +in order to send tokens, the module would need to effectively mint tokens +within a destination account. The new design removes duplicate logic between +modules to perform this accounting. + +The `ModuleAccount` interface is defined as follows: + +```go +type ModuleAccount interface { + auth.Account // same methods as the Account interface + + GetName() string // name of the module; used to obtain the address + GetPermissions() []string // permissions of module account + HasPermission(string) bool +} +``` + +> **WARNING!** +> Any module or message handler that allows either direct or indirect sending of funds must explicitly guarantee those funds cannot be sent to module accounts (unless allowed). + +The supply `Keeper` also introduces new wrapper functions for the auth `Keeper` +and the bank `Keeper` that are related to `ModuleAccount`s in order to be able +to: + +* Get and set `ModuleAccount`s by providing the `Name`. +* Send coins from and to other `ModuleAccount`s or standard `Account`s + (`BaseAccount` or `VestingAccount`) by passing only the `Name`. +* `Mint` or `Burn` coins for a `ModuleAccount` (restricted to its permissions). + +### Permissions + +Each `ModuleAccount` has a different set of permissions that provide different +object capabilities to perform certain actions. Permissions need to be +registered upon the creation of the supply `Keeper` so that every time a +`ModuleAccount` calls the allowed functions, the `Keeper` can lookup the +permissions to that specific account and perform or not the action. + +The available permissions are: + +* `Minter`: allows for a module to mint a specific amount of coins. +* `Burner`: allows for a module to burn a specific amount of coins. +* `Staking`: allows for a module to delegate and undelegate a specific amount of coins. + +## Contents + +1. **[State](01_state.md)** +2. **[Keepers](02_keepers.md)** + * [Common Types](02_keepers.md#common-types) + * [BaseKeeper](02_keepers.md#basekeeper) + * [SendKeeper](02_keepers.md#sendkeeper) + * [ViewKeeper](02_keepers.md#viewkeeper) +3. **[Messages](03_messages.md)** + * [MsgSend](03_messages.md#msgsend) + * [MsgMultiSend](03_messages.md#msgmultisend) +4. **[Events](04_events.md)** + * [Handlers](04_events.md#handlers) +5. **[Parameters](05_params.md)** +6. **[Client](06_client.md)** + * [CLI](06_client.md#cli) + * [gRPC](06_client.md#grpc) diff --git a/versioned_docs/version-0.46/integrate/modules/capability/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/capability/01_concepts.md new file mode 100644 index 000000000..93ecb6354 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/capability/01_concepts.md @@ -0,0 +1,35 @@ + + +# Concepts + +## Capabilities + +Capabilities are multi-owner. A scoped keeper can create a capability via `NewCapability` +which creates a new unique, unforgeable object-capability reference. The newly +created capability is automatically persisted; the calling module need not call +`ClaimCapability`. Calling `NewCapability` will create the capability with the +calling module and name as a tuple to be treated the capabilities first owner. + +Capabilities can be claimed by other modules which add them as owners. `ClaimCapability` +allows a module to claim a capability key which it has received from another +module so that future `GetCapability` calls will succeed. `ClaimCapability` MUST +be called if a module which receives a capability wishes to access it by name in +the future. Again, capabilities are multi-owner, so if multiple modules have a +single Capability reference, they will all own it. If a module receives a capability +from another module but does not call `ClaimCapability`, it may use it in the executing +transaction but will not be able to access it afterwards. + +`AuthenticateCapability` can be called by any module to check that a capability +does in fact correspond to a particular name (the name can be un-trusted user input) +with which the calling module previously associated it. + +`GetCapability` allows a module to fetch a capability which it has previously +claimed by name. The module is not allowed to retrieve capabilities which it does +not own. + +## Stores + +* MemStore +* KeyStore diff --git a/versioned_docs/version-0.46/integrate/modules/capability/02_state.md b/versioned_docs/version-0.46/integrate/modules/capability/02_state.md new file mode 100644 index 000000000..3ab713bdb --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/capability/02_state.md @@ -0,0 +1,26 @@ + + +# State +## In persisted KV store + +1. Global unique capability index +2. Capability owners + +Indexes: + +* Unique index: `[]byte("index") -> []byte(currentGlobalIndex)` +* Capability Index: `[]byte("capability_index") | []byte(index) -> ProtocolBuffer(CapabilityOwners)` + +## In-memory KV store + +1. Initialized flag +2. Mapping between the module and capability tuple and the capability name +3. Mapping between the module and capability name and its index + +Indexes: + +* Initialized flag: `[]byte("mem_initialized")` +* RevCapabilityKey: `[]byte(moduleName + "/rev/" + capabilityName) -> []byte(index)` +* FwdCapabilityKey: `[]byte(moduleName + "/fwd/" + capabilityPointerAddress) -> []byte(capabilityName)` diff --git a/versioned_docs/version-0.46/integrate/modules/capability/README.md b/versioned_docs/version-0.46/integrate/modules/capability/README.md new file mode 100644 index 000000000..96a2dcbd9 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/capability/README.md @@ -0,0 +1,77 @@ + + +# `capability` + +## Overview + +`x/capability` is an implementation of a Cosmos SDK module, per [ADR 003](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-003-dynamic-capability-store.md), +that allows for provisioning, tracking, and authenticating multi-owner capabilities +at runtime. + +The keeper maintains two states: persistent and ephemeral in-memory. The persistent +store maintains a globally unique auto-incrementing index and a mapping from +capability index to a set of capability owners that are defined as a module and +capability name tuple. The in-memory ephemeral state keeps track of the actual +capabilities, represented as addresses in local memory, with both forward and reverse indexes. +The forward index maps module name and capability tuples to the capability name. The +reverse index maps between the module and capability name and the capability itself. + +The keeper allows the creation of "scoped" sub-keepers which are tied to a particular +module by name. Scoped keepers must be created at application initialization and +passed to modules, which can then use them to claim capabilities they receive and +retrieve capabilities which they own by name, in addition to creating new capabilities +& authenticating capabilities passed by other modules. A scoped keeper cannot escape its scope, +so a module cannot interfere with or inspect capabilities owned by other modules. + +The keeper provides no other core functionality that can be found in other modules +like queriers, REST and CLI handlers, and genesis state. + +## Initialization + +During application initialization, the keeper must be instantiated with a persistent +store key and an in-memory store key. + +```go +type App struct { + // ... + + capabilityKeeper *capability.Keeper +} + +func NewApp(...) *App { + // ... + + app.capabilityKeeper = capability.NewKeeper(codec, persistentStoreKey, memStoreKey) +} +``` + +After the keeper is created, it can be used to create scoped sub-keepers which +are passed to other modules that can create, authenticate, and claim capabilities. +After all the necessary scoped keepers are created and the state is loaded, the +main capability keeper must be sealed to prevent further scoped keepers from +being created. + +```go +func NewApp(...) *App { + // ... + + // Creating a scoped keeper + scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) + + // Seal the capability keeper to prevent any further modules from creating scoped + // sub-keepers. + app.capabilityKeeper.Seal() + + return app +} +``` + +## Contents + +1. **[Concepts](01_concepts.md)** +1. **[State](02_state.md)** diff --git a/versioned_docs/version-0.46/integrate/modules/crisis/01_state.md b/versioned_docs/version-0.46/integrate/modules/crisis/01_state.md new file mode 100644 index 000000000..50003e63d --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/crisis/01_state.md @@ -0,0 +1,17 @@ + + +# State + +## ConstantFee + +Due to the anticipated large gas cost requirement to verify an invariant (and +potential to exceed the maximum allowable block gas limit) a constant fee is +used instead of the standard gas consumption method. The constant fee is +intended to be larger than the anticipated gas cost of running the invariant +with the standard gas consumption method. + +The ConstantFee param is held in the global params store. + +* Params: `mint/params -> legacy_amino(sdk.Coin)` diff --git a/versioned_docs/version-0.46/integrate/modules/crisis/02_messages.md b/versioned_docs/version-0.46/integrate/modules/crisis/02_messages.md new file mode 100644 index 000000000..ca3b650f5 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/crisis/02_messages.md @@ -0,0 +1,25 @@ + + +# Messages + +In this section we describe the processing of the crisis messages and the +corresponding updates to the state. + +## MsgVerifyInvariant + +Blockchain invariants can be checked using the `MsgVerifyInvariant` message. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/crisis/v1beta1/tx.proto#L16-L26 + +This message is expected to fail if: + +* the sender does not have enough coins for the constant fee +* the invariant route is not registered + +This message checks the invariant provided, and if the invariant is broken it +panics, halting the blockchain. If the invariant is broken, the constant fee is +never deducted as the transaction is never committed to a block (equivalent to +being refunded). However, if the invariant is not broken, the constant fee will +not be refunded. diff --git a/versioned_docs/version-0.46/integrate/modules/crisis/03_events.md b/versioned_docs/version-0.46/integrate/modules/crisis/03_events.md new file mode 100644 index 000000000..5aef2078e --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/crisis/03_events.md @@ -0,0 +1,18 @@ + + +# Events + +The crisis module emits the following events: + +## Handlers + +### MsgVerifyInvariance + +| Type | Attribute Key | Attribute Value | +|-----------|---------------|------------------| +| invariant | route | {invariantRoute} | +| message | module | crisis | +| message | action | verify_invariant | +| message | sender | {senderAddress} | diff --git a/versioned_docs/version-0.46/integrate/modules/crisis/04_params.md b/versioned_docs/version-0.46/integrate/modules/crisis/04_params.md new file mode 100644 index 000000000..0d046adaa --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/crisis/04_params.md @@ -0,0 +1,11 @@ + + +# Parameters + +The crisis module contains the following parameters: + +| Key | Type | Example | +|-------------|---------------|-----------------------------------| +| ConstantFee | object (coin) | {"denom":"uatom","amount":"1000"} | diff --git a/versioned_docs/version-0.46/integrate/modules/crisis/05_client.md b/versioned_docs/version-0.46/integrate/modules/crisis/05_client.md new file mode 100644 index 000000000..5f95955a6 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/crisis/05_client.md @@ -0,0 +1,31 @@ + + +# Client + +## CLI + +A user can query and interact with the `crisis` module using the CLI. + +### Transactions + +The `tx` commands allow users to interact with the `crisis` module. + +```bash +simd tx crisis --help +``` + +#### invariant-broken + +The `invariant-broken` command submits proof when an invariant was broken to halt the chain + +```bash +simd tx crisis invariant-broken [module-name] [invariant-route] [flags] +``` + +Example: + +```bash +simd tx crisis invariant-broken bank total-supply --from=[keyname or address] +``` diff --git a/versioned_docs/version-0.46/integrate/modules/crisis/README.md b/versioned_docs/version-0.46/integrate/modules/crisis/README.md new file mode 100644 index 000000000..79d688b41 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/crisis/README.md @@ -0,0 +1,26 @@ + + +# `crisis` + +## Overview + +The crisis module halts the blockchain under the circumstance that a blockchain +invariant is broken. Invariants can be registered with the application during the +application initialization process. + +## Contents + +1. **[State](01_state.md)** + * [ConstantFee](01_state.md#constantfee) +2. **[Messages](02_messages.md)** + * [MsgVerifyInvariant](02_messages.md#msgverifyinvariant) +3. **[Events](03_events.md)** + * [Handlers](03_events.md#handlers) +4. **[Parameters](04_params.md)** +5. **[Client](05_client.md)** + * [CLI](05_client.md#cli) diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/distribution/01_concepts.md new file mode 100644 index 000000000..6bef259f1 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/01_concepts.md @@ -0,0 +1,34 @@ + + +# Concepts + +In Proof of Stake (PoS) blockchains, rewards gained from transaction fees are paid to validators. The fee distribution module fairly distributes the rewards to the validators' constituent delegators. + +Rewards are calculated per period. The period is updated each time a validator's delegation changes, for example, when the validator receives a new delegation. +The rewards for a single validator can then be calculated by taking the total rewards for the period before the delegation started, minus the current total rewards. +To learn more, see the [F1 Fee Distribution paper](/docs/spec/fee_distribution/f1_fee_distr.pdf). + +The commission to the validator is paid when the validator is removed or when the validator requests a withdrawal. +The commission is calculated and incremented at every `BeginBlock` operation to update accumulated fee amounts. + +The rewards to a delegator are distributed when the delegation is changed or removed, or a withdrawal is requested. +Before rewards are distributed, all slashes to the validator that occurred during the current delegation are applied. + +## Reference Counting in F1 Fee Distribution + +In F1 fee distribution, the rewards a delegator receives are calculated when their delegation is withdrawn. This calculation must read the terms of the summation of rewards divided by the share of tokens from the period which they ended when they delegated, and the final period that was created for the withdrawal. + +Additionally, as slashes change the amount of tokens a delegation will have (but we calculate this lazily, +only when a delegator un-delegates), we must calculate rewards in separate periods before / after any slashes +which occurred in between when a delegator delegated and when they withdrew their rewards. Thus slashes, like +delegations, reference the period which was ended by the slash event. + +All stored historical rewards records for periods which are no longer referenced by any delegations +or any slashes can thus be safely removed, as they will never be read (future delegations and future +slashes will always reference future periods). This is implemented by tracking a `ReferenceCount` +along with each historical reward storage entry. Each time a new object (delegation or slash) +is created which might need to reference the historical record, the reference count is incremented. +Each time one object which previously needed to reference the historical record is deleted, the reference +count is decremented. If the reference count hits zero, the historical record is deleted. diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/02_state.md b/versioned_docs/version-0.46/integrate/modules/distribution/02_state.md new file mode 100644 index 000000000..e914ce253 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/02_state.md @@ -0,0 +1,65 @@ + + +# State + +## FeePool + +All globally tracked parameters for distribution are stored within +`FeePool`. Rewards are collected and added to the reward pool and +distributed to validators/delegators from here. + +Note that the reward pool holds decimal coins (`DecCoins`) to allow +for fractions of coins to be received from operations like inflation. +When coins are distributed from the pool they are truncated back to +`sdk.Coins` which are non-decimal. + +* FeePool: `0x00 -> ProtocolBuffer(FeePool)` + +```go +// coins with decimal +type DecCoins []DecCoin + +type DecCoin struct { + Amount sdk.Dec + Denom string +} +``` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/distribution/v1beta1/distribution.proto#L92-L96 + +## Validator Distribution + +Validator distribution information for the relevant validator is updated each time: + +1. delegation amount to a validator is updated, +2. a validator successfully proposes a block and receives a reward, +3. any delegator withdraws from a validator, or +4. the validator withdraws its commission. + +* ValidatorDistInfo: `0x02 | ValOperatorAddrLen (1 byte) | ValOperatorAddr -> ProtocolBuffer(validatorDistribution)` + +```go +type ValidatorDistInfo struct { + OperatorAddress sdk.AccAddress + SelfBondRewards sdk.DecCoins + ValidatorCommission types.ValidatorAccumulatedCommission +} +``` + +## Delegation Distribution + +Each delegation distribution only needs to record the height at which it last +withdrew fees. Because a delegation must withdraw fees each time it's +properties change (aka bonded tokens etc.) its properties will remain constant +and the delegator's _accumulation_ factor can be calculated passively knowing +only the height of the last withdrawal and its current properties. + +* DelegationDistInfo: `0x02 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValOperatorAddrLen (1 byte) | ValOperatorAddr -> ProtocolBuffer(delegatorDist)` + +```go +type DelegationDistInfo struct { + WithdrawalHeight int64 // last time this delegation withdrew rewards +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/03_begin_block.md b/versioned_docs/version-0.46/integrate/modules/distribution/03_begin_block.md new file mode 100644 index 000000000..0b68aa796 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/03_begin_block.md @@ -0,0 +1,87 @@ + + +# Begin Block + +At each `BeginBlock`, all fees received in the previous block are transferred to +the distribution `ModuleAccount` account. When a delegator or validator +withdraws their rewards, they are taken out of the `ModuleAccount`. During begin +block, the different claims on the fees collected are updated as follows: + +* The block proposer of the previous height and its delegators receive between 1% and 5% of fee rewards. +* The reserve community tax is charged. +* The remainder is distributed proportionally by voting power to all bonded validators + +To incentivize validators to wait and include additional pre-commits in the block, the block proposer reward is calculated from Tendermint pre-commit messages. + +## The Distribution Scheme + +See [params](07_params.md) for description of parameters. + +Let `fees` be the total fees collected in the previous block, including +inflationary rewards to the stake. All fees are collected in a specific module +account during the block. During `BeginBlock`, they are sent to the +`"distribution"` `ModuleAccount`. No other sending of tokens occurs. Instead, the +rewards each account is entitled to are stored, and withdrawals can be triggered +through the messages `FundCommunityPool`, `WithdrawValidatorCommission` and +`WithdrawDelegatorReward`. + +### Reward to the Community Pool + +The community pool gets `community_tax * fees`, plus any remaining dust after +validators get their rewards that are always rounded down to the nearest +integer value. + +### Reward To the Validators + +The proposer receives a base reward of `fees * baseproposerreward` and a bonus +of `fees * bonusproposerreward * P`, where `P = (total power of validators with +included precommits / total bonded validator power)`. The more precommits the +proposer includes, the larger `P` is. `P` can never be larger than `1.00` (since +only bonded validators can supply valid precommits) and is always larger than +`2/3`. + +Any remaining fees are distributed among all the bonded validators, including +the proposer, in proportion to their consensus power. + +```text +powFrac = validator power / total bonded validator power +proposerMul = baseproposerreward + bonusproposerreward * P +voteMul = 1 - communitytax - proposerMul +``` + +In total, the proposer receives `fees * (voteMul * powFrac + proposerMul)`. +All other validators receive `fees * voteMul * powFrac`. + +### Rewards to Delegators + +Each validator's rewards are distributed to its delegators. The validator also +has a self-delegation that is treated like a regular delegation in +distribution calculations. + +The validator sets a commission rate. The commission rate is flexible, but each +validator sets a maximum rate and a maximum daily increase. These maximums cannot be exceeded and protect delegators from sudden increases of validator commission rates to prevent validators from taking all of the rewards. + +The outstanding rewards that the operator is entitled to are stored in +`ValidatorAccumulatedCommission`, while the rewards the delegators are entitled +to are stored in `ValidatorCurrentRewards`. The [F1 fee distribution +scheme](01_concepts.md) is used to calculate the rewards per delegator as they +withdraw or update their delegation, and is thus not handled in `BeginBlock`. + +### Example Distribution + +For this example distribution, the underlying consensus engine selects block proposers in +proportion to their power relative to the entire bonded power. + +All validators are equally performant at including pre-commits in their proposed +blocks. Then hold `(precommits included) / (total bonded validator power)` +constant so that the amortized block reward for the validator is `( validator power / total bonded power) * (1 - community tax rate)` of +the total rewards. Consequently, the reward for a single delegator is: + +```text +(delegator proportion of the validator power / validator power) * (validator power / total bonded power) + * (1 - community tax rate) * (1 - validator commision rate) += (delegator proportion of the validator power / total bonded power) * (1 - +community tax rate) * (1 - validator commision rate) +``` diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/04_messages.md b/versioned_docs/version-0.46/integrate/modules/distribution/04_messages.md new file mode 100644 index 000000000..87d608842 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/04_messages.md @@ -0,0 +1,122 @@ + + +# Messages + +## MsgSetWithdrawAddress + +By default, the withdraw address is the delegator address. To change its withdraw address, a delegator must send a `MsgSetWithdrawAddress` message. +Changing the withdraw address is possible only if the parameter `WithdrawAddrEnabled` is set to `true`. + +The withdraw address cannot be any of the module accounts. These accounts are blocked from being withdraw addresses by being added to the distribution keeper's `blockedAddrs` array at initialization. + +Response: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/distribution/v1beta1/tx.proto#L31-L41 + +```go +func (k Keeper) SetWithdrawAddr(ctx sdk.Context, delegatorAddr sdk.AccAddress, withdrawAddr sdk.AccAddress) error + if k.blockedAddrs[withdrawAddr.String()] { + fail with "`{withdrawAddr}` is not allowed to receive external funds" + } + + if !k.GetWithdrawAddrEnabled(ctx) { + fail with `ErrSetWithdrawAddrDisabled` + } + + k.SetDelegatorWithdrawAddr(ctx, delegatorAddr, withdrawAddr) +``` + +## MsgWithdrawDelegatorReward + +A delegator can withdraw its rewards. +Internally in the distribution module, this transaction simultaneously removes the previous delegation with associated rewards, the same as if the delegator simply started a new delegation of the same value. +The rewards are sent immediately from the distribution `ModuleAccount` to the withdraw address. +Any remainder (truncated decimals) are sent to the community pool. +The starting height of the delegation is set to the current validator period, and the reference count for the previous period is decremented. +The amount withdrawn is deducted from the `ValidatorOutstandingRewards` variable for the validator. + +In the F1 distribution, the total rewards are calculated per validator period, and a delegator receives a piece of those rewards in proportion to their stake in the validator. +In basic F1, the total rewards that all the delegators are entitled to between to periods is calculated the following way. +Let `R(X)` be the total accumulated rewards up to period `X` divided by the tokens staked at that time. The delegator allocation is `R(X) * delegator_stake`. +Then the rewards for all the delegators for staking between periods `A` and `B` are `(R(B) - R(A)) * total stake`. +However, these calculated rewards don't account for slashing. + +Taking the slashes into account requires iteration. +Let `F(X)` be the fraction a validator is to be slashed for a slashing event that happened at period `X`. +If the validator was slashed at periods `P1, ..., PN`, where `A < P1`, `PN < B`, the distribution module calculates the individual delegator's rewards, `T(A, B)`, as follows: + +```go +stake := initial stake +rewards := 0 +previous := A +for P in P1, ..., PN`: + rewards = (R(P) - previous) * stake + stake = stake * F(P) + previous = P +rewards = rewards + (R(B) - R(PN)) * stake +``` + +The historical rewards are calculated retroactively by playing back all the slashes and then attenuating the delegator's stake at each step. +The final calculated stake is equivalent to the actual staked coins in the delegation with a margin of error due to rounding errors. + +Response: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/distribution/v1beta1/tx.proto#L46-L56 + +## WithdrawValidatorCommission + +The validator can send the WithdrawValidatorCommission message to withdraw their accumulated commission. +The commission is calculated in every block during `BeginBlock`, so no iteration is required to withdraw. +The amount withdrawn is deducted from the `ValidatorOutstandingRewards` variable for the validator. +Only integer amounts can be sent. If the accumulated awards have decimals, the amount is truncated before the withdrawal is sent, and the remainder is left to be withdrawn later. + +## FundCommunityPool + +This message sends coins directly from the sender to the community pool. + +The transaction fails if the amount cannot be transferred from the sender to the distribution module account. + +```go +func (k Keeper) FundCommunityPool(ctx sdk.Context, amount sdk.Coins, sender sdk.AccAddress) error { + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, sender, types.ModuleName, amount); err != nil { + return err + } + + feePool := k.GetFeePool(ctx) + feePool.CommunityPool = feePool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(amount...)...) + k.SetFeePool(ctx, feePool) + + return nil +} +``` + +## Common distribution operations + +These operations take place during many different messages. + +### Initialize delegation + +Each time a delegation is changed, the rewards are withdrawn and the delegation is reinitialized. +Initializing a delegation increments the validator period and keeps track of the starting period of the delegation. + +```go +// initialize starting info for a new delegation +func (k Keeper) initializeDelegation(ctx sdk.Context, val sdk.ValAddress, del sdk.AccAddress) { + // period has already been incremented - we want to store the period ended by this delegation action + previousPeriod := k.GetValidatorCurrentRewards(ctx, val).Period - 1 + + // increment reference count for the period we're going to track + k.incrementReferenceCount(ctx, val, previousPeriod) + + validator := k.stakingKeeper.Validator(ctx, val) + delegation := k.stakingKeeper.Delegation(ctx, del, val) + + // calculate delegation stake in tokens + // we don't store directly, so multiply delegation shares * (tokens per share) + // note: necessary to truncate so we don't allow withdrawing more rewards than owed + stake := validator.TokensFromSharesTruncated(delegation.GetShares()) + k.SetDelegatorStartingInfo(ctx, val, del, types.NewDelegatorStartingInfo(previousPeriod, stake, uint64(ctx.BlockHeight()))) +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/05_hooks.md b/versioned_docs/version-0.46/integrate/modules/distribution/05_hooks.md new file mode 100644 index 000000000..a1702ef73 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/05_hooks.md @@ -0,0 +1,59 @@ + + +# Hooks + +Available hooks that can be called by and from this module. + +## Create or modify delegation distribution + +* triggered-by: `staking.MsgDelegate`, `staking.MsgBeginRedelegate`, `staking.MsgUndelegate` + +### Before + +* The delegation rewards are withdrawn to the withdraw address of the delegator. + The rewards include the current period and exclude the starting period. +* The validator period is incremented. + The validator period is incremented because the validator's power and share distribution might have changed. +* The reference count for the delegator's starting period is decremented. + +### After + +The starting height of the delegation is set to the previous period. +Because of the `Before`-hook, this period is the last period for which the delegator was rewarded. + +## Validator created + +* triggered-by: `staking.MsgCreateValidator` + +When a validator is created, the following validator variables are initialized: + +* Historical rewards +* Current accumulated rewards +* Accumulated commission +* Total outstanding rewards +* Period + +By default, all values are set to a `0`, except period, which is set to `1`. + +## Validator removed + +* triggered-by: `staking.RemoveValidator` + +Outstanding commission is sent to the validator's self-delegation withdrawal address. +Remaining delegator rewards get sent to the community fee pool. + +Note: The validator gets removed only when it has no remaining delegations. +At that time, all outstanding delegator rewards will have been withdrawn. +Any remaining rewards are dust amounts. + +## Validator is slashed + +* triggered-by: `staking.Slash` + +* The current validator period reference count is incremented. + The reference count is incremented because the slash event has created a reference to it. +* The validator period is incremented. +* The slash event is stored for later use. + The slash event will be referenced when calculating delegator rewards. diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/06_events.md b/versioned_docs/version-0.46/integrate/modules/distribution/06_events.md new file mode 100644 index 000000000..7e70f0beb --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/06_events.md @@ -0,0 +1,48 @@ + + +# Events + +The distribution module emits the following events: + +## BeginBlocker + +| Type | Attribute Key | Attribute Value | +|-----------------|---------------|--------------------| +| proposer_reward | validator | {validatorAddress} | +| proposer_reward | reward | {proposerReward} | +| commission | amount | {commissionAmount} | +| commission | validator | {validatorAddress} | +| rewards | amount | {rewardAmount} | +| rewards | validator | {validatorAddress} | + +## Handlers + +### MsgSetWithdrawAddress + +| Type | Attribute Key | Attribute Value | +|----------------------|------------------|----------------------| +| set_withdraw_address | withdraw_address | {withdrawAddress} | +| message | module | distribution | +| message | action | set_withdraw_address | +| message | sender | {senderAddress} | + +### MsgWithdrawDelegatorReward + +| Type | Attribute Key | Attribute Value | +|---------|---------------|---------------------------| +| withdraw_rewards | amount | {rewardAmount} | +| withdraw_rewards | validator | {validatorAddress} | +| message | module | distribution | +| message | action | withdraw_delegator_reward | +| message | sender | {senderAddress} | + +### MsgWithdrawValidatorCommission + +| Type | Attribute Key | Attribute Value | +|------------|---------------|-------------------------------| +| withdraw_commission | amount | {commissionAmount} | +| message | module | distribution | +| message | action | withdraw_validator_commission | +| message | sender | {senderAddress} | diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/07_params.md b/versioned_docs/version-0.46/integrate/modules/distribution/07_params.md new file mode 100644 index 000000000..4cee94c9d --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/07_params.md @@ -0,0 +1,17 @@ + + +# Parameters + +The distribution module contains the following parameters: + +| Key | Type | Example | +| ------------------- | ------------ | -------------------------- | +| communitytax | string (dec) | "0.020000000000000000" [0] | +| baseproposerreward | string (dec) | "0.010000000000000000" [0] | +| bonusproposerreward | string (dec) | "0.040000000000000000" [0] | +| withdrawaddrenabled | bool | true | + +* [0] `communitytax`, `baseproposerreward` and `bonusproposerreward` must be + positive and their sum cannot exceed 1.00. diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/08_client.md b/versioned_docs/version-0.46/integrate/modules/distribution/08_client.md new file mode 100644 index 000000000..8e547ba46 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/08_client.md @@ -0,0 +1,469 @@ + + +# Client + +## CLI + +A user can query and interact with the `distribution` module using the CLI. + +### Query + +The `query` commands allow users to query `distribution` state. + +```sh +simd query distribution --help +``` + +#### commission + +The `commission` command allows users to query validator commission rewards by address. + +```sh +simd query distribution commission [address] [flags] +``` + +Example: + +```sh +simd query distribution commission cosmosvaloper1.. +``` + +Example Output: + +```yml +commission: +- amount: "1000000.000000000000000000" + denom: stake +``` + +#### community-pool + +The `community-pool` command allows users to query all coin balances within the community pool. + +```sh +simd query distribution community-pool [flags] +``` + +Example: + +```sh +simd query distribution community-pool +``` + +Example Output: + +```yml +pool: +- amount: "1000000.000000000000000000" + denom: stake +``` + +#### params + +The `params` command allows users to query the parameters of the `distribution` module. + +```sh +simd query distribution params [flags] +``` + +Example: + +```sh +simd query distribution params +``` + +Example Output: + +```yml +base_proposer_reward: "0.010000000000000000" +bonus_proposer_reward: "0.040000000000000000" +community_tax: "0.020000000000000000" +withdraw_addr_enabled: true +``` + +#### rewards + +The `rewards` command allows users to query delegator rewards. Users can optionally include the validator address to query rewards earned from a specific validator. + +```sh +simd query distribution rewards [delegator-addr] [validator-addr] [flags] +``` + +Example: + +```sh +simd query distribution rewards cosmos1.. +``` + +Example Output: + +```yml +rewards: +- reward: + - amount: "1000000.000000000000000000" + denom: stake + validator_address: cosmosvaloper1.. +total: +- amount: "1000000.000000000000000000" + denom: stake +``` + +#### slashes + +The `slashes` command allows users to query all slashes for a given block range. + +```sh +simd query distribution slashes [validator] [start-height] [end-height] [flags] +``` + +Example: + +```sh +simd query distribution slashes cosmosvaloper1.. 1 1000 +``` + +Example Output: + +```yml +pagination: + next_key: null + total: "0" +slashes: +- validator_period: 20, + fraction: "0.009999999999999999" +``` + +#### validator-outstanding-rewards + +The `validator-outstanding-rewards` command allows users to query all outstanding (un-withdrawn) rewards for a validator and all their delegations. + +```sh +simd query distribution validator-outstanding-rewards [validator] [flags] +``` + +Example: + +```sh +simd query distribution validator-outstanding-rewards cosmosvaloper1.. +``` + +Example Output: + +```yml +rewards: +- amount: "1000000.000000000000000000" + denom: stake +``` + +### Transactions + +The `tx` commands allow users to interact with the `distribution` module. + +```sh +simd tx distribution --help +``` + +#### fund-community-pool + +The `fund-community-pool` command allows users to send funds to the community pool. + +```sh +simd tx distribution fund-community-pool [amount] [flags] +``` + +Example: + +```sh +simd tx distribution fund-community-pool 100stake --from cosmos1.. +``` + +#### set-withdraw-addr + +The `set-withdraw-addr` command allows users to set the withdraw address for rewards associated with a delegator address. + +```sh +simd tx distribution set-withdraw-addr [withdraw-addr] [flags] +``` + +Example: + +```sh +simd tx distribution set-withdraw-addr cosmos1.. --from cosmos1.. +``` + +#### withdraw-all-rewards + +The `withdraw-all-rewards` command allows users to withdraw all rewards for a delegator. + +```sh +simd tx distribution withdraw-all-rewards [flags] +``` + +Example: + +```sh +simd tx distribution withdraw-all-rewards --from cosmos1.. +``` + +#### withdraw-rewards + +The `withdraw-rewards` command allows users to withdraw all rewards from a given delegation address, +and optionally withdraw validator commission if the delegation address given is a validator operator and the user proves the `--commision` flag. + +```sh +simd tx distribution withdraw-rewards [validator-addr] [flags] +``` + +Example: + +```sh +simd tx distribution withdraw-rewards cosmosvaloper1.. --from cosmos1.. --commision +``` + +## gRPC + +A user can query the `distribution` module using gRPC endpoints. + +### Params + +The `Params` endpoint allows users to query parameters of the `distribution` module. + +Example: + +```sh +grpcurl -plaintext \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "communityTax": "20000000000000000", + "baseProposerReward": "10000000000000000", + "bonusProposerReward": "40000000000000000", + "withdrawAddrEnabled": true + } +} +``` + +### ValidatorOutstandingRewards + +The `ValidatorOutstandingRewards` endpoint allows users to query rewards of a validator address. + +Example: + +```sh +grpcurl -plaintext \ + -d '{"validator_address":"cosmosvalop1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/ValidatorOutstandingRewards +``` + +Example Output: + +```json +{ + "rewards": { + "rewards": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] + } +} +``` + +### ValidatorCommission + +The `ValidatorCommission` endpoint allows users to query accumulated commission for a validator. + +Example: + +```sh +grpcurl -plaintext \ + -d '{"validator_address":"cosmosvalop1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/ValidatorCommission +``` + +Example Output: + +```json +{ + "commission": { + "commission": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] + } +} +``` + +### ValidatorSlashes + +The `ValidatorSlashes` endpoint allows users to query slash events of a validator. + +Example: + +```sh +grpcurl -plaintext \ + -d '{"validator_address":"cosmosvalop1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/ValidatorSlashes +``` + +Example Output: + +```json +{ + "slashes": [ + { + "validator_period": "20", + "fraction": "0.009999999999999999" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### DelegationRewards + +The `DelegationRewards` endpoint allows users to query the total rewards accrued by a delegation. + +Example: + +```sh +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1..","validator_address":"cosmosvalop1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegationRewards +``` + +Example Output: + +```json +{ + "rewards": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] +} +``` + +### DelegationTotalRewards + +The `DelegationTotalRewards` endpoint allows users to query the total rewards accrued by each validator. + +Example: + +```sh +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegationTotalRewards +``` + +Example Output: + +```json +{ + "rewards": [ + { + "validatorAddress": "cosmosvaloper1..", + "reward": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] + } + ], + "total": [ + { + "denom": "stake", + "amount": "1000000000000000" + } + ] +} +``` + +### DelegatorValidators + +The `DelegatorValidators` endpoint allows users to query all validators for given delegator. + +Example: + +```sh +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegatorValidators +``` + +Example Output: + +```json +{ + "validators": [ + "cosmosvaloper1.." + ] +} +``` + +### DelegatorWithdrawAddress + +The `DelegatorWithdrawAddress` endpoint allows users to query the withdraw address of a delegator. + +Example: + +```sh +grpcurl -plaintext \ + -d '{"delegator_address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/DelegatorWithdrawAddress +``` + +Example Output: + +```json +{ + "withdrawAddress": "cosmos1.." +} +``` + +### CommunityPool + +The `CommunityPool` endpoint allows users to query the community pool coins. + +Example: + +```sh +grpcurl -plaintext \ + localhost:9090 \ + cosmos.distribution.v1beta1.Query/CommunityPool +``` + +Example Output: + +```json +{ + "pool": [ + { + "denom": "stake", + "amount": "1000000000000000000" + } + ] +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/distribution/README.md b/versioned_docs/version-0.46/integrate/modules/distribution/README.md new file mode 100644 index 000000000..c5a841ceb --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/distribution/README.md @@ -0,0 +1,106 @@ + + +# `distribution` + +## Overview + +This _simple_ distribution mechanism describes a functional way to passively +distribute rewards between validators and delegators. Note that this mechanism does +not distribute funds in as precisely as active reward distribution mechanisms and +will therefore be upgraded in the future. + +The mechanism operates as follows. Collected rewards are pooled globally and +divided out passively to validators and delegators. Each validator has the +opportunity to charge commission to the delegators on the rewards collected on +behalf of the delegators. Fees are collected directly into a global reward pool +and validator proposer-reward pool. Due to the nature of passive accounting, +whenever changes to parameters which affect the rate of reward distribution +occurs, withdrawal of rewards must also occur. + +* Whenever withdrawing, one must withdraw the maximum amount they are entitled + to, leaving nothing in the pool. +* Whenever bonding, unbonding, or re-delegating tokens to an existing account, a + full withdrawal of the rewards must occur (as the rules for lazy accounting + change). +* Whenever a validator chooses to change the commission on rewards, all accumulated + commission rewards must be simultaneously withdrawn. + +The above scenarios are covered in `hooks.md`. + +The distribution mechanism outlined herein is used to lazily distribute the +following rewards between validators and associated delegators: + +* multi-token fees to be socially distributed +* proposer reward pool +* inflated atom provisions +* validator commission on all rewards earned by their delegators stake + +Fees are pooled within a global pool, as well as validator specific +proposer-reward pools. The mechanisms used allow for validators and delegators +to independently and lazily withdraw their rewards. + +## Shortcomings + +As a part of the lazy computations, each delegator holds an accumulation term +specific to each validator which is used to estimate what their approximate +fair portion of tokens held in the global fee pool is owed to them. + +```text +entitlement = delegator-accumulation / all-delegators-accumulation +``` + +Under the circumstance that there was constant and equal flow of incoming +reward tokens every block, this distribution mechanism would be equal to the +active distribution (distribute individually to all delegators each block). +However, this is unrealistic so deviations from the active distribution will +occur based on fluctuations of incoming reward tokens as well as timing of +reward withdrawal by other delegators. + +If you happen to know that incoming rewards are about to significantly increase, +you are incentivized to not withdraw until after this event, increasing the +worth of your existing _accum_. See [#2764](https://github.com/cosmos/cosmos-sdk/issues/2764) +for further details. + +## Effect on Staking + +Charging commission on Atom provisions while also allowing for Atom-provisions +to be auto-bonded (distributed directly to the validators bonded stake) is +problematic within BPoS. Fundamentally, these two mechanisms are mutually +exclusive. If both commission and auto-bonding mechanisms are simultaneously +applied to the staking-token then the distribution of staking-tokens between +any validator and its delegators will change with each block. This then +necessitates a calculation for each delegation records for each block - +which is considered computationally expensive. + +In conclusion, we can only have Atom commission and unbonded atoms +provisions or bonded atom provisions with no Atom commission, and we elect to +implement the former. Stakeholders wishing to rebond their provisions may elect +to set up a script to periodically withdraw and rebond rewards. + +## Contents + +1. **[Concepts](01_concepts.md)** + * [Reference Counting in F1 Fee Distribution](01_concepts.md#reference-counting-in-f1-fee-distribution) +2. **[State](02_state.md)** +3. **[Begin Block](03_begin_block.md)** +4. **[Messages](04_messages.md)** + * [MsgSetWithdrawAddress](04_messages.md#msgsetwithdrawaddress) + * [MsgWithdrawDelegatorReward](04_messages.md#msgwithdrawdelegatorreward) + * [Withdraw Validator Rewards All](04_messages.md#withdraw-validator-rewards-all) + * [Common calculations](04_messages.md#common-calculations-) +5. **[Hooks](05_hooks.md)** + * [Create or modify delegation distribution](05_hooks.md#create-or-modify-delegation-distribution) + * [Commission rate change](05_hooks.md#commission-rate-change) + * [Change in Validator State](05_hooks.md#change-in-validator-state) +6. **[Events](06_events.md)** + * [BeginBlocker](06_events.md#beginblocker) + * [Handlers](06_events.md#handlers) +7. **[Parameters](07_params.md)** +8. **[Parameters](07_params.md)** + * [CLI](08_client.md#cli) + * [gRPC](08_client.md#grpc) diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/evidence/01_concepts.md new file mode 100644 index 000000000..926a573bb --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/01_concepts.md @@ -0,0 +1,78 @@ + + +# Concepts + +## Evidence + +Any concrete type of evidence submitted to the `x/evidence` module must fulfill the +`Evidence` contract outlined below. Not all concrete types of evidence will fulfill +this contract in the same way and some data may be entirely irrelevant to certain +types of evidence. An additional `ValidatorEvidence`, which extends `Evidence`, +has also been created to define a contract for evidence against malicious validators. + +```go +// Evidence defines the contract which concrete evidence types of misbehavior +// must implement. +type Evidence interface { + proto.Message + + Route() string + Type() string + String() string + Hash() tmbytes.HexBytes + ValidateBasic() error + + // Height at which the infraction occurred + GetHeight() int64 +} + +// ValidatorEvidence extends Evidence interface to define contract +// for evidence against malicious validators +type ValidatorEvidence interface { + Evidence + + // The consensus address of the malicious validator at time of infraction + GetConsensusAddress() sdk.ConsAddress + + // The total power of the malicious validator at time of infraction + GetValidatorPower() int64 + + // The total validator set power at time of infraction + GetTotalPower() int64 +} +``` + +## Registration & Handling + +The `x/evidence` module must first know about all types of evidence it is expected +to handle. This is accomplished by registering the `Route` method in the `Evidence` +contract with what is known as a `Router` (defined below). The `Router` accepts +`Evidence` and attempts to find the corresponding `Handler` for the `Evidence` +via the `Route` method. + +```go +type Router interface { + AddRoute(r string, h Handler) Router + HasRoute(r string) bool + GetRoute(path string) Handler + Seal() + Sealed() bool +} +``` + +The `Handler` (defined below) is responsible for executing the entirety of the +business logic for handling `Evidence`. This typically includes validating the +evidence, both stateless checks via `ValidateBasic` and stateful checks via any +keepers provided to the `Handler`. In addition, the `Handler` may also perform +capabilities such as slashing and jailing a validator. All `Evidence` handled +by the `Handler` should be persisted. + +```go +// Handler defines an agnostic Evidence handler. The handler is responsible +// for executing all corresponding business logic necessary for verifying the +// evidence as valid. In addition, the Handler may execute any necessary +// slashing and potential jailing. +type Handler func(sdk.Context, Evidence) error +``` diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/02_state.md b/versioned_docs/version-0.46/integrate/modules/evidence/02_state.md new file mode 100644 index 000000000..00d8d05be --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/02_state.md @@ -0,0 +1,19 @@ + + +# State + +Currently the `x/evidence` module only stores valid submitted `Evidence` in state. +The evidence state is also stored and exported in the `x/evidence` module's `GenesisState`. + +```protobuf +// GenesisState defines the evidence module's genesis state. +message GenesisState { + // evidence defines all the evidence at genesis. + repeated google.protobuf.Any evidence = 1; +} + +``` + +All `Evidence` is retrieved and stored via a prefix `KVStore` using prefix `0x00` (`KeyPrefixEvidence`). diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/03_messages.md b/versioned_docs/version-0.46/integrate/modules/evidence/03_messages.md new file mode 100644 index 000000000..cd902ec99 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/03_messages.md @@ -0,0 +1,55 @@ + + +# Messages + +## MsgSubmitEvidence + +Evidence is submitted through a `MsgSubmitEvidence` message: + +```protobuf +// MsgSubmitEvidence represents a message that supports submitting arbitrary +// Evidence of misbehavior such as equivocation or counterfactual signing. +message MsgSubmitEvidence { + string submitter = 1; + google.protobuf.Any evidence = 2; +} +``` + +Note, the `Evidence` of a `MsgSubmitEvidence` message must have a corresponding +`Handler` registered with the `x/evidence` module's `Router` in order to be processed +and routed correctly. + +Given the `Evidence` is registered with a corresponding `Handler`, it is processed +as follows: + +```go +func SubmitEvidence(ctx Context, evidence Evidence) error { + if _, ok := GetEvidence(ctx, evidence.Hash()); ok { + return sdkerrors.Wrap(types.ErrEvidenceExists, evidence.Hash().String()) + } + if !router.HasRoute(evidence.Route()) { + return sdkerrors.Wrap(types.ErrNoEvidenceHandlerExists, evidence.Route()) + } + + handler := router.GetRoute(evidence.Route()) + if err := handler(ctx, evidence); err != nil { + return sdkerrors.Wrap(types.ErrInvalidEvidence, err.Error()) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeSubmitEvidence, + sdk.NewAttribute(types.AttributeKeyEvidenceHash, evidence.Hash().String()), + ), + ) + + SetEvidence(ctx, evidence) + return nil +} +``` + +First, there must not already exist valid submitted `Evidence` of the exact same +type. Secondly, the `Evidence` is routed to the `Handler` and executed. Finally, +if there is no error in handling the `Evidence`, an event is emitted and it is persisted to state. diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/04_events.md b/versioned_docs/version-0.46/integrate/modules/evidence/04_events.md new file mode 100644 index 000000000..35fd77b3f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/04_events.md @@ -0,0 +1,18 @@ + + +# Events + +The `x/evidence` module emits the following events: + +## Handlers + +### MsgSubmitEvidence + +| Type | Attribute Key | Attribute Value | +| --------------- | ------------- | --------------- | +| submit_evidence | evidence_hash | {evidenceHash} | +| message | module | evidence | +| message | sender | {senderAddress} | +| message | action | submit_evidence | diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/05_params.md b/versioned_docs/version-0.46/integrate/modules/evidence/05_params.md new file mode 100644 index 000000000..4c48b540a --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/05_params.md @@ -0,0 +1,7 @@ + + +# Parameters + +The evidence module does not contain any parameters. diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/06_begin_block.md b/versioned_docs/version-0.46/integrate/modules/evidence/06_begin_block.md new file mode 100644 index 000000000..1c335d1e4 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/06_begin_block.md @@ -0,0 +1,154 @@ + + +# BeginBlock + +## Evidence Handling + +Tendermint blocks can include +[Evidence](https://github.com/tendermint/tendermint/blob/master/docs/spec/blockchain/blockchain.md#evidence) that indicates if a validator committed malicious behavior. The relevant information is forwarded to the application as ABCI Evidence in `abci.RequestBeginBlock` so that the validator can be punished accordingly. + +### Equivocation + +The Cosmos SDK handles two types of evidence inside the ABCI `BeginBlock`: + +* `DuplicateVoteEvidence`, +* `LightClientAttackEvidence`. + +The evidence module handles these two evidence types the same way. First, the Cosmos SDK converts the Tendermint concrete evidence type to an SDK `Evidence` interface using `Equivocation` as the concrete type. + +```proto +// Equivocation implements the Evidence interface. +message Equivocation { + int64 height = 1; + google.protobuf.Timestamp time = 2; + int64 power = 3; + string consensus_address = 4; +} +``` + +For some `Equivocation` submitted in `block` to be valid, it must satisfy: + +`Evidence.Timestamp >= block.Timestamp - MaxEvidenceAge` + +Where: + +* `Evidence.Timestamp` is the timestamp in the block at height `Evidence.Height` +* `block.Timestamp` is the current block timestamp. + +If valid `Equivocation` evidence is included in a block, the validator's stake is +reduced (slashed) by `SlashFractionDoubleSign` as defined by the `x/slashing` module +of what their stake was when the infraction occurred, rather than when the evidence was discovered. +We want to "follow the stake", i.e., the stake that contributed to the infraction +should be slashed, even if it has since been redelegated or started unbonding. + +In addition, the validator is permanently jailed and tombstoned to make it impossible for that +validator to ever re-enter the validator set. + +The `Equivocation` evidence is handled as follows: + +```go +func (k Keeper) HandleEquivocationEvidence(ctx sdk.Context, evidence *types.Equivocation) { + logger := k.Logger(ctx) + consAddr := evidence.GetConsensusAddress() + + if _, err := k.slashingKeeper.GetPubkey(ctx, consAddr.Bytes()); err != nil { + // Ignore evidence that cannot be handled. + // + // NOTE: We used to panic with: + // `panic(fmt.Sprintf("Validator consensus-address %v not found", consAddr))`, + // but this couples the expectations of the app to both Tendermint and + // the simulator. Both are expected to provide the full range of + // allowable but none of the disallowed evidence types. Instead of + // getting this coordination right, it is easier to relax the + // constraints and ignore evidence that cannot be handled. + return + } + + // calculate the age of the evidence + infractionHeight := evidence.GetHeight() + infractionTime := evidence.GetTime() + ageDuration := ctx.BlockHeader().Time.Sub(infractionTime) + ageBlocks := ctx.BlockHeader().Height - infractionHeight + + // Reject evidence if the double-sign is too old. Evidence is considered stale + // if the difference in time and number of blocks is greater than the allowed + // parameters defined. + cp := ctx.ConsensusParams() + if cp != nil && cp.Evidence != nil { + if ageDuration > cp.Evidence.MaxAgeDuration && ageBlocks > cp.Evidence.MaxAgeNumBlocks { + logger.Info( + "ignored equivocation; evidence too old", + "validator", consAddr, + "infraction_height", infractionHeight, + "max_age_num_blocks", cp.Evidence.MaxAgeNumBlocks, + "infraction_time", infractionTime, + "max_age_duration", cp.Evidence.MaxAgeDuration, + ) + return + } + } + + validator := k.stakingKeeper.ValidatorByConsAddr(ctx, consAddr) + if validator == nil || validator.IsUnbonded() { + // Defensive: Simulation doesn't take unbonding periods into account, and + // Tendermint might break this assumption at some point. + return + } + + if ok := k.slashingKeeper.HasValidatorSigningInfo(ctx, consAddr); !ok { + panic(fmt.Sprintf("expected signing info for validator %s but not found", consAddr)) + } + + // ignore if the validator is already tombstoned + if k.slashingKeeper.IsTombstoned(ctx, consAddr) { + logger.Info( + "ignored equivocation; validator already tombstoned", + "validator", consAddr, + "infraction_height", infractionHeight, + "infraction_time", infractionTime, + ) + return + } + + logger.Info( + "confirmed equivocation", + "validator", consAddr, + "infraction_height", infractionHeight, + "infraction_time", infractionTime, + ) + + // We need to retrieve the stake distribution which signed the block, so we + // subtract ValidatorUpdateDelay from the evidence height. + // Note, that this *can* result in a negative "distributionHeight", up to + // -ValidatorUpdateDelay, i.e. at the end of the + // pre-genesis block (none) = at the beginning of the genesis block. + // That's fine since this is just used to filter unbonding delegations & redelegations. + distributionHeight := infractionHeight - sdk.ValidatorUpdateDelay + + // Slash validator. The `power` is the int64 power of the validator as provided + // to/by Tendermint. This value is validator.Tokens as sent to Tendermint via + // ABCI, and now received as evidence. The fraction is passed in to separately + // to slash unbonding and rebonding delegations. + k.slashingKeeper.Slash( + ctx, + consAddr, + k.slashingKeeper.SlashFractionDoubleSign(ctx), + evidence.GetValidatorPower(), distributionHeight, + ) + + // Jail the validator if not already jailed. This will begin unbonding the + // validator if not already unbonding (tombstoned). + if !validator.IsJailed() { + k.slashingKeeper.Jail(ctx, consAddr) + } + + k.slashingKeeper.JailUntil(ctx, consAddr, types.DoubleSignJailEndTime) + k.slashingKeeper.Tombstone(ctx, consAddr) +} +``` + +**Note:** The slashing, jailing, and tombstoning calls are delegated through the `x/slashing` module +that emits informative events and finally delegates calls to the `x/staking` module. See documentation +on slashing and jailing in [State Transitions](/.././cosmos-sdk/x/staking/spec/02_state_transitions.md). diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/07_client.md b/versioned_docs/version-0.46/integrate/modules/evidence/07_client.md new file mode 100644 index 000000000..52a4b34f7 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/07_client.md @@ -0,0 +1,188 @@ +# Client + +## CLI + +A user can query and interact with the `evidence` module using the CLI. + +### Query + +The `query` commands allows users to query `evidence` state. + +```bash +simd query evidence --help +``` + +### evidence + +The `evidence` command allows users to list all evidence or evidence by hash. + +Usage: + +```bash +simd query evidence [flags] +``` + +To query evidence by hash + +Example: + +```bash +simd query evidence "DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660" +``` + +Example Output: + +```bash +evidence: + consensus_address: cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h + height: 11 + power: 100 + time: "2021-10-20T16:08:38.194017624Z" +``` + +To get all evidence + +Example: + +```bash +simd query evidence +``` + +Example Output: + +```bash +evidence: + consensus_address: cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h + height: 11 + power: 100 + time: "2021-10-20T16:08:38.194017624Z" +pagination: + next_key: null + total: "1" +``` + +## REST + +A user can query the `evidence` module using REST endpoints. + +### Evidence + +Get evidence by hash + +```bash +/cosmos/evidence/v1beta1/evidence/{evidence_hash} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/evidence/v1beta1/evidence/DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660" +``` + +Example Output: + +```bash +{ + "evidence": { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } +} +``` + +### All evidence + +Get all evidence + +```bash +/cosmos/evidence/v1beta1/evidence +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/evidence/v1beta1/evidence" +``` + +Example Output: + +```bash +{ + "evidence": [ + { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } + ], + "pagination": { + "total": "1" + } +} +``` + +## gRPC + +A user can query the `evidence` module using gRPC endpoints. + +### Evidence + +Get evidence by hash + +```bash +cosmos.evidence.v1beta1.Query/Evidence +``` + +Example: + +```bash +grpcurl -plaintext -d '{"evidence_hash":"DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660"}' localhost:9090 cosmos.evidence.v1beta1.Query/Evidence +``` + +Example Output: + +```bash +{ + "evidence": { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } +} +``` + +### All evidence + +Get all evidence + +```bash +cosmos.evidence.v1beta1.Query/AllEvidence +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.evidence.v1beta1.Query/AllEvidence +``` + +Example Output: + +```bash +{ + "evidence": [ + { + "consensus_address": "cosmosvalcons1ntk8eualewuprz0gamh8hnvcem2nrcdsgz563h", + "height": "11", + "power": "100", + "time": "2021-10-20T16:08:38.194017624Z" + } + ], + "pagination": { + "total": "1" + } +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/evidence/README.md b/versioned_docs/version-0.46/integrate/modules/evidence/README.md new file mode 100644 index 000000000..a6b3d9205 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/evidence/README.md @@ -0,0 +1,40 @@ + + +# `x/evidence` + +## Table of Contents + + + +1. **[Concepts](01_concepts.md)** +2. **[State](02_state.md)** +3. **[Messages](03_messages.md)** +4. **[Events](04_events.md)** +5. **[Params](05_params.md)** +6. **[BeginBlock](06_begin_block.md)** + +## Abstract + +`x/evidence` is an implementation of a Cosmos SDK module, per [ADR 009](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-009-evidence-module.md), +that allows for the submission and handling of arbitrary evidence of misbehavior such +as equivocation and counterfactual signing. + +The evidence module differs from standard evidence handling which typically expects the +underlying consensus engine, e.g. Tendermint, to automatically submit evidence when +it is discovered by allowing clients and foreign chains to submit more complex evidence +directly. + +All concrete evidence types must implement the `Evidence` interface contract. Submitted +`Evidence` is first routed through the evidence module's `Router` in which it attempts +to find a corresponding registered `Handler` for that specific `Evidence` type. +Each `Evidence` type must have a `Handler` registered with the evidence module's +keeper in order for it to be successfully routed and executed. + +Each corresponding handler must also fulfill the `Handler` interface contract. The +`Handler` for a given `Evidence` type can perform any arbitrary state transitions +such as slashing, jailing, and tombstoning. diff --git a/versioned_docs/version-0.46/integrate/modules/feegrant/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/feegrant/01_concepts.md new file mode 100644 index 000000000..2d9ceda89 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/feegrant/01_concepts.md @@ -0,0 +1,93 @@ + + +# Concepts + +## Grant + +`Grant` is stored in the KVStore to record a grant with full context. Every grant will contain `granter`, `grantee` and what kind of `allowance` is granted. `granter` is an account address who is giving permission to `grantee` (the beneficiary account address) to pay for some or all of `grantee`'s transaction fees. `allowance` defines what kind of fee allowance (`BasicAllowance` or `PeriodicAllowance`, see below) is granted to `grantee`. `allowance` accepts an interface which implements `FeeAllowanceI`, encoded as `Any` type. There can be only one existing fee grant allowed for a `grantee` and `granter`, self grants are not allowed. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L76-L77 + +`FeeAllowanceI` looks like: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/feegrant/fees.go#L9-L32 + +## Fee Allowance types + +There are two types of fee allowances present at the moment: + +* `BasicAllowance` +* `PeriodicAllowance` +* `AllowedMsgAllowance` + +## BasicAllowance + +`BasicAllowance` is permission for `grantee` to use fee from a `granter`'s account. If any of the `spend_limit` or `expiration` reaches its limit, the grant will be removed from the state. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L13-L26 + +* `spend_limit` is the limit of coins that are allowed to be used from the `granter` account. If it is empty, it assumes there's no spend limit, `grantee` can use any number of available coins from `granter` account address before the expiration. + +* `expiration` specifies an optional time when this allowance expires. If the value is left empty, there is no expiry for the grant. + +* When a grant is created with empty values for `spend_limit` and `expiration`, it is still a valid grant. It won't restrict the `grantee` to use any number of coins from `granter` and it won't have any expiration. The only way to restrict the `grantee` is by revoking the grant. + +## PeriodicAllowance + +`PeriodicAllowance` is a repeating fee allowance for the mentioned period, we can mention when the grant can expire as well as when a period can reset. We can also define the maximum number of coins that can be used in a mentioned period of time. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L29-L54 + +* `basic` is the instance of `BasicAllowance` which is optional for periodic fee allowance. If empty, the grant will have no `expiration` and no `spend_limit`. + +* `period` is the specific period of time, after each period passes, `period_spend_limit` will be reset. + +* `period_spend_limit` specifies the maximum number of coins that can be spent in the period. + +* `period_can_spend` is the number of coins left to be spent before the period_reset time. + +* `period_reset` keeps track of when a next period reset should happen. + +## AllowedMsgAllowance + +`AllowedMsgAllowance` is a fee allowance, it can be any of `BasicFeeAllowance`, `PeriodicAllowance` but restricted only to the allowed messages mentioned by the granter. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/feegrant/v1beta1/feegrant.proto#L56-L66 + +* `allowance` is either `BasicAllowance` or `PeriodicAllowance`. + +* `allowed_messages` is array of messages allowed to execute the given allowance. + +## FeeGranter flag + +`feegrant` module introduces a `FeeGranter` flag for CLI for the sake of executing transactions with fee granter. When this flag is set, `clientCtx` will append the granter account address for transactions generated through CLI. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/cmd.go#L236-L246 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/tx/tx.go#L109-L109 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/auth/tx/builder.go#L270-L279 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L196-L217 + +Example cmd: + +```go +./simd tx gov submit-proposal --title="Test Proposal" --description="My awesome proposal" --type="Text" --from validator-key --fee-granter=cosmos1xh44hxt7spr67hqaa7nyx5gnutrz5fraw6grxn --chain-id=testnet --fees="10stake" +``` + +## Granted Fee Deductions + +Fees are deducted from grants in the `x/auth` ante handler. To learn more about how ante handlers work, read the [Auth Module AnteHandlers Guide](../../auth/spec/03_antehandlers.md). + +## Gas + +In order to prevent DoS attacks, using a filtered `x/feegrant` incurs gas. The SDK must assure that the `grantee`'s transactions all conform to the filter set by the `granter`. The SDK does this by iterating over the allowed messages in the filter and charging 10 gas per filtered message. The SDK will then iterate over the messages being sent by the `grantee` to ensure the messages adhere to the filter, also charging 10 gas per message. The SDK will stop iterating and fail the transaction if it finds a message that does not conform to the filter. + +**WARNING**: The gas is charged against the granted allowance. Ensure your messages conform to the filter, if any, before sending transactions using your allowance. + +## Pruning + +A queue in the state maintained with the prefix of expiration of the grants and checks them on EndBlock with the current block time for every block to prune. diff --git a/versioned_docs/version-0.46/integrate/modules/feegrant/02_state.md b/versioned_docs/version-0.46/integrate/modules/feegrant/02_state.md new file mode 100644 index 000000000..3ff4d8c49 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/feegrant/02_state.md @@ -0,0 +1,23 @@ + + +# State + +## FeeAllowance + +Fee Allowances are identified by combining `Grantee` (the account address of fee allowance grantee) with the `Granter` (the account address of fee allowance granter). + +Fee allowance grants are stored in the state as follows: + +* Grant: `0x00 | grantee_addr_len (1 byte) | grantee_addr_bytes | granter_addr_len (1 byte) | granter_addr_bytes -> ProtocolBuffer(Grant)` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/x/feegrant/feegrant.pb.go#L221-L229 + +## FeeAllowanceQueue + +Fee Allowances queue items are identified by combining the `FeeAllowancePrefixQueue` (i.e., 0x01), `expiration`, `grantee` (the account address of fee allowance grantee), `granter` (the account address of fee allowance granter). Endblocker checks `FeeAllowanceQueue` state for the expired grants and prunes them from `FeeAllowance` if there are any found. + +Fee allowance queue keys are stored in the state as follows: + +* Grant: `0x01 | expiration_bytes | grantee_addr_len (1 byte) | grantee_addr_bytes | granter_addr_len (1 byte) | granter_addr_bytes -> EmptyBytes` diff --git a/versioned_docs/version-0.46/integrate/modules/feegrant/03_messages.md b/versioned_docs/version-0.46/integrate/modules/feegrant/03_messages.md new file mode 100644 index 000000000..a4d09619a --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/feegrant/03_messages.md @@ -0,0 +1,17 @@ + + +# Messages + +## Msg/GrantAllowance + +A fee allowance grant will be created with the `MsgGrantAllowance` message. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/feegrant/v1beta1/tx.proto#L23-L36 + +## Msg/RevokeAllowance + +An allowed grant fee allowance can be removed with the `MsgRevokeAllowance` message. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/feegrant/v1beta1/tx.proto#L41-L50 diff --git a/versioned_docs/version-0.46/integrate/modules/feegrant/04_events.md b/versioned_docs/version-0.46/integrate/modules/feegrant/04_events.md new file mode 100644 index 000000000..e443558f7 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/feegrant/04_events.md @@ -0,0 +1,33 @@ + + +# Events + +The feegrant module emits the following events: + +# Msg Server + +## MsgGrantAllowance + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ---------------- | +| message | action | set_feegrant | +| message | granter | {granterAddress} | +| message | grantee | {granteeAddress} | + +## MsgRevokeAllowance + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ---------------- | +| message | action | revoke_feegrant | +| message | granter | {granterAddress} | +| message | grantee | {granteeAddress} | + +## Exec fee allowance + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ---------------- | +| message | action | use_feegrant | +| message | granter | {granterAddress} | +| message | grantee | {granteeAddress} | diff --git a/versioned_docs/version-0.46/integrate/modules/feegrant/05_client.md b/versioned_docs/version-0.46/integrate/modules/feegrant/05_client.md new file mode 100644 index 000000000..52c1d9726 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/feegrant/05_client.md @@ -0,0 +1,184 @@ + + +# Client + +## CLI + +A user can query and interact with the `feegrant` module using the CLI. + +### Query + +The `query` commands allow users to query `feegrant` state. + +```sh +simd query feegrant --help +``` + +#### grant + +The `grant` command allows users to query a grant for a given granter-grantee pair. + +```sh +simd query feegrant grant [granter] [grantee] [flags] +``` + +Example: + +```sh +simd query feegrant grant cosmos1.. cosmos1.. +``` + +Example Output: + +```yml +allowance: + '@type': /cosmos.feegrant.v1beta1.BasicAllowance + expiration: null + spend_limit: + - amount: "100" + denom: stake +grantee: cosmos1.. +granter: cosmos1.. +``` + +#### grants + +The `grants` command allows users to query all grants for a given grantee. + +```sh +simd query feegrant grants [grantee] [flags] +``` + +Example: + +```sh +simd query feegrant grants cosmos1.. +``` + +Example Output: + +```yml +allowances: +- allowance: + '@type': /cosmos.feegrant.v1beta1.BasicAllowance + expiration: null + spend_limit: + - amount: "100" + denom: stake + grantee: cosmos1.. + granter: cosmos1.. +pagination: + next_key: null + total: "0" +``` + +### Transactions + +The `tx` commands allow users to interact with the `feegrant` module. + +```sh +simd tx feegrant --help +``` + +#### grant + +The `grant` command allows users to grant fee allowances to another account. The fee allowance can have an expiration date, a total spend limit, and/or a periodic spend limit. + +```sh +simd tx feegrant grant [granter] [grantee] [flags] +``` + +Example (one-time spend limit): + +```sh +simd tx feegrant grant cosmos1.. cosmos1.. --spend-limit 100stake +``` + +Example (periodic spend limit): + +```sh +simd tx feegrant grant cosmos1.. cosmos1.. --period 3600 --period-limit 10stake +``` + +#### revoke + +The `revoke` command allows users to revoke a granted fee allowance. + +```sh +simd tx feegrant revoke [granter] [grantee] [flags] +``` + +Example: + +```sh +simd tx feegrant revoke cosmos1.. cosmos1.. +``` + +## gRPC + +A user can query the `feegrant` module using gRPC endpoints. + +### Allowance + +The `Allowance` endpoint allows users to query a granted fee allowance. + +```sh +cosmos.feegrant.v1beta1.Query/Allowance +``` + +Example: + +```sh +grpcurl -plaintext \ + -d '{"grantee":"cosmos1..","granter":"cosmos1.."}' \ + localhost:9090 \ + cosmos.feegrant.v1beta1.Query/Allowance +``` + +Example Output: + +```json +{ + "allowance": { + "granter": "cosmos1..", + "grantee": "cosmos1..", + "allowance": {"@type":"/cosmos.feegrant.v1beta1.BasicAllowance","spendLimit":[{"denom":"stake","amount":"100"}]} + } +} +``` + +### Allowances + +The `Allowances` endpoint allows users to query all granted fee allowances for a given grantee. + +```sh +cosmos.feegrant.v1beta1.Query/Allowances +``` + +Example: + +```sh +grpcurl -plaintext \ + -d '{"address":"cosmos1.."}' \ + localhost:9090 \ + cosmos.feegrant.v1beta1.Query/Allowances +``` + +Example Output: + +```json +{ + "allowances": [ + { + "granter": "cosmos1..", + "grantee": "cosmos1..", + "allowance": {"@type":"/cosmos.feegrant.v1beta1.BasicAllowance","spendLimit":[{"denom":"stake","amount":"100"}]} + } + ], + "pagination": { + "total": "1" + } +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/feegrant/README.md b/versioned_docs/version-0.46/integrate/modules/feegrant/README.md new file mode 100644 index 000000000..8f08a51ae --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/feegrant/README.md @@ -0,0 +1,37 @@ + + +# Fee grant + +## Abstract + +This document specifies the fee grant module. For the full ADR, please see [Fee Grant ADR-029](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-029-fee-grant-module.md). + +This module allows accounts to grant fee allowances and to use fees from their accounts. Grantees can execute any transaction without the need to maintain sufficient fees. + +## Contents + +1. **[Concepts](01_concepts.md)** + * [Grant](01_concepts.md#grant) + * [Fee Allowance types](01_concepts.md#fee-allowance-types) + * [BasicAllowance](01_concepts.md#basicallowance) + * [PeriodicAllowance](01_concepts.md#periodicallowance) + * [FeeAccount flag](01_concepts.md#feeaccount-flag) + * [Granted Fee Deductions](01_concepts.md#granted-fee-deductions) + * [Gas](01_concepts.md#gas) +2. **[State](02_state.md)** + * [FeeAllowance](02_state.md#feeallowance) +3. **[Messages](03_messages.md)** + * [Msg/GrantAllowance](03_messages.md#msggrantallowance) + * [Msg/RevokeAllowance](03_messages.md#msgrevokeallowance) +4. **[Events](04_events.md)** + * [MsgGrantAllowance](04_events.md#msggrantallowance) + * [MsgRevokeAllowance](04_events.md#msgrevokeallowance) + * [Exec fee allowance](04_events.md#exec-fee-allowance) +5. **[Client](05_client.md)** + * [CLI](05_client.md#cli) + * [gRPC](05_client.md#grpc) diff --git a/versioned_docs/version-0.46/integrate/modules/gov/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/gov/01_concepts.md new file mode 100644 index 000000000..39b39d13a --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/01_concepts.md @@ -0,0 +1,203 @@ + + +# Concepts + +_Disclaimer: This is work in progress. Mechanisms are susceptible to change._ + +The governance process is divided in a few steps that are outlined below: + +* **Proposal submission:** Proposal is submitted to the blockchain with a + deposit. +* **Vote:** Once deposit reaches a certain value (`MinDeposit`), proposal is + confirmed and vote opens. Bonded Atom holders can then send `TxGovVote` + transactions to vote on the proposal. +* **Execution** After a period of time, the votes are tallied and depending + on the result, the messages in the proposal will be executed. + +## Proposal submission + +### Right to submit a proposal + +Every account can submit proposals by sending a `MsgSubmitProposal` transaction. +Once a proposal is submitted, it is identified by its unique `proposalID`. + +### Proposal Messages + +A proposal includes an array of `sdk.Msg`s which are executed automatically if the +proposal passes. The messages are executed by the governance `ModuleAccount` itself. Modules +such as `x/upgrade`, that want to allow certain messages to be executed by governance +only should add a whitelist within the respective msg server, granting the governance +module the right to execute the message once a quorum has been reached. The governance +module uses the `MsgServiceRouter` to check that these messages are correctly constructed +and have a respective path to execute on but do not perform a full validity check. + +## Deposit + +To prevent spam, proposals must be submitted with a deposit in the coins defined by +the `MinDeposit` param. + +When a proposal is submitted, it has to be accompanied with a deposit that must be +strictly positive, but can be inferior to `MinDeposit`. The submitter doesn't need +to pay for the entire deposit on their own. The newly created proposal is stored in +an _inactive proposal queue_ and stays there until its deposit passes the `MinDeposit`. +Other token holders can increase the proposal's deposit by sending a `Deposit` +transaction. If a proposal doesn't pass the `MinDeposit` before the deposit end time +(the time when deposits are no longer accepted), the proposal will be destroyed: the +proposal will be removed from state and the deposit will be burned (see x/gov `EndBlocker`). +When a proposal deposit passes the `MinDeposit` threshold (even during the proposal +submission) before the deposit end time, the proposal will be moved into the +_active proposal queue_ and the voting period will begin. + +The deposit is kept in escrow and held by the governance `ModuleAccount` until the +proposal is finalized (passed or rejected). + +### Deposit refund and burn + +When a proposal is finalized, the coins from the deposit are either refunded or burned +according to the final tally of the proposal: + +* If the proposal is approved or rejected but _not_ vetoed, each deposit will be + automatically refunded to its respective depositor (transferred from the governance + `ModuleAccount`). +* When the proposal is vetoed with greater than 1/3, deposits will be burned from the + governance `ModuleAccount` and the proposal information along with its deposit + information will be removed from state. +* All refunded or burned deposits are removed from the state. Events are issued when + burning or refunding a deposit. + +## Vote + +### Participants + +_Participants_ are users that have the right to vote on proposals. On the +Cosmos Hub, participants are bonded Atom holders. Unbonded Atom holders and +other users do not get the right to participate in governance. However, they +can submit and deposit on proposals. + +Note that some _participants_ can be forbidden to vote on a proposal under a +certain validator if: + +* _participant_ bonded or unbonded Atoms to said validator after proposal + entered voting period. +* _participant_ became validator after proposal entered voting period. + +This does not prevent _participant_ to vote with Atoms bonded to other +validators. For example, if a _participant_ bonded some Atoms to validator A +before a proposal entered voting period and other Atoms to validator B after +proposal entered voting period, only the vote under validator B will be +forbidden. + +### Voting period + +Once a proposal reaches `MinDeposit`, it immediately enters `Voting period`. We +define `Voting period` as the interval between the moment the vote opens and +the moment the vote closes. `Voting period` should always be shorter than +`Unbonding period` to prevent double voting. The initial value of +`Voting period` is 2 weeks. + +### Option set + +The option set of a proposal refers to the set of choices a participant can +choose from when casting its vote. + +The initial option set includes the following options: + +* `Yes` +* `No` +* `NoWithVeto` +* `Abstain` + +`NoWithVeto` counts as `No` but also adds a `Veto` vote. `Abstain` option +allows voters to signal that they do not intend to vote in favor or against the +proposal but accept the result of the vote. + +_Note: from the UI, for urgent proposals we should maybe add a ‘Not Urgent’ +option that casts a `NoWithVeto` vote._ + +### Weighted Votes + +[ADR-037](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-037-gov-split-vote.md) introduces the weighted vote feature which allows a staker to split their votes into several voting options. For example, it could use 70% of its voting power to vote Yes and 30% of its voting power to vote No. + +Often times the entity owning that address might not be a single individual. For example, a company might have different stakeholders who want to vote differently, and so it makes sense to allow them to split their voting power. Currently, it is not possible for them to do "passthrough voting" and giving their users voting rights over their tokens. However, with this system, exchanges can poll their users for voting preferences, and then vote on-chain proportionally to the results of the poll. + +To represent weighted vote on chain, we use the following Protobuf message. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1beta1/gov.proto#L33-L43 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1beta1/gov.proto#L136-L150 + +For a weighted vote to be valid, the `options` field must not contain duplicate vote options, and the sum of weights of all options must be equal to 1. + +### Quorum + +Quorum is defined as the minimum percentage of voting power that needs to be +casted on a proposal for the result to be valid. + +### Threshold + +Threshold is defined as the minimum proportion of `Yes` votes (excluding +`Abstain` votes) for the proposal to be accepted. + +Initially, the threshold is set at 50% of `Yes` votes, excluding `Abstain` +votes. A possibility to veto exists if more than 1/3rd of all votes are +`NoWithVeto` votes. Note, both of these values are derived from the `TallyParams` +on-chain parameter, which is modifiable by governance. +This means that proposals are accepted iff: + +* There exist bonded tokens. +* Quorum has been achieved. +* The proportion of `Abstain` votes is inferior to 1/1. +* The proportion of `NoWithVeto` votes is inferior to 1/3, including + `Abstain` votes. +* The proportion of `Yes` votes, excluding `Abstain` votes, at the end of + the voting period is superior to 1/2. + +### Inheritance + +If a delegator does not vote, it will inherit its validator vote. + +* If the delegator votes before its validator, it will not inherit from the + validator's vote. +* If the delegator votes after its validator, it will override its validator + vote with its own. If the proposal is urgent, it is possible + that the vote will close before delegators have a chance to react and + override their validator's vote. This is not a problem, as proposals require more than 2/3rd of the total voting power to pass before the end of the voting period. Because as little as 1/3 + 1 validation power could collude to censor transactions, non-collusion is already assumed for ranges exceeding this threshold. + +### Validator’s punishment for non-voting + +At present, validators are not punished for failing to vote. + +### Governance address + +Later, we may add permissioned keys that could only sign txs from certain modules. For the MVP, the `Governance address` will be the main validator address generated at account creation. This address corresponds to a different PrivKey than the Tendermint PrivKey which is responsible for signing consensus messages. Validators thus do not have to sign governance transactions with the sensitive Tendermint PrivKey. + +## Software Upgrade + +If proposals are of type `SoftwareUpgradeProposal`, then nodes need to upgrade +their software to the new version that was voted. This process is divided into +two steps: + +### Signal + +After a `SoftwareUpgradeProposal` is accepted, validators are expected to +download and install the new version of the software while continuing to run +the previous version. Once a validator has downloaded and installed the +upgrade, it will start signaling to the network that it is ready to switch by +including the proposal's `proposalID` in its _precommits_.(_Note: Confirmation +that we want it in the precommit?_) + +Note: There is only one signal slot per _precommit_. If several +`SoftwareUpgradeProposals` are accepted in a short timeframe, a pipeline will +form and they will be implemented one after the other in the order that they +were accepted. + +### Switch + +Once a block contains more than 2/3rd _precommits_ where a common +`SoftwareUpgradeProposal` is signaled, all the nodes (including validator +nodes, non-validating full nodes and light-nodes) are expected to switch to the +new version of the software. + +Validators and full nodes can use an automation tool, such as [Cosmovisor](https://github.com/cosmos/cosmos-sdk/blob/main/cosmovisor/README.md), for automatically switching version of the chain. diff --git a/versioned_docs/version-0.46/integrate/modules/gov/02_state.md b/versioned_docs/version-0.46/integrate/modules/gov/02_state.md new file mode 100644 index 000000000..66514ec2c --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/02_state.md @@ -0,0 +1,217 @@ + + +# State + +## Proposals + +`Proposal` objects are used to tally votes and generally track the proposal's state. +They contain an array of arbitrary `sdk.Msg`'s which the governance module will attempt +to resolve and then execute if the proposal passes. `Proposal`'s are identified by a +unique id and contains a series of timestamps: `submit_time`, `deposit_end_time`, +`voting_start_time`, `voting_end_time` which track the lifecycle of a proposal + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/gov.proto#L42-L59 + +A proposal will generally require more than just a set of messages to explain its +purpose but need some greater justification and allow a means for interested participants +to discuss and debate the proposal. +In most cases, **it is encouraged to have an off-chain system that supports the on-chain governance process**. +To accommodate for this, a proposal contains a special **`metadata`** field, an array of bytes, +which can be used to add context to the proposal. The `metadata` field allows custom use for networks, +however, it is expected that the field contains a URL or some form of CID using a system such as +[IPFS](https://docs.ipfs.io/concepts/content-addressing/). To support the case of +interoperability across networks, the SDK recommends that the `metadata` represents +the following `JSON` template: + +```json +{ + "title": "...", + "description": "...", + "forum": "...", // a link to the discussion platform (i.e. Discord) + "other": "..." // any extra data that doesn't correspond to the other fields +} +``` + +This makes it far easier for clients to support multiple networks. + +The metadata has a maximum length that is chosen by the app developer, and +passed into the gov keeper as a config. The default maximum length in the SDK is 255 characters. + +### Writing a module that uses governance + +There are many aspects of a chain, or of the individual modules that you may want to +use governance to perform such as changing various parameters. This is very simple +to do. First, write out your message types and `MsgServer` implementation. Add an +`authority` field to the keeper which will be populated in the constructor with the +governance module account: `govKeeper.GetGovernanceAccount().GetAddress()`. Then for +the methods in the `msg_server.go`, perform a check on the message that the signer +matches `authority`. This will prevent any user from executing that message. + +## Parameters and base types + +`Parameters` define the rules according to which votes are run. There can only +be one active parameter set at any given time. If governance wants to change a +parameter set, either to modify a value or add/remove a parameter field, a new +parameter set has to be created and the previous one rendered inactive. + +### DepositParams + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/gov.proto#L102-L112 + +### VotingParams + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/gov.proto#L114-L118 + +### TallyParams + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/gov.proto#L120-L132 + +Parameters are stored in a global `GlobalParams` KVStore. + +Additionally, we introduce some basic types: + +```go +type Vote byte + +const ( + VoteYes = 0x1 + VoteNo = 0x2 + VoteNoWithVeto = 0x3 + VoteAbstain = 0x4 +) + +type ProposalType string + +const ( + ProposalTypePlainText = "Text" + ProposalTypeSoftwareUpgrade = "SoftwareUpgrade" +) + +type ProposalStatus byte + + +const ( + StatusNil ProposalStatus = 0x00 + StatusDepositPeriod ProposalStatus = 0x01 // Proposal is submitted. Participants can deposit on it but not vote + StatusVotingPeriod ProposalStatus = 0x02 // MinDeposit is reached, participants can vote + StatusPassed ProposalStatus = 0x03 // Proposal passed and successfully executed + StatusRejected ProposalStatus = 0x04 // Proposal has been rejected + StatusFailed ProposalStatus = 0x05 // Proposal passed but failed execution +) +``` + +## Deposit + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/gov.proto#L34-L40 + +## ValidatorGovInfo + +This type is used in a temp map when tallying + +```go + type ValidatorGovInfo struct { + Minus sdk.Dec + Vote Vote + } +``` + +## Stores + +_Note: Stores are KVStores in the multi-store. The key to find the store is the first parameter in the list_ + +We will use one KVStore `Governance` to store two mappings: + +* A mapping from `proposalID|'proposal'` to `Proposal`. +* A mapping from `proposalID|'addresses'|address` to `Vote`. This mapping allows + us to query all addresses that voted on the proposal along with their vote by + doing a range query on `proposalID:addresses`. + +For pseudocode purposes, here are the two function we will use to read or write in stores: + +* `load(StoreKey, Key)`: Retrieve item stored at key `Key` in store found at key `StoreKey` in the multistore +* `store(StoreKey, Key, value)`: Write value `Value` at key `Key` in store found at key `StoreKey` in the multistore + +## Proposal Processing Queue + +**Store:** + +* `ProposalProcessingQueue`: A queue `queue[proposalID]` containing all the + `ProposalIDs` of proposals that reached `MinDeposit`. During each `EndBlock`, + all the proposals that have reached the end of their voting period are processed. + To process a finished proposal, the application tallies the votes, computes the + votes of each validator and checks if every validator in the validator set has + voted. If the proposal is accepted, deposits are refunded. Finally, the proposal + content `Handler` is executed. + +And the pseudocode for the `ProposalProcessingQueue`: + +```go + in EndBlock do + + for finishedProposalID in GetAllFinishedProposalIDs(block.Time) + proposal = load(Governance, ) // proposal is a const key + + validators = Keeper.getAllValidators() + tmpValMap := map(sdk.AccAddress)ValidatorGovInfo + + // Initiate mapping at 0. This is the amount of shares of the validator's vote that will be overridden by their delegator's votes + for each validator in validators + tmpValMap(validator.OperatorAddr).Minus = 0 + + // Tally + voterIterator = rangeQuery(Governance, ) //return all the addresses that voted on the proposal + for each (voterAddress, vote) in voterIterator + delegations = stakingKeeper.getDelegations(voterAddress) // get all delegations for current voter + + for each delegation in delegations + // make sure delegation.Shares does NOT include shares being unbonded + tmpValMap(delegation.ValidatorAddr).Minus += delegation.Shares + proposal.updateTally(vote, delegation.Shares) + + _, isVal = stakingKeeper.getValidator(voterAddress) + if (isVal) + tmpValMap(voterAddress).Vote = vote + + tallyingParam = load(GlobalParams, 'TallyingParam') + + // Update tally if validator voted + for each validator in validators + if tmpValMap(validator).HasVoted + proposal.updateTally(tmpValMap(validator).Vote, (validator.TotalShares - tmpValMap(validator).Minus)) + + + + // Check if proposal is accepted or rejected + totalNonAbstain := proposal.YesVotes + proposal.NoVotes + proposal.NoWithVetoVotes + if (proposal.Votes.YesVotes/totalNonAbstain > tallyingParam.Threshold AND proposal.Votes.NoWithVetoVotes/totalNonAbstain < tallyingParam.Veto) + // proposal was accepted at the end of the voting period + // refund deposits (non-voters already punished) + for each (amount, depositor) in proposal.Deposits + depositor.AtomBalance += amount + + stateWriter, err := proposal.Handler() + if err != nil + // proposal passed but failed during state execution + proposal.CurrentStatus = ProposalStatusFailed + else + // proposal pass and state is persisted + proposal.CurrentStatus = ProposalStatusAccepted + stateWriter.save() + else + // proposal was rejected + proposal.CurrentStatus = ProposalStatusRejected + + store(Governance, , proposal) +``` + +## Legacy Proposal + +A legacy proposal is the old implementation of governance proposal. +Contrary to proposal that can contain any messages, a legacy proposal allows to submit a set of pre-defined proposals. +These proposal are defined by their types. + +While proposals should use the new implementation of the governance proposal, we need still to use legacy proposal in order to submit a `software-upgrade` and a `cancel-software-upgrade` proposal. + +More information on how to submit proposals in the [client section](07_client.md). diff --git a/versioned_docs/version-0.46/integrate/modules/gov/03_messages.md b/versioned_docs/version-0.46/integrate/modules/gov/03_messages.md new file mode 100644 index 000000000..405931da5 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/03_messages.md @@ -0,0 +1,183 @@ + + +# Messages + +## Proposal Submission + +Proposals can be submitted by any account via a `MsgSubmitProposal` +transaction. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/tx.proto#L33-L43 + +All `sdk.Msgs` passed into the `messages` field of a `MsgSubmitProposal` message +must be registered in the app's `MsgServiceRouter`. Each of these messages must +have one signer, namely the gov module account. And finally, the metadata length +must not be larger than the `maxMetadataLen` config passed into the gov keeper. + +**State modifications:** + +* Generate new `proposalID` +* Create new `Proposal` +* Initialise `Proposal`'s attributes +* Decrease balance of sender by `InitialDeposit` +* If `MinDeposit` is reached: + * Push `proposalID` in `ProposalProcessingQueue` +* Transfer `InitialDeposit` from the `Proposer` to the governance `ModuleAccount` + +A `MsgSubmitProposal` transaction can be handled according to the following +pseudocode. + +```go +// PSEUDOCODE // +// Check if MsgSubmitProposal is valid. If it is, create proposal // + +upon receiving txGovSubmitProposal from sender do + + if !correctlyFormatted(txGovSubmitProposal) + // check if proposal is correctly formatted and the messages have routes to other modules. Includes fee payment. + // check if all messages' unique Signer is the gov acct. + // check if the metadata is not too long. + throw + + initialDeposit = txGovSubmitProposal.InitialDeposit + if (initialDeposit.Atoms <= 0) OR (sender.AtomBalance < initialDeposit.Atoms) + // InitialDeposit is negative or null OR sender has insufficient funds + throw + + if (txGovSubmitProposal.Type != ProposalTypePlainText) OR (txGovSubmitProposal.Type != ProposalTypeSoftwareUpgrade) + + sender.AtomBalance -= initialDeposit.Atoms + + depositParam = load(GlobalParams, 'DepositParam') + + proposalID = generate new proposalID + proposal = NewProposal() + + proposal.Messages = txGovSubmitProposal.Messages + proposal.Metadata = txGovSubmitProposal.Metadata + proposal.TotalDeposit = initialDeposit + proposal.SubmitTime = + proposal.DepositEndTime = .Add(depositParam.MaxDepositPeriod) + proposal.Deposits.append({initialDeposit, sender}) + proposal.Submitter = sender + proposal.YesVotes = 0 + proposal.NoVotes = 0 + proposal.NoWithVetoVotes = 0 + proposal.AbstainVotes = 0 + proposal.CurrentStatus = ProposalStatusOpen + + store(Proposals, , proposal) // Store proposal in Proposals mapping + return proposalID +``` + +## Deposit + +Once a proposal is submitted, if +`Proposal.TotalDeposit < ActiveParam.MinDeposit`, Atom holders can send +`MsgDeposit` transactions to increase the proposal's deposit. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/tx.proto#L90-L97 + +**State modifications:** + +* Decrease balance of sender by `deposit` +* Add `deposit` of sender in `proposal.Deposits` +* Increase `proposal.TotalDeposit` by sender's `deposit` +* If `MinDeposit` is reached: + * Push `proposalID` in `ProposalProcessingQueueEnd` +* Transfer `Deposit` from the `proposer` to the governance `ModuleAccount` + +A `MsgDeposit` transaction has to go through a number of checks to be valid. +These checks are outlined in the following pseudocode. + +```go +// PSEUDOCODE // +// Check if MsgDeposit is valid. If it is, increase deposit and check if MinDeposit is reached + +upon receiving txGovDeposit from sender do + // check if proposal is correctly formatted. Includes fee payment. + + if !correctlyFormatted(txGovDeposit) + throw + + proposal = load(Proposals, ) // proposal is a const key, proposalID is variable + + if (proposal == nil) + // There is no proposal for this proposalID + throw + + if (txGovDeposit.Deposit.Atoms <= 0) OR (sender.AtomBalance < txGovDeposit.Deposit.Atoms) OR (proposal.CurrentStatus != ProposalStatusOpen) + + // deposit is negative or null + // OR sender has insufficient funds + // OR proposal is not open for deposit anymore + + throw + + depositParam = load(GlobalParams, 'DepositParam') + + if (CurrentBlock >= proposal.SubmitBlock + depositParam.MaxDepositPeriod) + proposal.CurrentStatus = ProposalStatusClosed + + else + // sender can deposit + sender.AtomBalance -= txGovDeposit.Deposit.Atoms + + proposal.Deposits.append({txGovVote.Deposit, sender}) + proposal.TotalDeposit.Plus(txGovDeposit.Deposit) + + if (proposal.TotalDeposit >= depositParam.MinDeposit) + // MinDeposit is reached, vote opens + + proposal.VotingStartBlock = CurrentBlock + proposal.CurrentStatus = ProposalStatusActive + ProposalProcessingQueue.push(txGovDeposit.ProposalID) + + store(Proposals, , proposal) +``` + +## Vote + +Once `ActiveParam.MinDeposit` is reached, voting period starts. From there, +bonded Atom holders are able to send `MsgVote` transactions to cast their +vote on the proposal. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/gov/v1/tx.proto#L64-L72 + +**State modifications:** + +* Record `Vote` of sender + +_Note: Gas cost for this message has to take into account the future tallying of the vote in EndBlocker._ + +Next is a pseudocode outline of the way `MsgVote` transactions are +handled: + +```go + // PSEUDOCODE // + // Check if MsgVote is valid. If it is, count vote// + + upon receiving txGovVote from sender do + // check if proposal is correctly formatted. Includes fee payment. + + if !correctlyFormatted(txGovDeposit) + throw + + proposal = load(Proposals, ) + + if (proposal == nil) + // There is no proposal for this proposalID + throw + + + if (proposal.CurrentStatus == ProposalStatusActive) + + + // Sender can vote if + // Proposal is active + // Sender has some bonds + + store(Governance, , txGovVote.Vote) // Voters can vote multiple times. Re-voting overrides previous vote. This is ok because tallying is done once at the end. +``` diff --git a/versioned_docs/version-0.46/integrate/modules/gov/04_events.md b/versioned_docs/version-0.46/integrate/modules/gov/04_events.md new file mode 100644 index 000000000..3c0d72ce9 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/04_events.md @@ -0,0 +1,65 @@ + + +# Events + +The governance module emits the following events: + +## EndBlocker + +| Type | Attribute Key | Attribute Value | +| ----------------- | --------------- | ---------------- | +| inactive_proposal | proposal_id | {proposalID} | +| inactive_proposal | proposal_result | {proposalResult} | +| active_proposal | proposal_id | {proposalID} | +| active_proposal | proposal_result | {proposalResult} | + +## Handlers + +### MsgSubmitProposal + +| Type | Attribute Key | Attribute Value | +| ------------------- | ------------------- | --------------- | +| submit_proposal | proposal_id | {proposalID} | +| submit_proposal [0] | voting_period_start | {proposalID} | +| proposal_deposit | amount | {depositAmount} | +| proposal_deposit | proposal_id | {proposalID} | +| message | module | governance | +| message | action | submit_proposal | +| message | sender | {senderAddress} | + +* [0] Event only emitted if the voting period starts during the submission. + +### MsgVote + +| Type | Attribute Key | Attribute Value | +| ------------- | ------------- | --------------- | +| proposal_vote | option | {voteOption} | +| proposal_vote | proposal_id | {proposalID} | +| message | module | governance | +| message | action | vote | +| message | sender | {senderAddress} | + +### MsgVoteWeighted + +| Type | Attribute Key | Attribute Value | +| ------------- | ------------- | ------------------------ | +| proposal_vote | option | {weightedVoteOptions} | +| proposal_vote | proposal_id | {proposalID} | +| message | module | governance | +| message | action | vote | +| message | sender | {senderAddress} | + +### MsgDeposit + +| Type | Attribute Key | Attribute Value | +| -------------------- | ------------------- | --------------- | +| proposal_deposit | amount | {depositAmount} | +| proposal_deposit | proposal_id | {proposalID} | +| proposal_deposit [0] | voting_period_start | {proposalID} | +| message | module | governance | +| message | action | deposit | +| message | sender | {senderAddress} | + +* [0] Event only emitted if the voting period starts during the submission. diff --git a/versioned_docs/version-0.46/integrate/modules/gov/05_future_improvements.md b/versioned_docs/version-0.46/integrate/modules/gov/05_future_improvements.md new file mode 100644 index 000000000..12f2e9e5c --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/05_future_improvements.md @@ -0,0 +1,30 @@ + + +# Future Improvements + +The current documentation only describes the minimum viable product for the +governance module. Future improvements may include: + +* **`BountyProposals`:** If accepted, a `BountyProposal` creates an open + bounty. The `BountyProposal` specifies how many Atoms will be given upon + completion. These Atoms will be taken from the `reserve pool`. After a + `BountyProposal` is accepted by governance, anybody can submit a + `SoftwareUpgradeProposal` with the code to claim the bounty. Note that once a + `BountyProposal` is accepted, the corresponding funds in the `reserve pool` + are locked so that payment can always be honored. In order to link a + `SoftwareUpgradeProposal` to an open bounty, the submitter of the + `SoftwareUpgradeProposal` will use the `Proposal.LinkedProposal` attribute. + If a `SoftwareUpgradeProposal` linked to an open bounty is accepted by + governance, the funds that were reserved are automatically transferred to the + submitter. +* **Complex delegation:** Delegators could choose other representatives than + their validators. Ultimately, the chain of representatives would always end + up to a validator, but delegators could inherit the vote of their chosen + representative before they inherit the vote of their validator. In other + words, they would only inherit the vote of their validator if their other + appointed representative did not vote. +* **Better process for proposal review:** There would be two parts to + `proposal.Deposit`, one for anti-spam (same as in MVP) and an other one to + reward third party auditors. diff --git a/versioned_docs/version-0.46/integrate/modules/gov/06_params.md b/versioned_docs/version-0.46/integrate/modules/gov/06_params.md new file mode 100644 index 000000000..2cc017669 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/06_params.md @@ -0,0 +1,28 @@ + + +# Parameters + +The governance module contains the following parameters: + +| Key | Type | Example | +|---------------|--------|----------------------------------------------------------------------------------------------------| +| depositparams | object | {"min_deposit":[{"denom":"uatom","amount":"10000000"}],"max_deposit_period":"172800000000000"} | +| votingparams | object | {"voting_period":"172800000000000"} | +| tallyparams | object | {"quorum":"0.334000000000000000","threshold":"0.500000000000000000","veto":"0.334000000000000000"} | + +## SubKeys + +| Key | Type | Example | +|--------------------|------------------|-----------------------------------------| +| min_deposit | array (coins) | [{"denom":"uatom","amount":"10000000"}] | +| max_deposit_period | string (time ns) | "172800000000000" | +| voting_period | string (time ns) | "172800000000000" | +| quorum | string (dec) | "0.334000000000000000" | +| threshold | string (dec) | "0.500000000000000000" | +| veto | string (dec) | "0.334000000000000000" | + +__NOTE__: The governance module contains parameters that are objects unlike other +modules. If only a subset of parameters are desired to be changed, only they need +to be included and not the entire parameter object structure. diff --git a/versioned_docs/version-0.46/integrate/modules/gov/07_client.md b/versioned_docs/version-0.46/integrate/modules/gov/07_client.md new file mode 100644 index 000000000..3450a052e --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/07_client.md @@ -0,0 +1,1804 @@ + + +# Client + +## CLI + +A user can query and interact with the `gov` module using the CLI. + +### Query + +The `query` commands allow users to query `gov` state. + +```bash +simd query gov --help +``` + +#### deposit + +The `deposit` command allows users to query a deposit for a given proposal from a given depositor. + +```bash +simd query gov deposit [proposal-id] [depositer-addr] [flags] +``` + +Example: + +```bash +simd query gov deposit 1 cosmos1.. +``` + +Example Output: + +```bash +amount: +- amount: "100" + denom: stake +depositor: cosmos1.. +proposal_id: "1" +``` + +#### deposits + +The `deposits` command allows users to query all deposits for a given proposal. + +```bash +simd query gov deposits [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov deposits 1 +``` + +Example Output: + +```bash +deposits: +- amount: + - amount: "100" + denom: stake + depositor: cosmos1.. + proposal_id: "1" +pagination: + next_key: null + total: "0" +``` + +#### param + +The `param` command allows users to query a given parameter for the `gov` module. + +```bash +simd query gov param [param-type] [flags] +``` + +Example: + +```bash +simd query gov param voting +``` + +Example Output: + +```bash +voting_period: "172800000000000" +``` + +#### params + +The `params` command allows users to query all parameters for the `gov` module. + +```bash +simd query gov params [flags] +``` + +Example: + +```bash +simd query gov params +``` + +Example Output: + +```bash +deposit_params: + max_deposit_period: "172800000000000" + min_deposit: + - amount: "10000000" + denom: stake +tally_params: + quorum: "0.334000000000000000" + threshold: "0.500000000000000000" + veto_threshold: "0.334000000000000000" +voting_params: + voting_period: "172800000000000" +``` + +#### proposal + +The `proposal` command allows users to query a given proposal. + +```bash +simd query gov proposal [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov proposal 1 +``` + +Example Output: + +```bash +deposit_end_time: "2022-03-30T11:50:20.819676256Z" +final_tally_result: + abstain_count: "0" + no_count: "0" + no_with_veto_count: "0" + yes_count: "0" +id: "1" +messages: +- '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "10" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. +metadata: AQ== +status: PROPOSAL_STATUS_DEPOSIT_PERIOD +submit_time: "2022-03-28T11:50:20.819676256Z" +total_deposit: +- amount: "10" + denom: stake +voting_end_time: null +voting_start_time: null +``` + +#### proposals + +The `proposals` command allows users to query all proposals with optional filters. + +```bash +simd query gov proposals [flags] +``` + +Example: + +```bash +simd query gov proposals +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +proposals: +- deposit_end_time: "2022-03-30T11:50:20.819676256Z" + final_tally_result: + abstain_count: "0" + no_count: "0" + no_with_veto_count: "0" + yes_count: "0" + id: "1" + messages: + - '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "10" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. + metadata: AQ== + status: PROPOSAL_STATUS_DEPOSIT_PERIOD + submit_time: "2022-03-28T11:50:20.819676256Z" + total_deposit: + - amount: "10" + denom: stake + voting_end_time: null + voting_start_time: null +- deposit_end_time: "2022-03-30T14:02:41.165025015Z" + final_tally_result: + abstain_count: "0" + no_count: "0" + no_with_veto_count: "0" + yes_count: "0" + id: "2" + messages: + - '@type': /cosmos.bank.v1beta1.MsgSend + amount: + - amount: "10" + denom: stake + from_address: cosmos1.. + to_address: cosmos1.. + metadata: AQ== + status: PROPOSAL_STATUS_DEPOSIT_PERIOD + submit_time: "2022-03-28T14:02:41.165025015Z" + total_deposit: + - amount: "10" + denom: stake + voting_end_time: null + voting_start_time: null +``` + +#### proposer + +The `proposer` command allows users to query the proposer for a given proposal. + +```bash +simd query gov proposer [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov proposer 1 +``` + +Example Output: + +```bash +proposal_id: "1" +proposer: cosmos1.. +``` + +#### tally + +The `tally` command allows users to query the tally of a given proposal vote. + +```bash +simd query gov tally [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov tally 1 +``` + +Example Output: + +```bash +abstain: "0" +"no": "0" +no_with_veto: "0" +"yes": "1" +``` + +#### vote + +The `vote` command allows users to query a vote for a given proposal. + +```bash +simd query gov vote [proposal-id] [voter-addr] [flags] +``` + +Example: + +```bash +simd query gov vote 1 cosmos1.. +``` + +Example Output: + +```bash +option: VOTE_OPTION_YES +options: +- option: VOTE_OPTION_YES + weight: "1.000000000000000000" +proposal_id: "1" +voter: cosmos1.. +``` + +#### votes + +The `votes` command allows users to query all votes for a given proposal. + +```bash +simd query gov votes [proposal-id] [flags] +``` + +Example: + +```bash +simd query gov votes 1 +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +votes: +- option: VOTE_OPTION_YES + options: + - option: VOTE_OPTION_YES + weight: "1.000000000000000000" + proposal_id: "1" + voter: cosmos1.. +``` + +### Transactions + +The `tx` commands allow users to interact with the `gov` module. + +```bash +simd tx gov --help +``` + +#### deposit + +The `deposit` command allows users to deposit tokens for a given proposal. + +```bash +simd tx gov deposit [proposal-id] [deposit] [flags] +``` + +Example: + +```bash +simd tx gov deposit 1 10000000stake --from cosmos1.. +``` + +#### draft-proposal + +The `draft-proposal` command allows users to draft any type of proposal. +The command returns a `draft_proposal.json`, to be used by `submit-proposal` after being completed. +The `draft_metadata.json` is meant to be uploaded to [IPFS](./08_metadata.md). + +```bash +simd tx gov draft-proposal +``` + +#### submit-proposal + +The `submit-proposal` command allows users to submit a governance proposal along with some messages and metadata. +Messages, metadata and deposit are defined in a JSON file. + +```bash +simd tx gov submit-proposal [path-to-proposal-json] [flags] +``` + +Example: + +```bash +simd tx gov submit-proposal /path/to/proposal.json --from cosmos1.. +``` + +where `proposal.json` contains: + +```json +{ + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1...", // The gov module module address + "to_address": "cosmos1...", + "amount":[{"denom": "stake","amount": "10"}] + } + ], + "metadata": "AQ==", + "deposit": "10stake" +} +``` + +#### submit-legacy-proposal + +The `submit-legacy-proposal` command allows users to submit a governance legacy proposal along with an initial deposit. + +```bash +simd tx gov submit-legacy-proposal [command] [flags] +``` + +Example: + +```bash +simd tx gov submit-legacy-proposal --title="Test Proposal" --description="testing" --type="Text" --deposit="100000000stake" --from cosmos1.. +``` + +Example (`cancel-software-upgrade`): + +```bash +simd tx gov submit-legacy-proposal cancel-software-upgrade --title="Test Proposal" --description="testing" --deposit="100000000stake" --from cosmos1.. +``` + +Example (`community-pool-spend`): + +```bash +simd tx gov submit-legacy-proposal community-pool-spend proposal.json --from cosmos1.. +``` + +```json +{ + "title": "Test Proposal", + "description": "testing, 1, 2, 3", + "recipient": "cosmos1..", + "amount": "10000000stake", + "deposit": "10000000stake" +} +``` + +Example (`param-change`): + +```bash +simd tx gov submit-legacy-proposal param-change proposal.json --from cosmos1.. +``` + +```json +{ + "title": "Test Proposal", + "description": "testing, testing, 1, 2, 3", + "changes": [ + { + "subspace": "staking", + "key": "MaxValidators", + "value": 100 + } + ], + "deposit": "10000000stake" +} +``` + +Example (`software-upgrade`): + +```bash +simd tx gov submit-legacy-proposal software-upgrade v2 --title="Test Proposal" --description="testing, testing, 1, 2, 3" --upgrade-height 1000000 --from cosmos1.. +``` + +#### vote + +The `vote` command allows users to submit a vote for a given governance proposal. + +```bash +simd tx gov vote [command] [flags] +``` + +Example: + +```bash +simd tx gov vote 1 yes --from cosmos1.. +``` + +#### weighted-vote + +The `weighted-vote` command allows users to submit a weighted vote for a given governance proposal. + +```bash +simd tx gov weighted-vote [proposal-id] [weighted-options] [flags] +``` + +Example: + +```bash +simd tx gov weighted-vote 1 yes=0.5,no=0.5 --from cosmos1.. +``` + +## gRPC + +A user can query the `gov` module using gRPC endpoints. + +### Proposal + +The `Proposal` endpoint allows users to query a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Proposal +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Proposal +``` + +Example Output: + +```bash +{ + "proposal": { + "proposalId": "1", + "content": {"@type":"/cosmos.gov.v1beta1.TextProposal","description":"testing, testing, 1, 2, 3","title":"Test Proposal"}, + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yes": "0", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + }, + "submitTime": "2021-09-16T19:40:08.712440474Z", + "depositEndTime": "2021-09-18T19:40:08.712440474Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "votingStartTime": "2021-09-16T19:40:08.712440474Z", + "votingEndTime": "2021-09-18T19:40:08.712440474Z" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Proposal +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Proposal +``` + +Example Output: + +```bash +{ + "proposal": { + "id": "1", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"10"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yesCount": "0", + "abstainCount": "0", + "noCount": "0", + "noWithVetoCount": "0" + }, + "submitTime": "2022-03-28T11:50:20.819676256Z", + "depositEndTime": "2022-03-30T11:50:20.819676256Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "votingStartTime": "2022-03-28T14:25:26.644857113Z", + "votingEndTime": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==" + } +} +``` + + +### Proposals + +The `Proposals` endpoint allows users to query all proposals with optional filters. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Proposals +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "proposalId": "1", + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yes": "0", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + }, + "submitTime": "2022-03-28T11:50:20.819676256Z", + "depositEndTime": "2022-03-30T11:50:20.819676256Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "votingStartTime": "2022-03-28T14:25:26.644857113Z", + "votingEndTime": "2022-03-30T14:25:26.644857113Z" + }, + { + "proposalId": "2", + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "finalTallyResult": { + "yes": "0", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + }, + "submitTime": "2022-03-28T14:02:41.165025015Z", + "depositEndTime": "2022-03-30T14:02:41.165025015Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "votingStartTime": "0001-01-01T00:00:00Z", + "votingEndTime": "0001-01-01T00:00:00Z" + } + ], + "pagination": { + "total": "2" + } +} + +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Proposals +``` + +Example: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + cosmos.gov.v1.Query/Proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "id": "1", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"10"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "finalTallyResult": { + "yesCount": "0", + "abstainCount": "0", + "noCount": "0", + "noWithVetoCount": "0" + }, + "submitTime": "2022-03-28T11:50:20.819676256Z", + "depositEndTime": "2022-03-30T11:50:20.819676256Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "votingStartTime": "2022-03-28T14:25:26.644857113Z", + "votingEndTime": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==" + }, + { + "id": "2", + "messages": [ + {"@type":"/cosmos.bank.v1beta1.MsgSend","amount":[{"denom":"stake","amount":"10"}],"fromAddress":"cosmos1..","toAddress":"cosmos1.."} + ], + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "finalTallyResult": { + "yesCount": "0", + "abstainCount": "0", + "noCount": "0", + "noWithVetoCount": "0" + }, + "submitTime": "2022-03-28T14:02:41.165025015Z", + "depositEndTime": "2022-03-30T14:02:41.165025015Z", + "totalDeposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "metadata": "AQ==" + } + ], + "pagination": { + "total": "2" + } +} +``` + +### Vote + +The `Vote` endpoint allows users to query a vote for a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Vote +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1","voter":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Vote +``` + +Example Output: + +```bash +{ + "vote": { + "proposalId": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1000000000000000000" + } + ] + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Vote +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1","voter":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Vote +``` + +Example Output: + +```bash +{ + "vote": { + "proposalId": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } +} +``` + +### Votes + +The `Votes` endpoint allows users to query all votes for a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Votes +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposalId": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1000000000000000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Votes +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposalId": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +### Params + +The `Params` endpoint allows users to query all parameters for the `gov` module. + + + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"params_type":"voting"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Params +``` + +Example Output: + +```bash +{ + "votingParams": { + "votingPeriod": "172800s" + }, + "depositParams": { + "maxDepositPeriod": "0s" + }, + "tallyParams": { + "quorum": "MA==", + "threshold": "MA==", + "vetoThreshold": "MA==" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"params_type":"voting"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Params +``` + +Example Output: + +```bash +{ + "votingParams": { + "votingPeriod": "172800s" + } +} +``` + +### Deposit + +The `Deposit` endpoint allows users to query a deposit for a given proposal from a given depositor. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Deposit +``` + +Example: + +```bash +grpcurl -plaintext \ + '{"proposal_id":"1","depositor":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Deposit +``` + +Example Output: + +```bash +{ + "deposit": { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Deposit +``` + +Example: + +```bash +grpcurl -plaintext \ + '{"proposal_id":"1","depositor":"cosmos1.."}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Deposit +``` + +Example Output: + +```bash +{ + "deposit": { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +### deposits + +The `Deposits` endpoint allows users to query all deposits for a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/Deposits +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/Deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/Deposits +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/Deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposalId": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "total": "1" + } +} +``` + +### TallyResult + +The `TallyResult` endpoint allows users to query the tally of a given proposal. + +Using legacy v1beta1: + +```bash +cosmos.gov.v1beta1.Query/TallyResult +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1beta1.Query/TallyResult +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + } +} +``` + +Using v1: + +```bash +cosmos.gov.v1.Query/TallyResult +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"proposal_id":"1"}' \ + localhost:9090 \ + cosmos.gov.v1.Query/TallyResult +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "noWithVeto": "0" + } +} +``` + +## REST + +A user can query the `gov` module using REST endpoints. + +### proposal + +The `proposals` endpoint allows users to query a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1 +``` + +Example Output: + +```bash +{ + "proposal": { + "proposal_id": "1", + "content": null, + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes": "0", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1 +``` + +Example Output: + +```bash +{ + "proposal": { + "id": "1", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10" + } + ] + } + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes_count": "0", + "abstain_count": "0", + "no_count": "0", + "no_with_veto_count": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==" + } +} +``` + +### proposals + +The `proposals` endpoint also allows users to query all proposals with optional filters. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "proposal_id": "1", + "content": null, + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes": "0", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z" + }, + { + "proposal_id": "2", + "content": null, + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "final_tally_result": { + "yes": "0", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + }, + "submit_time": "2022-03-28T14:02:41.165025015Z", + "deposit_end_time": "2022-03-30T14:02:41.165025015Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "voting_start_time": "0001-01-01T00:00:00Z", + "voting_end_time": "0001-01-01T00:00:00Z" + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals +``` + +Example Output: + +```bash +{ + "proposals": [ + { + "id": "1", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10" + } + ] + } + ], + "status": "PROPOSAL_STATUS_VOTING_PERIOD", + "final_tally_result": { + "yes_count": "0", + "abstain_count": "0", + "no_count": "0", + "no_with_veto_count": "0" + }, + "submit_time": "2022-03-28T11:50:20.819676256Z", + "deposit_end_time": "2022-03-30T11:50:20.819676256Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10000000010" + } + ], + "voting_start_time": "2022-03-28T14:25:26.644857113Z", + "voting_end_time": "2022-03-30T14:25:26.644857113Z", + "metadata": "AQ==" + }, + { + "id": "2", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos1..", + "to_address": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10" + } + ] + } + ], + "status": "PROPOSAL_STATUS_DEPOSIT_PERIOD", + "final_tally_result": { + "yes_count": "0", + "abstain_count": "0", + "no_count": "0", + "no_with_veto_count": "0" + }, + "submit_time": "2022-03-28T14:02:41.165025015Z", + "deposit_end_time": "2022-03-30T14:02:41.165025015Z", + "total_deposit": [ + { + "denom": "stake", + "amount": "10" + } + ], + "voting_start_time": null, + "voting_end_time": null, + "metadata": "AQ==" + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +### voter vote + +The `votes` endpoint allows users to query a vote for a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/votes/cosmos1.. +``` + +Example Output: + +```bash +{ + "vote": { + "proposal_id": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/votes/cosmos1.. +``` + +Example Output: + +```bash +{ + "vote": { + "proposal_id": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ], + "metadata": "" + } +} +``` + +### votes + +The `votes` endpoint allows users to query all votes for a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/votes +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposal_id": "1", + "voter": "cosmos1..", + "option": "VOTE_OPTION_YES", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/votes +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/votes +``` + +Example Output: + +```bash +{ + "votes": [ + { + "proposal_id": "1", + "voter": "cosmos1..", + "options": [ + { + "option": "VOTE_OPTION_YES", + "weight": "1.000000000000000000" + } + ], + "metadata": "" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +### params + +The `params` endpoint allows users to query all parameters for the `gov` module. + + + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/params/{params_type} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/params/voting +``` + +Example Output: + +```bash +{ + "voting_params": { + "voting_period": "172800s" + }, + "deposit_params": { + "min_deposit": [ + ], + "max_deposit_period": "0s" + }, + "tally_params": { + "quorum": "0.000000000000000000", + "threshold": "0.000000000000000000", + "veto_threshold": "0.000000000000000000" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/params/{params_type} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/params/voting +``` + +Example Output: + +```bash +{ + "voting_params": { + "voting_period": "172800s" + }, + "deposit_params": { + "min_deposit": [ + ], + "max_deposit_period": "0s" + }, + "tally_params": { + "quorum": "0.000000000000000000", + "threshold": "0.000000000000000000", + "veto_threshold": "0.000000000000000000" + } +} +``` + +### deposits + +The `deposits` endpoint allows users to query a deposit for a given proposal from a given depositor. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/deposits/cosmos1.. +``` + +Example Output: + +```bash +{ + "deposit": { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor} +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/deposits/cosmos1.. +``` + +Example Output: + +```bash +{ + "deposit": { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } +} +``` + +### proposal deposits + +The `deposits` endpoint allows users to query all deposits for a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/deposits +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/deposits +``` + +Example Output: + +```bash +{ + "deposits": [ + { + "proposal_id": "1", + "depositor": "cosmos1..", + "amount": [ + { + "denom": "stake", + "amount": "10000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +### tally + +The `tally` endpoint allows users to query the tally of a given proposal. + +Using legacy v1beta1: + +```bash +/cosmos/gov/v1beta1/proposals/{proposal_id}/tally +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1beta1/proposals/1/tally +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + } +} +``` + +Using v1: + +```bash +/cosmos/gov/v1/proposals/{proposal_id}/tally +``` + +Example: + +```bash +curl localhost:1317/cosmos/gov/v1/proposals/1/tally +``` + +Example Output: + +```bash +{ + "tally": { + "yes": "1000000", + "abstain": "0", + "no": "0", + "no_with_veto": "0" + } +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/gov/08_metadata.md b/versioned_docs/version-0.46/integrate/modules/gov/08_metadata.md new file mode 100644 index 000000000..f5a0b3943 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/08_metadata.md @@ -0,0 +1,32 @@ + + +# Metadata + +The gov module has two locations for metadata where users can provide further context about the on-chain actions they are taking. By default all metadata fields have a 255 character length field where metadata can be stored in json format, either on-chain or off-chain depending on the amount of data required. Here we provide a recommendation for the json structure and where the data should be stored. There are two important factors in making these recommendations. First, that the gov and group modules are consistent with one another, note the number of proposals made by all groups may be quite large. Second, that client applications such as block explorers and governance interfaces have confidence in the consistency of metadata structure accross chains. + +## Proposal + +Location: off-chain as json object stored on IPFS (mirrors [group proposal](../../group/spec/06_metadata.md#proposal)) + +```json +{ + "title": "", + "authors": "", + "summary": "", + "details": "", + "proposal_forum_url": "", + "vote_option_context": "", +} +``` + +## Vote + +Location: on-chain as json within 255 character limit (mirrors [group vote](../../group/spec/06_metadata.md#vote)) + +```json +{ + "justification": "", +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/gov/README.md b/versioned_docs/version-0.46/integrate/modules/gov/README.md new file mode 100644 index 000000000..3a5a2decf --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/gov/README.md @@ -0,0 +1,65 @@ + + +# `gov` + +## Abstract + +This paper specifies the Governance module of the Cosmos-SDK, which was first +described in the [Cosmos Whitepaper](https://cosmos.network/about/whitepaper) in +June 2016. + +The module enables Cosmos-SDK based blockchain to support an on-chain governance +system. In this system, holders of the native staking token of the chain can vote +on proposals on a 1 token 1 vote basis. Next is a list of features the module +currently supports: + +* **Proposal submission:** Users can submit proposals with a deposit. Once the +minimum deposit is reached, proposal enters voting period +* **Vote:** Participants can vote on proposals that reached MinDeposit +* **Inheritance and penalties:** Delegators inherit their validator's vote if +they don't vote themselves. +* **Claiming deposit:** Users that deposited on proposals can recover their +deposits if the proposal was accepted OR if the proposal never entered voting period. + +This module will be used in the Cosmos Hub, the first Hub in the Cosmos network. +Features that may be added in the future are described in [Future Improvements](05_future_improvements.md). + +## Contents + +The following specification uses *ATOM* as the native staking token. The module +can be adapted to any Proof-Of-Stake blockchain by replacing *ATOM* with the native +staking token of the chain. + +1. **[Concepts](01_concepts.md)** + * [Proposal submission](01_concepts.md#proposal-submission) + * [Deposit](01_concepts.md#Deposit) + * [Vote](01_concepts.md#vote) + * [Software Upgrade](01_concepts.md#software-upgrade) +2. **[State](02_state.md)** + * [Parameters and base types](02_state.md#parameters-and-base-types) + * [Deposit](02_state.md#deposit) + * [ValidatorGovInfo](02_state.md#validatorgovinfo) + * [Proposals](02_state.md#proposals) + * [Stores](02_state.md#stores) + * [Proposal Processing Queue](02_state.md#proposal-processing-queue) +3. **[Messages](03_messages.md)** + * [Proposal Submission](03_messages.md#proposal-submission) + * [Deposit](03_messages.md#deposit) + * [Vote](03_messages.md#vote) +4. **[Events](04_events.md)** + * [EndBlocker](04_events.md#endblocker) + * [Handlers](04_events.md#handlers) +5. **[Future Improvements](05_future_improvements.md)** +6. **[Parameters](06_params.md)** +7. **[Client](07_client.md)** + * [CLI](07_client.md#cli) + * [gRPC](07_client.md#grpc) + * [REST](07_client.md#rest) +8. **[Metadata](08_metadata.md)** + * [Proposal](08_metadata.md#proposal) + * [Vote](08_metadata.md#vote) diff --git a/versioned_docs/version-0.46/integrate/modules/mint/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/mint/01_concepts.md new file mode 100644 index 000000000..11669404d --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/mint/01_concepts.md @@ -0,0 +1,28 @@ + + +# Concepts + +## The Minting Mechanism + +The minting mechanism was designed to: + +* allow for a flexible inflation rate determined by market demand targeting a particular bonded-stake ratio +* effect a balance between market liquidity and staked supply + +In order to best determine the appropriate market rate for inflation rewards, a +moving change rate is used. The moving change rate mechanism ensures that if +the % bonded is either over or under the goal %-bonded, the inflation rate will +adjust to further incentivize or disincentivize being bonded, respectively. Setting the goal +%-bonded at less than 100% encourages the network to maintain some non-staked tokens +which should help provide some liquidity. + +It can be broken down in the following way: + +* If the inflation rate is below the goal %-bonded the inflation rate will + increase until a maximum value is reached +* If the goal % bonded (67% in Cosmos-Hub) is maintained, then the inflation + rate will stay constant +* If the inflation rate is above the goal %-bonded the inflation rate will + decrease until a minimum value is reached diff --git a/versioned_docs/version-0.46/integrate/modules/mint/02_state.md b/versioned_docs/version-0.46/integrate/modules/mint/02_state.md new file mode 100644 index 000000000..2fa04b1ef --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/mint/02_state.md @@ -0,0 +1,21 @@ + + +# State + +## Minter + +The minter is a space for holding current inflation information. + +* Minter: `0x00 -> ProtocolBuffer(minter)` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L9-L23 + +## Params + +Minting params are held in the global params store. + +* Params: `mint/params -> legacy_amino(params)` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L25-L57 diff --git a/versioned_docs/version-0.46/integrate/modules/mint/03_begin_block.md b/versioned_docs/version-0.46/integrate/modules/mint/03_begin_block.md new file mode 100644 index 000000000..67bd7d8a8 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/mint/03_begin_block.md @@ -0,0 +1,66 @@ + + +# Begin-Block + +Minting parameters are recalculated and inflation +paid at the beginning of each block. + +## Inflation rate calculation + +Inflation rate is calculated using an "inflation calculation function" that's +passed to the `NewAppModule` function. If no function is passed, then the SDK's +default inflation function will be used (`NextInflationRate`). In case a custom +inflation calculation logic is needed, this can be achieved by defining and +passing a function that matches `InflationCalculationFn`'s signature. + +```go +type InflationCalculationFn func(ctx sdk.Context, minter Minter, params Params, bondedRatio sdk.Dec) sdk.Dec +``` + +### NextInflationRate + +The target annual inflation rate is recalculated each block. +The inflation is also subject to a rate change (positive or negative) +depending on the distance from the desired ratio (67%). The maximum rate change +possible is defined to be 13% per year, however the annual inflation is capped +as between 7% and 20%. + +```go +NextInflationRate(params Params, bondedRatio sdk.Dec) (inflation sdk.Dec) { + inflationRateChangePerYear = (1 - bondedRatio/params.GoalBonded) * params.InflationRateChange + inflationRateChange = inflationRateChangePerYear/blocksPerYr + + // increase the new annual inflation for this next cycle + inflation += inflationRateChange + if inflation > params.InflationMax { + inflation = params.InflationMax + } + if inflation < params.InflationMin { + inflation = params.InflationMin + } + + return inflation +} +``` + +## NextAnnualProvisions + +Calculate the annual provisions based on current total supply and inflation +rate. This parameter is calculated once per block. + +```go +NextAnnualProvisions(params Params, totalSupply sdk.Dec) (provisions sdk.Dec) { + return Inflation * totalSupply +``` + +## BlockProvision + +Calculate the provisions generated for each block based on current annual provisions. The provisions are then minted by the `mint` module's `ModuleMinterAccount` and then transferred to the `auth`'s `FeeCollector` `ModuleAccount`. + +```go +BlockProvision(params Params) sdk.Coin { + provisionAmt = AnnualProvisions/ params.BlocksPerYear + return sdk.NewCoin(params.MintDenom, provisionAmt.Truncate()) +``` diff --git a/versioned_docs/version-0.46/integrate/modules/mint/04_params.md b/versioned_docs/version-0.46/integrate/modules/mint/04_params.md new file mode 100644 index 000000000..ed18e5557 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/mint/04_params.md @@ -0,0 +1,16 @@ + + +# Parameters + +The minting module contains the following parameters: + +| Key | Type | Example | +|---------------------|-----------------|------------------------| +| MintDenom | string | "uatom" | +| InflationRateChange | string (dec) | "0.130000000000000000" | +| InflationMax | string (dec) | "0.200000000000000000" | +| InflationMin | string (dec) | "0.070000000000000000" | +| GoalBonded | string (dec) | "0.670000000000000000" | +| BlocksPerYear | string (uint64) | "6311520" | diff --git a/versioned_docs/version-0.46/integrate/modules/mint/05_events.md b/versioned_docs/version-0.46/integrate/modules/mint/05_events.md new file mode 100644 index 000000000..f6130a3b9 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/mint/05_events.md @@ -0,0 +1,16 @@ + + +# Events + +The minting module emits the following events: + +## BeginBlocker + +| Type | Attribute Key | Attribute Value | +|------|-------------------|--------------------| +| mint | bonded_ratio | {bondedRatio} | +| mint | inflation | {inflation} | +| mint | annual_provisions | {annualProvisions} | +| mint | amount | {amount} | diff --git a/versioned_docs/version-0.46/integrate/modules/mint/06_client.md b/versioned_docs/version-0.46/integrate/modules/mint/06_client.md new file mode 100644 index 000000000..a79063a99 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/mint/06_client.md @@ -0,0 +1,224 @@ + + +# Client + +## CLI + +A user can query and interact with the `mint` module using the CLI. + +### Query + +The `query` commands allow users to query `mint` state. + +```sh +simd query mint --help +``` + +#### annual-provisions + +The `annual-provisions` command allow users to query the current minting annual provisions value + +```sh +simd query mint annual-provisions [flags] +``` + +Example: + +```sh +simd query mint annual-provisions +``` + +Example Output: + +```sh +22268504368893.612100895088410693 +``` + +#### inflation + +The `inflation` command allow users to query the current minting inflation value + +```sh +simd query mint inflation [flags] +``` + +Example: + +```sh +simd query mint inflation +``` + +Example Output: + +```sh +0.199200302563256955 +``` + +#### params + +The `params` command allow users to query the current minting parameters + +```sh +simd query mint params [flags] +``` + +Example: + +```yml +blocks_per_year: "4360000" +goal_bonded: "0.670000000000000000" +inflation_max: "0.200000000000000000" +inflation_min: "0.070000000000000000" +inflation_rate_change: "0.130000000000000000" +mint_denom: stake +``` + +## gRPC + +A user can query the `mint` module using gRPC endpoints. + +### AnnualProvisions + +The `AnnualProvisions` endpoint allow users to query the current minting annual provisions value + +```sh +/cosmos.mint.v1beta1.Query/AnnualProvisions +``` + +Example: + +```sh +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/AnnualProvisions +``` + +Example Output: + +```json +{ + "annualProvisions": "1432452520532626265712995618" +} +``` + +### Inflation + +The `Inflation` endpoint allow users to query the current minting inflation value + +```sh +/cosmos.mint.v1beta1.Query/Inflation +``` + +Example: + +```sh +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Inflation +``` + +Example Output: + +```json +{ + "inflation": "130197115720711261" +} +``` + +### Params + +The `Params` endpoint allow users to query the current minting parameters + +```sh +/cosmos.mint.v1beta1.Query/Params +``` + +Example: + +```sh +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "mintDenom": "stake", + "inflationRateChange": "130000000000000000", + "inflationMax": "200000000000000000", + "inflationMin": "70000000000000000", + "goalBonded": "670000000000000000", + "blocksPerYear": "6311520" + } +} +``` + +## REST + +A user can query the `mint` module using REST endpoints. + +### annual-provisions + +```sh +/cosmos/mint/v1beta1/annual_provisions +``` + +Example: + +```sh +curl "localhost:1317/cosmos/mint/v1beta1/annual_provisions" +``` + +Example Output: + +```json +{ + "annualProvisions": "1432452520532626265712995618" +} +``` + +### inflation + +```sh +/cosmos/mint/v1beta1/inflation +``` + +Example: + +```sh +curl "localhost:1317/cosmos/mint/v1beta1/inflation" +``` + +Example Output: + +```json +{ + "inflation": "130197115720711261" +} +``` + +### params + +```sh +/cosmos/mint/v1beta1/params +``` + +Example: + +```sh +curl "localhost:1317/cosmos/mint/v1beta1/params" +``` + +Example Output: + +```json +{ + "params": { + "mintDenom": "stake", + "inflationRateChange": "130000000000000000", + "inflationMax": "200000000000000000", + "inflationMin": "70000000000000000", + "goalBonded": "670000000000000000", + "blocksPerYear": "6311520" + } +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/mint/README.md b/versioned_docs/version-0.46/integrate/modules/mint/README.md new file mode 100644 index 000000000..400d723b2 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/mint/README.md @@ -0,0 +1,26 @@ + + +# `mint` + +## Contents + +1. **[Concept](01_concepts.md)** +2. **[State](02_state.md)** + * [Minter](02_state.md#minter) + * [Params](02_state.md#params) +3. **[Begin-Block](03_begin_block.md)** + * [NextInflationRate](03_begin_block.md#nextinflationrate) + * [NextAnnualProvisions](03_begin_block.md#nextannualprovisions) + * [BlockProvision](03_begin_block.md#blockprovision) +4. **[Parameters](04_params.md)** +5. **[Events](05_events.md)** + * [BeginBlocker](05_events.md#beginblocker) +6. **[Client](06_client.md)** + * [CLI](06_client.md#cli) + * [gRPC](06_client.md#grpc) + * [REST](06_client.md#rest) diff --git a/versioned_docs/version-0.46/integrate/modules/params/01_keeper.md b/versioned_docs/version-0.46/integrate/modules/params/01_keeper.md new file mode 100644 index 000000000..fa97ec5b3 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/params/01_keeper.md @@ -0,0 +1,19 @@ + + +# Keeper + +In the app initialization stage, [subspaces](02_subspace.md) can be allocated for other modules' keeper using `Keeper.Subspace` and are stored in `Keeper.spaces`. Then, those modules can have a reference to their specific parameter store through `Keeper.GetSubspace`. + +Example: + +```go +type ExampleKeeper struct { + paramSpace paramtypes.Subspace +} + +func (k ExampleKeeper) SetParams(ctx sdk.Context, params types.Params) { + k.paramSpace.SetParamSet(ctx, ¶ms) +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/params/02_subspace.md b/versioned_docs/version-0.46/integrate/modules/params/02_subspace.md new file mode 100644 index 000000000..2eaa391a2 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/params/02_subspace.md @@ -0,0 +1,38 @@ + + +# Subspace + +`Subspace` is a prefixed subspace of the parameter store. Each module which uses the +parameter store will take a `Subspace` to isolate permission to access. + +## Key + +Parameter keys are human readable alphanumeric strings. A parameter for the key +`"ExampleParameter"` is stored under `[]byte("SubspaceName" + "/" + "ExampleParameter")`, + where `"SubspaceName"` is the name of the subspace. + +Subkeys are secondary parameter keys those are used along with a primary parameter key. +Subkeys can be used for grouping or dynamic parameter key generation during runtime. + +## KeyTable + +All of the parameter keys that will be used should be registered at the compile +time. `KeyTable` is essentially a `map[string]attribute`, where the `string` is a parameter key. + +Currently, `attribute` consists of a `reflect.Type`, which indicates the parameter +type to check that provided key and value are compatible and registered, as well as a function `ValueValidatorFn` to validate values. + +Only primary keys have to be registered on the `KeyTable`. Subkeys inherit the +attribute of the primary key. + +## ParamSet + +Modules often define parameters as a proto message. The generated struct can implement +`ParamSet` interface to be used with the following methods: + +* `KeyTable.RegisterParamSet()`: registers all parameters in the struct +* `Subspace.{Get, Set}ParamSet()`: Get to & Set from the struct + +The implementor should be a pointer in order to use `GetParamSet()`. diff --git a/versioned_docs/version-0.46/integrate/modules/params/README.md b/versioned_docs/version-0.46/integrate/modules/params/README.md new file mode 100644 index 000000000..6f0387a01 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/params/README.md @@ -0,0 +1,29 @@ + + +# `params` + +## Abstract + +Package params provides a globally available parameter store. + +There are two main types, Keeper and Subspace. Subspace is an isolated namespace for a +paramstore, where keys are prefixed by preconfigured spacename. Keeper has a +permission to access all existing spaces. + +Subspace can be used by the individual keepers, which need a private parameter store +that the other keepers cannot modify. The params Keeper can be used to add a route to `x/gov` router in order to modify any parameter in case a proposal passes. + +The following contents explains how to use params module for master and user modules. + +## Contents + +1. **[Keeper](01_keeper.md)** +2. **[Subspace](02_subspace.md)** + * [Key](02_subspace.md#key) + * [KeyTable](02_subspace.md#keytable) + * [ParamSet](02_subspace.md#paramset) diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/slashing/01_concepts.md new file mode 100644 index 000000000..ea7c6b319 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/01_concepts.md @@ -0,0 +1,57 @@ + + +# Concepts + +## States + +At any given time, there are any number of validators registered in the state +machine. Each block, the top `MaxValidators` (defined by `x/staking`) validators +who are not jailed become _bonded_, meaning that they may propose and vote on +blocks. Validators who are _bonded_ are _at stake_, meaning that part or all of +their stake and their delegators' stake is at risk if they commit a protocol fault. + +For each of these validators we keep a `ValidatorSigningInfo` record that contains +information partaining to validator's liveness and other infraction related +attributes. + +## Tombstone Caps + +In order to mitigate the impact of initially likely categories of non-malicious +protocol faults, the Cosmos Hub implements for each validator +a _tombstone_ cap, which only allows a validator to be slashed once for a double +sign fault. For example, if you misconfigure your HSM and double-sign a bunch of +old blocks, you'll only be punished for the first double-sign (and then immediately tombstombed). This will still be quite expensive and desirable to avoid, but tombstone caps +somewhat blunt the economic impact of unintentional misconfiguration. + +Liveness faults do not have caps, as they can't stack upon each other. Liveness bugs are "detected" as soon as the infraction occurs, and the validators are immediately put in jail, so it is not possible for them to commit multiple liveness faults without unjailing in between. + +## Infraction Timelines + +To illustrate how the `x/slashing` module handles submitted evidence through +Tendermint consensus, consider the following examples: + +**Definitions**: + +_[_ : timeline start +_]_ : timeline end +_Cn_ : infraction `n` committed +_Dn_ : infraction `n` discovered +_Vb_ : validator bonded +_Vu_ : validator unbonded + +### Single Double Sign Infraction + +\[----------C1----D1,Vu-----\] + +A single infraction is committed then later discovered, at which point the +validator is unbonded and slashed at the full amount for the infraction. + +### Multiple Double Sign Infractions + +\[----------C1--C2---C3---D1,D2,D3Vu-----\] + +Multiple infractions are committed and then later discovered, at which point the +validator is jailed and slashed for only one infraction. Because the validator +is also tombstoned, they can not rejoin the validator set. diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/02_state.md b/versioned_docs/version-0.46/integrate/modules/slashing/02_state.md new file mode 100644 index 000000000..50aa0e141 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/02_state.md @@ -0,0 +1,51 @@ + + +# State + +## Signing Info (Liveness) + +Every block includes a set of precommits by the validators for the previous block, +known as the `LastCommitInfo` provided by Tendermint. A `LastCommitInfo` is valid so +long as it contains precommits from +2/3 of total voting power. + +Proposers are incentivized to include precommits from all validators in the Tendermint `LastCommitInfo` +by receiving additional fees proportional to the difference between the voting +power included in the `LastCommitInfo` and +2/3 (see [fee distribution](x/distribution/spec/03_begin_block.md)). + +```go +type LastCommitInfo struct { + Round int32 + Votes []VoteInfo +} +``` + +Validators are penalized for failing to be included in the `LastCommitInfo` for some +number of blocks by being automatically jailed, potentially slashed, and unbonded. + +Information about validator's liveness activity is tracked through `ValidatorSigningInfo`. +It is indexed in the store as follows: + +* ValidatorSigningInfo: `0x01 | ConsAddrLen (1 byte) | ConsAddress -> ProtocolBuffer(ValSigningInfo)` +* MissedBlocksBitArray: `0x02 | ConsAddrLen (1 byte) | ConsAddress | LittleEndianUint64(signArrayIndex) -> VarInt(didMiss)` (varint is a number encoding format) + +The first mapping allows us to easily lookup the recent signing info for a +validator based on the validator's consensus address. + +The second mapping (`MissedBlocksBitArray`) acts +as a bit-array of size `SignedBlocksWindow` that tells us if the validator missed +the block for a given index in the bit-array. The index in the bit-array is given +as little endian uint64. +The result is a `varint` that takes on `0` or `1`, where `0` indicates the +validator did not miss (did sign) the corresponding block, and `1` indicates +they missed the block (did not sign). + +Note that the `MissedBlocksBitArray` is not explicitly initialized up-front. Keys +are added as we progress through the first `SignedBlocksWindow` blocks for a newly +bonded validator. The `SignedBlocksWindow` parameter defines the size +(number of blocks) of the sliding window used to track validator liveness. + +The information stored for tracking validator liveness is as follows: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/slashing/v1beta1/slashing.proto#L12-L33 diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/03_messages.md b/versioned_docs/version-0.46/integrate/modules/slashing/03_messages.md new file mode 100644 index 000000000..874931579 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/03_messages.md @@ -0,0 +1,51 @@ + + +# Messages + +In this section we describe the processing of messages for the `slashing` module. + +## Unjail + +If a validator was automatically unbonded due to downtime and wishes to come back online & +possibly rejoin the bonded set, it must send `MsgUnjail`: + +```protobuf +// MsgUnjail is an sdk.Msg used for unjailing a jailed validator, thus returning +// them into the bonded validator set, so they can begin receiving provisions +// and rewards again. +message MsgUnjail { + string validator_addr = 1; +} +``` + +Below is a pseudocode of the `MsgSrv/Unjail` RPC: + +```go +unjail(tx MsgUnjail) + validator = getValidator(tx.ValidatorAddr) + if validator == nil + fail with "No validator found" + + if getSelfDelegation(validator) == 0 + fail with "validator must self delegate before unjailing" + + if !validator.Jailed + fail with "Validator not jailed, cannot unjail" + + info = GetValidatorSigningInfo(operator) + if info.Tombstoned + fail with "Tombstoned validator cannot be unjailed" + if block time < info.JailedUntil + fail with "Validator still jailed, cannot unjail until period has expired" + + validator.Jailed = false + setValidator(validator) + + return +``` + +If the validator has enough stake to be in the top `n = MaximumBondedValidators`, it will be automatically rebonded, +and all delegators still delegated to the validator will be rebonded and begin to again collect +provisions and rewards. diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/04_begin_block.md b/versioned_docs/version-0.46/integrate/modules/slashing/04_begin_block.md new file mode 100644 index 000000000..99572c419 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/04_begin_block.md @@ -0,0 +1,98 @@ + + +# BeginBlock + +## Liveness Tracking + +At the beginning of each block, we update the `ValidatorSigningInfo` for each +validator and check if they've crossed below the liveness threshold over a +sliding window. This sliding window is defined by `SignedBlocksWindow` and the +index in this window is determined by `IndexOffset` found in the validator's +`ValidatorSigningInfo`. For each block processed, the `IndexOffset` is incremented +regardless if the validator signed or not. Once the index is determined, the +`MissedBlocksBitArray` and `MissedBlocksCounter` are updated accordingly. + +Finally, in order to determine if a validator crosses below the liveness threshold, +we fetch the maximum number of blocks missed, `maxMissed`, which is +`SignedBlocksWindow - (MinSignedPerWindow * SignedBlocksWindow)` and the minimum +height at which we can determine liveness, `minHeight`. If the current block is +greater than `minHeight` and the validator's `MissedBlocksCounter` is greater than +`maxMissed`, they will be slashed by `SlashFractionDowntime`, will be jailed +for `DowntimeJailDuration`, and have the following values reset: +`MissedBlocksBitArray`, `MissedBlocksCounter`, and `IndexOffset`. + +**Note**: Liveness slashes do **NOT** lead to a tombstombing. + +```go +height := block.Height + +for vote in block.LastCommitInfo.Votes { + signInfo := GetValidatorSigningInfo(vote.Validator.Address) + + // This is a relative index, so we counts blocks the validator SHOULD have + // signed. We use the 0-value default signing info if not present, except for + // start height. + index := signInfo.IndexOffset % SignedBlocksWindow() + signInfo.IndexOffset++ + + // Update MissedBlocksBitArray and MissedBlocksCounter. The MissedBlocksCounter + // just tracks the sum of MissedBlocksBitArray. That way we avoid needing to + // read/write the whole array each time. + missedPrevious := GetValidatorMissedBlockBitArray(vote.Validator.Address, index) + missed := !signed + + switch { + case !missedPrevious && missed: + // array index has changed from not missed to missed, increment counter + SetValidatorMissedBlockBitArray(vote.Validator.Address, index, true) + signInfo.MissedBlocksCounter++ + + case missedPrevious && !missed: + // array index has changed from missed to not missed, decrement counter + SetValidatorMissedBlockBitArray(vote.Validator.Address, index, false) + signInfo.MissedBlocksCounter-- + + default: + // array index at this index has not changed; no need to update counter + } + + if missed { + // emit events... + } + + minHeight := signInfo.StartHeight + SignedBlocksWindow() + maxMissed := SignedBlocksWindow() - MinSignedPerWindow() + + // If we are past the minimum height and the validator has missed too many + // jail and slash them. + if height > minHeight && signInfo.MissedBlocksCounter > maxMissed { + validator := ValidatorByConsAddr(vote.Validator.Address) + + // emit events... + + // We need to retrieve the stake distribution which signed the block, so we + // subtract ValidatorUpdateDelay from the block height, and subtract an + // additional 1 since this is the LastCommit. + // + // Note, that this CAN result in a negative "distributionHeight" up to + // -ValidatorUpdateDelay-1, i.e. at the end of the pre-genesis block (none) = at the beginning of the genesis block. + // That's fine since this is just used to filter unbonding delegations & redelegations. + distributionHeight := height - sdk.ValidatorUpdateDelay - 1 + + Slash(vote.Validator.Address, distributionHeight, vote.Validator.Power, SlashFractionDowntime()) + Jail(vote.Validator.Address) + + signInfo.JailedUntil = block.Time.Add(DowntimeJailDuration()) + + // We need to reset the counter & array so that the validator won't be + // immediately slashed for downtime upon rebonding. + signInfo.MissedBlocksCounter = 0 + signInfo.IndexOffset = 0 + ClearValidatorMissedBlockBitArray(vote.Validator.Address) + } + + SetValidatorSigningInfo(vote.Validator.Address, signInfo) +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/05_hooks.md b/versioned_docs/version-0.46/integrate/modules/slashing/05_hooks.md new file mode 100644 index 000000000..a83968942 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/05_hooks.md @@ -0,0 +1,45 @@ + + +# Hooks + +This section contains a description of the module's `hooks`. Hooks are operations that are executed automatically when events are raised. + +## Staking hooks + +The slashing module implements the `StakingHooks` defined in `x/staking` and are used as record-keeping of validators information. During the app initialization, these hooks should be registered in the staking module struct. + +The following hooks impact the slashing state: + +* `AfterValidatorBonded` creates a `ValidatorSigningInfo` instance as described in the following section. +* `AfterValidatorCreated` stores a validator's consensus key. +* `AfterValidatorRemoved` removes a validator's consensus key. + +## Validator Bonded + +Upon successful first-time bonding of a new validator, we create a new `ValidatorSigningInfo` structure for the +now-bonded validator, which `StartHeight` of the current block. + +If the validator was out of the validator set and gets bonded again, its new bonded height is set. + +```go +onValidatorBonded(address sdk.ValAddress) + + signingInfo, found = GetValidatorSigningInfo(address) + if !found { + signingInfo = ValidatorSigningInfo { + StartHeight : CurrentHeight, + IndexOffset : 0, + JailedUntil : time.Unix(0, 0), + Tombstone : false, + MissedBloskCounter : 0 + } else { + signingInfo.StartHeight = CurrentHeight + } + + setValidatorSigningInfo(signingInfo) + } + + return +``` diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/06_events.md b/versioned_docs/version-0.46/integrate/modules/slashing/06_events.md new file mode 100644 index 000000000..c7dbf5723 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/06_events.md @@ -0,0 +1,46 @@ + + +# Events + +The slashing module emits the following events: + +## MsgServer + +### MsgUnjail + +| Type | Attribute Key | Attribute Value | +| ------- | ------------- | ------------------ | +| message | module | slashing | +| message | sender | {validatorAddress} | + +## Keeper + +## BeginBlocker: HandleValidatorSignature + +| Type | Attribute Key | Attribute Value | +| ----- | ------------- | --------------------------- | +| slash | address | {validatorConsensusAddress} | +| slash | power | {validatorPower} | +| slash | reason | {slashReason} | +| slash | jailed [0] | {validatorConsensusAddress} | +| slash | burned coins | {sdk.Int} | + +* [0] Only included if the validator is jailed. + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | --------------------------- | +| liveness | address | {validatorConsensusAddress} | +| liveness | missed_blocks | {missedBlocksCounter} | +| liveness | height | {blockHeight} | + +### Slash + +* same as `"slash"` event from `HandleValidatorSignature`, but without the `jailed` attribute. + +### Jail + +| Type | Attribute Key | Attribute Value | +| ----- | ------------- | ------------------ | +| slash | jailed | {validatorAddress} | diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/07_tombstone.md b/versioned_docs/version-0.46/integrate/modules/slashing/07_tombstone.md new file mode 100644 index 000000000..ab06c9456 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/07_tombstone.md @@ -0,0 +1,127 @@ + + +# Staking Tombstone + +## Abstract + +In the current implementation of the `slashing` module, when the consensus engine +informs the state machine of a validator's consensus fault, the validator is +partially slashed, and put into a "jail period", a period of time in which they +are not allowed to rejoin the validator set. However, because of the nature of +consensus faults and ABCI, there can be a delay between an infraction occurring, +and evidence of the infraction reaching the state machine (this is one of the +primary reasons for the existence of the unbonding period). + +> Note: The tombstone concept, only applies to faults that have a delay between +> the infraction occurring and evidence reaching the state machine. For example, +> evidence of a validator double signing may take a while to reach the state machine +> due to unpredictable evidence gossip layer delays and the ability of validators to +> selectively reveal double-signatures (e.g. to infrequently-online light clients). +> Liveness slashing, on the other hand, is detected immediately as soon as the +> infraction occurs, and therefore no slashing period is needed. A validator is +> immediately put into jail period, and they cannot commit another liveness fault +> until they unjail. In the future, there may be other types of byzantine faults +> that have delays (for example, submitting evidence of an invalid proposal as a transaction). +> When implemented, it will have to be decided whether these future types of +> byzantine faults will result in a tombstoning (and if not, the slash amounts +> will not be capped by a slashing period). + +In the current system design, once a validator is put in the jail for a consensus +fault, after the `JailPeriod` they are allowed to send a transaction to `unjail` +themselves, and thus rejoin the validator set. + +One of the "design desires" of the `slashing` module is that if multiple +infractions occur before evidence is executed (and a validator is put in jail), +they should only be punished for single worst infraction, but not cumulatively. +For example, if the sequence of events is: + +1. Validator A commits Infraction 1 (worth 30% slash) +2. Validator A commits Infraction 2 (worth 40% slash) +3. Validator A commits Infraction 3 (worth 35% slash) +4. Evidence for Infraction 1 reaches state machine (and validator is put in jail) +5. Evidence for Infraction 2 reaches state machine +6. Evidence for Infraction 3 reaches state machine + +Only Infraction 2 should have its slash take effect, as it is the highest. This +is done, so that in the case of the compromise of a validator's consensus key, +they will only be punished once, even if the hacker double-signs many blocks. +Because, the unjailing has to be done with the validator's operator key, they +have a chance to re-secure their consensus key, and then signal that they are +ready using their operator key. We call this period during which we track only +the max infraction, the "slashing period". + +Once, a validator rejoins by unjailing themselves, we begin a new slashing period; +if they commit a new infraction after unjailing, it gets slashed cumulatively on +top of the worst infraction from the previous slashing period. + +However, while infractions are grouped based off of the slashing periods, because +evidence can be submitted up to an `unbondingPeriod` after the infraction, we +still have to allow for evidence to be submitted for previous slashing periods. +For example, if the sequence of events is: + +1. Validator A commits Infraction 1 (worth 30% slash) +2. Validator A commits Infraction 2 (worth 40% slash) +3. Evidence for Infraction 1 reaches state machine (and Validator A is put in jail) +4. Validator A unjails + +We are now in a new slashing period, however we still have to keep the door open +for the previous infraction, as the evidence for Infraction 2 may still come in. +As the number of slashing periods increase, it creates more complexity as we have +to keep track of the highest infraction amount for every single slashing period. + +> Note: Currently, according to the `slashing` module spec, a new slashing period +> is created every time a validator is unbonded then rebonded. This should probably +> be changed to jailed/unjailed. See issue [#3205](https://github.com/cosmos/cosmos-sdk/issues/3205) +> for further details. For the remainder of this, I will assume that we only start +> a new slashing period when a validator gets unjailed. + +The maximum number of slashing periods is the `len(UnbondingPeriod) / len(JailPeriod)`. +The current defaults in Gaia for the `UnbondingPeriod` and `JailPeriod` are 3 weeks +and 2 days, respectively. This means there could potentially be up to 11 slashing +periods concurrently being tracked per validator. If we set the `JailPeriod >= UnbondingPeriod`, +we only have to track 1 slashing period (i.e not have to track slashing periods). + +Currently, in the jail period implementation, once a validator unjails, all of +their delegators who are delegated to them (haven't unbonded / redelegated away), +stay with them. Given that consensus safety faults are so egregious +(way more so than liveness faults), it is probably prudent to have delegators not +"auto-rebond" to the validator. + +### Proposal: infinite jail + +We propose setting the "jail time" for a +validator who commits a consensus safety fault, to `infinite` (i.e. a tombstone state). +This essentially kicks the validator out of the validator set and does not allow +them to re-enter the validator set. All of their delegators (including the operator themselves) +have to either unbond or redelegate away. The validator operator can create a new +validator if they would like, with a new operator key and consensus key, but they +have to "re-earn" their delegations back. + +Implementing the tombstone system and getting rid of the slashing period tracking +will make the `slashing` module way simpler, especially because we can remove all +of the hooks defined in the `slashing` module consumed by the `staking` module +(the `slashing` module still consumes hooks defined in `staking`). + +### Single slashing amount + +Another optimization that can be made is that if we assume that all ABCI faults +for Tendermint consensus are slashed at the same level, we don't have to keep +track of "max slash". Once an ABCI fault happens, we don't have to worry about +comparing potential future ones to find the max. + +Currently the only Tendermint ABCI fault is: + +* Unjustified precommits (double signs) + +It is currently planned to include the following fault in the near future: + +* Signing a precommit when you're in unbonding phase (needed to make light client bisection safe) + +Given that these faults are both attributable byzantine faults, we will likely +want to slash them equally, and thus we can enact the above change. + +> Note: This change may make sense for current Tendermint consensus, but maybe +> not for a different consensus algorithm or future versions of Tendermint that +> may want to punish at different levels (for example, partial slashing). diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/08_params.md b/versioned_docs/version-0.46/integrate/modules/slashing/08_params.md new file mode 100644 index 000000000..defed189a --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/08_params.md @@ -0,0 +1,15 @@ + + +# Parameters + +The slashing module contains the following parameters: + +| Key | Type | Example | +| ----------------------- | -------------- | ---------------------- | +| SignedBlocksWindow | string (int64) | "100" | +| MinSignedPerWindow | string (dec) | "0.500000000000000000" | +| DowntimeJailDuration | string (ns) | "600000000000" | +| SlashFractionDoubleSign | string (dec) | "0.050000000000000000" | +| SlashFractionDowntime | string (dec) | "0.010000000000000000" | diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/09_client.md b/versioned_docs/version-0.46/integrate/modules/slashing/09_client.md new file mode 100644 index 000000000..11d82961e --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/09_client.md @@ -0,0 +1,294 @@ + + +# CLI + +A user can query and interact with the `slashing` module using the CLI. + +## Query + +The `query` commands allow users to query `slashing` state. + +```sh +simd query slashing --help +``` + +### params + +The `params` command allows users to query genesis parameters for the slashing module. + +```sh +simd query slashing params [flags] +``` + +Example: + +```sh +simd query slashing params +``` + +Example Output: + +```yml +downtime_jail_duration: 600s +min_signed_per_window: "0.500000000000000000" +signed_blocks_window: "100" +slash_fraction_double_sign: "0.050000000000000000" +slash_fraction_downtime: "0.010000000000000000" +``` + +### signing-info + +The `signing-info` command allows users to query signing-info of the validator using consensus public key. + +```sh +simd query slashing signing-infos [flags] +``` + +Example: + +```sh +simd query slashing signing-info '{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Auxs3865HpB/EfssYOzfqNhEJjzys6jD5B6tPgC8="}' + +``` + +Example Output: + +```yml +address: cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c +index_offset: "2068" +jailed_until: "1970-01-01T00:00:00Z" +missed_blocks_counter: "0" +start_height: "0" +tombstoned: false +``` + +### signing-infos + +The `signing-infos` command allows users to query signing infos of all validators. + +```sh +simd query slashing signing-infos [flags] +``` + +Example: + +```sh +simd query slashing signing-infos +``` + +Example Output: + +```yml +info: +- address: cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c + index_offset: "2075" + jailed_until: "1970-01-01T00:00:00Z" + missed_blocks_counter: "0" + start_height: "0" + tombstoned: false +pagination: + next_key: null + total: "0" +``` + +## Transactions + +The `tx` commands allow users to interact with the `slashing` module. + +```bash +simd tx slashing --help +``` + +### unjail + +The `unjail` command allows users to unjail a validator previously jailed for downtime. + +```bash + simd tx slashing unjail --from mykey [flags] +``` + +Example: + +```bash +simd tx slashing unjail --from mykey +``` + +## gRPC + +A user can query the `slashing` module using gRPC endpoints. + +### Params + +The `Params` endpoint allows users to query the parameters of slashing module. + +```sh +cosmos.slashing.v1beta1.Query/Params +``` + +Example: + +```sh +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "signedBlocksWindow": "100", + "minSignedPerWindow": "NTAwMDAwMDAwMDAwMDAwMDAw", + "downtimeJailDuration": "600s", + "slashFractionDoubleSign": "NTAwMDAwMDAwMDAwMDAwMDA=", + "slashFractionDowntime": "MTAwMDAwMDAwMDAwMDAwMDA=" + } +} +``` + +### SigningInfo + +The SigningInfo queries the signing info of given cons address. + +```sh +cosmos.slashing.v1beta1.Query/SigningInfo +``` + +Example: + +```sh +grpcurl -plaintext -d '{"cons_address":"cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c"}' localhost:9090 cosmos.slashing.v1beta1.Query/SigningInfo +``` + +Example Output: + +```json +{ + "valSigningInfo": { + "address": "cosmosvalcons1nrqsld3aw6lh6t082frdqc84uwxn0t958c", + "indexOffset": "3493", + "jailedUntil": "1970-01-01T00:00:00Z" + } +} +``` + +### SigningInfos + +The SigningInfos queries signing info of all validators. + +```sh +cosmos.slashing.v1beta1.Query/SigningInfos +``` + +Example: + +```sh +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/SigningInfos +``` + +Example Output: + +```json +{ + "info": [ + { + "address": "cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c", + "indexOffset": "2467", + "jailedUntil": "1970-01-01T00:00:00Z" + } + ], + "pagination": { + "total": "1" + } +} +``` + +## REST + +A user can query the `slashing` module using REST endpoints. + +### Params + +```sh +/cosmos/slashing/v1beta1/params +``` + +Example: + +```sh +curl "localhost:1317/cosmos/slashing/v1beta1/params" +``` + +Example Output: + +```json +{ + "params": { + "signed_blocks_window": "100", + "min_signed_per_window": "0.500000000000000000", + "downtime_jail_duration": "600s", + "slash_fraction_double_sign": "0.050000000000000000", + "slash_fraction_downtime": "0.010000000000000000" +} +``` + +### signing_info + +```sh +/cosmos/slashing/v1beta1/signing_infos/%s +``` + +Example: + +```sh +curl "localhost:1317/cosmos/slashing/v1beta1/signing_infos/cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c" +``` + +Example Output: + +```json +{ + "val_signing_info": { + "address": "cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c", + "start_height": "0", + "index_offset": "4184", + "jailed_until": "1970-01-01T00:00:00Z", + "tombstoned": false, + "missed_blocks_counter": "0" + } +} +``` + +### signing_infos + +```sh +/cosmos/slashing/v1beta1/signing_infos +``` + +Example: + +```sh +curl "localhost:1317/cosmos/slashing/v1beta1/signing_infos +``` + +Example Output: + +```json +{ + "info": [ + { + "address": "cosmosvalcons1nrqslkwd3pz096lh6t082frdqc84uwxn0t958c", + "start_height": "0", + "index_offset": "4169", + "jailed_until": "1970-01-01T00:00:00Z", + "tombstoned": false, + "missed_blocks_counter": "0" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/slashing/README.md b/versioned_docs/version-0.46/integrate/modules/slashing/README.md new file mode 100644 index 000000000..d1988cb96 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/slashing/README.md @@ -0,0 +1,49 @@ + + +# `x/slashing` + +## Abstract + +This section specifies the slashing module of the Cosmos SDK, which implements functionality +first outlined in the [Cosmos Whitepaper](https://cosmos.network/about/whitepaper) in June 2016. + +The slashing module enables Cosmos SDK-based blockchains to disincentivize any attributable action +by a protocol-recognized actor with value at stake by penalizing them ("slashing"). + +Penalties may include, but are not limited to: + +* Burning some amount of their stake +* Removing their ability to vote on future blocks for a period of time. + +This module will be used by the Cosmos Hub, the first hub in the Cosmos ecosystem. + +## Contents + +1. **[Concepts](01_concepts.md)** + * [States](01_concepts.md#states) + * [Tombstone Caps](01_concepts.md#tombstone-caps) + * [ASCII timelines](01_concepts.md#ascii-timelines) +2. **[State](02_state.md)** + * [Signing Info](02_state.md#signing-info) +3. **[Messages](03_messages.md)** + * [Unjail](03_messages.md#unjail) +4. **[Begin-Block](04_begin_block.md)** + * [Evidence handling](04_begin_block.md#evidence-handling) + * [Uptime tracking](04_begin_block.md#uptime-tracking) +5. **[05_hooks.md](05_hooks.md)** + * [Hooks](05_hooks.md#hooks) +6. **[Events](06_events.md)** + * [BeginBlocker](06_events.md#beginblocker) + * [Handlers](06_events.md#handlers) +7. **[Staking Tombstone](07_tombstone.md)** + * [Abstract](07_tombstone.md#abstract) +8. **[Parameters](08_params.md)** +9. **[Client](09_client.md)** + * [CLI](09_client.md#cli) + * [gRPC](09_client.md#grpc) + * [REST](09_client.md#rest) diff --git a/versioned_docs/version-0.46/integrate/modules/staking/01_state.md b/versioned_docs/version-0.46/integrate/modules/staking/01_state.md new file mode 100644 index 000000000..e0ca517c0 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/01_state.md @@ -0,0 +1,215 @@ + + +# State + +## Pool + +Pool is used for tracking bonded and not-bonded token supply of the bond denomination. + +## LastTotalPower + +LastTotalPower tracks the total amounts of bonded tokens recorded during the previous end block. +Store entries prefixed with "Last" must remain unchanged until EndBlock. + +* LastTotalPower: `0x12 -> ProtocolBuffer(math.Int)` + +## Params + +Params is a module-wide configuration structure that stores system parameters +and defines overall functioning of the staking module. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L285-L306 + +## Validator + +Validators can have one of three statuses + +* `Unbonded`: The validator is not in the active set. They cannot sign blocks and do not earn + rewards. They can receive delegations. +* `Bonded`: Once the validator receives sufficient bonded tokens they automtically join the + active set during [`EndBlock`](./05_end_block.md#validator-set-changes) and their status is updated to `Bonded`. + They are signing blocks and receiving rewards. They can receive further delegations. + They can be slashed for misbehavior. Delegators to this validator who unbond their delegation + must wait the duration of the UnbondingTime, a chain-specific param, during which time + they are still slashable for offences of the source validator if those offences were committed + during the period of time that the tokens were bonded. +* `Unbonding`: When a validator leaves the active set, either by choice or due to slashing, jailing or + tombstoning, an unbonding of all their delegations begins. All delegations must then wait the UnbondingTime + before their tokens are moved to their accounts from the `BondedPool`. + +Validators objects should be primarily stored and accessed by the +`OperatorAddr`, an SDK validator address for the operator of the validator. Two +additional indices are maintained per validator object in order to fulfill +required lookups for slashing and validator-set updates. A third special index +(`LastValidatorPower`) is also maintained which however remains constant +throughout each block, unlike the first two indices which mirror the validator +records within a block. + +* Validators: `0x21 | OperatorAddrLen (1 byte) | OperatorAddr -> ProtocolBuffer(validator)` +* ValidatorsByConsAddr: `0x22 | ConsAddrLen (1 byte) | ConsAddr -> OperatorAddr` +* ValidatorsByPower: `0x23 | BigEndian(ConsensusPower) | OperatorAddrLen (1 byte) | OperatorAddr -> OperatorAddr` +* LastValidatorsPower: `0x11 | OperatorAddrLen (1 byte) | OperatorAddr -> ProtocolBuffer(ConsensusPower)` + +`Validators` is the primary index - it ensures that each operator can have only one +associated validator, where the public key of that validator can change in the +future. Delegators can refer to the immutable operator of the validator, without +concern for the changing public key. + +`ValidatorByConsAddr` is an additional index that enables lookups for slashing. +When Tendermint reports evidence, it provides the validator address, so this +map is needed to find the operator. Note that the `ConsAddr` corresponds to the +address which can be derived from the validator's `ConsPubKey`. + +`ValidatorsByPower` is an additional index that provides a sorted list of +potential validators to quickly determine the current active set. Here +ConsensusPower is validator.Tokens/10^6 by default. Note that all validators +where `Jailed` is true are not stored within this index. + +`LastValidatorsPower` is a special index that provides a historical list of the +last-block's bonded validators. This index remains constant during a block but +is updated during the validator set update process which takes place in [`EndBlock`](./05_end_block.md). + +Each validator's state is stored in a `Validator` struct: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L78-L127 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L24-L76 + +## Delegation + +Delegations are identified by combining `DelegatorAddr` (the address of the delegator) +with the `ValidatorAddr` Delegators are indexed in the store as follows: + +* Delegation: `0x31 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorAddr -> ProtocolBuffer(delegation)` + +Stake holders may delegate coins to validators; under this circumstance their +funds are held in a `Delegation` data structure. It is owned by one +delegator, and is associated with the shares for one validator. The sender of +the transaction is the owner of the bond. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L187-L205 + +### Delegator Shares + +When one Delegates tokens to a Validator they are issued a number of delegator shares based on a +dynamic exchange rate, calculated as follows from the total number of tokens delegated to the +validator and the number of shares issued so far: + +`Shares per Token = validator.TotalShares() / validator.Tokens()` + +Only the number of shares received is stored on the DelegationEntry. When a delegator then +Undelegates, the token amount they receive is calculated from the number of shares they currently +hold and the inverse exchange rate: + +`Tokens per Share = validator.Tokens() / validatorShares()` + +These `Shares` are simply an accounting mechanism. They are not a fungible asset. The reason for +this mechanism is to simplify the accounting around slashing. Rather than iteratively slashing the +tokens of every delegation entry, instead the Validators total bonded tokens can be slashed, +effectively reducing the value of each issued delegator share. + +## UnbondingDelegation + +Shares in a `Delegation` can be unbonded, but they must for some time exist as +an `UnbondingDelegation`, where shares can be reduced if Byzantine behavior is +detected. + +`UnbondingDelegation` are indexed in the store as: + +* UnbondingDelegation: `0x32 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorAddr -> ProtocolBuffer(unbondingDelegation)` +* UnbondingDelegationsFromValidator: `0x33 | ValidatorAddrLen (1 byte) | ValidatorAddr | DelegatorAddrLen (1 byte) | DelegatorAddr -> nil` + +The first map here is used in queries, to lookup all unbonding delegations for +a given delegator, while the second map is used in slashing, to lookup all +unbonding delegations associated with a given validator that need to be +slashed. + +A UnbondingDelegation object is created every time an unbonding is initiated. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L207-L220 + +## Redelegation + +The bonded tokens worth of a `Delegation` may be instantly redelegated from a +source validator to a different validator (destination validator). However when +this occurs they must be tracked in a `Redelegation` object, whereby their +shares can be slashed if their tokens have contributed to a Byzantine fault +committed by the source validator. + +`Redelegation` are indexed in the store as: + +* Redelegations: `0x34 | DelegatorAddrLen (1 byte) | DelegatorAddr | ValidatorAddrLen (1 byte) | ValidatorSrcAddr | ValidatorDstAddr -> ProtocolBuffer(redelegation)` +* RedelegationsBySrc: `0x35 | ValidatorSrcAddrLen (1 byte) | ValidatorSrcAddr | ValidatorDstAddrLen (1 byte) | ValidatorDstAddr | DelegatorAddrLen (1 byte) | DelegatorAddr -> nil` +* RedelegationsByDst: `0x36 | ValidatorDstAddrLen (1 byte) | ValidatorDstAddr | ValidatorSrcAddrLen (1 byte) | ValidatorSrcAddr | DelegatorAddrLen (1 byte) | DelegatorAddr -> nil` + +The first map here is used for queries, to lookup all redelegations for a given +delegator. The second map is used for slashing based on the `ValidatorSrcAddr`, +while the third map is for slashing based on the `ValidatorDstAddr`. + +A redelegation object is created every time a redelegation occurs. To prevent +"redelegation hopping" redelegations may not occur under the situation that: + +* the (re)delegator already has another immature redelegation in progress + with a destination to a validator (let's call it `Validator X`) +* and, the (re)delegator is attempting to create a _new_ redelegation + where the source validator for this new redelegation is `Validator X`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L245-L283 + +## Queues + +All queues objects are sorted by timestamp. The time used within any queue is +first rounded to the nearest nanosecond then sorted. The sortable time format +used is a slight modification of the RFC3339Nano and uses the format string +`"2006-01-02T15:04:05.000000000"`. Notably this format: + +* right pads all zeros +* drops the time zone info (uses UTC) + +In all cases, the stored timestamp represents the maturation time of the queue +element. + +### UnbondingDelegationQueue + +For the purpose of tracking progress of unbonding delegations the unbonding +delegations queue is kept. + +* UnbondingDelegation: `0x41 | format(time) -> []DVPair` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L151-L161 + +### RedelegationQueue + +For the purpose of tracking progress of redelegations the redelegation queue is +kept. + +* RedelegationQueue: `0x42 | format(time) -> []DVVTriplet` + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L168-L179 + +### ValidatorQueue + +For the purpose of tracking progress of unbonding validators the validator +queue is kept. + +* ValidatorQueueTime: `0x43 | format(time) -> []sdk.ValAddress` + +The stored object as each key is an array of validator operator addresses from +which the validator object can be accessed. Typically it is expected that only +a single validator record will be associated with a given timestamp however it is possible +that multiple validators exist in the queue at the same location. + +## HistoricalInfo + +HistoricalInfo objects are stored and pruned at each block such that the staking keeper persists +the `n` most recent historical info defined by staking module parameter: `HistoricalEntries`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/staking.proto#L15-L22 + +At each BeginBlock, the staking keeper will persist the current Header and the Validators that committed +the current block in a `HistoricalInfo` object. The Validators are sorted on their address to ensure that +they are in a determisnistic order. +The oldest HistoricalEntries will be pruned to ensure that there only exist the parameter-defined number of +historical entries. diff --git a/versioned_docs/version-0.46/integrate/modules/staking/02_state_transitions.md b/versioned_docs/version-0.46/integrate/modules/staking/02_state_transitions.md new file mode 100644 index 000000000..9e9efffae --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/02_state_transitions.md @@ -0,0 +1,180 @@ + + +# State Transitions + +This document describes the state transition operations pertaining to: + +1. [Validators](./02_state_transitions.md#validators) +2. [Delegations](./02_state_transitions.md#delegations) +3. [Slashing](./02_state_transitions.md#slashing) + +## Validators + +State transitions in validators are performed on every [`EndBlock`](./05_end_block.md#validator-set-changes) +in order to check for changes in the active `ValidatorSet`. + +A validator can be `Unbonded`, `Unbonding` or `Bonded`. `Unbonded` +and `Unbonding` are collectively called `Not Bonded`. A validator can move +directly between all the states, except for from `Bonded` to `Unbonded`. + +### Not bonded to Bonded + +The following transition occurs when a validator's ranking in the `ValidatorPowerIndex` surpasses +that of the `LastValidator`. + +* set `validator.Status` to `Bonded` +* send the `validator.Tokens` from the `NotBondedTokens` to the `BondedPool` `ModuleAccount` +* delete the existing record from `ValidatorByPowerIndex` +* add a new updated record to the `ValidatorByPowerIndex` +* update the `Validator` object for this validator +* if it exists, delete any `ValidatorQueue` record for this validator + +### Bonded to Unbonding + +When a validator begins the unbonding process the following operations occur: + +* send the `validator.Tokens` from the `BondedPool` to the `NotBondedTokens` `ModuleAccount` +* set `validator.Status` to `Unbonding` +* delete the existing record from `ValidatorByPowerIndex` +* add a new updated record to the `ValidatorByPowerIndex` +* update the `Validator` object for this validator +* insert a new record into the `ValidatorQueue` for this validator + +### Unbonding to Unbonded + +A validator moves from unbonding to unbonded when the `ValidatorQueue` object +moves from bonded to unbonded + +* update the `Validator` object for this validator +* set `validator.Status` to `Unbonded` + +### Jail/Unjail + +when a validator is jailed it is effectively removed from the Tendermint set. +this process may be also be reversed. the following operations occur: + +* set `Validator.Jailed` and update object +* if jailed delete record from `ValidatorByPowerIndex` +* if unjailed add record to `ValidatorByPowerIndex` + +Jailed validators are not present in any of the following stores: + +* the power store (from consensus power to address) + +## Delegations + +### Delegate + +When a delegation occurs both the validator and the delegation objects are affected + +* determine the delegators shares based on tokens delegated and the validator's exchange rate +* remove tokens from the sending account +* add shares the delegation object or add them to a created validator object +* add new delegator shares and update the `Validator` object +* transfer the `delegation.Amount` from the delegator's account to the `BondedPool` or the `NotBondedPool` `ModuleAccount` depending if the `validator.Status` is `Bonded` or not +* delete the existing record from `ValidatorByPowerIndex` +* add an new updated record to the `ValidatorByPowerIndex` + +### Begin Unbonding + +As a part of the Undelegate and Complete Unbonding state transitions Unbond +Delegation may be called. + +* subtract the unbonded shares from delegator +* add the unbonded tokens to an `UnbondingDelegation` Entry +* update the delegation or remove the delegation if there are no more shares +* if the delegation is the operator of the validator and no more shares exist then trigger a jail validator +* update the validator with removed the delegator shares and associated coins +* if the validator state is `Bonded`, transfer the `Coins` worth of the unbonded + shares from the `BondedPool` to the `NotBondedPool` `ModuleAccount` +* remove the validator if it is unbonded and there are no more delegation shares. + +### Cancel an `UnbondingDelegation` Entry +When a `cancel unbond delegation` occurs both the `validator`, the `delegation` and an `UnbondingDelegationQueue` state will be updated. +* if cancel unbonding delegation amount equals to the `UnbondingDelegation` entry `balance`, then the `UnbondingDelegation` entry deleted from `UnbondingDelegationQueue`. +* if the `cancel unbonding delegation amount is less than the `UnbondingDelegation` entry balance, then the `UnbondingDelegation` entry will be updated with new balance in the `UnbondingDelegationQueue`. +* cancel `amount` is [Delegated](02_state_transitions.md#delegations) back to the original `validator`. + +### Complete Unbonding + +For undelegations which do not complete immediately, the following operations +occur when the unbonding delegation queue element matures: + +* remove the entry from the `UnbondingDelegation` object +* transfer the tokens from the `NotBondedPool` `ModuleAccount` to the delegator `Account` + +### Begin Redelegation + +Redelegations affect the delegation, source and destination validators. + +* perform an `unbond` delegation from the source validator to retrieve the tokens worth of the unbonded shares +* using the unbonded tokens, `Delegate` them to the destination validator +* if the `sourceValidator.Status` is `Bonded`, and the `destinationValidator` is not, + transfer the newly delegated tokens from the `BondedPool` to the `NotBondedPool` `ModuleAccount` +* otherwise, if the `sourceValidator.Status` is not `Bonded`, and the `destinationValidator` + is `Bonded`, transfer the newly delegated tokens from the `NotBondedPool` to the `BondedPool` `ModuleAccount` +* record the token amount in an new entry in the relevant `Redelegation` + +From when a redelegation begins until it completes, the delegator is in a state of "pseudo-unbonding", and can still be +slashed for infractions that occured before the redelegation began. + +### Complete Redelegation + +When a redelegations complete the following occurs: + +* remove the entry from the `Redelegation` object + +## Slashing + +### Slash Validator + +When a Validator is slashed, the following occurs: + +* The total `slashAmount` is calculated as the `slashFactor` (a chain parameter) \* `TokensFromConsensusPower`, + the total number of tokens bonded to the validator at the time of the infraction. +* Every unbonding delegation and pseudo-unbonding redelegation such that the infraction occured before the unbonding or + redelegation began from the validator are slashed by the `slashFactor` percentage of the initialBalance. +* Each amount slashed from redelegations and unbonding delegations is subtracted from the + total slash amount. +* The `remaingSlashAmount` is then slashed from the validator's tokens in the `BondedPool` or + `NonBondedPool` depending on the validator's status. This reduces the total supply of tokens. + +In the case of a slash due to any infraction that requires evidence to submitted (for example double-sign), the slash +occurs at the block where the evidence is included, not at the block where the infraction occured. +Put otherwise, validators are not slashed retroactively, only when they are caught. + +### Slash Unbonding Delegation + +When a validator is slashed, so are those unbonding delegations from the validator that began unbonding +after the time of the infraction. Every entry in every unbonding delegation from the validator +is slashed by `slashFactor`. The amount slashed is calculated from the `InitialBalance` of the +delegation and is capped to prevent a resulting negative balance. Completed (or mature) unbondings are not slashed. + +### Slash Redelegation + +When a validator is slashed, so are all redelegations from the validator that began after the +infraction. Redelegations are slashed by `slashFactor`. +Redelegations that began before the infraction are not slashed. +The amount slashed is calculated from the `InitialBalance` of the delegation and is capped to +prevent a resulting negative balance. +Mature redelegations (that have completed pseudo-unbonding) are not slashed. + +## How Shares are calculated + +At any given point in time, each validator has a number of tokens, `T`, and has a number of shares issued, `S`. +Each delegator, `i`, holds a number of shares, `S_i`. +The number of tokens is the sum of all tokens delegated to the validator, plus the rewards, minus the slashes. + +The delegator is entitled to a portion of the underlying tokens proportional to their proportion of shares. +So delegator `i` is entitled to `T * S_i / S` of the validator's tokens. + +When a delegator delegates new tokens to the validator, they receive a number of shares proportional to their contribution. +So when delegator `j` delegates `T_j` tokens, they receive `S_j = S * T_j / T` shares. +The total number of tokens is now `T + T_j`, and the total number of shares is `S + S_j`. +`j`s proportion of the shares is the same as their proportion of the total tokens contributed: `(S + S_j) / S = (T + T_j) / T`. + +A special case is the initial delegation, when `T = 0` and `S = 0`, so `T_j / T` is undefined. +For the initial delegation, delegator `j` who delegates `T_j` tokens receive `S_j = T_j` shares. +So a validator that hasn't received any rewards and has not been slashed will have `T = S`. diff --git a/versioned_docs/version-0.46/integrate/modules/staking/03_messages.md b/versioned_docs/version-0.46/integrate/modules/staking/03_messages.md new file mode 100644 index 000000000..f63c2f07f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/03_messages.md @@ -0,0 +1,175 @@ + + +# Messages + +In this section we describe the processing of the staking messages and the corresponding updates to the state. All created/modified state objects specified by each message are defined within the [state](./02_state_transitions.md) section. + +## MsgCreateValidator + +A validator is created using the `MsgCreateValidator` message. +The validator must be created with an initial delegation from the operator. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L18-L19 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L43-L65 + +This message is expected to fail if: + +* another validator with this operator address is already registered +* another validator with this pubkey is already registered +* the initial self-delegation tokens are of a denom not specified as the bonding denom +* the commission parameters are faulty, namely: + * `MaxRate` is either > 1 or < 0 + * the initial `Rate` is either negative or > `MaxRate` + * the initial `MaxChangeRate` is either negative or > `MaxRate` +* the description fields are too large + +This message creates and stores the `Validator` object at appropriate indexes. +Additionally a self-delegation is made with the initial tokens delegation +tokens `Delegation`. The validator always starts as unbonded but may be bonded +in the first end-block. + +## MsgEditValidator + +The `Description`, `CommissionRate` of a validator can be updated using the +`MsgEditValidator` message. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L21-L22 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L70-L88 + +This message is expected to fail if: + +* the initial `CommissionRate` is either negative or > `MaxRate` +* the `CommissionRate` has already been updated within the previous 24 hours +* the `CommissionRate` is > `MaxChangeRate` +* the description fields are too large + +This message stores the updated `Validator` object. + +## MsgDelegate + +Within this message the delegator provides coins, and in return receives +some amount of their validator's (newly created) delegator-shares that are +assigned to `Delegation.Shares`. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L24-L26 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L93-L104 + +This message is expected to fail if: + +* the validator does not exist +* the `Amount` `Coin` has a denomination different than one defined by `params.BondDenom` +* the exchange rate is invalid, meaning the validator has no tokens (due to slashing) but there are outstanding shares +* the amount delegated is less than the minimum allowed delegation + +If an existing `Delegation` object for provided addresses does not already +exist then it is created as part of this message otherwise the existing +`Delegation` is updated to include the newly received shares. + +The delegator receives newly minted shares at the current exchange rate. +The exchange rate is the number of existing shares in the validator divided by +the number of currently delegated tokens. + +The validator is updated in the `ValidatorByPower` index, and the delegation is +tracked in validator object in the `Validators` index. + +It is possible to delegate to a jailed validator, the only difference being it +will not be added to the power index until it is unjailed. + +![Delegation sequence](./delegation_sequence.svg) + +## MsgUndelegate + +The `MsgUndelegate` message allows delegators to undelegate their tokens from +validator. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L32-L34 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L128-L139 + +This message returns a response containing the completion time of the undelegation: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L128-L144 + +This message is expected to fail if: + +* the delegation doesn't exist +* the validator doesn't exist +* the delegation has less shares than the ones worth of `Amount` +* existing `UnbondingDelegation` has maximum entries as defined by `params.MaxEntries` +* the `Amount` has a denomination different than one defined by `params.BondDenom` + +When this message is processed the following actions occur: + +* validator's `DelegatorShares` and the delegation's `Shares` are both reduced by the message `SharesAmount` +* calculate the token worth of the shares remove that amount tokens held within the validator +* with those removed tokens, if the validator is: + * `Bonded` - add them to an entry in `UnbondingDelegation` (create `UnbondingDelegation` if it doesn't exist) with a completion time a full unbonding period from the current time. Update pool shares to reduce BondedTokens and increase NotBondedTokens by token worth of the shares. + * `Unbonding` - add them to an entry in `UnbondingDelegation` (create `UnbondingDelegation` if it doesn't exist) with the same completion time as the validator (`UnbondingMinTime`). + * `Unbonded` - then send the coins the message `DelegatorAddr` +* if there are no more `Shares` in the delegation, then the delegation object is removed from the store + * under this situation if the delegation is the validator's self-delegation then also jail the validator. + +![Unbond sequence](./unbond_sequence.svg) + +## MsgCancelUnbondingDelegation + +The `MsgCancelUnbondingDelegation` message allows delegators to cancel the `unbondingDelegation` entry and deleagate back to a previous validator. + ++++ hhttps://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L36-L40 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L146-L165 + +This message is expected to fail if: + +* the `unbondingDelegation` entry is already processed. +* the `cancel unbonding delegation` amount is greater than the `unbondingDelegation` entry balance. +* the `cancel unbonding delegation` height doesn't exists in the `unbondingDelegationQueue` of the delegator. + +When this message is processed the following actions occur: + +* if the `unbondingDelegation` Entry balance is zero + * in this condition `unbondingDelegation` entry will be removed from `unbondingDelegationQueue`. + * otherwise `unbondingDelegationQueue` will be updated with new `unbondingDelegation` entry balance and initial balance +* the validator's `DelegatorShares` and the delegation's `Shares` are both increased by the message `Amount`. + +## MsgBeginRedelegate + +The redelegation command allows delegators to instantly switch validators. Once +the unbonding period has passed, the redelegation is automatically completed in +the EndBlocker. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L28-L30 + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L109-L121 + +This message returns a response containing the completion time of the redelegation: + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/staking/v1beta1/tx.proto#L123-L126 + +This message is expected to fail if: + +* the delegation doesn't exist +* the source or destination validators don't exist +* the delegation has less shares than the ones worth of `Amount` +* the source validator has a receiving redelegation which is not matured (aka. the redelegation may be transitive) +* existing `Redelegation` has maximum entries as defined by `params.MaxEntries` +* the `Amount` `Coin` has a denomination different than one defined by `params.BondDenom` + +When this message is processed the following actions occur: + +* the source validator's `DelegatorShares` and the delegations `Shares` are both reduced by the message `SharesAmount` +* calculate the token worth of the shares remove that amount tokens held within the source validator. +* if the source validator is: + * `Bonded` - add an entry to the `Redelegation` (create `Redelegation` if it doesn't exist) with a completion time a full unbonding period from the current time. Update pool shares to reduce BondedTokens and increase NotBondedTokens by token worth of the shares (this may be effectively reversed in the next step however). + * `Unbonding` - add an entry to the `Redelegation` (create `Redelegation` if it doesn't exist) with the same completion time as the validator (`UnbondingMinTime`). + * `Unbonded` - no action required in this step +* Delegate the token worth to the destination validator, possibly moving tokens back to the bonded state. +* if there are no more `Shares` in the source delegation, then the source delegation object is removed from the store + * under this situation if the delegation is the validator's self-delegation then also jail the validator. + +![Begin redelegation sequence](./begin_redelegation_sequence.svg) diff --git a/versioned_docs/version-0.46/integrate/modules/staking/04_begin_block.md b/versioned_docs/version-0.46/integrate/modules/staking/04_begin_block.md new file mode 100644 index 000000000..3ba615b5d --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/04_begin_block.md @@ -0,0 +1,16 @@ + + +# Begin-Block + +Each abci begin block call, the historical info will get stored and pruned +according to the `HistoricalEntries` parameter. + +## Historical Info Tracking + +If the `HistoricalEntries` parameter is 0, then the `BeginBlock` performs a no-op. + +Otherwise, the latest historical info is stored under the key `historicalInfoKey|height`, while any entries older than `height - HistoricalEntries` is deleted. +In most cases, this results in a single entry being pruned per block. +However, if the parameter `HistoricalEntries` has changed to a lower value there will be multiple entries in the store that must be pruned. diff --git a/versioned_docs/version-0.46/integrate/modules/staking/05_end_block.md b/versioned_docs/version-0.46/integrate/modules/staking/05_end_block.md new file mode 100644 index 000000000..7eb014211 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/05_end_block.md @@ -0,0 +1,77 @@ + + +# End-Block + +Each abci end block call, the operations to update queues and validator set +changes are specified to execute. + +## Validator Set Changes + +The staking validator set is updated during this process by state transitions +that run at the end of every block. As a part of this process any updated +validators are also returned back to Tendermint for inclusion in the Tendermint +validator set which is responsible for validating Tendermint messages at the +consensus layer. Operations are as following: + +* the new validator set is taken as the top `params.MaxValidators` number of + validators retrieved from the `ValidatorsByPower` index +* the previous validator set is compared with the new validator set: + * missing validators begin unbonding and their `Tokens` are transferred from the + `BondedPool` to the `NotBondedPool` `ModuleAccount` + * new validators are instantly bonded and their `Tokens` are transferred from the + `NotBondedPool` to the `BondedPool` `ModuleAccount` + +In all cases, any validators leaving or entering the bonded validator set or +changing balances and staying within the bonded validator set incur an update +message reporting their new consensus power which is passed back to Tendermint. + +The `LastTotalPower` and `LastValidatorsPower` hold the state of the total power +and validator power from the end of the last block, and are used to check for +changes that have occured in `ValidatorsByPower` and the total new power, which +is calculated during `EndBlock`. + +## Queues + +Within staking, certain state-transitions are not instantaneous but take place +over a duration of time (typically the unbonding period). When these +transitions are mature certain operations must take place in order to complete +the state operation. This is achieved through the use of queues which are +checked/processed at the end of each block. + +### Unbonding Validators + +When a validator is kicked out of the bonded validator set (either through +being jailed, or not having sufficient bonded tokens) it begins the unbonding +process along with all its delegations begin unbonding (while still being +delegated to this validator). At this point the validator is said to be an +"unbonding validator", whereby it will mature to become an "unbonded validator" +after the unbonding period has passed. + +Each block the validator queue is to be checked for mature unbonding validators +(namely with a completion time <= current time and completion height <= current +block height). At this point any mature validators which do not have any +delegations remaining are deleted from state. For all other mature unbonding +validators that still have remaining delegations, the `validator.Status` is +switched from `types.Unbonding` to +`types.Unbonded`. + +### Unbonding Delegations + +Complete the unbonding of all mature `UnbondingDelegations.Entries` within the +`UnbondingDelegations` queue with the following procedure: + +* transfer the balance coins to the delegator's wallet address +* remove the mature entry from `UnbondingDelegation.Entries` +* remove the `UnbondingDelegation` object from the store if there are no + remaining entries. + +### Redelegations + +Complete the unbonding of all mature `Redelegation.Entries` within the +`Redelegations` queue with the following procedure: + +* remove the mature entry from `Redelegation.Entries` +* remove the `Redelegation` object from the store if there are no + remaining entries. diff --git a/versioned_docs/version-0.46/integrate/modules/staking/06_hooks.md b/versioned_docs/version-0.46/integrate/modules/staking/06_hooks.md new file mode 100644 index 000000000..18af77238 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/06_hooks.md @@ -0,0 +1,27 @@ + + +# Hooks + +Other modules may register operations to execute when a certain event has +occurred within staking. These events can be registered to execute either +right `Before` or `After` the staking event (as per the hook name). The +following hooks can registered with staking: + +* `AfterValidatorCreated(Context, ValAddress) error` + * called when a validator is created +* `BeforeValidatorModified(Context, ValAddress) error` + * called when a validator's state is changed +* `AfterValidatorRemoved(Context, ConsAddress, ValAddress) error` + * called when a validator is deleted +* `AfterValidatorBonded(Context, ConsAddress, ValAddress) error` + * called when a validator is bonded +* `AfterValidatorBeginUnbonding(Context, ConsAddress, ValAddress) error` + * called when a validator begins unbonding +* `BeforeDelegationCreated(Context, AccAddress, ValAddress) error` + * called when a delegation is created +* `BeforeDelegationSharesModified(Context, AccAddress, ValAddress) error` + * called when a delegation's shares are modified +* `BeforeDelegationRemoved(Context, AccAddress, ValAddress) error` + * called when a delegation is removed diff --git a/versioned_docs/version-0.46/integrate/modules/staking/07_events.md b/versioned_docs/version-0.46/integrate/modules/staking/07_events.md new file mode 100644 index 000000000..eeeb84c4b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/07_events.md @@ -0,0 +1,90 @@ + + +# Events + +The staking module emits the following events: + +## EndBlocker + +| Type | Attribute Key | Attribute Value | +| --------------------- | --------------------- | ------------------------- | +| complete_unbonding | amount | {totalUnbondingAmount} | +| complete_unbonding | validator | {validatorAddress} | +| complete_unbonding | delegator | {delegatorAddress} | +| complete_redelegation | amount | {totalRedelegationAmount} | +| complete_redelegation | source_validator | {srcValidatorAddress} | +| complete_redelegation | destination_validator | {dstValidatorAddress} | +| complete_redelegation | delegator | {delegatorAddress} | + +## Msg's + +### MsgCreateValidator + +| Type | Attribute Key | Attribute Value | +| ---------------- | ------------- | ------------------ | +| create_validator | validator | {validatorAddress} | +| create_validator | amount | {delegationAmount} | +| message | module | staking | +| message | action | create_validator | +| message | sender | {senderAddress} | + +### MsgEditValidator + +| Type | Attribute Key | Attribute Value | +| -------------- | ------------------- | ------------------- | +| edit_validator | commission_rate | {commissionRate} | +| edit_validator | min_self_delegation | {minSelfDelegation} | +| message | module | staking | +| message | action | edit_validator | +| message | sender | {senderAddress} | + +### MsgDelegate + +| Type | Attribute Key | Attribute Value | +| -------- | ------------- | ------------------ | +| delegate | validator | {validatorAddress} | +| delegate | amount | {delegationAmount} | +| message | module | staking | +| message | action | delegate | +| message | sender | {senderAddress} | + +### MsgUndelegate + +| Type | Attribute Key | Attribute Value | +| ------- | ------------------- | ------------------ | +| unbond | validator | {validatorAddress} | +| unbond | amount | {unbondAmount} | +| unbond | completion_time [0] | {completionTime} | +| message | module | staking | +| message | action | begin_unbonding | +| message | sender | {senderAddress} | + +* [0] Time is formatted in the RFC3339 standard + +### MsgCancelUnbondingDelegation + +| Type | Attribute Key | Attribute Value | +| ----------------------------- | ------------------ | ------------------------------------| +| cancel_unbonding_delegation | validator | {validatorAddress} | +| cancel_unbonding_delegation | delegator | {delegatorAddress} | +| cancel_unbonding_delegation | amount | {cancelUnbondingDelegationAmount} | +| cancel_unbonding_delegation | creation_height | {unbondingCreationHeight} | +| message | module | staking | +| message | action | cancel_unbond | +| message | sender | {senderAddress} | + +### MsgBeginRedelegate + +| Type | Attribute Key | Attribute Value | +| ---------- | --------------------- | --------------------- | +| redelegate | source_validator | {srcValidatorAddress} | +| redelegate | destination_validator | {dstValidatorAddress} | +| redelegate | amount | {unbondAmount} | +| redelegate | completion_time [0] | {completionTime} | +| message | module | staking | +| message | action | begin_redelegate | +| message | sender | {senderAddress} | + +* [0] Time is formatted in the RFC3339 standard diff --git a/versioned_docs/version-0.46/integrate/modules/staking/08_params.md b/versioned_docs/version-0.46/integrate/modules/staking/08_params.md new file mode 100644 index 000000000..e4a56ab3f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/08_params.md @@ -0,0 +1,16 @@ + + +# Parameters + +The staking module contains the following parameters: + +| Key | Type | Example | +|-------------------|------------------|------------------------| +| UnbondingTime | string (time ns) | "259200000000000" | +| MaxValidators | uint16 | 100 | +| KeyMaxEntries | uint16 | 7 | +| HistoricalEntries | uint16 | 3 | +| BondDenom | string | "stake" | +| MinCommissionRate | string | "0.000000000000000000" | diff --git a/versioned_docs/version-0.46/integrate/modules/staking/09_client.md b/versioned_docs/version-0.46/integrate/modules/staking/09_client.md new file mode 100644 index 000000000..0c3383d01 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/09_client.md @@ -0,0 +1,2101 @@ + + +# Client + +## CLI + +A user can query and interact with the `staking` module using the CLI. + +### Query + +The `query` commands allows users to query `staking` state. + +```bash +simd query staking --help +``` + +#### delegation + +The `delegation` command allows users to query delegations for an individual delegator on an individual validator. + +Usage: + +```bash +simd query staking delegation [delegator-addr] [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +balance: + amount: "10000000000" + denom: stake +delegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + shares: "10000000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +#### delegations + +The `delegations` command allows users to query delegations for an individual delegator on all validators. + +Usage: + +```bash +simd query staking delegations [delegator-addr] [flags] +``` + +Example: + +```bash +simd query staking delegations cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +``` + +Example Output: + +```bash +delegation_responses: +- balance: + amount: "10000000000" + denom: stake + delegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + shares: "10000000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +- balance: + amount: "10000000000" + denom: stake + delegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + shares: "10000000000.000000000000000000" + validator_address: cosmosvaloper1x20lytyf6zkcrv5edpkfkn8sz578qg5sqfyqnp +pagination: + next_key: null + total: "0" +``` + +#### delegations-to + +The `delegations-to` command allows users to query delegations on an individual validator. + +Usage: + +```bash +simd query staking delegations-to [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking delegations-to cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +- balance: + amount: "504000000" + denom: stake + delegation: + delegator_address: cosmos1q2qwwynhv8kh3lu5fkeex4awau9x8fwt45f5cp + shares: "504000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +- balance: + amount: "78125000000" + denom: uixo + delegation: + delegator_address: cosmos1qvppl3479hw4clahe0kwdlfvf8uvjtcd99m2ca + shares: "78125000000.000000000000000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +pagination: + next_key: null + total: "0" +``` + +#### historical-info + +The `historical-info` command allows users to query historical information at given height. + +Usage: + +```bash +simd query staking historical-info [height] [flags] +``` + +Example: + +```bash +simd query staking historical-info 10 +``` + +Example Output: + +```bash +header: + app_hash: Lbx8cXpI868wz8sgp4qPYVrlaKjevR5WP/IjUxwp3oo= + chain_id: testnet + consensus_hash: BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8= + data_hash: 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= + evidence_hash: 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= + height: "10" + last_block_id: + hash: RFbkpu6pWfSThXxKKl6EZVDnBSm16+U0l0xVjTX08Fk= + part_set_header: + hash: vpIvXD4rxD5GM4MXGz0Sad9I7//iVYLzZsEU4BVgWIU= + total: 1 + last_commit_hash: Ne4uXyx4QtNp4Zx89kf9UK7oG9QVbdB6e7ZwZkhy8K0= + last_results_hash: 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= + next_validators_hash: nGBgKeWBjoxeKFti00CxHsnULORgKY4LiuQwBuUrhCs= + proposer_address: mMEP2c2IRPLr99LedSRtBg9eONM= + time: "2021-10-01T06:00:49.785790894Z" + validators_hash: nGBgKeWBjoxeKFti00CxHsnULORgKY4LiuQwBuUrhCs= + version: + app: "0" + block: "11" +valset: +- commission: + commission_rates: + max_change_rate: "0.010000000000000000" + max_rate: "0.200000000000000000" + rate: "0.100000000000000000" + update_time: "2021-10-01T05:52:50.380144238Z" + consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: Auxs3865HpB/EfssYOzfqNhEJjzys2Fo6jD5B8tPgC8= + delegator_shares: "10000000.000000000000000000" + description: + details: "" + identity: "" + moniker: myvalidator + security_contact: "" + website: "" + jailed: false + min_self_delegation: "1" + operator_address: cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc + status: BOND_STATUS_BONDED + tokens: "10000000" + unbonding_height: "0" + unbonding_time: "1970-01-01T00:00:00Z" +``` + +#### params + +The `params` command allows users to query values set as staking parameters. + +Usage: + +```bash +simd query staking params [flags] +``` + +Example: + +```bash +simd query staking params +``` + +Example Output: + +```bash +bond_denom: stake +historical_entries: 10000 +max_entries: 7 +max_validators: 50 +unbonding_time: 1814400s +``` + +#### pool + +The `pool` command allows users to query values for amounts stored in the staking pool. + +Usage: + +```bash +simd q staking pool [flags] +``` + +Example: + +```bash +simd q staking pool +``` + +Example Output: + +```bash +bonded_tokens: "10000000" +not_bonded_tokens: "0" +``` + +#### redelegation + +The `redelegation` command allows users to query a redelegation record based on delegator and a source and destination validator address. + +Usage: + +```bash +simd query staking redelegation [delegator-addr] [src-validator-addr] [dst-validator-addr] [flags] +``` + +Example: + +```bash +simd query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +pagination: null +redelegation_responses: +- entries: + - balance: "50000000" + redelegation_entry: + completion_time: "2021-10-24T20:33:21.960084845Z" + creation_height: 2.382847e+06 + initial_balance: "50000000" + shares_dst: "50000000.000000000000000000" + - balance: "5000000000" + redelegation_entry: + completion_time: "2021-10-25T21:33:54.446846862Z" + creation_height: 2.397271e+06 + initial_balance: "5000000000" + shares_dst: "5000000000.000000000000000000" + redelegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: null + validator_dst_address: cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm + validator_src_address: cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm +``` + +#### redelegations + +The `redelegations` command allows users to query all redelegation records for an individual delegator. + +Usage: + +```bash +simd query staking redelegations [delegator-addr] [flags] +``` + +Example: + +```bash +simd query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +redelegation_responses: +- entries: + - balance: "50000000" + redelegation_entry: + completion_time: "2021-10-24T20:33:21.960084845Z" + creation_height: 2.382847e+06 + initial_balance: "50000000" + shares_dst: "50000000.000000000000000000" + - balance: "5000000000" + redelegation_entry: + completion_time: "2021-10-25T21:33:54.446846862Z" + creation_height: 2.397271e+06 + initial_balance: "5000000000" + shares_dst: "5000000000.000000000000000000" + redelegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: null + validator_dst_address: cosmosvaloper1uccl5ugxrm7vqlzwqr04pjd320d2fz0z3hc6vm + validator_src_address: cosmosvaloper1zppjyal5emta5cquje8ndkpz0rs046m7zqxrpp +- entries: + - balance: "562770000000" + redelegation_entry: + completion_time: "2021-10-25T21:42:07.336911677Z" + creation_height: 2.39735e+06 + initial_balance: "562770000000" + shares_dst: "562770000000.000000000000000000" + redelegation: + delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: null + validator_dst_address: cosmosvaloper1uccl5ugxrm7vqlzwqr04pjd320d2fz0z3hc6vm + validator_src_address: cosmosvaloper1zppjyal5emta5cquje8ndkpz0rs046m7zqxrpp +``` + +#### redelegations-from + +The `redelegations-from` command allows users to query delegations that are redelegating _from_ a validator. + +Usage: + +```bash +simd query staking redelegations-from [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking redelegations-from cosmosvaloper1y4rzzrgl66eyhzt6gse2k7ej3zgwmngeleucjy +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +redelegation_responses: +- entries: + - balance: "50000000" + redelegation_entry: + completion_time: "2021-10-24T20:33:21.960084845Z" + creation_height: 2.382847e+06 + initial_balance: "50000000" + shares_dst: "50000000.000000000000000000" + - balance: "5000000000" + redelegation_entry: + completion_time: "2021-10-25T21:33:54.446846862Z" + creation_height: 2.397271e+06 + initial_balance: "5000000000" + shares_dst: "5000000000.000000000000000000" + redelegation: + delegator_address: cosmos1pm6e78p4pgn0da365plzl4t56pxy8hwtqp2mph + entries: null + validator_dst_address: cosmosvaloper1uccl5ugxrm7vqlzwqr04pjd320d2fz0z3hc6vm + validator_src_address: cosmosvaloper1y4rzzrgl66eyhzt6gse2k7ej3zgwmngeleucjy +- entries: + - balance: "221000000" + redelegation_entry: + completion_time: "2021-10-05T21:05:45.669420544Z" + creation_height: 2.120693e+06 + initial_balance: "221000000" + shares_dst: "221000000.000000000000000000" + redelegation: + delegator_address: cosmos1zqv8qxy2zgn4c58fz8jt8jmhs3d0attcussrf6 + entries: null + validator_dst_address: cosmosvaloper10mseqwnwtjaqfrwwp2nyrruwmjp6u5jhah4c3y + validator_src_address: cosmosvaloper1y4rzzrgl66eyhzt6gse2k7ej3zgwmngeleucjy +``` + +#### unbonding-delegation + +The `unbonding-delegation` command allows users to query unbonding delegations for an individual delegator on an individual validator. + +Usage: + +```bash +simd query staking unbonding-delegation [delegator-addr] [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking unbonding-delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +entries: +- balance: "52000000" + completion_time: "2021-11-02T11:35:55.391594709Z" + creation_height: "55078" + initial_balance: "52000000" +validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +#### unbonding-delegations + +The `unbonding-delegations` command allows users to query all unbonding-delegations records for one delegator. + +Usage: + +```bash +simd query staking unbonding-delegations [delegator-addr] [flags] +``` + +Example: + +```bash +simd query staking unbonding-delegations cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +unbonding_responses: +- delegator_address: cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p + entries: + - balance: "52000000" + completion_time: "2021-11-02T11:35:55.391594709Z" + creation_height: "55078" + initial_balance: "52000000" + validator_address: cosmosvaloper1t8ehvswxjfn3ejzkjtntcyrqwvmvuknzmvtaaa + +``` + +#### unbonding-delegations-from + +The `unbonding-delegations-from` command allows users to query delegations that are unbonding _from_ a validator. + +Usage: + +```bash +simd query staking unbonding-delegations-from [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking unbonding-delegations-from cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +pagination: + next_key: null + total: "0" +unbonding_responses: +- delegator_address: cosmos1qqq9txnw4c77sdvzx0tkedsafl5s3vk7hn53fn + entries: + - balance: "150000000" + completion_time: "2021-11-01T21:41:13.098141574Z" + creation_height: "46823" + initial_balance: "150000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +- delegator_address: cosmos1peteje73eklqau66mr7h7rmewmt2vt99y24f5z + entries: + - balance: "24000000" + completion_time: "2021-10-31T02:57:18.192280361Z" + creation_height: "21516" + initial_balance: "24000000" + validator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +#### validator + +The `validator` command allows users to query details about an individual validator. + +Usage: + +```bash +simd query staking validator [validator-addr] [flags] +``` + +Example: + +```bash +simd query staking validator cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +``` + +Example Output: + +```bash +commission: + commission_rates: + max_change_rate: "0.020000000000000000" + max_rate: "0.200000000000000000" + rate: "0.050000000000000000" + update_time: "2021-10-01T19:24:52.663191049Z" +consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: sIiexdJdYWn27+7iUHQJDnkp63gq/rzUq1Y+fxoGjXc= +delegator_shares: "32948270000.000000000000000000" +description: + details: Witval is the validator arm from Vitwit. Vitwit is into software consulting + and services business since 2015. We are working closely with Cosmos ecosystem + since 2018. We are also building tools for the ecosystem, Aneka is our explorer + for the cosmos ecosystem. + identity: 51468B615127273A + moniker: Witval + security_contact: "" + website: "" +jailed: false +min_self_delegation: "1" +operator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj +status: BOND_STATUS_BONDED +tokens: "32948270000" +unbonding_height: "0" +unbonding_time: "1970-01-01T00:00:00Z" +``` + +#### validators + +The `validators` command allows users to query details about all validators on a network. + +Usage: + +```bash +simd query staking validators [flags] +``` + +Example: + +```bash +simd query staking validators +``` + +Example Output: + +```bash +pagination: + next_key: FPTi7TKAjN63QqZh+BaXn6gBmD5/ + total: "0" +validators: +commission: + commission_rates: + max_change_rate: "0.020000000000000000" + max_rate: "0.200000000000000000" + rate: "0.050000000000000000" + update_time: "2021-10-01T19:24:52.663191049Z" +consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: sIiexdJdYWn27+7iUHQJDnkp63gq/rzUq1Y+fxoGjXc= +delegator_shares: "32948270000.000000000000000000" +description: + details: Witval is the validator arm from Vitwit. Vitwit is into software consulting + and services business since 2015. We are working closely with Cosmos ecosystem + since 2018. We are also building tools for the ecosystem, Aneka is our explorer + for the cosmos ecosystem. + identity: 51468B615127273A + moniker: Witval + security_contact: "" + website: "" + jailed: false + min_self_delegation: "1" + operator_address: cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj + status: BOND_STATUS_BONDED + tokens: "32948270000" + unbonding_height: "0" + unbonding_time: "1970-01-01T00:00:00Z" +- commission: + commission_rates: + max_change_rate: "0.100000000000000000" + max_rate: "0.200000000000000000" + rate: "0.050000000000000000" + update_time: "2021-10-04T18:02:21.446645619Z" + consensus_pubkey: + '@type': /cosmos.crypto.ed25519.PubKey + key: GDNpuKDmCg9GnhnsiU4fCWktuGUemjNfvpCZiqoRIYA= + delegator_shares: "559343421.000000000000000000" + description: + details: Noderunners is a professional validator in POS networks. We have a huge + node running experience, reliable soft and hardware. Our commissions are always + low, our support to delegators is always full. Stake with us and start receiving + your Cosmos rewards now! + identity: 812E82D12FEA3493 + moniker: Noderunners + security_contact: info@noderunners.biz + website: http://noderunners.biz + jailed: false + min_self_delegation: "1" + operator_address: cosmosvaloper1q5ku90atkhktze83j9xjaks2p7uruag5zp6wt7 + status: BOND_STATUS_BONDED + tokens: "559343421" + unbonding_height: "0" + unbonding_time: "1970-01-01T00:00:00Z" +``` + +### Transactions + +The `tx` commands allows users to interact with the `staking` module. + +```bash +simd tx staking --help +``` + +#### create-validator + +The command `create-validator` allows users to create new validator initialized with a self-delegation to it. + +Usage: + +```bash +simd tx staking create-validator [flags] +``` + +Example: + +```bash +simd tx staking create-validator \ + --amount=1000000stake \ + --pubkey=$(simd tendermint show-validator) \ + --moniker="my-moniker" \ + --website="https://myweb.site" \ + --details="description of your validator" \ + --chain-id="name_of_chain_id" \ + --commission-rate="0.10" \ + --commission-max-rate="0.20" \ + --commission-max-change-rate="0.01" \ + --min-self-delegation="1" \ + --gas="auto" \ + --gas-adjustment="1.2" \ + --gas-prices="0.025stake" \ + --from=mykey +``` + +#### delegate + +The command `delegate` allows users to delegate liquid tokens to a validator. + +Usage: + +```bash +simd tx staking delegate [validator-addr] [amount] [flags] +``` + +Example: + +```bash +simd tx staking delegate cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 1000stake --from mykey +``` + +#### edit-validator + +The command `edit-validator` allows users to edit an existing validator account. + +Usage: + +```bash +simd tx staking edit-validator [flags] +``` + +Example: + +```bash +simd tx staking edit-validator --moniker "new_moniker_name" --website "new_webiste_url" --from mykey +``` + +#### redelegate + +The command `redelegate` allows users to redelegate illiquid tokens from one validator to another. + +Usage: + +```bash +simd tx staking redelegate [src-validator-addr] [dst-validator-addr] [amount] [flags] +``` + +Example: + +```bash +simd tx staking redelegate cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm 100stake --from mykey +``` + +#### unbond + +The command `unbond` allows users to unbond shares from a validator. + +Usage: + +```bash +simd tx staking unbond [validator-addr] [amount] [flags] +``` + +Example: + +```bash +simd tx staking unbond cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake --from mykey +``` +#### cancel unbond +The command `cancel-unbond` allow users to cancel the unbonding delegation entry and delegate back to the original validator. + +Usage: +```bash +simd tx staking cancel-unbond [validator-addr] [amount] [creation-height] +``` + +Example: +```bash +simd tx staking cancel-unbond cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake 123123 --from mykey +``` + + +## gRPC + +A user can query the `staking` module using gRPC endpoints. + +### Validators + +The `Validators` endpoint queries all validators that match the given status. + +```bash +cosmos.staking.v1beta1.Query/Validators +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.staking.v1beta1.Query/Validators +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operatorAddress": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "consensusPubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"Auxs3865HpB/EfssYOzfqNhEJjzys2Fo6jD5B8tPgC8="}, + "status": "BOND_STATUS_BONDED", + "tokens": "10000000", + "delegatorShares": "10000000000000000000000000", + "description": { + "moniker": "myvalidator" + }, + "unbondingTime": "1970-01-01T00:00:00Z", + "commission": { + "commissionRates": { + "rate": "100000000000000000", + "maxRate": "200000000000000000", + "maxChangeRate": "10000000000000000" + }, + "updateTime": "2021-10-01T05:52:50.380144238Z" + }, + "minSelfDelegation": "1" + } + ], + "pagination": { + "total": "1" + } +} +``` + +### Validator + +The `Validator` endpoint queries validator information for given validator address. + +```bash +cosmos.staking.v1beta1.Query/Validator +``` + +Example: + +```bash +grpcurl -plaintext -d '{"validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/Validator +``` + +Example Output: + +```bash +{ + "validator": { + "operatorAddress": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "consensusPubkey": {"@type":"/cosmos.crypto.ed25519.PubKey","key":"Auxs3865HpB/EfssYOzfqNhEJjzys2Fo6jD5B8tPgC8="}, + "status": "BOND_STATUS_BONDED", + "tokens": "10000000", + "delegatorShares": "10000000000000000000000000", + "description": { + "moniker": "myvalidator" + }, + "unbondingTime": "1970-01-01T00:00:00Z", + "commission": { + "commissionRates": { + "rate": "100000000000000000", + "maxRate": "200000000000000000", + "maxChangeRate": "10000000000000000" + }, + "updateTime": "2021-10-01T05:52:50.380144238Z" + }, + "minSelfDelegation": "1" + } +} +``` + +### ValidatorDelegations + +The `ValidatorDelegations` endpoint queries delegate information for given validator. + +```bash +cosmos.staking.v1beta1.Query/ValidatorDelegations +``` + +Example: + +```bash +grpcurl -plaintext -d '{"validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/ValidatorDelegations +``` + +Example Output: + +```bash +{ + "delegationResponses": [ + { + "delegation": { + "delegatorAddress": "cosmos1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgy3ua5t", + "validatorAddress": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "shares": "10000000000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "10000000" + } + } + ], + "pagination": { + "total": "1" + } +} +``` + +### ValidatorUnbondingDelegations + +The `ValidatorUnbondingDelegations` endpoint queries delegate information for given validator. + +```bash +cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations +``` + +Example: + +```bash +grpcurl -plaintext -d '{"validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1z3pzzw84d6xn00pw9dy3yapqypfde7vg6965fy", + "validator_address": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "entries": [ + { + "creation_height": "25325", + "completion_time": "2021-10-31T09:24:36.797320636Z", + "initial_balance": "20000000", + "balance": "20000000" + } + ] + }, + { + "delegator_address": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "entries": [ + { + "creation_height": "13100", + "completion_time": "2021-10-30T12:53:02.272266791Z", + "initial_balance": "1000000", + "balance": "1000000" + } + ] + }, + ], + "pagination": { + "next_key": null, + "total": "8" + } +} +``` + +### Delegation + +The `Delegation` endpoint queries delegate information for given validator delegator pair. + +```bash +cosmos.staking.v1beta1.Query/Delegation +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/Delegation +``` + +Example Output: + +```bash +{ + "delegation_response": + { + "delegation": + { + "delegator_address":"cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "shares":"25083119936.000000000000000000" + }, + "balance": + { + "denom":"stake", + "amount":"25083119936" + } + } +} +``` + +### UnbondingDelegation + +The `UnbondingDelegation` endpoint queries unbonding information for given validator delegator. + +```bash +cosmos.staking.v1beta1.Query/UnbondingDelegation +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", validator_addr":"cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/UnbondingDelegation +``` + +Example Output: + +```bash +{ + "unbond": { + "delegator_address": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address": "cosmosvaloper1rne8lgs98p0jqe82sgt0qr4rdn4hgvmgp9ggcc", + "entries": [ + { + "creation_height": "136984", + "completion_time": "2021-11-08T05:38:47.505593891Z", + "initial_balance": "400000000", + "balance": "400000000" + }, + { + "creation_height": "137005", + "completion_time": "2021-11-08T05:40:53.526196312Z", + "initial_balance": "385000000", + "balance": "385000000" + } + ] + } +} +``` + +### DelegatorDelegations + +The `DelegatorDelegations` endpoint queries all delegations of a given delegator address. + +```bash +cosmos.staking.v1beta1.Query/DelegatorDelegations +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorDelegations +``` + +Example Output: + +```bash +{ + "delegation_responses": [ + {"delegation":{"delegator_address":"cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77","validator_address":"cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8","shares":"25083339023.000000000000000000"},"balance":{"denom":"stake","amount":"25083339023"}} + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +### DelegatorUnbondingDelegations + +The `DelegatorUnbondingDelegations` endpoint queries all unbonding delegations of a given delegator address. + +```bash +cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1y8nyfvmqh50p6ldpzljk3yrglppdv3t8phju77", + "validator_address": "cosmosvaloper1sjllsnramtg3ewxqwwrwjxfgc4n4ef9uxyejze", + "entries": [ + { + "creation_height": "136984", + "completion_time": "2021-11-08T05:38:47.505593891Z", + "initial_balance": "400000000", + "balance": "400000000" + }, + { + "creation_height": "137005", + "completion_time": "2021-11-08T05:40:53.526196312Z", + "initial_balance": "385000000", + "balance": "385000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +### Redelegations + +The `Redelegations` endpoint queries redelegations of given address. + +```bash +cosmos.staking.v1beta1.Query/Redelegations +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1ld5p7hn43yuh8ht28gm9pfjgj2fctujp2tgwvf", "src_validator_addr" : "cosmosvaloper1j7euyj85fv2jugejrktj540emh9353ltgppc3g", "dst_validator_addr" : "cosmosvaloper1yy3tnegzmkdcm7czzcy3flw5z0zyr9vkkxrfse"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/Redelegations +``` + +Example Output: + +```bash +{ + "redelegation_responses": [ + { + "redelegation": { + "delegator_address": "cosmos1ld5p7hn43yuh8ht28gm9pfjgj2fctujp2tgwvf", + "validator_src_address": "cosmosvaloper1j7euyj85fv2jugejrktj540emh9353ltgppc3g", + "validator_dst_address": "cosmosvaloper1yy3tnegzmkdcm7czzcy3flw5z0zyr9vkkxrfse", + "entries": null + }, + "entries": [ + { + "redelegation_entry": { + "creation_height": 135932, + "completion_time": "2021-11-08T03:52:55.299147901Z", + "initial_balance": "2900000", + "shares_dst": "2900000.000000000000000000" + }, + "balance": "2900000" + } + ] + } + ], + "pagination": null +} +``` + +### DelegatorValidators + +The `DelegatorValidators` endpoint queries all validators information for given delegator. + +```bash +cosmos.staking.v1beta1.Query/DelegatorValidators +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1ld5p7hn43yuh8ht28gm9pfjgj2fctujp2tgwvf"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorValidators +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operator_address": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "UPwHWxH1zHJWGOa/m6JB3f5YjHMvPQPkVbDqqi+U7Uw=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "347260647559", + "delegator_shares": "347260647559.000000000000000000", + "description": { + "moniker": "BouBouNode", + "identity": "", + "website": "https://boubounode.com", + "security_contact": "", + "details": "AI-based Validator. #1 AI Validator on Game of Stakes. Fairly priced. Don't trust (humans), verify. Made with BouBou love." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.061000000000000000", + "max_rate": "0.300000000000000000", + "max_change_rate": "0.150000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +### DelegatorValidator + +The `DelegatorValidator` endpoint queries validator information for given delegator validator + +```bash +cosmos.staking.v1beta1.Query/DelegatorValidator +``` + +Example: + +```bash +grpcurl -plaintext \ +-d '{"delegator_addr": "cosmos1eh5mwu044gd5ntkkc2xgfg8247mgc56f3n8rr7", "validator_addr": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8"}' \ +localhost:9090 cosmos.staking.v1beta1.Query/DelegatorValidator +``` + +Example Output: + +```bash +{ + "validator": { + "operator_address": "cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fww3vc8", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "UPwHWxH1zHJWGOa/m6JB3f5YjHMvPQPkVbDqqi+U7Uw=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "347262754841", + "delegator_shares": "347262754841.000000000000000000", + "description": { + "moniker": "BouBouNode", + "identity": "", + "website": "https://boubounode.com", + "security_contact": "", + "details": "AI-based Validator. #1 AI Validator on Game of Stakes. Fairly priced. Don't trust (humans), verify. Made with BouBou love." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.061000000000000000", + "max_rate": "0.300000000000000000", + "max_change_rate": "0.150000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + } +} +``` + +### HistoricalInfo + +```bash +cosmos.staking.v1beta1.Query/HistoricalInfo +``` + +Example: + +```bash +grpcurl -plaintext -d '{"height" : 1}' localhost:9090 cosmos.staking.v1beta1.Query/HistoricalInfo +``` + +Example Output: + +```bash +{ + "hist": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "simd-1", + "height": "140142", + "time": "2021-10-11T10:56:29.720079569Z", + "last_block_id": { + "hash": "9gri/4LLJUBFqioQ3NzZIP9/7YHR9QqaM6B2aJNQA7o=", + "part_set_header": { + "total": 1, + "hash": "Hk1+C864uQkl9+I6Zn7IurBZBKUevqlVtU7VqaZl1tc=" + } + }, + "last_commit_hash": "VxrcS27GtvGruS3I9+AlpT7udxIT1F0OrRklrVFSSKc=", + "data_hash": "80BjOrqNYUOkTnmgWyz9AQ8n7SoEmPVi4QmAe8RbQBY=", + "validators_hash": "95W49n2hw8RWpr1GPTAO5MSPi6w6Wjr3JjjS7AjpBho=", + "next_validators_hash": "95W49n2hw8RWpr1GPTAO5MSPi6w6Wjr3JjjS7AjpBho=", + "consensus_hash": "BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8=", + "app_hash": "ZZaxnSY3E6Ex5Bvkm+RigYCK82g8SSUL53NymPITeOE=", + "last_results_hash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "evidence_hash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposer_address": "aH6dO428B+ItuoqPq70efFHrSMY=" + }, + "valset": [ + { + "operator_address": "cosmosvaloper196ax4vc0lwpxndu9dyhvca7jhxp70rmcqcnylw", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "/O7BtNW0pafwfvomgR4ZnfldwPXiFfJs9mHg3gwfv5Q=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "1426045203613", + "delegator_shares": "1426045203613.000000000000000000", + "description": { + "moniker": "SG-1", + "identity": "48608633F99D1B60", + "website": "https://sg-1.online", + "security_contact": "", + "details": "SG-1 - your favorite validator on Witval. We offer 100% Soft Slash protection." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.037500000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.030000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + } + ] + } +} + +``` + +### Pool + +The `Pool` endpoint queries the pool information. + +```bash +cosmos.staking.v1beta1.Query/Pool +``` + +Example: + +```bash +grpcurl -plaintext -d localhost:9090 cosmos.staking.v1beta1.Query/Pool +``` + +Example Output: + +```bash +{ + "pool": { + "not_bonded_tokens": "369054400189", + "bonded_tokens": "15657192425623" + } +} +``` + +### Params + +The `Params` endpoint queries the pool information. + +```bash +cosmos.staking.v1beta1.Query/Params +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.staking.v1beta1.Query/Params +``` + +Example Output: + +```bash +{ + "params": { + "unbondingTime": "1814400s", + "maxValidators": 100, + "maxEntries": 7, + "historicalEntries": 10000, + "bondDenom": "stake" + } +} +``` + +## REST + +A user can query the `staking` module using REST endpoints. + +### DelegatorDelegations + +The `DelegtaorDelegations` REST endpoint queries all delegations of a given delegator address. + +```bash +/cosmos/staking/v1beta1/delegations/{delegatorAddr} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/delegations/cosmos1vcs68xf2tnqes5tg0khr0vyevm40ff6zdxatp5" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "delegation_responses": [ + { + "delegation": { + "delegator_address": "cosmos1vcs68xf2tnqes5tg0khr0vyevm40ff6zdxatp5", + "validator_address": "cosmosvaloper1quqxfrxkycr0uzt4yk0d57tcq3zk7srm7sm6r8", + "shares": "256250000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "256250000" + } + }, + { + "delegation": { + "delegator_address": "cosmos1vcs68xf2tnqes5tg0khr0vyevm40ff6zdxatp5", + "validator_address": "cosmosvaloper194v8uwee2fvs2s8fa5k7j03ktwc87h5ym39jfv", + "shares": "255150000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "255150000" + } + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` + +### Redelegations + +The `Redelegations` REST endpoint queries redelegations of given address. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/redelegations +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1thfntksw0d35n2tkr0k8v54fr8wxtxwxl2c56e/redelegations?srcValidatorAddr=cosmosvaloper1lzhlnpahvznwfv4jmay2tgaha5kmz5qx4cuznf&dstValidatorAddr=cosmosvaloper1vq8tw77kp8lvxq9u3c8eeln9zymn68rng8pgt4" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "redelegation_responses": [ + { + "redelegation": { + "delegator_address": "cosmos1thfntksw0d35n2tkr0k8v54fr8wxtxwxl2c56e", + "validator_src_address": "cosmosvaloper1lzhlnpahvznwfv4jmay2tgaha5kmz5qx4cuznf", + "validator_dst_address": "cosmosvaloper1vq8tw77kp8lvxq9u3c8eeln9zymn68rng8pgt4", + "entries": null + }, + "entries": [ + { + "redelegation_entry": { + "creation_height": 151523, + "completion_time": "2021-11-09T06:03:25.640682116Z", + "initial_balance": "200000000", + "shares_dst": "200000000.000000000000000000" + }, + "balance": "200000000" + } + ] + } + ], + "pagination": null +} +``` + +### DelegatorUnbondingDelegations + +The `DelegatorUnbondingDelegations` REST endpoint queries all unbonding delegations of a given delegator address. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/unbonding_delegations +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1nxv42u3lv642q0fuzu2qmrku27zgut3n3z7lll/unbonding_delegations" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1nxv42u3lv642q0fuzu2qmrku27zgut3n3z7lll", + "validator_address": "cosmosvaloper1e7mvqlz50ch6gw4yjfemsc069wfre4qwmw53kq", + "entries": [ + { + "creation_height": "2442278", + "completion_time": "2021-10-12T10:59:03.797335857Z", + "initial_balance": "50000000000", + "balance": "50000000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +### DelegatorValidators + +The `DelegatorValidators` REST endpoint queries all validators information for given delegator address. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1xwazl8ftks4gn00y5x3c47auquc62ssune9ppv/validators" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operator_address": "cosmosvaloper1xwazl8ftks4gn00y5x3c47auquc62ssuvynw64", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "5v4n3px3PkfNnKflSgepDnsMQR1hiNXnqOC11Y72/PQ=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "21592843799", + "delegator_shares": "21592843799.000000000000000000", + "description": { + "moniker": "jabbey", + "identity": "", + "website": "https://twitter.com/JoeAbbey", + "security_contact": "", + "details": "just another dad in the cosmos" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.100000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-09T19:03:54.984821705Z" + }, + "min_self_delegation": "1" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} +``` + +### DelegatorValidator + +The `DelegatorValidator` REST endpoint queries validator information for given delegator validator pair. + +```bash +/cosmos/staking/v1beta1/delegators/{delegatorAddr}/validators/{validatorAddr} +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/delegators/cosmos1xwazl8ftks4gn00y5x3c47auquc62ssune9ppv/validators/cosmosvaloper1xwazl8ftks4gn00y5x3c47auquc62ssuvynw64" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validator": { + "operator_address": "cosmosvaloper1xwazl8ftks4gn00y5x3c47auquc62ssuvynw64", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "5v4n3px3PkfNnKflSgepDnsMQR1hiNXnqOC11Y72/PQ=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "21592843799", + "delegator_shares": "21592843799.000000000000000000", + "description": { + "moniker": "jabbey", + "identity": "", + "website": "https://twitter.com/JoeAbbey", + "security_contact": "", + "details": "just another dad in the cosmos" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.100000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-09T19:03:54.984821705Z" + }, + "min_self_delegation": "1" + } +} +``` + +### HistoricalInfo + +The `HistoricalInfo` REST endpoint queries the historical information for given height. + +```bash +/cosmos/staking/v1beta1/historical_info/{height} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/historical_info/153332" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "hist": { + "header": { + "version": { + "block": "11", + "app": "0" + }, + "chain_id": "cosmos-1", + "height": "153332", + "time": "2021-10-12T09:05:35.062230221Z", + "last_block_id": { + "hash": "NX8HevR5khb7H6NGKva+jVz7cyf0skF1CrcY9A0s+d8=", + "part_set_header": { + "total": 1, + "hash": "zLQ2FiKM5tooL3BInt+VVfgzjlBXfq0Hc8Iux/xrhdg=" + } + }, + "last_commit_hash": "P6IJrK8vSqU3dGEyRHnAFocoDGja0bn9euLuy09s350=", + "data_hash": "eUd+6acHWrNXYju8Js449RJ99lOYOs16KpqQl4SMrEM=", + "validators_hash": "mB4pravvMsJKgi+g8aYdSeNlt0kPjnRFyvtAQtaxcfw=", + "next_validators_hash": "mB4pravvMsJKgi+g8aYdSeNlt0kPjnRFyvtAQtaxcfw=", + "consensus_hash": "BICRvH3cKD93v7+R1zxE2ljD34qcvIZ0Bdi389qtoi8=", + "app_hash": "fuELArKRK+CptnZ8tu54h6xEleSWenHNmqC84W866fU=", + "last_results_hash": "p/BPexV4LxAzlVcPRvW+lomgXb6Yze8YLIQUo/4Kdgc=", + "evidence_hash": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=", + "proposer_address": "G0MeY8xQx7ooOsni8KE/3R/Ib3Q=" + }, + "valset": [ + { + "operator_address": "cosmosvaloper196ax4vc0lwpxndu9dyhvca7jhxp70rmcqcnylw", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "/O7BtNW0pafwfvomgR4ZnfldwPXiFfJs9mHg3gwfv5Q=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "1416521659632", + "delegator_shares": "1416521659632.000000000000000000", + "description": { + "moniker": "SG-1", + "identity": "48608633F99D1B60", + "website": "https://sg-1.online", + "security_contact": "", + "details": "SG-1 - your favorite validator on cosmos. We offer 100% Soft Slash protection." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.037500000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.030000000000000000" + }, + "update_time": "2021-10-01T15:00:00Z" + }, + "min_self_delegation": "1" + }, + { + "operator_address": "cosmosvaloper1t8ehvswxjfn3ejzkjtntcyrqwvmvuknzmvtaaa", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "uExZyjNLtr2+FFIhNDAMcQ8+yTrqE7ygYTsI7khkA5Y=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "1348298958808", + "delegator_shares": "1348298958808.000000000000000000", + "description": { + "moniker": "Cosmostation", + "identity": "AE4C403A6E7AA1AC", + "website": "https://www.cosmostation.io", + "security_contact": "admin@stamper.network", + "details": "Cosmostation validator node. Delegate your tokens and Start Earning Staking Rewards" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "1.000000000000000000", + "max_change_rate": "0.200000000000000000" + }, + "update_time": "2021-10-01T15:06:38.821314287Z" + }, + "min_self_delegation": "1" + } + ] + } +} +``` + +### Parameters + +The `Parameters` REST endpoint queries the staking parameters. + +```bash +/cosmos/staking/v1beta1/params +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/params" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "params": { + "unbonding_time": "2419200s", + "max_validators": 100, + "max_entries": 7, + "historical_entries": 10000, + "bond_denom": "stake" + } +} +``` + +### Pool + +The `Pool` REST endpoint queries the pool information. + +```bash +/cosmos/staking/v1beta1/pool +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/pool" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "pool": { + "not_bonded_tokens": "432805737458", + "bonded_tokens": "15783637712645" + } +} +``` + +### Validators + +The `Validators` REST endpoint queries all validators that match the given status. + +```bash +/cosmos/staking/v1beta1/validators +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/validators" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validators": [ + { + "operator_address": "cosmosvaloper1q3jsx9dpfhtyqqgetwpe5tmk8f0ms5qywje8tw", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "N7BPyek2aKuNZ0N/8YsrqSDhGZmgVaYUBuddY8pwKaE=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "383301887799", + "delegator_shares": "383301887799.000000000000000000", + "description": { + "moniker": "SmartNodes", + "identity": "D372724899D1EDC8", + "website": "https://smartnodes.co", + "security_contact": "", + "details": "Earn Rewards with Crypto Staking & Node Deployment" + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-01T15:51:31.596618510Z" + }, + "min_self_delegation": "1" + }, + { + "operator_address": "cosmosvaloper1q5ku90atkhktze83j9xjaks2p7uruag5zp6wt7", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "GDNpuKDmCg9GnhnsiU4fCWktuGUemjNfvpCZiqoRIYA=" + }, + "jailed": false, + "status": "BOND_STATUS_UNBONDING", + "tokens": "1017819654", + "delegator_shares": "1017819654.000000000000000000", + "description": { + "moniker": "Noderunners", + "identity": "812E82D12FEA3493", + "website": "http://noderunners.biz", + "security_contact": "info@noderunners.biz", + "details": "Noderunners is a professional validator in POS networks. We have a huge node running experience, reliable soft and hardware. Our commissions are always low, our support to delegators is always full. Stake with us and start receiving your cosmos rewards now!" + }, + "unbonding_height": "147302", + "unbonding_time": "2021-11-08T22:58:53.718662452Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.100000000000000000" + }, + "update_time": "2021-10-04T18:02:21.446645619Z" + }, + "min_self_delegation": "1" + } + ], + "pagination": { + "next_key": "FONDBFkE4tEEf7yxWWKOD49jC2NK", + "total": "2" + } +} +``` + +### Validator + +The `Validator` REST endpoint queries validator information for given validator address. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr} +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "validator": { + "operator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "consensus_pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "sIiexdJdYWn27+7iUHQJDnkp63gq/rzUq1Y+fxoGjXc=" + }, + "jailed": false, + "status": "BOND_STATUS_BONDED", + "tokens": "33027900000", + "delegator_shares": "33027900000.000000000000000000", + "description": { + "moniker": "Witval", + "identity": "51468B615127273A", + "website": "", + "security_contact": "", + "details": "Witval is the validator arm from Vitwit. Vitwit is into software consulting and services business since 2015. We are working closely with Cosmos ecosystem since 2018. We are also building tools for the ecosystem, Aneka is our explorer for the cosmos ecosystem." + }, + "unbonding_height": "0", + "unbonding_time": "1970-01-01T00:00:00Z", + "commission": { + "commission_rates": { + "rate": "0.050000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.020000000000000000" + }, + "update_time": "2021-10-01T19:24:52.663191049Z" + }, + "min_self_delegation": "1" + } +} +``` + +### ValidatorDelegations + +The `ValidatorDelegations` REST endpoint queries delegate information for given validator. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q/delegations" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "delegation_responses": [ + { + "delegation": { + "delegator_address": "cosmos190g5j8aszqhvtg7cprmev8xcxs6csra7xnk3n3", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "31000000000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "31000000000" + } + }, + { + "delegation": { + "delegator_address": "cosmos1ddle9tczl87gsvmeva3c48nenyng4n56qwq4ee", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "628470000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "628470000" + } + }, + { + "delegation": { + "delegator_address": "cosmos10fdvkczl76m040smd33lh9xn9j0cf26kk4s2nw", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "838120000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "838120000" + } + }, + { + "delegation": { + "delegator_address": "cosmos1n8f5fknsv2yt7a8u6nrx30zqy7lu9jfm0t5lq8", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "500000000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "500000000" + } + }, + { + "delegation": { + "delegator_address": "cosmos16msryt3fqlxtvsy8u5ay7wv2p8mglfg9hrek2e", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "61310000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "61310000" + } + } + ], + "pagination": { + "next_key": null, + "total": "5" + } +} +``` + +### Delegation + +The `Delegation` REST endpoint queries delegate information for given validator delegator pair. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr} +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q/delegations/cosmos1n8f5fknsv2yt7a8u6nrx30zqy7lu9jfm0t5lq8" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "delegation_response": { + "delegation": { + "delegator_address": "cosmos1n8f5fknsv2yt7a8u6nrx30zqy7lu9jfm0t5lq8", + "validator_address": "cosmosvaloper16msryt3fqlxtvsy8u5ay7wv2p8mglfg9g70e3q", + "shares": "500000000.000000000000000000" + }, + "balance": { + "denom": "stake", + "amount": "500000000" + } + } +} +``` + +### UnbondingDelegation + +The `UnbondingDelegation` REST endpoint queries unbonding information for given validator delegator pair. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/delegations/{delegatorAddr}/unbonding_delegation +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu/delegations/cosmos1ze2ye5u5k3qdlexvt2e0nn0508p04094ya0qpm/unbonding_delegation" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "unbond": { + "delegator_address": "cosmos1ze2ye5u5k3qdlexvt2e0nn0508p04094ya0qpm", + "validator_address": "cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu", + "entries": [ + { + "creation_height": "153687", + "completion_time": "2021-11-09T09:41:18.352401903Z", + "initial_balance": "525111", + "balance": "525111" + } + ] + } +} +``` + +### ValidatorUnbondingDelegations + +The `ValidatorUnbondingDelegations` REST endpoint queries unbonding delegations of a validator. + +```bash +/cosmos/staking/v1beta1/validators/{validatorAddr}/unbonding_delegations +``` + +Example: + +```bash +curl -X GET \ +"http://localhost:1317/cosmos/staking/v1beta1/validators/cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu/unbonding_delegations" \ +-H "accept: application/json" +``` + +Example Output: + +```bash +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1q9snn84jfrd9ge8t46kdcggpe58dua82vnj7uy", + "validator_address": "cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu", + "entries": [ + { + "creation_height": "90998", + "completion_time": "2021-11-05T00:14:37.005841058Z", + "initial_balance": "24000000", + "balance": "24000000" + } + ] + }, + { + "delegator_address": "cosmos1qf36e6wmq9h4twhdvs6pyq9qcaeu7ye0s3dqq2", + "validator_address": "cosmosvaloper13v4spsah85ps4vtrw07vzea37gq5la5gktlkeu", + "entries": [ + { + "creation_height": "47478", + "completion_time": "2021-11-01T22:47:26.714116854Z", + "initial_balance": "8000000", + "balance": "8000000" + } + ] + } + ], + "pagination": { + "next_key": null, + "total": "2" + } +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/staking/README.md b/versioned_docs/version-0.46/integrate/modules/staking/README.md new file mode 100644 index 000000000..08c21234e --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/README.md @@ -0,0 +1,56 @@ + + +# `staking` + +## Abstract + +This paper specifies the Staking module of the Cosmos SDK that was first +described in the [Cosmos Whitepaper](https://cosmos.network/about/whitepaper) +in June 2016. + +The module enables Cosmos SDK-based blockchain to support an advanced +Proof-of-Stake (PoS) system. In this system, holders of the native staking token of +the chain can become validators and can delegate tokens to validators, +ultimately determining the effective validator set for the system. + +This module is used in the Cosmos Hub, the first Hub in the Cosmos +network. + +## Contents + +1. **[State](01_state.md)** + * [Pool](01_state.md#pool) + * [LastTotalPower](01_state.md#lasttotalpower) + * [Params](01_state.md#params) + * [Validator](01_state.md#validator) + * [Delegation](01_state.md#delegation) + * [UnbondingDelegation](01_state.md#unbondingdelegation) + * [Redelegation](01_state.md#redelegation) + * [Queues](01_state.md#queues) + * [HistoricalInfo](01_state.md#historicalinfo) +2. **[State Transitions](02_state_transitions.md)** + * [Validators](02_state_transitions.md#validators) + * [Delegations](02_state_transitions.md#delegations) + * [Slashing](02_state_transitions.md#slashing) +3. **[Messages](03_messages.md)** + * [MsgCreateValidator](03_messages.md#msgcreatevalidator) + * [MsgEditValidator](03_messages.md#msgeditvalidator) + * [MsgDelegate](03_messages.md#msgdelegate) + * [MsgUndelegate](03_messages.md#msgundelegate) + * [MsgCancelUnbondingDelegation](03_messages.md#msgcancelunbondingdelegation) + * [MsgBeginRedelegate](03_messages.md#msgbeginredelegate) +4. **[Begin-Block](04_begin_block.md)** + * [Historical Info Tracking](04_begin_block.md#historical-info-tracking) +5. **[End-Block](05_end_block.md)** + * [Validator Set Changes](05_end_block.md#validator-set-changes) + * [Queues](05_end_block.md#queues-) +6. **[Hooks](06_hooks.md)** +7. **[Events](07_events.md)** + * [EndBlocker](07_events.md#endblocker) + * [Msg's](07_events.md#msg's) +8. **[Parameters](08_params.md)** diff --git a/versioned_docs/version-0.46/integrate/modules/staking/begin_redelegation_sequence.svg b/versioned_docs/version-0.46/integrate/modules/staking/begin_redelegation_sequence.svg new file mode 100644 index 000000000..5d17f311b --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/begin_redelegation_sequence.svg @@ -0,0 +1,106 @@ +RedelegationmsgServermsgServerkeeperkeeperstorestoreBeginRedelegation(delAddr, valSrcAddr, valDstAddr, sharesAmount)get number of sharewIf the delegator has more shares than the total shares in the validator(due to rounding errors), then just withdraw the max number of shares.check the redelegation uses correct denomalt[valSrcAddr == valDstAddr]erroralt[transitive redelegation]erroralt[already has max redelegations]errorthis is the number of redelegations for a specific (del, valSrc, valDst) tripledefault : 7Unbond(del, valSrc) returns returnAmountSee unbonding diagramalt[returnAmount is zero]errorDelegate(del, returnAmount, status := valSrc.status, valDst, subtractAccount := false)See delegation diagramalt[validator is unbonded]current timealt[unbonding not complete, or just started]create redelegation objectinsert redelegation in queue, to be processed at the appropriate timecompletion time of the redelegationemit event: delegator, valSrc, valSrc,sharesAmount, completionTime \ No newline at end of file diff --git a/versioned_docs/version-0.46/integrate/modules/staking/delegation_sequence.svg b/versioned_docs/version-0.46/integrate/modules/staking/delegation_sequence.svg new file mode 100644 index 000000000..47ad53789 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/delegation_sequence.svg @@ -0,0 +1,192 @@ +Delegating (currently undelegated funds delegator)msgServer (staking)msgServer (staking)keeper (staking)keeper (staking)validatorvalidatorkeeper.bankKeeperkeeper.bankKeepervestingAccountvestingAccountctx.EventManagerctx.EventManagerstorestoreDelegate(Context, DelegatorAddress, Amount, Validator, tokenSrc := Unbonded)alt[exchange rate is invalid (tokens in validator is 0)]erroralt[perform a new delegation]delegation := create delegation objectBeforeDelegationCreated hookCalls IncrementValidatorPeriod (Used to calculate distribution) in keeper/validator.go[delegation exists, more tokens being added]BeforeDelegationModified hookwithdraw current delegation rewards (and increment period)alt[delegating from an account (subtractTokens == true)]DelegateCoinsFromAccountToModuleDelegateCoinsFromAccountToModule functionDelegateCoinsFromAccountToModuleDelegateCoinsDelegateCoins functionCheck the delegator has enough balances of all tokens delegatedTrack delegation (register that it exists to keep track of it)alt[validator is currently bonded]Transfer tokens from delegator to BondedTokensPool.[validator is currently unbonded or unbonding]Transfer tokens from delegator to NotBondedTokensPool.trackDelegation functiontrackDelegationalt[delegator is a vesting account]keep track of this delegationnil (success)[moving tokens between pools (subtractTokens == false)]alt[delegator tokens are not bonded but validator is bonded]SendCoinsFromModuleToModule(notBondedPool, bondedPool, coins)[delegator tokens are bonded but validator is not bonded]SendCoinsFromModuleToModule(bondedPool, notBondedPool, coins)SendCoins functionSendCoinsEmit TransferEvent(to, from, amount)alt[amount of spendable (balance - locked) coins too low]errorsubtract balance from senderadd balance to recipientAddTokensFromDelcalculate number of shares to issueIf there are no shares (validator being created) then 1 token = 1 share.If there are already shares, thenadded shares = (added tokens amount) * (current validator shares) / (current validator tokens)add delegated tokens to validatorvalidator, addedSharesupdate validator statecalculate new validator's powerNumber of tokens divided by PowerReduction (default: 1,000,000,000,000,000,000 = 10^18)alt[validator is not jailed]update validator's power in power indexthe power index has entries shaped as 35 || power || address.This makes the validators sorted by power, high to low.AfterDelegationModified hookCalls initializeDelegationStore the previous periodCalculate the number of tokens from shares(shares the delegator has) * (tokens in delegation object)/(total tokens delegated to the validator)Store delegation starting info.newShares (ignored by Delegate function)Emit event: Delegation(ValidatorAddress)Emit event: Message(DelegatorAddress)telemetry(Amount, Denom) \ No newline at end of file diff --git a/versioned_docs/version-0.46/integrate/modules/staking/unbond_sequence.svg b/versioned_docs/version-0.46/integrate/modules/staking/unbond_sequence.svg new file mode 100644 index 000000000..7219f200a --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/staking/unbond_sequence.svg @@ -0,0 +1,110 @@ +UndelegatemsgServermsgServerkeeperkeeperstorestorebankKeeperbankKeeperUndelegate(delAddr, valAddr, tokenAmount)calculate number of shares the tokenAmount representsalt[wrong denom]errorUnbond(delAddr, valAddr, shares)BeforeDelegationSharesModified hookalt[no such delegation]erroralt[not enough shares]erroralt[delegator is the operator of the validatorand validator is not already jailedand unbonding would put self-delegation under min threshold]jail the validator, but proceed with unbondingDefault min delegation threshold : 1 sharealt[complete unbonding, all shares removed]remove delegation object[there are still shares delegated (not a complete undbonding)]update delegation objectAfterDelegationModified hookupdate validator power indexupdate validator information (including token amount)alt[validator status is "unbonded" and it has no more tokens]delete the validatorotherwise, do this in EndBlock once validator is unbondedalt[validator is bonded]send tokens from bonded pool to not bonded poolemit event : EventTypeUnbond(delAddr, valAddr, tokenAmount, completion time) \ No newline at end of file diff --git a/versioned_docs/version-0.46/integrate/modules/upgrade/01_concepts.md b/versioned_docs/version-0.46/integrate/modules/upgrade/01_concepts.md new file mode 100644 index 000000000..10ff5ad36 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/upgrade/01_concepts.md @@ -0,0 +1,104 @@ + + +# Concepts + +## Plan + +The `x/upgrade` module defines a `Plan` type in which a live upgrade is scheduled +to occur. A `Plan` can be scheduled at a specific block height. +A `Plan` is created once a (frozen) release candidate along with an appropriate upgrade +`Handler` (see below) is agreed upon, where the `Name` of a `Plan` corresponds to a +specific `Handler`. Typically, a `Plan` is created through a governance proposal +process, where if voted upon and passed, will be scheduled. The `Info` of a `Plan` +may contain various metadata about the upgrade, typically application specific +upgrade info to be included on-chain such as a git commit that validators could +automatically upgrade to. + +### Sidecar Process + +If an operator running the application binary also runs a sidecar process to assist +in the automatic download and upgrade of a binary, the `Info` allows this process to +be seamless. Namely, the `x/upgrade` module fulfills the +[cosmosd Upgradeable Binary Specification](https://github.com/regen-network/cosmosd#upgradeable-binary-specification) +specification and `cosmosd` can optionally be used to fully automate the upgrade +process for node operators. By populating the `Info` field with the necessary information, +binaries can automatically be downloaded. See [here](https://github.com/regen-network/cosmosd#auto-download) +for more info. + +```go +type Plan struct { + Name string + Height int64 + Info string +} +``` + +## Handler + +The `x/upgrade` module facilitates upgrading from major version X to major version Y. To +accomplish this, node operators must first upgrade their current binary to a new +binary that has a corresponding `Handler` for the new version Y. It is assumed that +this version has fully been tested and approved by the community at large. This +`Handler` defines what state migrations need to occur before the new binary Y +can successfully run the chain. Naturally, this `Handler` is application specific +and not defined on a per-module basis. Registering a `Handler` is done via +`Keeper#SetUpgradeHandler` in the application. + +```go +type UpgradeHandler func(Context, Plan, VersionMap) (VersionMap, error) +``` + +During each `EndBlock` execution, the `x/upgrade` module checks if there exists a +`Plan` that should execute (is scheduled at that height). If so, the corresponding +`Handler` is executed. If the `Plan` is expected to execute but no `Handler` is registered +or if the binary was upgraded too early, the node will gracefully panic and exit. + +## StoreLoader + +The `x/upgrade` module also facilitates store migrations as part of the upgrade. The +`StoreLoader` sets the migrations that need to occur before the new binary can +successfully run the chain. This `StoreLoader` is also application specific and +not defined on a per-module basis. Registering this `StoreLoader` is done via +`app#SetStoreLoader` in the application. + +```go +func UpgradeStoreLoader (upgradeHeight int64, storeUpgrades *store.StoreUpgrades) baseapp.StoreLoader +``` + +If there's a planned upgrade and the upgrade height is reached, the old binary writes `Plan` to the disk before panicking. + +This information is critical to ensure the `StoreUpgrades` happens smoothly at correct height and +expected upgrade. It eliminiates the chances for the new binary to execute `StoreUpgrades` multiple +times everytime on restart. Also if there are multiple upgrades planned on same height, the `Name` +will ensure these `StoreUpgrades` takes place only in planned upgrade handler. + +## Proposal + +Typically, a `Plan` is proposed and submitted through governance via a proposal +containing a `MsgSoftwareUpgrade` message. +This proposal prescribes to the standard governance process. If the proposal passes, +the `Plan`, which targets a specific `Handler`, is persisted and scheduled. The +upgrade can be delayed or hastened by updating the `Plan.Height` in a new proposal. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/upgrade/v1beta1/tx.proto#L24-L36 + +### Cancelling Upgrade Proposals + +Upgrade proposals can be cancelled. There exists a gov-enabled `MsgCancelUpgrade` +message type, which can be embedded in a proposal, voted on and, if passed, will +remove the scheduled upgrade `Plan`. +Of course this requires that the upgrade was known to be a bad idea well before the +upgrade itself, to allow time for a vote. + ++++ https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/proto/cosmos/upgrade/v1beta1/tx.proto#L43-L51 + +If such a possibility is desired, the upgrade height is to be +`2 * (VotingPeriod + DepositPeriod) + (SafetyDelta)` from the beginning of the +upgrade proposal. The `SafetyDelta` is the time available from the success of an +upgrade proposal and the realization it was a bad idea (due to external social consensus). + +A `MsgCancelUpgrade` proposal can also be made while the original +`MsgSoftwareUpgrade` proposal is still being voted upon, as long as the `VotingPeriod` +ends after the `MsgSoftwareUpgrade` proposal. diff --git a/versioned_docs/version-0.46/integrate/modules/upgrade/02_state.md b/versioned_docs/version-0.46/integrate/modules/upgrade/02_state.md new file mode 100644 index 000000000..7508b2929 --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/upgrade/02_state.md @@ -0,0 +1,20 @@ + + +# State + +The internal state of the `x/upgrade` module is relatively minimal and simple. The +state contains the currently active upgrade `Plan` (if one exists) by key +`0x0` and if a `Plan` is marked as "done" by key `0x1`. The state +contains the consensus versions of all app modules in the application. The versions +are stored as big endian `uint64`, and can be accessed with prefix `0x2` appended +by the corresponding module name of type `string`. The state maintains a +`Protocol Version` which can be accessed by key `0x3`. + +* Plan: `0x0 -> Plan` +* Done: `0x1 | byte(plan name) -> BigEndian(Block Height)` +* ConsensusVersion: `0x2 | byte(module name) -> BigEndian(Module Consensus Version)` +* ProtocolVersion: `0x3 -> BigEndian(Protocol Version)` + +The `x/upgrade` module contains no genesis state. diff --git a/versioned_docs/version-0.46/integrate/modules/upgrade/03_events.md b/versioned_docs/version-0.46/integrate/modules/upgrade/03_events.md new file mode 100644 index 000000000..e4e0e6d5f --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/upgrade/03_events.md @@ -0,0 +1,8 @@ + + +# Events + +The `x/upgrade` does not emit any events by itself. Any and all proposal related +events are emitted through the `x/gov` module. diff --git a/versioned_docs/version-0.46/integrate/modules/upgrade/04_client.md b/versioned_docs/version-0.46/integrate/modules/upgrade/04_client.md new file mode 100644 index 000000000..da55709ee --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/upgrade/04_client.md @@ -0,0 +1,459 @@ + + +# Client + +## CLI + +A user can query and interact with the `upgrade` module using the CLI. + +### Query + +The `query` commands allow users to query `upgrade` state. + +```bash +simd query upgrade --help +``` + +#### applied + +The `applied` command allows users to query the block header for height at which a completed upgrade was applied. + +```bash +simd query upgrade applied [upgrade-name] [flags] +``` + +If upgrade-name was previously executed on the chain, this returns the header for the block at which it was applied. +This helps a client determine which binary was valid over a given range of blocks, as well as more context to understand past migrations. + +Example: + +```bash +simd query upgrade applied "test-upgrade" +``` + +Example Output: + +```bash +"block_id": { + "hash": "A769136351786B9034A5F196DC53F7E50FCEB53B48FA0786E1BFC45A0BB646B5", + "parts": { + "total": 1, + "hash": "B13CBD23011C7480E6F11BE4594EE316548648E6A666B3575409F8F16EC6939E" + } + }, + "block_size": "7213", + "header": { + "version": { + "block": "11" + }, + "chain_id": "testnet-2", + "height": "455200", + "time": "2021-04-10T04:37:57.085493838Z", + "last_block_id": { + "hash": "0E8AD9309C2DC411DF98217AF59E044A0E1CCEAE7C0338417A70338DF50F4783", + "parts": { + "total": 1, + "hash": "8FE572A48CD10BC2CBB02653CA04CA247A0F6830FF19DC972F64D339A355E77D" + } + }, + "last_commit_hash": "DE890239416A19E6164C2076B837CC1D7F7822FC214F305616725F11D2533140", + "data_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "validators_hash": "A31047ADE54AE9072EE2A12FF260A8990BA4C39F903EAF5636B50D58DBA72582", + "next_validators_hash": "A31047ADE54AE9072EE2A12FF260A8990BA4C39F903EAF5636B50D58DBA72582", + "consensus_hash": "048091BC7DDC283F77BFBF91D73C44DA58C3DF8A9CBC867405D8B7F3DAADA22F", + "app_hash": "28ECC486AFC332BA6CC976706DBDE87E7D32441375E3F10FD084CD4BAF0DA021", + "last_results_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", + "proposer_address": "2ABC4854B1A1C5AA8403C4EA853A81ACA901CC76" + }, + "num_txs": "0" +} +``` + +#### module versions + +The `module_versions` command gets a list of module names and their respective consensus versions. + +Following the command with a specific module name will return only +that module's information. + +```bash +simd query upgrade module_versions [optional module_name] [flags] +``` + +Example: + +```bash +simd query upgrade module_versions +``` + +Example Output: + +```bash +module_versions: +- name: auth + version: "2" +- name: authz + version: "1" +- name: bank + version: "2" +- name: capability + version: "1" +- name: crisis + version: "1" +- name: distribution + version: "2" +- name: evidence + version: "1" +- name: feegrant + version: "1" +- name: genutil + version: "1" +- name: gov + version: "2" +- name: ibc + version: "2" +- name: mint + version: "1" +- name: params + version: "1" +- name: slashing + version: "2" +- name: staking + version: "2" +- name: transfer + version: "1" +- name: upgrade + version: "1" +- name: vesting + version: "1" +``` + +Example: + +```bash +regen query upgrade module_versions ibc +``` + +Example Output: + +```bash +module_versions: +- name: ibc + version: "2" +``` + +#### plan + +The `plan` command gets the currently scheduled upgrade plan, if one exists. + +```bash +regen query upgrade plan [flags] +``` + +Example: + +```bash +simd query upgrade plan +``` + +Example Output: + +```bash +height: "130" +info: "" +name: test-upgrade +time: "0001-01-01T00:00:00Z" +upgraded_client_state: null +``` + +## REST + +A user can query the `upgrade` module using REST endpoints. + +### Applied Plan + +`AppliedPlan` queries a previously applied upgrade plan by its name. + +```bash +/cosmos/upgrade/v1beta1/applied_plan/{name} +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/applied_plan/v2.0-upgrade" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "height": "30" +} +``` + +### Current Plan + +`CurrentPlan` queries the current upgrade plan. + +```bash +/cosmos/upgrade/v1beta1/current_plan +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/current_plan" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "plan": "v2.1-upgrade" +} +``` + +### Module versions + +`ModuleVersions` queries the list of module versions from state. + +```bash +/cosmos/upgrade/v1beta1/module_versions +``` + +Example: + +```bash +curl -X GET "http://localhost:1317/cosmos/upgrade/v1beta1/module_versions" -H "accept: application/json" +``` + +Example Output: + +```bash +{ + "module_versions": [ + { + "name": "auth", + "version": "2" + }, + { + "name": "authz", + "version": "1" + }, + { + "name": "bank", + "version": "2" + }, + { + "name": "capability", + "version": "1" + }, + { + "name": "crisis", + "version": "1" + }, + { + "name": "distribution", + "version": "2" + }, + { + "name": "evidence", + "version": "1" + }, + { + "name": "feegrant", + "version": "1" + }, + { + "name": "genutil", + "version": "1" + }, + { + "name": "gov", + "version": "2" + }, + { + "name": "ibc", + "version": "2" + }, + { + "name": "mint", + "version": "1" + }, + { + "name": "params", + "version": "1" + }, + { + "name": "slashing", + "version": "2" + }, + { + "name": "staking", + "version": "2" + }, + { + "name": "transfer", + "version": "1" + }, + { + "name": "upgrade", + "version": "1" + }, + { + "name": "vesting", + "version": "1" + } + ] +} +``` + +## gRPC + +A user can query the `upgrade` module using gRPC endpoints. + +### Applied Plan + +`AppliedPlan` queries a previously applied upgrade plan by its name. + +```bash +cosmos.upgrade.v1beta1.Query/AppliedPlan +``` + +Example: + +```bash +grpcurl -plaintext \ + -d '{"name":"v2.0-upgrade"}' \ + localhost:9090 \ + cosmos.upgrade.v1beta1.Query/AppliedPlan +``` + +Example Output: + +```bash +{ + "height": "30" +} +``` + +### Current Plan + +`CurrentPlan` queries the current upgrade plan. + +```bash +cosmos.upgrade.v1beta1.Query/CurrentPlan +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/CurrentPlan +``` + +Example Output: + +```bash +{ + "plan": "v2.1-upgrade" +} +``` + +### Module versions + +`ModuleVersions` queries the list of module versions from state. + +```bash +cosmos.upgrade.v1beta1.Query/ModuleVersions +``` + +Example: + +```bash +grpcurl -plaintext localhost:9090 cosmos.slashing.v1beta1.Query/ModuleVersions +``` + +Example Output: + +```bash +{ + "module_versions": [ + { + "name": "auth", + "version": "2" + }, + { + "name": "authz", + "version": "1" + }, + { + "name": "bank", + "version": "2" + }, + { + "name": "capability", + "version": "1" + }, + { + "name": "crisis", + "version": "1" + }, + { + "name": "distribution", + "version": "2" + }, + { + "name": "evidence", + "version": "1" + }, + { + "name": "feegrant", + "version": "1" + }, + { + "name": "genutil", + "version": "1" + }, + { + "name": "gov", + "version": "2" + }, + { + "name": "ibc", + "version": "2" + }, + { + "name": "mint", + "version": "1" + }, + { + "name": "params", + "version": "1" + }, + { + "name": "slashing", + "version": "2" + }, + { + "name": "staking", + "version": "2" + }, + { + "name": "transfer", + "version": "1" + }, + { + "name": "upgrade", + "version": "1" + }, + { + "name": "vesting", + "version": "1" + } + ] +} +``` diff --git a/versioned_docs/version-0.46/integrate/modules/upgrade/README.md b/versioned_docs/version-0.46/integrate/modules/upgrade/README.md new file mode 100644 index 000000000..73ea2268a --- /dev/null +++ b/versioned_docs/version-0.46/integrate/modules/upgrade/README.md @@ -0,0 +1,31 @@ + + +# `upgrade` + +## Abstract + +`x/upgrade` is an implementation of a Cosmos SDK module that facilitates smoothly +upgrading a live Cosmos chain to a new (breaking) software version. It accomplishes this by +providing a `BeginBlocker` hook that prevents the blockchain state machine from +proceeding once a pre-defined upgrade block height has been reached. + +The module does not prescribe anything regarding how governance decides to do an +upgrade, but just the mechanism for coordinating the upgrade safely. Without software +support for upgrades, upgrading a live chain is risky because all of the validators +need to pause their state machines at exactly the same point in the process. If +this is not done correctly, there can be state inconsistencies which are hard to +recover from. + + +1. **[Concepts](01_concepts.md)** +2. **[State](02_state.md)** +3. **[Events](03_events.md)** +4. **[Client](04_client.md)** + * [CLI](04_client.md#cli) + * [REST](04_client.md#rest) + * [gRPC](04_client.md#grpc) diff --git a/versioned_docs/version-0.46/integrate/rfc/README.md b/versioned_docs/version-0.46/integrate/rfc/README.md deleted file mode 100644 index be74d080d..000000000 --- a/versioned_docs/version-0.46/integrate/rfc/README.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Requests for Comments - -A Request for Comments (RFC) is a record of discussion on an open-ended topic -related to the design and implementation of the Cosmos SDK, for which no -immediate decision is required. - -The purpose of an RFC is to serve as a historical record of a high-level -discussion that might otherwise only be recorded in an ad-hoc way (for example, -via gists or Google docs) that are difficult to discover for someone after the -fact. An RFC _may_ give rise to more specific architectural _decisions_ for -the Cosmos SDK, but those decisions must be recorded separately in -[Architecture Decision Records (ADR)](../architecture). - -As a rule of thumb, if you can articulate a specific question that needs to be -answered, write an ADR. If you need to explore the topic and get input from -others to know what questions need to be answered, an RFC may be appropriate. - -## RFC Content - -An RFC should provide: - -* A **changelog**, documenting when and how the RFC has changed. -* An **abstract**, briefly summarizing the topic so the reader can quickly tell - whether it is relevant to their interest. -* Any **background** a reader will need to understand and participate in the - substance of the discussion (links to other documents are fine here). -* The **discussion**, the primary content of the document. - -The [rfc-template.md](rfc-template.md) file includes placeholders for these -sections. diff --git a/versioned_docs/version-0.46/user/run-node/README.md b/versioned_docs/version-0.46/user/run-node/README.md new file mode 100644 index 000000000..ec6eca8bd --- /dev/null +++ b/versioned_docs/version-0.46/user/run-node/README.md @@ -0,0 +1,17 @@ + + +# Running a Node, API and CLI + +This script contains documentation on how to run a node and interact with it. + +1. [Setting up the keyring](./keyring.md) +2. [Running a Node](./run-node.md) +3. [Interacting with a Node](./interact-node.md) +4. [Generating, Signing and Broadcasting Transactions](./txs.md) +5. [Cosmos Upgrade Manager](./cosmovisor.md) +6. [Rosetta API](./rosetta.md) +7. [Running a Testnet](./run-testnet.md) diff --git a/versioned_docs/version-0.46/user/run-node/interact-node.md b/versioned_docs/version-0.46/user/run-node/interact-node.md new file mode 100644 index 000000000..0daf04e51 --- /dev/null +++ b/versioned_docs/version-0.46/user/run-node/interact-node.md @@ -0,0 +1,252 @@ + + +# Interacting with the Node + +There are multiple ways to interact with a node: using the CLI, using gRPC or using the REST endpoints. {synopsis} + +## Pre-requisite Readings + +* [gRPC, REST and Tendermint Endpoints](../core/grpc_rest.md) {prereq} +* [Running a Node](./run-node.md) {prereq} + +## Using the CLI + +Now that your chain is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command: + +```bash +simd query bank balances $MY_VALIDATOR_ADDRESS --chain-id my-test-chain +``` + +You should see the current balance of the account you created, equal to the original balance of `stake` you granted it minus the amount you delegated via the `gentx`. Now, create a second account: + +```bash +simd keys add recipient --keyring-backend test + +# Put the generated address in a variable for later use. +RECIPIENT=$(simd keys show recipient -a --keyring-backend test) +``` + +The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000000stake --chain-id my-test-chain --keyring-backend test + +# Check that the recipient account did receive the tokens. +simd query bank balances $RECIPIENT --chain-id my-test-chain +``` + +Finally, delegate some of the stake tokens sent to the `recipient` account to the validator: + +```bash +simd tx staking delegate $(simd keys show my_validator --bech val -a --keyring-backend test) 500stake --from recipient --chain-id my-test-chain --keyring-backend test + +# Query the total delegations to `validator`. +simd query staking delegations-to $(simd keys show my_validator --bech val -a --keyring-backend test) --chain-id my-test-chain +``` + +You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account. + +## Using gRPC + +The Protobuf ecosystem developed tools for different use cases, including code-generation from `*.proto` files into various languages. These tools allow the building of clients easily. Often, the client connection (i.e. the transport) can be plugged and replaced very easily. Let's explore one of the most popular transport: [gRPC](../core/grpc_rest.md). + +Since the code generation library largely depends on your own tech stack, we will only present three alternatives: + +* `grpcurl` for generic debugging and testing, +* programmatically via Go, +* CosmJS for JavaScript/TypeScript developers. + +### grpcurl + +[grpcurl](https://github.com/fullstorydev/grpcurl) is like `curl` but for gRPC. It is also available as a Go library, but we will use it only as a CLI command for debugging and testing purposes. Follow the instructions in the previous link to install it. + +Assuming you have a local node running (either a localnet, or connected a live network), you should be able to run the following command to list the Protobuf services available (you can replace `localhost:9000` by the gRPC server endpoint of another node, which is configured under the `grpc.address` field inside [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml)): + +```bash +grpcurl -plaintext localhost:9090 list +``` + +You should see a list of gRPC services, like `cosmos.bank.v1beta1.Query`. This is called reflection, which is a Protobuf endpoint returning a description of all available endpoints. Each of these represents a different Protobuf service, and each service exposes multiple RPC methods you can query against. + +In order to get a description of the service you can run the following command: + +```bash +grpcurl \ + localhost:9090 \ + describe cosmos.bank.v1beta1.Query # Service we want to inspect +``` + +It's also possible to execute an RPC call to query the node for information: + +```bash +grpcurl \ + -plaintext + -d '{"address":"$MY_VALIDATOR"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using grpcurl + +You may also query for historical data by passing some [gRPC metadata](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) to the query: the `x-cosmos-block-height` metadata should contain the block to query. Using grpcurl as above, the command looks like: + +```bash +grpcurl \ + -plaintext \ + -H "x-cosmos-block-height: 279256" \ + -d '{"address":"$MY_VALIDATOR"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Programmatically via Go + +The following snippet shows how to query the state using gRPC inside a Go program. The idea is to create a gRPC connection, and use the Protobuf-generated client code to query the gRPC server. + +#### Install Cosmos SDK + +Add below line to `go.mod` to replace protobuf, read more [#8469](https://github.com/cosmos/cosmos-sdk/issues/8469) + +```go +replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 +``` + +```bash +go get github.com/cosmos/cosmos-sdk@main +``` + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func queryState() error { + myAddress, err := sdk.AccAddressFromBech32("cosmos1...") + if err != nil { + return err + } + + // Create a connection to the gRPC server. + grpcConn, err := grpc.Dial( + "127.0.0.1:9090", // your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + // This instantiates a general gRPC codec which handles proto bytes. We pass in a nil interface registry + // if the request/response types contain interface instead of 'nil' you should pass the application specific codec. + grpc.WithDefaultCallOptions(grpc.ForceCodec(codec.NewProtoCodec(nil).GRPCCodec())), + ) + if err != nil { + return err + } + defer grpcConn.Close() + + // This creates a gRPC client to query the x/bank service. + bankClient := banktypes.NewQueryClient(grpcConn) + bankRes, err := bankClient.Balance( + context.Background(), + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "atom"}, + ) + if err != nil { + return err + } + + fmt.Println(bankRes.GetBalance()) // Prints the account balance + + return nil +} +``` + +You can replace the query client (here we are using `x/bank`'s) with one generated from any other Protobuf service. The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using Go + +Querying for historical blocks is done by adding the block height metadata in the gRPC request. + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func queryState() error { + // --snip-- + + var header metadata.MD + bankRes, err = bankClient.Balance( + metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // Add metadata to request + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "atom"}, + grpc.Header(&header), // Retrieve header from response + ) + if err != nil { + return err + } + blockHeight := header.Get(grpctypes.GRPCBlockHeightHeader) + + fmt.Println(blockHeight) // Prints the block height (12) + + return nil +} +``` + +### CosmJS + +CosmJS documentation can be found at [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs). As of January 2021, CosmJS documentation is still work in progress. + +## Using the REST Endpoints + +As described in the [gRPC guide](../core/grpc_rest.md), all gRPC services on the Cosmos SDK are made available for more convenient REST-based queries through gRPC-gateway. The format of the URL path is based on the Protobuf service method's full-qualified name, but may contain small customizations so that final URLs look more idiomatic. For example, the REST endpoint for the `cosmos.bank.v1beta1.Query/AllBalances` method is `GET /cosmos/bank/v1beta1/balances/{address}`. Request arguments are passed as query parameters. + +As a concrete example, the `curl` command to make balances request is: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR +``` + +Make sure to replace `localhost:1317` with the REST endpoint of your node, configured under the `api.address` field. + +The list of all available REST endpoints is available as a Swagger specification file, it can be viewed at `localhost:1317/swagger`. Make sure that the `api.swagger` field is set to true in your [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml) file. + +### Query for historical state using REST + +Querying for historical state is done using the HTTP header `x-cosmos-block-height`. For example, a curl command would look like: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + -H "x-cosmos-block-height: 279256" + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Cross-Origin Resource Sharing (CORS) + +[CORS policies](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) are not enabled by default to help with security. If you would like to use the rest-server in a public environment we recommend you provide a reverse proxy, this can be done with [nginx](https://www.nginx.com/). For testing and development purposes there is an `enabled-unsafe-cors` field inside [`app.toml`](../run-node/run-node.md#configuring-the-node-using-apptoml). + +## Next {hide} + +Sending transactions using gRPC and REST requires some additional steps: generating the transaction, signing it, and finally broadcasting it. Read about [generating and signing transactions](./txs.md). {hide} diff --git a/versioned_docs/version-0.46/user/run-node/keyring.md b/versioned_docs/version-0.46/user/run-node/keyring.md new file mode 100644 index 000000000..8506ef4c0 --- /dev/null +++ b/versioned_docs/version-0.46/user/run-node/keyring.md @@ -0,0 +1,136 @@ + + +# Setting up the keyring + +This document describes how to configure and use the keyring and its various backends for an [**application**](../basics/app-anatomy.md). {synopsis} + +The keyring holds the private/public keypairs used to interact with a node. For instance, a validator key needs to be set up before running the blockchain node, so that blocks can be correctly signed. The private key can be stored in different locations, called "backends", such as a file or the operating system's own key storage. + +## Available backends for the keyring + +Starting with the v0.38.0 release, Cosmos SDK comes with a new keyring implementation +that provides a set of commands to manage cryptographic keys in a secure fashion. The +new keyring supports multiple storage backends, some of which may not be available on +all operating systems. + +### The `os` backend + +The `os` backend relies on operating system-specific defaults to handle key storage +securely. Typically, an operating system's credential sub-system handles password prompts, +private keys storage, and user sessions according to the user's password policies. Here +is a list of the most popular operating systems and their respective passwords manager: + +* macOS (since Mac OS 8.6): [Keychain](https://support.apple.com/en-gb/guide/keychain-access/welcome/mac) +* Windows: [Credentials Management API](https://docs.microsoft.com/en-us/windows/win32/secauthn/credentials-management) +* GNU/Linux: + * [libsecret](https://gitlab.gnome.org/GNOME/libsecret) + * [kwallet](https://api.kde.org/frameworks/kwallet/html/index.html) + +GNU/Linux distributions that use GNOME as default desktop environment typically come with +[Seahorse](https://wiki.gnome.org/Apps/Seahorse). Users of KDE based distributions are +commonly provided with [KDE Wallet Manager](https://userbase.kde.org/KDE_Wallet_Manager). +Whilst the former is in fact a `libsecret` convenient frontend, the latter is a `kwallet` +client. + +`os` is the default option since operating system's default credentials managers are +designed to meet users' most common needs and provide them with a comfortable +experience without compromising on security. + +The recommended backends for headless environments are `file` and `pass`. + +### The `file` backend + +The `file` backend more closely resembles the keybase implementation used prior to +v0.38.1. It stores the keyring encrypted within the app's configuration directory. This +keyring will request a password each time it is accessed, which may occur multiple +times in a single command resulting in repeated password prompts. If using bash scripts +to execute commands using the `file` option you may want to utilize the following format +for multiple prompts: + +```sh +# assuming that KEYPASSWD is set in the environment +$ gaiacli config keyring-backend file # use file backend +$ (echo $KEYPASSWD; echo $KEYPASSWD) | gaiacli keys add me # multiple prompts +$ echo $KEYPASSWD | gaiacli keys show me # single prompt +``` + +::: tip +The first time you add a key to an empty keyring, you will be prompted to type the password twice. +::: + +### The `pass` backend + +The `pass` backend uses the [pass](https://www.passwordstore.org/) utility to manage on-disk +encryption of keys' sensitive data and metadata. Keys are stored inside `gpg` encrypted files +within app-specific directories. `pass` is available for the most popular UNIX +operating systems as well as GNU/Linux distributions. Please refer to its manual page for +information on how to download and install it. + +::: tip +**pass** uses [GnuPG](https://gnupg.org/) for encryption. `gpg` automatically invokes the `gpg-agent` +daemon upon execution, which handles the caching of GnuPG credentials. Please refer to `gpg-agent` +man page for more information on how to configure cache parameters such as credentials TTL and +passphrase expiration. +::: + +The password store must be set up prior to first use: + +```sh +pass init +``` + +Replace `` with your GPG key ID. You can use your personal GPG key or an alternative +one you may want to use specifically to encrypt the password store. + +### The `kwallet` backend + +The `kwallet` backend uses `KDE Wallet Manager`, which comes installed by default on the +GNU/Linux distributions that ships KDE as default desktop environment. Please refer to +[KWallet Handbook](https://docs.kde.org/stable5/en/kdeutils/kwallet5/index.html) for more +information. + +### The `test` backend + +The `test` backend is a password-less variation of the `file` backend. Keys are stored +unencrypted on disk. + +**Provided for testing purposes only. The `test` backend is not recommended for use in production environments**. + +### The `memory` backend + +The `memory` backend stores keys in memory. The keys are immediately deleted after the program has exited. + +**Provided for testing purposes only. The `memory` backend is not recommended for use in production environments**. + +## Adding keys to the keyring + +::: warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Applications developed using the Cosmos SDK come with the `keys` subcommand. For the purpose of this tutorial, we're running the `simd` CLI, which is an application built using the Cosmos SDK for testing and educational purposes. For more information, see [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp). + +You can use `simd keys` for help about the keys command and `simd keys [command] --help` for more information about a particular subcommand. + +::: tip +You can also enable auto-completion with the `simd completion` command. For example, at the start of a bash session, run `. <(simd completion)`, and all `simd` subcommands will be auto-completed. +::: + +To create a new key in the keyring, run the `add` subcommand with a `` argument. For the purpose of this tutorial, we will solely use the `test` backend, and call our new key `my_validator`. This key will be used in the next section. + +```bash +$ simd keys add my_validator --keyring-backend test + +# Put the generated address in a variable for later use. +MY_VALIDATOR_ADDRESS=$(simd keys show my_validator -a --keyring-backend test) +``` + +This command generates a new 24-word mnemonic phrase, persists it to the relevant backend, and outputs information about the keypair. If this keypair will be used to hold value-bearing tokens, be sure to write down the mnemonic phrase somewhere safe! + +By default, the keyring generates a `secp256k1` keypair. The keyring also supports `ed25519` keys, which may be created by passing the `--algo ed25519` flag. A keyring can of course hold both types of keys simultaneously, and the Cosmos SDK's `x/auth` module (in particular its [middlewares](../core/baseapp.md#middleware)) supports natively these two public key algorithms. + +## Next {hide} + +Read about [running a node](./run-node.md) {hide} diff --git a/versioned_docs/version-0.46/user/run-node/rosetta.md b/versioned_docs/version-0.46/user/run-node/rosetta.md new file mode 100644 index 000000000..e3d94492f --- /dev/null +++ b/versioned_docs/version-0.46/user/run-node/rosetta.md @@ -0,0 +1,112 @@ + + +# Rosetta + +The `rosetta` package implements Coinbase's [Rosetta API](https://www.rosetta-api.org). This document provides instructions on how to use the Rosetta API integration. For information about the motivation and design choices, refer to [ADR 035](../architecture/adr-035-rosetta-api-support.md). + +## Add Rosetta Command + +The Rosetta API server is a stand-alone server that connects to a node of a chain developed with Cosmos SDK. + +To enable Rosetta API support, it's required to add the `RosettaCommand` to your application's root command file (e.g. `appd/cmd/root.go`). + +Import the `server` package: + +```go + "github.com/cosmos/cosmos-sdk/server" +``` + +Find the following line: + +```go +initRootCmd(rootCmd, encodingConfig) +``` + +After that line, add the following: + +```go +rootCmd.AddCommand( + server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Codec) +) +``` + +The `RosettaCommand` function builds the `rosetta` root command and is defined in the `server` package within Cosmos SDK. + +Since we’ve updated the Cosmos SDK to work with the Rosetta API, updating the application's root command file is all you need to do. + +An implementation example can be found in `simapp` package. + +## Use Rosetta Command + +To run Rosetta in your application CLI, use the following command: + +```sh +appd rosetta --help +``` + +To test and run Rosetta API endpoints for applications that are running and exposed, use the following command: + +```sh +appd rosetta + --blockchain "your application name (ex: gaia)" + --network "your chain identifier (ex: testnet-1)" + --tendermint "tendermint endpoint (ex: localhost:26657)" + --grpc "gRPC endpoint (ex: localhost:9090)" + --addr "rosetta binding address (ex: :8080)" +``` + +## Extensions + +There are two ways in which you can customize and extend the implementation with your custom settings. + +### Message extension + +In order to make an `sdk.Msg` understandable by rosetta the only thing which is required is adding the methods to your messages that satisfy the `rosetta.Msg` interface. Examples on how to do so can be found in the staking types such as `MsgDelegate`, or in bank types such as `MsgSend`. + +### Client interface override + +In case more customization is required, it's possible to embed the Client type and override the methods which require customizations. + +Example: + +```go +package custom_client +import ( + +"context" +"github.com/coinbase/rosetta-sdk-go/types" +"github.com/cosmos/cosmos-sdk/server/rosetta/lib" +) + +// CustomClient embeds the standard cosmos client +// which means that it implements the cosmos-rosetta-gateway Client +// interface while at the same time allowing to customize certain methods +type CustomClient struct { + *rosetta.Client +} + +func (c *CustomClient) ConstructionPayload(_ context.Context, request *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) { + // provide custom signature bytes + panic("implement me") +} +``` + +NOTE: when using a customized client, the command cannot be used as the constructors required **may** differ, so it's required to create a new one. We intend to provide a way to init a customized client without writing extra code in the future. + +### Error extension + +Since rosetta requires to provide 'returned' errors to network options. In order to declare a new rosetta error, we use the `errors` package in cosmos-rosetta-gateway. + +Example: + +```go +package custom_errors +import crgerrs "github.com/cosmos/cosmos-sdk/server/rosetta/lib/errors" + +var customErrRetriable = true +var CustomError = crgerrs.RegisterError(100, "custom message", customErrRetriable, "description") +``` + +Note: errors must be registered before cosmos-rosetta-gateway's `Server`.`Start` method is called. Otherwise the registration will be ignored. Errors with same code will be ignored too. diff --git a/versioned_docs/version-0.46/user/run-node/run-node.md b/versioned_docs/version-0.46/user/run-node/run-node.md new file mode 100644 index 000000000..19f2aa6bc --- /dev/null +++ b/versioned_docs/version-0.46/user/run-node/run-node.md @@ -0,0 +1,167 @@ + + +# Running a Node + +Now that the application is ready and the keyring populated, it's time to see how to run the blockchain node. In this section, the application we are running is called [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp), and its corresponding CLI binary `simd`. {synopsis} + +## Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](../basics/app-anatomy.md) {prereq} +* [Setting up the keyring](./keyring.md) {prereq} + +## Initialize the Chain + +::: warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Before actually running the node, we need to initialize the chain, and most importantly its genesis file. This is done with the `init` subcommand: + +```bash +# The argument is the custom username of your node, it should be human-readable. +simd init --chain-id my-test-chain +``` + +The command above creates all the configuration files needed for your node to run, as well as a default genesis file, which defines the initial state of the network. All these configuration files are in `~/.simapp` by default, but you can overwrite the location of this folder by passing the `--home` flag. + +The `~/.simapp` folder has the following structure: + +```bash +. # ~/.simapp + |- data # Contains the databases used by the node. + |- config/ + |- app.toml # Application-related configuration file. + |- config.toml # Tendermint-related configuration file. + |- genesis.json # The genesis file. + |- node_key.json # Private key to use for node authentication in the p2p protocol. + |- priv_validator_key.json # Private key to use as a validator in the consensus protocol. +``` + +## Updating Some Default Settings + +If you want to change any field values in configuration files (for ex: genesis.json) you can use `jq` ([installation](https://stedolan.github.io/jq/download/) & [docs](https://stedolan.github.io/jq/manual/#Assignment)) & `sed` commands to do that. Few examples are listed here. + +```bash +# to change the chain-id +jq '.chain_id = "testing"' genesis.json > temp.json && mv temp.json genesis.json + +# to enable the api server +sed -i '/\[api\]/,+3 s/enable = false/enable = true/' app.toml + +# to change the voting_period +jq '.app_state.gov.voting_params.voting_period = "600s"' genesis.json > temp.json && mv temp.json genesis.json + +# to change the inflation +jq '.app_state.mint.minter.inflation = "0.300000000000000000"' genesis.json > temp.json && mv temp.json genesis.json +``` + +## Adding Genesis Accounts + +Before starting the chain, you need to populate the state with at least one account. To do so, first [create a new account in the keyring](./keyring.md#adding-keys-to-the-keyring) named `my_validator` under the `test` keyring backend (feel free to choose another name and another backend). + +Now that you have created a local account, go ahead and grant it some `stake` tokens in your chain's genesis file. Doing so will also make sure your chain is aware of this account's existence: + +```bash +simd add-genesis-account $MY_VALIDATOR_ADDRESS 100000000000stake +``` + +Recall that `$MY_VALIDATOR_ADDRESS` is a variable that holds the address of the `my_validator` key in the [keyring](./keyring.md#adding-keys-to-the-keyring). Also note that the tokens in the Cosmos SDK have the `{amount}{denom}` format: `amount` is is a 18-digit-precision decimal number, and `denom` is the unique token identifier with its denomination key (e.g. `atom` or `uatom`). Here, we are granting `stake` tokens, as `stake` is the token identifier used for staking in [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp). For your own chain with its own staking denom, that token identifier should be used instead. + +Now that your account has some tokens, you need to add a validator to your chain. Validators are special full-nodes that participate in the consensus process (implemented in the [underlying consensus engine](../intro/sdk-app-architecture.md#tendermint)) in order to add new blocks to the chain. Any account can declare its intention to become a validator operator, but only those with sufficient delegation get to enter the active set (for example, only the top 125 validator candidates with the most delegation get to be validators in the Cosmos Hub). For this guide, you will add your local node (created via the `init` command above) as a validator of your chain. Validators can be declared before a chain is first started via a special transaction included in the genesis file called a `gentx`: + +```bash +# Create a gentx. +simd gentx my_validator 100000000stake --chain-id my-test-chain --keyring-backend test + +# Add the gentx to the genesis file. +simd collect-gentxs +``` + +A `gentx` does three things: + +1. Registers the `validator` account you created as a validator operator account (i.e. the account that controls the validator). +2. Self-delegates the provided `amount` of staking tokens. +3. Link the operator account with a Tendermint node pubkey that will be used for signing blocks. If no `--pubkey` flag is provided, it defaults to the local node pubkey created via the `simd init` command above. + +For more information on `gentx`, use the following command: + +```bash +simd gentx --help +``` + +## Configuring the Node Using `app.toml` and `config.toml` + +The Cosmos SDK automatically generates two configuration files inside `~/.simapp/config`: + +* `config.toml`: used to configure the Tendermint, learn more on [Tendermint's documentation](https://docs.tendermint.com/master/nodes/configuration.html), +* `app.toml`: generated by the Cosmos SDK, and used to configure your app, such as state pruning strategies, telemetry, gRPC and REST servers configuration, state sync... + +Both files are heavily commented, please refer to them directly to tweak your node. + +One example config to tweak is the `minimum-gas-prices` field inside `app.toml`, which defines the minimum gas prices the validator node is willing to accept for processing a transaction. Depending on the chain, it might be an empty string or not. If it's empty, make sure to edit the field with some value, for example `10token`, or else the node will halt on startup. For the purpose of this tutorial, let's set the minimum gas price to 0: + +```toml + # The minimum gas prices a validator is willing to accept for processing a + # transaction. A transaction's fees must meet the minimum of any denomination + # specified in this config (e.g. 0.25token1;0.0001token2). + minimum-gas-prices = "0stake" +``` + +## Run a Localnet + +Now that everything is set up, you can finally start your node: + +```bash +simd start +``` + +> Note: By default nodes are run in full node mode. Running a local network means in most cases, the node is the only node in the network, requiring you to set the mode. + +You should see blocks come in. + +The previous command allow you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time, and see how consensus happens between them. + +The naive way would be to run the same commands again in separate terminal windows. This is possible, however in the Cosmos SDK, we leverage the power of [Docker Compose](https://docs.docker.com/compose/) to run a localnet. If you need inspiration on how to set up your own localnet with Docker Compose, you can have a look at the Cosmos SDK's [`docker-compose.yml`](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/docker-compose.yml). + +## State Sync + +State sync is the act in which a node syncs the latest or close to the latest state of a blockchain. This is useful for users who don't want to sync all the blocks in history. Read more in [CometBFT documentation](https://docs.cometbft.com/v0.34/core/state-sync). + +State sync works thanks to snapshots. Read how the SDK handles snapshots [here](https://github.com/cosmos/cosmos-sdk/blob/825245d/store/snapshots/README.md). + +### Local State Sync + +Local state sync work similar to normal state sync except that it works off a local snapshot of state instead of one provided via the p2p network. The steps to start local state sync are similar to normal state sync with a few different designs. + +1. As mentioned in https://docs.cometbft.com/v0.34/core/state-sync, one must set a height and hash in the config.toml along with a few rpc servers (the afromentioned link has instructions on how to do this). +2. Run ` ` to restore a local snapshot (note: first load it from a file with the *load* command). +3. Bootsrapping Comet state in order to start the node after the snapshot has been ingested. This can be done with the bootstrap command ` tendermint bootstrap-state` + +### Snapshots Commands + +The Cosmos SDK provides commands for managing snapshots. +These commands can be added in an app with the following snippet in `cmd//root.go`: + +```go +import ( + "github.com/cosmos/cosmos-sdk/client/snapshot" +) + +func initRootCmd(/* ... */) { + // ... + rootCmd.AddCommand( + snapshot.Cmd(appCreator), + ) +} +``` + +Then following commands are available at ` snapshots [command]`: + +* **list**: list local snapshots +* **load**: Load a snapshot archive file into snapshot store +* **restore**: Restore app state from local snapshot +* **export**: Export app state to snapshot store +* **dump**: Dump the snapshot as portable archive format +* **delete**: Delete a local snapshot diff --git a/versioned_docs/version-0.46/user/run-node/run-testnet.md b/versioned_docs/version-0.46/user/run-node/run-testnet.md new file mode 100644 index 000000000..55ad21d67 --- /dev/null +++ b/versioned_docs/version-0.46/user/run-node/run-testnet.md @@ -0,0 +1,99 @@ + + +# Running a Testnet + +The `simd testnet` subcommand makes it easy to initialize and start a simulated test network for testing purposes. {synopsis} + +In addition to the commands for [running a node](./run-node.html), the `simd` binary also includes a `testnet` command that allows you to start a simulated test network in-process or to initialize files for a simulated test network that runs in a separate process. + +## Initialize Files + +First, let's take a look at the `init-files` subcommand. + +This is similar to the `init` command when initializing a single node, but in this case we are initializing multiple nodes, generating the genesis transactions for each node, and then collecting those transactions. + +The `init-files` subcommand initializes the necessary files to run a test network in a separate process (i.e. using a Docker container). Running this command is not a prerequisite for the `start` subcommand ([see below](#start-testnet)). + +In order to initialize the files for a test network, run the following command: + +```bash +simd testnet init-files +``` + +You should see the following output in your terminal: + +```bash +Successfully initialized 4 node directories +``` + +The default output directory is a relative `.testnets` directory. Let's take a look at the files created within the `.testnets` directory. + +### gentxs + +The `gentxs` directory includes a genesis transaction for each validator node. Each file includes a JSON encoded genesis transaction used to register a validator node at the time of genesis. The genesis transactions are added to the `genesis.json` file within each node directory during the initilization process. + +### nodes + +A node directory is created for each validator node. Within each node directory is a `simd` directory. The `simd` directory is the home directory for each node, which includes the configuration and data files for that node (i.e. the same files included in the default `~/.simapp` directory when running a single node). + +## Start Testnet + +Now, let's take a look at the `start` subcommand. + +The `start` subcommand both initializes and starts an in-process test network. This is the fastest way to spin up a local test network for testing purposes. + +You can start the local test network by running the following command: + +```bash +simd testnet start +``` + +You should see something similar to the following: + +```bash +acquiring test network lock +preparing test network with chain-id "chain-mtoD9v" + + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++ THIS MNEMONIC IS FOR TESTING PURPOSES ONLY ++ +++ DO NOT USE IN PRODUCTION ++ +++ ++ +++ sustain know debris minute gate hybrid stereo custom ++ +++ divorce cross spoon machine latin vibrant term oblige ++ +++ moment beauty laundry repeat grab game bronze truly ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +starting test network... +started test network +press the Enter Key to terminate +``` + +The first validator node is now running in-process, which means the test network will terminate once you either close the terminal window or you press the Enter key. In the output, the mnemonic phrase for the first validator node is provided for testing purposes. The validator node is using the same default addresses being used when initializing and starting a single node (no need to provide a `--node` flag). + +Check the status of the first validator node: + +```sh +simd status +``` + +Import the key from the provided mnemonic: + +```sh +simd keys add test --recover --keyring-backend test +``` + +Check the balance of the account address: + +```sh +simd q bank balances [address] +``` + +Use this test account to manually test against the test network. + +## Testnet Options + +You can customize the configuration of the test network with flags. In order to see all flag options, append the `--help` flag to each command. diff --git a/versioned_docs/version-0.46/user/run-node/txs.md b/versioned_docs/version-0.46/user/run-node/txs.md new file mode 100644 index 000000000..9674d32f4 --- /dev/null +++ b/versioned_docs/version-0.46/user/run-node/txs.md @@ -0,0 +1,383 @@ + + +# Generating, Signing and Broadcasting Transactions + +This document describes how to generate an (unsigned) transaction, signing it (with one or multiple keys), and broadcasting it to the network. {synopsis} + +## Using the CLI + +The easiest way to send transactions is using the CLI, as we have seen in the previous page when [interacting with a node](./interact-node.md#using-the-cli). For example, running the following command + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --keyring-backend test +``` + +will run the following steps: + +* generate a transaction with one `Msg` (`x/bank`'s `MsgSend`), and print the generated transaction to the console. +* ask the user for confirmation to send the transaction from the `$MY_VALIDATOR_ADDRESS` account. +* fetch `$MY_VALIDATOR_ADDRESS` from the keyring. This is possible because we have [set up the CLI's keyring](./keyring.md) in a previous step. +* sign the generated transaction with the keyring's account. +* broadcast the signed transaction to the network. This is possible because the CLI connects to the node's Tendermint RPC endpoint. + +The CLI bundles all the necessary steps into a simple-to-use user experience. However, it's possible to run all the steps individually too. + +### Generating a Transaction + +Generating a transaction can simply be done by appending the `--generate-only` flag on any `tx` command, e.g.: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --generate-only +``` + +This will output the unsigned transaction as JSON in the console. We can also save the unsigned transaction to a file (to be passed around between signers more easily) by appending `> unsigned_tx.json` to the above command. + +### Signing a Transaction + +Signing a transaction using the CLI requires the unsigned transaction to be saved in a file. Let's assume the unsigned transaction is in a file called `unsigned_tx.json` in the current directory (see previous paragraph on how to do that). Then, simply run the following command: + +```bash +simd tx sign unsigned_tx.json --chain-id my-test-chain --keyring-backend test --from $MY_VALIDATOR_ADDRESS +``` + +This command will decode the unsigned transaction and sign it with `SIGN_MODE_DIRECT` with `$MY_VALIDATOR_ADDRESS`'s key, which we already set up in the keyring. The signed transaction will be output as JSON to the console, and, as above, we can save it to a file by appending `> signed_tx.json`. + +Some useful flags to consider in the `tx sign` command: + +* `--sign-mode`: you may use `amino-json` to sign the transaction using `SIGN_MODE_LEGACY_AMINO_JSON`, +* `--offline`: sign in offline mode. This means that the `tx sign` command doesn't connect to the node to retrieve the signer's account number and sequence, both needed for signing. In this case, you must manually supply the `--account-number` and `--sequence` flags. This is useful for offline signing, i.e. signing in a secure environment which doesn't have access to the internet. + +#### Signing with Multiple Signers + +::: warning +Please note that signing a transaction with multiple signers or with a multisig account, where at least one signer uses `SIGN_MODE_DIRECT`, is not yet possible. You may follow [this Github issue](https://github.com/cosmos/cosmos-sdk/issues/8141) for more info. +::: + +Signing with multiple signers is done with the `tx multisign` command. This command assumes that all signers use `SIGN_MODE_LEGACY_AMINO_JSON`. The flow is similar to the `tx sign` command flow, but instead of signing an unsigned transaction file, each signer signs the file signed by previous signer(s). The `tx multisign` command will append signatures to the existing transactions. It is important that signers sign the transaction **in the same order** as given by the transaction, which is retrievable using the `GetSigners()` method. + +For example, starting with the `unsigned_tx.json`, and assuming the transaction has 4 signers, we would run: + +```bash +# Let signer1 sign the unsigned tx. +simd tx multisign unsigned_tx.json signer_key_1 --chain-id my-test-chain --keyring-backend test > partial_tx_1.json +# Now signer1 will send the partial_tx_1.json to the signer2. +# Signer2 appends their signature: +simd tx multisign partial_tx_1.json signer_key_2 --chain-id my-test-chain --keyring-backend test > partial_tx_2.json +# Signer2 sends the partial_tx_2.json file to signer3, and signer3 can append his signature: +simd tx multisign partial_tx_2.json signer_key_3 --chain-id my-test-chain --keyring-backend test > partial_tx_3.json +``` + +### Broadcasting a Transaction + +Broadcasting a transaction is done using the following command: + +```bash +simd tx broadcast tx_signed.json +``` + +You may optionally pass the `--broadcast-mode` flag to specify which response to receive from the node: + +* `block`: the CLI waits for the tx to be committed in a block. +* `sync`: the CLI waits for a CheckTx execution response only. +* `async`: the CLI returns immediately (transaction might fail). + +### Encoding a Transaction + +In order to broadcast a transaction using the gRPC or REST endpoints, the transaction will need to be encoded first. This can be done using the CLI. + +Encoding a transaction is done using the following command: + +```bash +simd tx encode tx_signed.json +``` + +This will read the transaction from the file, serialize it using Protobuf, and output the transaction bytes as base64 in the console. + +### Decoding a Transaction + +The CLI can also be used to decode transaction bytes. + +Decoding a transaction is done using the following command: + +```bash +simd tx decode [protobuf-byte-string] +``` + +This will decode the transaction bytes and output the transaction as JSON in the console. You can also save the transaction to a file by appending `> tx.json` to the above command. + +## Programmatically with Go + +It is possible to manipulate transactions programmatically via Go using the Cosmos SDK's `TxBuilder` interface. + +### Generating a Transaction + +Before generating a transaction, a new instance of a `TxBuilder` needs to be created. Since the Cosmos SDK supports both Amino and Protobuf transactions, the first step would be to decide which encoding scheme to use. All the subsequent steps remain unchanged, whether you're using Amino or Protobuf, as `TxBuilder` abstracts the encoding mechanisms. In the following snippet, we will use Protobuf. + +```go +import ( + "github.com/cosmos/cosmos-sdk/simapp" +) + +func sendTx() error { + // Choose your codec: Amino or Protobuf. Here, we use Protobuf, given by the + // following function. + encCfg := simapp.MakeTestEncodingConfig() + + // Create a new TxBuilder. + txBuilder := encCfg.TxConfig.NewTxBuilder() + + // --snip-- +} +``` + +We can also set up some keys and addresses that will send and receive the transactions. Here, for the purpose of the tutorial, we will be using some dummy data to create keys. + +```go +import ( + "github.com/cosmos/cosmos-sdk/testutil/testdata" +) + +priv1, _, addr1 := testdata.KeyTestPubAddr() +priv2, _, addr2 := testdata.KeyTestPubAddr() +priv3, _, addr3 := testdata.KeyTestPubAddr() +``` + +Populating the `TxBuilder` can be done via its [methods](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0-rc1/client/tx_config.go#L33-L50): + +```go +import ( + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func sendTx() error { + // --snip-- + + // Define two x/bank MsgSend messages: + // - from addr1 to addr3, + // - from addr2 to addr3. + // This means that the transactions needs two signers: addr1 and addr2. + msg1 := banktypes.NewMsgSend(addr1, addr3, types.NewCoins(types.NewInt64Coin("atom", 12))) + msg2 := banktypes.NewMsgSend(addr2, addr3, types.NewCoins(types.NewInt64Coin("atom", 34))) + + err := txBuilder.SetMsgs(msg1, msg2) + if err != nil { + return err + } + + txBuilder.SetGasLimit(...) + txBuilder.SetFeeAmount(...) + txBuilder.SetMemo(...) + txBuilder.SetTimeoutHeight(...) +} +``` + +At this point, `TxBuilder`'s underlying transaction is ready to be signed. + +### Signing a Transaction + +We set encoding config to use Protobuf, which will use `SIGN_MODE_DIRECT` by default. As per [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-020-protobuf-transaction-encoding.md), each signer needs to sign the `SignerInfo`s of all other signers. This means that we need to perform two steps sequentially: + +* for each signer, populate the signer's `SignerInfo` inside `TxBuilder`, +* once all `SignerInfo`s are populated, for each signer, sign the `SignDoc` (the payload to be signed). + +In the current `TxBuilder`'s API, both steps are done using the same method: `SetSignatures()`. The current API requires us to first perform a round of `SetSignatures()` _with empty signatures_, only to populate `SignerInfo`s, and a second round of `SetSignatures()` to actually sign the correct payload. + +```go +import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" +) + +func sendTx() error { + // --snip-- + + privs := []cryptotypes.PrivKey{priv1, priv2} + accNums:= []uint64{..., ...} // The accounts' account numbers + accSeqs:= []uint64{..., ...} // The accounts' sequence numbers + + // First round: we gather all the signer infos. We use the "set empty + // signature" hack to do that. + var sigsV2 []signing.SignatureV2 + for i, priv := range privs { + sigV2 := signing.SignatureV2{ + PubKey: priv.PubKey(), + Data: &signing.SingleSignatureData{ + SignMode: encCfg.TxConfig.SignModeHandler().DefaultMode(), + Signature: nil, + }, + Sequence: accSeqs[i], + } + + sigsV2 = append(sigsV2, sigV2) + } + err := txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } + + // Second round: all signer infos are set, so each signer can sign. + sigsV2 = []signing.SignatureV2{} + for i, priv := range privs { + signerData := xauthsigning.SignerData{ + ChainID: chainID, + AccountNumber: accNums[i], + Sequence: accSeqs[i], + } + sigV2, err := tx.SignWithPrivKey( + encCfg.TxConfig.SignModeHandler().DefaultMode(), signerData, + txBuilder, priv, encCfg.TxConfig, accSeqs[i]) + if err != nil { + return nil, err + } + + sigsV2 = append(sigsV2, sigV2) + } + err = txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } +} +``` + +The `TxBuilder` is now correctly populated. To print it, you can use the `TxConfig` interface from the initial encoding config `encCfg`: + +```go +func sendTx() error { + // --snip-- + + // Generated Protobuf-encoded bytes. + txBytes, err := encCfg.TxConfig.TxEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + + // Generate a JSON string. + txJSONBytes, err := encCfg.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + txJSON := string(txJSONBytes) +} +``` + +### Broadcasting a Transaction + +The preferred way to broadcast a transaction is to use gRPC, though using REST (via `gRPC-gateway`) or the Tendermint RPC is also posible. An overview of the differences between these methods is exposed [here](../core/grpc_rest.md). For this tutorial, we will only describe the gRPC method. + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func sendTx(ctx context.Context) error { + // --snip-- + + // Create a connection to the gRPC server. + grpcConn := grpc.Dial( + "127.0.0.1:9090", // Or your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + ) + defer grpcConn.Close() + + // Broadcast the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + // We then call the BroadcastTx method on this client. + grpcRes, err := txClient.BroadcastTx( + ctx, + &tx.BroadcastTxRequest{ + Mode: tx.BroadcastMode_BROADCAST_MODE_SYNC, + TxBytes: txBytes, // Proto-binary of the signed transaction, see previous step. + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.TxResponse.Code) // Should be `0` if the tx is successful + + return nil +} +``` + +#### Simulating a Transaction + +Before broadcasting a transaction, we sometimes may want to dry-run the transaction, to estimate some information about the transaction without actually committing it. This is called simulating a transaction, and can be done as follows: + +```go +import ( + "context" + "fmt" + "testing" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/types/tx" + authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" +) + +func simulateTx() error { + // --snip-- + + // Simulate the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + txBytes := /* Fill in with your signed transaction bytes. */ + + // We then call the Simulate method on this client. + grpcRes, err := txClient.Simulate( + context.Background(), + &tx.SimulateRequest{ + TxBytes: txBytes, + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.GasInfo) // Prints estimated gas used. + + return nil +} +``` + +## Using gRPC + +It is not possible to generate or sign a transaction using gRPC, only to broadcast one. In order to broadcast a transaction using gRPC, you will need to generate, sign, and encode the transaction using either the CLI or programmatically with Go. + +### Broadcasting a Transaction + +Broadcasting a transaction using the gRPC endpoint can be done by sending a `BroadcastTx` request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +grpcurl -plaintext \ + -d '{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/BroadcastTx +``` + +## Using REST + +It is not possible to generate or sign a transaction using REST, only to broadcast one. In order to broadcast a transaction using REST, you will need to generate, sign, and encode the transaction using either the CLI or programmatically with Go. + +### Broadcasting a Transaction + +Broadcasting a transaction using the REST endpoint (served by `gRPC-gateway`) can be done by sending a POST request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +curl -X POST \ + -H "Content-Type: application/json" \ + -d'{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:1317/cosmos/tx/v1beta1/txs +``` + +## Using CosmJS (JavaScript & TypeScript) + +CosmJS aims to build client libraries in JavaScript that can be embedded in web applications. Please see [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs) for more information. As of January 2021, CosmJS documentation is still work in progress. diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/00-baseapp.md b/versioned_docs/version-0.47/develop/advanced-concepts/00-baseapp.md new file mode 100644 index 000000000..e18267116 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/00-baseapp.md @@ -0,0 +1,512 @@ +--- +sidebar_position: 1 +--- + +# BaseApp + +:::note Synopsis +This document describes `BaseApp`, the abstraction that implements the core functionalities of a Cosmos SDK application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/00-app-anatomy.md) +* [Lifecycle of a Cosmos SDK transaction](../basics/01-tx-lifecycle.md) + +::: + +## Introduction + +`BaseApp` is a base type that implements the core of a Cosmos SDK application, namely: + +* The [Application Blockchain Interface](#main-abci-messages), for the state-machine to communicate with the underlying consensus engine (e.g. CometBFT). +* [Service Routers](#service-routers), to route messages and queries to the appropriate module. +* Different [states](#state-updates), as the state-machine can have different volatile states updated based on the ABCI message received. + +The goal of `BaseApp` is to provide the fundamental layer of a Cosmos SDK application +that developers can easily extend to build their own custom application. Usually, +developers will create a custom type for their application, like so: + +```go +type App struct { + // reference to a BaseApp + *baseapp.BaseApp + + // list of application store keys + + // list of application keepers + + // module manager +} +``` + +Extending the application with `BaseApp` gives the former access to all of `BaseApp`'s methods. +This allows developers to compose their custom application with the modules they want, while not +having to concern themselves with the hard work of implementing the ABCI, the service routers and state +management logic. + +## Type Definition + +The `BaseApp` type holds many important parameters for any Cosmos SDK based application. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L50-L146 +``` + +Let us go through the most important components. + +> **Note**: Not all parameters are described, only the most important ones. Refer to the +> type definition for the full list. + +First, the important parameters that are initialized during the bootstrapping of the application: + +* [`CommitMultiStore`](./04-store.md#commitmultistore): This is the main store of the application, + which holds the canonical state that is committed at the [end of each block](#commit). This store + is **not** cached, meaning it is not used to update the application's volatile (un-committed) states. + The `CommitMultiStore` is a multi-store, meaning a store of stores. Each module of the application + uses one or multiple `KVStores` in the multi-store to persist their subset of the state. +* Database: The `db` is used by the `CommitMultiStore` to handle data persistence. +* [`Msg` Service Router](#msg-service-router): The `msgServiceRouter` facilitates the routing of `sdk.Msg` requests to the appropriate + module `Msg` service for processing. Here a `sdk.Msg` refers to the transaction component that needs to be + processed by a service in order to update the application state, and not to ABCI message which implements + the interface between the application and the underlying consensus engine. +* [gRPC Query Router](#grpc-query-router): The `grpcQueryRouter` facilitates the routing of gRPC queries to the + appropriate module for it to be processed. These queries are not ABCI messages themselves, but they + are relayed to the relevant module's gRPC `Query` service. +* [`TxDecoder`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types#TxDecoder): It is used to decode + raw transaction bytes relayed by the underlying CometBFT engine. +* [`AnteHandler`](#antehandler): This handler is used to handle signature verification, fee payment, + and other pre-message execution checks when a transaction is received. It's executed during + [`CheckTx/RecheckTx`](#checktx) and [`DeliverTx`](#delivertx). +* [`InitChainer`](../basics/00-app-anatomy.md#initchainer), + [`BeginBlocker` and `EndBlocker`](../basics/00-app-anatomy.md#beginblocker-and-endblocker): These are + the functions executed when the application receives the `InitChain`, `BeginBlock` and `EndBlock` + ABCI messages from the underlying CometBFT engine. + +Then, parameters used to define [volatile states](#state-updates) (i.e. cached states): + +* `checkState`: This state is updated during [`CheckTx`](#checktx), and reset on [`Commit`](#commit). +* `deliverState`: This state is updated during [`DeliverTx`](#delivertx), and set to `nil` on + [`Commit`](#commit) and gets re-initialized on BeginBlock. +* `processProposalState`: This state is updated during [`ProcessProposal`](#process-proposal). +* `prepareProposalState`: This state is updated during [`PrepareProposal`](#prepare-proposal). + +Finally, a few more important parameters: + +* `voteInfos`: This parameter carries the list of validators whose precommit is missing, either + because they did not vote or because the proposer did not include their vote. This information is + carried by the [Context](#context) and can be used by the application for various things like + punishing absent validators. +* `minGasPrices`: This parameter defines the minimum gas prices accepted by the node. This is a + **local** parameter, meaning each full-node can set a different `minGasPrices`. It is used in the + `AnteHandler` during [`CheckTx`](#checktx), mainly as a spam protection mechanism. The transaction + enters the [mempool](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#mempool-methods) + only if the gas prices of the transaction are greater than one of the minimum gas price in + `minGasPrices` (e.g. if `minGasPrices == 1uatom,1photon`, the `gas-price` of the transaction must be + greater than `1uatom` OR `1photon`). +* `appVersion`: Version of the application. It is set in the + [application's constructor function](../basics/00-app-anatomy.md#constructor-function). + +## Constructor + +```go +func NewBaseApp( + name string, logger log.Logger, db dbm.DB, txDecoder sdk.TxDecoder, options ...func(*BaseApp), +) *BaseApp { + + // ... +} +``` + +The `BaseApp` constructor function is pretty straightforward. The only thing worth noting is the +possibility to provide additional [`options`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/options.go) +to the `BaseApp`, which will execute them in order. The `options` are generally `setter` functions +for important parameters, like `SetPruning()` to set pruning options or `SetMinGasPrices()` to set +the node's `min-gas-prices`. + +Naturally, developers can add additional `options` based on their application's needs. + +## State Updates + +The `BaseApp` maintains four primary volatile states and a root or main state. The main state +is the canonical state of the application and the volatile states, `checkState`, `deliverState`, `prepareProposalState`, `processPreposalState`, +are used to handle state transitions in-between the main state made during [`Commit`](#commit). + +Internally, there is only a single `CommitMultiStore` which we refer to as the main or root state. +From this root state, we derive four volatile states by using a mechanism called _store branching_ (performed by `CacheWrap` function). +The types can be illustrated as follows: + +![Types](./baseapp_state.png) + +### InitChain State Updates + +During `InitChain`, the four volatile states, `checkState`, `prepareProposalState`, `processProposalState` +and `deliverState` are set by branching the root `CommitMultiStore`. Any subsequent reads and writes happen +on branched versions of the `CommitMultiStore`. +To avoid unnecessary roundtrip to the main state, all reads to the branched store are cached. + +![InitChain](./baseapp_state-initchain.png) + +### CheckTx State Updates + +During `CheckTx`, the `checkState`, which is based off of the last committed state from the root +store, is used for any reads and writes. Here we only execute the `AnteHandler` and verify a service router +exists for every message in the transaction. Note, when we execute the `AnteHandler`, we branch +the already branched `checkState`. +This has the side effect that if the `AnteHandler` fails, the state transitions won't be reflected in the `checkState` +-- i.e. `checkState` is only updated on success. + +![CheckTx](./baseapp_state-checktx.png) + +### PrepareProposal State Updates + +During `PrepareProposal`, the `prepareProposalState` is set by branching the root `CommitMultiStore`. +The `prepareProposalState` is used for any reads and writes that occur during the `PrepareProposal` phase. +The function uses the `Select()` method of the mempool to iterate over the transactions. `runTx` is then called, +which encodes and validates each transaction and from there the `AnteHandler` is executed. +If successful, valid transactions are returned inclusive of the events, tags, and data generated +during the execution of the proposal. +The described behavior is that of the default handler, applications have the flexibility to define their own +[custom mempool handlers](https://docs.cosmos.network/main/building-apps/app-mempool#custom-mempool-handlers). + +![ProcessProposal](./baseapp_state-prepareproposal.png) + +### ProcessProposal State Updates + +During `ProcessProposal`, the `processProposalState` is set based off of the last committed state +from the root store and is used to process a signed proposal received from a validator. +In this state, `runTx` is called and the `AnteHandler` is executed and the context used in this state is built with information +from the header and the main state, including the minimum gas prices, which are also set. +Again we want to highlight that the described behavior is that of the default handler and applications have the flexibility to define their own +[custom mempool handlers](https://docs.cosmos.network/main/building-apps/app-mempool#custom-mempool-handlers). + +![ProcessProposal](./baseapp_state-processproposal.png) + +### BeginBlock State Updates + +During `BeginBlock`, the `deliverState` is set for use in subsequent `DeliverTx` ABCI messages. The +`deliverState` is based off of the last committed state from the root store and is branched. +Note, the `deliverState` is set to `nil` on [`Commit`](#commit). + +![BeginBlock](./baseapp_state-begin_block.png) + +### DeliverTx State Updates + +The state flow for `DeliverTx` is nearly identical to `CheckTx` except state transitions occur on +the `deliverState` and messages in a transaction are executed. Similarly to `CheckTx`, state transitions +occur on a doubly branched state -- `deliverState`. Successful message execution results in +writes being committed to `deliverState`. Note, if message execution fails, state transitions from +the AnteHandler are persisted. + +![DeliverTx](./baseapp_state-deliver_tx.png) + +### Commit State Updates + +During `Commit` all the state transitions that occurred in the `deliverState` are finally written to +the root `CommitMultiStore` which in turn is committed to disk and results in a new application +root hash. These state transitions are now considered final. Finally, the `checkState` is set to the +newly committed state and `deliverState` is set to `nil` to be reset on `BeginBlock`. + +![Commit](./baseapp_state-commit.png) + +## ParamStore + +During `InitChain`, the `RequestInitChain` provides `ConsensusParams` which contains parameters +related to block execution such as maximum gas and size in addition to evidence parameters. If these +parameters are non-nil, they are set in the BaseApp's `ParamStore`. Behind the scenes, the `ParamStore` +is managed by an `x/consensus_params` module. This allows the parameters to be tweaked via + on-chain governance. + +## Service Routers + +When messages and queries are received by the application, they must be routed to the appropriate module in order to be processed. Routing is done via `BaseApp`, which holds a `msgServiceRouter` for messages, and a `grpcQueryRouter` for queries. + +### `Msg` Service Router + +[`sdk.Msg`s](../building-modules/02-messages-and-queries.md#messages) need to be routed after they are extracted from transactions, which are sent from the underlying CometBFT engine via the [`CheckTx`](#checktx) and [`DeliverTx`](#delivertx) ABCI messages. To do so, `BaseApp` holds a `msgServiceRouter` which maps fully-qualified service methods (`string`, defined in each module's Protobuf `Msg` service) to the appropriate module's `MsgServer` implementation. + +The [default `msgServiceRouter` included in `BaseApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/msg_service_router.go) is stateless. However, some applications may want to make use of more stateful routing mechanisms such as allowing governance to disable certain routes or point them to new modules for upgrade purposes. For this reason, the `sdk.Context` is also passed into each [route handler inside `msgServiceRouter`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/msg_service_router.go#L31-L32). For a stateless router that doesn't want to make use of this, you can just ignore the `ctx`. + +The application's `msgServiceRouter` is initialized with all the routes using the application's [module manager](../building-modules/01-module-manager.md#manager) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../basics/00-app-anatomy.md#constructor-function). + +### gRPC Query Router + +Similar to `sdk.Msg`s, [`queries`](../building-modules/02-messages-and-queries.md#queries) need to be routed to the appropriate module's [`Query` service](../building-modules/04-query-services.md). To do so, `BaseApp` holds a `grpcQueryRouter`, which maps modules' fully-qualified service methods (`string`, defined in their Protobuf `Query` gRPC) to their `QueryServer` implementation. The `grpcQueryRouter` is called during the initial stages of query processing, which can be either by directly sending a gRPC query to the gRPC endpoint, or via the [`Query` ABCI message](#query) on the CometBFT RPC endpoint. + +Just like the `msgServiceRouter`, the `grpcQueryRouter` is initialized with all the query routes using the application's [module manager](../building-modules/01-module-manager.md) (via the `RegisterServices` method), which itself is initialized with all the application's modules in the application's [constructor](../basics/00-app-anatomy.md#app-constructor). + +## Main ABCI 1.0 Messages + +The [Application-Blockchain Interface](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md) (ABCI) is a generic interface that connects a state-machine with a consensus engine to form a functional full-node. It can be wrapped in any language, and needs to be implemented by each application-specific blockchain built on top of an ABCI-compatible consensus engine like CometBFT. + +The consensus engine handles two main tasks: + +* The networking logic, which mainly consists in gossiping block parts, transactions and consensus votes. +* The consensus logic, which results in the deterministic ordering of transactions in the form of blocks. + +It is **not** the role of the consensus engine to define the state or the validity of transactions. Generally, transactions are handled by the consensus engine in the form of `[]bytes`, and relayed to the application via the ABCI to be decoded and processed. At keys moments in the networking and consensus processes (e.g. beginning of a block, commit of a block, reception of an unconfirmed transaction, ...), the consensus engine emits ABCI messages for the state-machine to act on. + +Developers building on top of the Cosmos SDK need not implement the ABCI themselves, as `BaseApp` comes with a built-in implementation of the interface. Let us go through the main ABCI messages that `BaseApp` implements: + +* [`Prepare Proposal`](#prepare-proposal) +* [`Process Proposal`](#process-proposal) +* [`CheckTx`](#checktx) +* [`DeliverTx`](#delivertx) + + +### Prepare Proposal + +The `PrepareProposal` function is part of the new methods introduced in Application Blockchain Interface (ABCI++) in CometBFT and is an important part of the application's overall governance system. In the Cosmos SDK, it allows the application to have more fine-grained control over the transactions that are processed, and ensures that only valid transactions are committed to the blockchain. + +Here is how the `PrepareProposal` function can be implemented: + +1. Extract the `sdk.Msg`s from the transaction. +2. Perform _stateful_ checks by calling `Validate()` on each of the `sdk.Msg`'s. This is done after _stateless_ checks as _stateful_ checks are more computationally expensive. If `Validate()` fails, `PrepareProposal` returns before running further checks, which saves resources. +3. Perform any additional checks that are specific to the application, such as checking account balances, or ensuring that certain conditions are met before a transaction is proposed.hey are processed by the consensus engine, if necessary. +5. Return the updated transactions to be processed by the consensus engine + +Note that, unlike `CheckTx()`, `PrepareProposal` process `sdk.Msg`s, so it can directly update the state. However, unlike `DeliverTx()`, it does not commit the state updates. It's important to exercise caution when using `PrepareProposal` as incorrect coding could affect the overall liveness of the network. + +It's important to note that `PrepareProposal` complements the `ProcessProposal` method which is executed after this method. The combination of these two methods means that it is possible to guarantee that no invalid transactions are ever committed. Furthermore, such a setup can give rise to other interesting use cases such as Oracles, threshold decryption and more. + +`PrepareProposal` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#processproposal). The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. + + +### Process Proposal + +The `ProcessProposal` function is called by the BaseApp as part of the ABCI message flow, and is executed during the `BeginBlock` phase of the consensus process. The purpose of this function is to give more control to the application for block validation, allowing it to check all transactions in a proposed block before the validator sends the prevote for the block. It allows a validator to perform application-dependent work in a proposed block, enabling features such as immediate block execution, and allows the Application to reject invalid blocks. + +The `ProcessProposal` function performs several key tasks, including: + +1. Validating the proposed block by checking all transactions in it. +2. Checking the proposed block against the current state of the application, to ensure that it is valid and that it can be executed. +3. Updating the application's state based on the proposal, if it is valid and passes all checks. +4. Returning a response to CometBFT indicating the result of the proposal processing. + +The `ProcessProposal` is an important part of the application's overall governance system. It is used to manage the network's parameters and other key aspects of its operation. It also ensures that the coherence property is adhered to i.e. all honest validators must accept a proposal by an honest proposer. + +It's important to note that `ProcessProposal` complements the `PrepareProposal` method which enables the application to have more fine-grained transaction control by allowing it to reorder, drop, delay, modify, and even add transactions as they see necessary. The combination of these two methods means that it is possible to guarantee that no invalid transactions are ever committed. Furthermore, such a setup can give rise to other interesting use cases such as Oracles, threshold decryption and more. + +CometBFT calls it when it receives a proposal and the CometBFT algorithm has not locked on a value. The Application cannot modify the proposal at this point but can reject it if it is invalid. If that is the case, CometBFT will prevote `nil` on the proposal, which has strong liveness implications for CometBFT. As a general rule, the Application SHOULD accept a prepared proposal passed via `ProcessProposal`, even if a part of the proposal is invalid (e.g., an invalid transaction); the Application can ignore the invalid part of the prepared proposal at block execution time. + +However, developers must exercise greater caution when using these methods. Incorrectly coding these methods could affect liveness as CometBFT is unable to receive 2/3 valid precommits to finalize a block. + +`ProcessProposal` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#processproposal). The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. + + +### CheckTx + +`CheckTx` is sent by the underlying consensus engine when a new unconfirmed (i.e. not yet included in a valid block) +transaction is received by a full-node. The role of `CheckTx` is to guard the full-node's mempool +(where unconfirmed transactions are stored until they are included in a block) from spam transactions. +Unconfirmed transactions are relayed to peers only if they pass `CheckTx`. + +`CheckTx()` can perform both _stateful_ and _stateless_ checks, but developers should strive to +make the checks **lightweight** because gas fees are not charged for the resources (CPU, data load...) used during the `CheckTx`. + +In the Cosmos SDK, after [decoding transactions](./05-encoding.md), `CheckTx()` is implemented +to do the following checks: + +1. Extract the `sdk.Msg`s from the transaction. +2. Perform _stateless_ checks by calling `ValidateBasic()` on each of the `sdk.Msg`s. This is done + first, as _stateless_ checks are less computationally expensive than _stateful_ checks. If + `ValidateBasic()` fail, `CheckTx` returns before running _stateful_ checks, which saves resources. +3. Perform non-module related _stateful_ checks on the [account](../basics/03-accounts.md). This step is mainly about checking + that the `sdk.Msg` signatures are valid, that enough fees are provided and that the sending account + has enough funds to pay for said fees. Note that no precise [`gas`](../basics/04-gas-fees.md) counting occurs here, + as `sdk.Msg`s are not processed. Usually, the [`AnteHandler`](../basics/04-gas-fees.md#antehandler) will check that the `gas` provided + with the transaction is superior to a minimum reference gas amount based on the raw transaction size, + in order to avoid spam with transactions that provide 0 gas. + +`CheckTx` does **not** process `sdk.Msg`s - they only need to be processed when the canonical state need to be updated, which happens during `DeliverTx`. + +Steps 2. and 3. are performed by the [`AnteHandler`](../basics/04-gas-fees.md#antehandler) in the [`RunTx()`](#runtx-antehandler-and-runmsgs) +function, which `CheckTx()` calls with the `runTxModeCheck` mode. During each step of `CheckTx()`, a +special [volatile state](#state-updates) called `checkState` is updated. This state is used to keep +track of the temporary changes triggered by the `CheckTx()` calls of each transaction without modifying +the [main canonical state](#main-state). For example, when a transaction goes through `CheckTx()`, the +transaction's fees are deducted from the sender's account in `checkState`. If a second transaction is +received from the same account before the first is processed, and the account has consumed all its +funds in `checkState` during the first transaction, the second transaction will fail `CheckTx`() and +be rejected. In any case, the sender's account will not actually pay the fees until the transaction +is actually included in a block, because `checkState` never gets committed to the main state. The +`checkState` is reset to the latest state of the main state each time a blocks gets [committed](#commit). + +`CheckTx` returns a response to the underlying consensus engine of type [`abci.ResponseCheckTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#checktx). +The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. +* `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +* `GasUsed (int64)`: Amount of gas consumed by transaction. During `CheckTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction. Next is an example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/basic.go#L96 +``` + +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](./08-events.md) for more. +* `Codespace (string)`: Namespace for the Code. + +#### RecheckTx + +After `Commit`, `CheckTx` is run again on all transactions that remain in the node's local mempool +excluding the transactions that are included in the block. To prevent the mempool from rechecking all transactions +every time a block is committed, the configuration option `mempool.recheck=false` can be set. As of +Tendermint v0.32.1, an additional `Type` parameter is made available to the `CheckTx` function that +indicates whether an incoming transaction is new (`CheckTxType_New`), or a recheck (`CheckTxType_Recheck`). +This allows certain checks like signature verification can be skipped during `CheckTxType_Recheck`. + +### DeliverTx + +When the underlying consensus engine receives a block proposal, each transaction in the block needs to be processed by the application. To that end, the underlying consensus engine sends a `DeliverTx` message to the application for each transaction in a sequential order. + +Before the first transaction of a given block is processed, a [volatile state](#state-updates) called `deliverState` is initialized during [`BeginBlock`](#beginblock). This state is updated each time a transaction is processed via `DeliverTx`, and committed to the [main state](#main-state) when the block is [committed](#commit), after what it is set to `nil`. + +`DeliverTx` performs the **exact same steps as `CheckTx`**, with a little caveat at step 3 and the addition of a fifth step: + +1. The `AnteHandler` does **not** check that the transaction's `gas-prices` is sufficient. That is because the `min-gas-prices` value `gas-prices` is checked against is local to the node, and therefore what is enough for one full-node might not be for another. This means that the proposer can potentially include transactions for free, although they are not incentivised to do so, as they earn a bonus on the total fee of the block they propose. +2. For each `sdk.Msg` in the transaction, route to the appropriate module's Protobuf [`Msg` service](../building-modules/03-msg-services.md). Additional _stateful_ checks are performed, and the branched multistore held in `deliverState`'s `context` is updated by the module's `keeper`. If the `Msg` service returns successfully, the branched multistore held in `context` is written to `deliverState` `CacheMultiStore`. + +During the additional fifth step outlined in (2), each read/write to the store increases the value of `GasConsumed`. You can find the default cost of each operation: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L230-L241 +``` + +At any point, if `GasConsumed > GasWanted`, the function returns with `Code != 0` and `DeliverTx` fails. + +`DeliverTx` returns a response to the underlying consensus engine of type [`abci.ResponseDeliverTx`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#delivertx). The response contains: + +* `Code (uint32)`: Response Code. `0` if successful. +* `Data ([]byte)`: Result bytes, if any. +* `Log (string):` The output of the application's logger. May be non-deterministic. +* `Info (string):` Additional information. May be non-deterministic. +* `GasWanted (int64)`: Amount of gas requested for transaction. It is provided by users when they generate the transaction. +* `GasUsed (int64)`: Amount of gas consumed by transaction. During `DeliverTx`, this value is computed by multiplying the standard cost of a transaction byte by the size of the raw transaction, and by adding gas each time a read/write to the store occurs. +* `Events ([]cmn.KVPair)`: Key-Value tags for filtering and indexing transactions (eg. by account). See [`event`s](./08-events.md) for more. +* `Codespace (string)`: Namespace for the Code. + +## RunTx, AnteHandler, RunMsgs, PostHandler + +### RunTx + +`RunTx` is called from `CheckTx`/`DeliverTx` to handle the transaction, with `runTxModeCheck` or `runTxModeDeliver` as parameter to differentiate between the two modes of execution. Note that when `RunTx` receives a transaction, it has already been decoded. + +The first thing `RunTx` does upon being called is to retrieve the `context`'s `CacheMultiStore` by calling the `getContextForTx()` function with the appropriate mode (either `runTxModeCheck` or `runTxModeDeliver`). This `CacheMultiStore` is a branch of the main store, with cache functionality (for query requests), instantiated during `BeginBlock` for `DeliverTx` and during the `Commit` of the previous block for `CheckTx`. After that, two `defer func()` are called for [`gas`](../basics/04-gas-fees.md) management. They are executed when `runTx` returns and make sure `gas` is actually consumed, and will throw errors, if any. + +After that, `RunTx()` calls `ValidateBasic()` on each `sdk.Msg`in the `Tx`, which runs preliminary _stateless_ validity checks. If any `sdk.Msg` fails to pass `ValidateBasic()`, `RunTx()` returns with an error. + +Then, the [`anteHandler`](#antehandler) of the application is run (if it exists). In preparation of this step, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L663-L672 +``` + +This allows `RunTx` not to commit the changes made to the state during the execution of `anteHandler` if it ends up failing. It also prevents the module implementing the `anteHandler` from writing to state, which is an important part of the [object-capabilities](./10-ocap.md) of the Cosmos SDK. + +Finally, the [`RunMsgs()`](#runmsgs) function is called to process the `sdk.Msg`s in the `Tx`. In preparation of this step, just like with the `anteHandler`, both the `checkState`/`deliverState`'s `context` and `context`'s `CacheMultiStore` are branched using the `cacheTxContext()` function. + +### AnteHandler + +The `AnteHandler` is a special handler that implements the `AnteHandler` interface and is used to authenticate the transaction before the transaction's internal messages are processed. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/handler.go#L6-L8 +``` + +The `AnteHandler` is theoretically optional, but still a very important component of public blockchain networks. It serves 3 primary purposes: + +* Be a primary line of defense against spam and second line of defense (the first one being the mempool) against transaction replay with fees deduction and [`sequence`](./01-transactions.md#transaction-generation) checking. +* Perform preliminary _stateful_ validity checks like ensuring signatures are valid or that the sender has enough funds to pay for fees. +* Play a role in the incentivisation of stakeholders via the collection of transaction fees. + +`BaseApp` holds an `anteHandler` as parameter that is initialized in the [application's constructor](../basics/00-app-anatomy.md#application-constructor). The most widely used `anteHandler` is the [`auth` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/ante/ante.go). + +Click [here](../basics/04-gas-fees.md#antehandler) for more on the `anteHandler`. + +### RunMsgs + +`RunMsgs` is called from `RunTx` with `runTxModeCheck` as parameter to check the existence of a route for each message the transaction, and with `runTxModeDeliver` to actually process the `sdk.Msg`s. + +First, it retrieves the `sdk.Msg`'s fully-qualified type name, by checking the `type_url` of the Protobuf `Any` representing the `sdk.Msg`. Then, using the application's [`msgServiceRouter`](#msg-service-router), it checks for the existence of `Msg` service method related to that `type_url`. At this point, if `mode == runTxModeCheck`, `RunMsgs` returns. Otherwise, if `mode == runTxModeDeliver`, the [`Msg` service](../building-modules/03-msg-services.md) RPC is executed, before `RunMsgs` returns. + +### PostHandler + +`PostHandler` is similar to `AnteHandler`, but it, as the name suggests, executes custom post tx processing logic after [`RunMsgs`](#runmsgs) is called. `PostHandler` receives the `Result` of the the `RunMsgs` in order to enable this customizable behavior. + +Like `AnteHandler`s, `PostHandler`s are theoretically optional, one use case for `PostHandler`s is transaction tips (enabled by default in simapp). +Other use cases like unused gas refund can also be enabled by `PostHandler`s. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/posthandler/post.go#L1-L15 +``` + +Note, when `PostHandler`s fail, the state from `runMsgs` is also reverted, effectively making the transaction fail. + +## Other ABCI Messages + +### InitChain + +The [`InitChain` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when the chain is first started. It is mainly used to **initialize** parameters and state like: + +* [Consensus Parameters](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#consensus-parameters) via `setConsensusParams`. +* [`checkState` and `deliverState`](#state-updates) via `setState`. +* The [block gas meter](../basics/04-gas-fees.md#block-gas-meter), with infinite gas to process genesis transactions. + +Finally, the `InitChain(req abci.RequestInitChain)` method of `BaseApp` calls the [`initChainer()`](../basics/00-app-anatomy.md#initchainer) of the application in order to initialize the main state of the application from the `genesis file` and, if defined, call the [`InitGenesis`](../building-modules/08-genesis.md#initgenesis) function of each of the application's modules. + +### BeginBlock + +The [`BeginBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine when a block proposal created by the correct proposer is received, before [`DeliverTx`](#delivertx) is run for each transaction in the block. It allows developers to have logic be executed at the beginning of each block. In the Cosmos SDK, the `BeginBlock(req abci.RequestBeginBlock)` method does the following: + +* Initialize [`deliverState`](#state-updates) with the latest header using the `req abci.RequestBeginBlock` passed as parameter via the `setState` function. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L406-L433 + ``` + + This function also resets the [main gas meter](../basics/04-gas-fees.md#main-gas-meter). + +* Initialize the [block gas meter](../basics/04-gas-fees.md#block-gas-meter) with the `maxGas` limit. The `gas` consumed within the block cannot go above `maxGas`. This parameter is defined in the application's consensus parameters. +* Run the application's [`beginBlocker()`](../basics/00-app-anatomy.md#beginblocker-and-endblock), which mainly runs the [`BeginBlocker()`](../building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. +* Set the [`VoteInfos`](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_methods.md#voteinfo) of the application, i.e. the list of validators whose _precommit_ for the previous block was included by the proposer of the current block. This information is carried into the [`Context`](./02-context.md) so that it can be used during `DeliverTx` and `EndBlock`. + +### EndBlock + +The [`EndBlock` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after [`DeliverTx`](#delivertx) as been run for each transaction in the block. It allows developers to have logic be executed at the end of each block. In the Cosmos SDK, the bulk `EndBlock(req abci.RequestEndBlock)` method is to run the application's [`EndBlocker()`](../basics/00-app-anatomy.md#beginblocker-and-endblock), which mainly runs the [`EndBlocker()`](../building-modules/05-beginblock-endblock.md#beginblock) method of each of the application's modules. + +### Commit + +The [`Commit` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#method-overview) is sent from the underlying CometBFT engine after the full-node has received _precommits_ from 2/3+ of validators (weighted by voting power). On the `BaseApp` end, the `Commit(res abci.ResponseCommit)` function is implemented to commit all the valid state transitions that occurred during `BeginBlock`, `DeliverTx` and `EndBlock` and to reset state for the next block. + +To commit state-transitions, the `Commit` function calls the `Write()` function on `deliverState.ms`, where `deliverState.ms` is a branched multistore of the main store `app.cms`. Then, the `Commit` function sets `checkState` to the latest header (obtained from `deliverState.ctx.BlockHeader`) and `deliverState` to `nil`. + +Finally, `Commit` returns the hash of the commitment of `app.cms` back to the underlying consensus engine. This hash is used as a reference in the header of the next block. + +### Info + +The [`Info` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is a simple query from the underlying consensus engine, notably used to sync the latter with the application during a handshake that happens on startup. When called, the `Info(res abci.ResponseInfo)` function from `BaseApp` will return the application's name, version and the hash of the last commit of `app.cms`. + +### Query + +The [`Query` ABCI message](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_basic_concepts.md#info-methods) is used to serve queries received from the underlying consensus engine, including queries received via RPC like CometBFT RPC. It used to be the main entrypoint to build interfaces with the application, but with the introduction of [gRPC queries](../building-modules/04-query-services.md) in Cosmos SDK v0.40, its usage is more limited. The application must respect a few rules when implementing the `Query` method, which are outlined [here](https://github.com/cometbft/cometbft/blob/v0.37.x/spec/abci/abci++_app_requirements.md#query). + +Each CometBFT `query` comes with a `path`, which is a `string` which denotes what to query. If the `path` matches a gRPC fully-qualified service method, then `BaseApp` will defer the query to the `grpcQueryRouter` and let it handle it like explained [above](#grpc-query-router). Otherwise, the `path` represents a query that is not (yet) handled by the gRPC router. `BaseApp` splits the `path` string with the `/` delimiter. By convention, the first element of the split string (`split[0]`) contains the category of `query` (`app`, `p2p`, `store` or `custom` ). The `BaseApp` implementation of the `Query(req abci.RequestQuery)` method is a simple dispatcher serving these 4 main categories of queries: + +* Application-related queries like querying the application's version, which are served via the `handleQueryApp` method. +* Direct queries to the multistore, which are served by the `handlerQueryStore` method. These direct queries are different from custom queries which go through `app.queryRouter`, and are mainly used by third-party service provider like block explorers. +* P2P queries, which are served via the `handleQueryP2P` method. These queries return either `app.addrPeerFilter` or `app.ipPeerFilter` that contain the list of peers filtered by address or IP respectively. These lists are first initialized via `options` in `BaseApp`'s [constructor](#constructor). diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/01-transactions.md b/versioned_docs/version-0.47/develop/advanced-concepts/01-transactions.md new file mode 100644 index 000000000..8c1fa3f9e --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/01-transactions.md @@ -0,0 +1,199 @@ +--- +sidebar_position: 1 +--- + +# Transactions + +:::note Synopsis +`Transactions` are objects created by end-users to trigger state changes in the application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](../basics/00-app-anatomy.md) + +::: + +## Transactions + +Transactions are comprised of metadata held in [contexts](./02-context.md) and [`sdk.Msg`s](../building-modules/02-messages-and-queries.md) that trigger state changes within a module through the module's Protobuf [`Msg` service](../building-modules/03-msg-services.md). + +When users want to interact with an application and make state changes (e.g. sending coins), they create transactions. Each of a transaction's `sdk.Msg` must be signed using the private key associated with the appropriate account(s), before the transaction is broadcasted to the network. A transaction must then be included in a block, validated, and approved by the network through the consensus process. To read more about the lifecycle of a transaction, click [here](../basics/01-tx-lifecycle.md). + +## Type Definition + +Transaction objects are Cosmos SDK types that implement the `Tx` interface + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L42-L50 +``` + +It contains the following methods: + +* **GetMsgs:** unwraps the transaction and returns a list of contained `sdk.Msg`s - one transaction may have one or multiple messages, which are defined by module developers. +* **ValidateBasic:** lightweight, [_stateless_](../basics/01-tx-lifecycle.md#types-of-checks) checks used by ABCI messages [`CheckTx`](./00-baseapp.md#checktx) and [`DeliverTx`](./00-baseapp.md#delivertx) to make sure transactions are not invalid. For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth) module's `ValidateBasic` function checks that its transactions are signed by the correct number of signers and that the fees do not exceed what the user's maximum. Note that this function is to be distinct from `sdk.Msg` [`ValidateBasic`](../basics/01-tx-lifecycle.md#ValidateBasic) methods, which perform basic validity checks on messages only. When [`runTx`](./00-baseapp.md#runtx) is checking a transaction created from the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/spec) module, it first runs `ValidateBasic` on each message, then runs the `auth` module AnteHandler which calls `ValidateBasic` for the transaction itself. + +As a developer, you should rarely manipulate `Tx` directly, as `Tx` is really an intermediate type used for transaction generation. Instead, developers should prefer the `TxBuilder` interface, which you can learn more about [below](#transaction-generation). + +### Signing Transactions + +Every message in a transaction must be signed by the addresses specified by its `GetSigners`. The Cosmos SDK currently allows signing transactions in two different ways. + +#### `SIGN_MODE_DIRECT` (preferred) + +The most used implementation of the `Tx` interface is the Protobuf `Tx` message, which is used in `SIGN_MODE_DIRECT`: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 +``` + +Because Protobuf serialization is not deterministic, the Cosmos SDK uses an additional `TxRaw` type to denote the pinned bytes over which a transaction is signed. Any user can generate a valid `body` and `auth_info` for a transaction, and serialize these two messages using Protobuf. `TxRaw` then pins the user's exact binary representation of `body` and `auth_info`, called respectively `body_bytes` and `auth_info_bytes`. The document that is signed by all signers of the transaction is `SignDoc` (deterministically serialized using [ADR-027](../architecture/adr-027-deterministic-protobuf-serialization.md)): + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 +``` + +Once signed by all signers, the `body_bytes`, `auth_info_bytes` and `signatures` are gathered into `TxRaw`, whose serialized bytes are broadcasted over the network. + +#### `SIGN_MODE_LEGACY_AMINO_JSON` + +The legacy implementation of the `Tx` interface is the `StdTx` struct from `x/auth`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx.go#L83-L93 +``` + +The document signed by all signers is `StdSignDoc`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdsign.go#L38-L52 +``` + +which is encoded into bytes using Amino JSON. Once all signatures are gathered into `StdTx`, `StdTx` is serialized using Amino JSON, and these bytes are broadcasted over the network. + +#### Other Sign Modes + +The Cosmos SDK also provides a couple of other sign modes for particular use cases. + +#### `SIGN_MODE_DIRECT_AUX` + +`SIGN_MODE_DIRECT_AUX` is a sign mode released in the Cosmos SDK v0.46 which targets transactions with multiple signers. Whereas `SIGN_MODE_DIRECT` expects each signer to sign over both `TxBody` and `AuthInfo` (which includes all other signers' signer infos, i.e. their account sequence, public key and mode info), `SIGN_MODE_DIRECT_AUX` allows N-1 signers to only sign over `TxBody` and _their own_ signer info. Morever, each auxiliary signer (i.e. a signer using `SIGN_MODE_DIRECT_AUX`) doesn't +need to sign over the fees: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L97 +``` + +The use case is a multi-signer transaction, where one of the signers is appointed to gather all signatures, broadcast the signature and pay for fees, and the others only care about the transaction body. This generally allows for a better multi-signing UX. If Alice, Bob and Charlie are part of a 3-signer transaction, then Alice and Bob can both use `SIGN_MODE_DIRECT_AUX` to sign over the `TxBody` and their own signer info (no need an additional step to gather other signers' ones, like in `SIGN_MODE_DIRECT`), without specifying a fee in their SignDoc. Charlie can then gather both signatures from Alice and Bob, and +create the final transaction by appending a fee. Note that the fee payer of the transaction (in our case Charlie) must sign over the fees, so must use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. + +A concrete use case is implemented in [transaction tips](./14-tips.md): the tipper may use `SIGN_MODE_DIRECT_AUX` to specify a tip in the transaction, without signing over the actual transaction fees. Then, the fee payer appends fees inside the tipper's desired `TxBody`, and as an exchange for paying the fees and broadcasting the transaction, receives the tipper's transaction tips as payment. + +#### `SIGN_MODE_TEXTUAL` + +`SIGN_MODE_TEXTUAL` is a new sign mode for delivering a better signing experience on hardware wallets, it is currently still under implementation. If you wish to learn more, please refer to [ADR-050](https://github.com/cosmos/cosmos-sdk/pull/10701). + +#### Custom Sign modes + +There is the the opportunity to add your own custom sign mode to the Cosmos-SDK. While we can not accept the implementation of the sign mode to the repository, we can accept a pull request to add the custom signmode to the SignMode enum located [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/signing/v1beta1/signing.proto#L17) + +## Transaction Process + +The process of an end-user sending a transaction is: + +* decide on the messages to put into the transaction, +* generate the transaction using the Cosmos SDK's `TxBuilder`, +* broadcast the transaction using one of the available interfaces. + +The next paragraphs will describe each of these components, in this order. + +### Messages + +:::tip +Module `sdk.Msg`s are not to be confused with [ABCI Messages](https://docs.cometbft.com/v0.37/spec/abci/) which define interactions between the CometBFT and application layers. +::: + +**Messages** (or `sdk.Msg`s) are module-specific objects that trigger state transitions within the scope of the module they belong to. Module developers define the messages for their module by adding methods to the Protobuf [`Msg` service](../building-modules/03-msg-services.md), and also implement the corresponding `MsgServer`. + +Each `sdk.Msg`s is related to exactly one Protobuf [`Msg` service](../building-modules/03-msg-services.md) RPC, defined inside each module's `tx.proto` file. A SDK app router automatically maps every `sdk.Msg` to a corresponding RPC. Protobuf generates a `MsgServer` interface for each module `Msg` service, and the module developer needs to implement this interface. +This design puts more responsibility on module developers, allowing application developers to reuse common functionalities without having to implement state transition logic repetitively. + +To learn more about Protobuf `Msg` services and how to implement `MsgServer`, click [here](../building-modules/03-msg-services.md). + +While messages contain the information for state transition logic, a transaction's other metadata and relevant information are stored in the `TxBuilder` and `Context`. + +### Transaction Generation + +The `TxBuilder` interface contains data closely related with the generation of transactions, which an end-user can freely set to generate the desired transaction: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L50 +``` + +* `Msg`s, the array of [messages](#messages) included in the transaction. +* `GasLimit`, option chosen by the users for how to calculate how much gas they will need to pay. +* `Memo`, a note or comment to send with the transaction. +* `FeeAmount`, the maximum amount the user is willing to pay in fees. +* `TimeoutHeight`, block height until which the transaction is valid. +* `Signatures`, the array of signatures from all signers of the transaction. + +As there are currently two sign modes for signing transactions, there are also two implementations of `TxBuilder`: + +* [wrapper](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/builder.go#L18-L34) for creating transactions for `SIGN_MODE_DIRECT`, +* [StdTxBuilder](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdtx_builder.go#L15-L21) for `SIGN_MODE_LEGACY_AMINO_JSON`. + +However, the two implementation of `TxBuilder` should be hidden away from end-users, as they should prefer using the overarching `TxConfig` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L22-L31 +``` + +`TxConfig` is an app-wide configuration for managing transactions. Most importantly, it holds the information about whether to sign each transaction with `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. By calling `txBuilder := txConfig.NewTxBuilder()`, a new `TxBuilder` will be created with the appropriate sign mode. + +Once `TxBuilder` is correctly populated with the setters exposed above, `TxConfig` will also take care of correctly encoding the bytes (again, either using `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`). Here's a pseudo-code snippet of how to generate and encode a transaction, using the `TxEncoder()` method: + +```go +txBuilder := txConfig.NewTxBuilder() +txBuilder.SetMsgs(...) // and other setters on txBuilder + +bz, err := txConfig.TxEncoder()(txBuilder.GetTx()) +// bz are bytes to be broadcasted over the network +``` + +### Broadcasting the Transaction + +Once the transaction bytes are generated, there are currently three ways of broadcasting it. + +#### CLI + +Application developers create entry points to the application by creating a [command-line interface](../core/07-cli.md), [gRPC and/or REST interface](../core/06-grpc_rest.md), typically found in the application's `./cmd` folder. These interfaces allow users to interact with the application through command-line. + +For the [command-line interface](../building-modules/09-module-interfaces.md#cli), module developers create subcommands to add as children to the application top-level transaction command `TxCmd`. CLI commands actually bundle all the steps of transaction processing into one simple command: creating messages, generating transactions and broadcasting. For concrete examples, see the [Interacting with a Node](../run-node/02-interact-node.md) section. An example transaction made using CLI looks like: + +```bash +simd tx send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake +``` + +#### gRPC + +[gRPC](https://grpc.io) is the main component for the Cosmos SDK's RPC layer. Its principal usage is in the context of modules' [`Query` services](../building-modules/04-query-services.md). However, the Cosmos SDK also exposes a few other module-agnostic gRPC services, one of them being the `Tx` service: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/service.proto +``` + +The `Tx` service exposes a handful of utility functions, such as simulating a transaction or querying a transaction, and also one method to broadcast transactions. + +Examples of broadcasting and simulating a transaction are shown [here](../run-node/03-txs.md#programmatically-with-go). + +#### REST + +Each gRPC method has its corresponding REST endpoint, generated using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). Therefore, instead of using gRPC, you can also use HTTP to broadcast the same transaction, on the `POST /cosmos/tx/v1beta1/txs` endpoint. + +An example can be seen [here](../run-node/03-txs.md#using-rest) + +#### CometBFT RPC + +The three methods presented above are actually higher abstractions over the CometBFT RPC `/broadcast_tx_{async,sync,commit}` endpoints, documented [here](https://docs.cometbft.com/v0.37/core/rpc). This means that you can use the CometBFT RPC endpoints directly to broadcast the transaction, if you wish so. diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/02-context.md b/versioned_docs/version-0.47/develop/advanced-concepts/02-context.md new file mode 100644 index 000000000..74e4a7a24 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/02-context.md @@ -0,0 +1,102 @@ +--- +sidebar_position: 1 +--- + +# Context + +:::note Synopsis +The `context` is a data structure intended to be passed from function to function that carries information about the current state of the application. It provides access to a branched storage (a safe branch of the entire state) as well as useful objects and information like `gasMeter`, `block height`, `consensus parameters` and more. +::: + +:::note + +### Pre-requisites Readings + +* [Anatomy of a Cosmos SDK Application](../basics/00-app-anatomy.md) +* [Lifecycle of a Transaction](../basics/01-tx-lifecycle.md) + +::: + +## Context Definition + +The Cosmos SDK `Context` is a custom data structure that contains Go's stdlib [`context`](https://pkg.go.dev/context) as its base, and has many additional types within its definition that are specific to the Cosmos SDK. The `Context` is integral to transaction processing in that it allows modules to easily access their respective [store](./04-store.md#base-layer-kvstores) in the [`multistore`](./04-store.md#multistore) and retrieve transactional context such as the block header and gas meter. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/context.go#L17-L44 +``` + +* **Base Context:** The base type is a Go [Context](https://pkg.go.dev/context), which is explained further in the [Go Context Package](#go-context-package) section below. +* **Multistore:** Every application's `BaseApp` contains a [`CommitMultiStore`](./04-store.md#multistore) which is provided when a `Context` is created. Calling the `KVStore()` and `TransientStore()` methods allows modules to fetch their respective [`KVStore`](./04-store.md#base-layer-kvstores) using their unique `StoreKey`. +* **Header:** The [header](https://docs.cometbft.com/v0.37/spec/core/data_structures#header) is a Blockchain type. It carries important information about the state of the blockchain, such as block height and proposer of the current block. +* **Header Hash:** The current block header hash, obtained during `abci.RequestBeginBlock`. +* **Chain ID:** The unique identification number of the blockchain a block pertains to. +* **Transaction Bytes:** The `[]byte` representation of a transaction being processed using the context. Every transaction is processed by various parts of the Cosmos SDK and consensus engine (e.g. CometBFT) throughout its [lifecycle](../basics/01-tx-lifecycle.md), some of which do not have any understanding of transaction types. Thus, transactions are marshaled into the generic `[]byte` type using some kind of [encoding format](./05-encoding.md) such as [Amino](./05-encoding.md). +* **Logger:** A `logger` from the CometBFT libraries. Learn more about logs [here](https://docs.cometbft.com/v0.37/core/configuration). Modules call this method to create their own unique module-specific logger. +* **VoteInfo:** A list of the ABCI type [`VoteInfo`](https://docs.cometbft.com/master/spec/abci/abci.html#voteinfo), which includes the name of a validator and a boolean indicating whether they have signed the block. +* **Gas Meters:** Specifically, a [`gasMeter`](../basics/04-gas-fees.md#main-gas-meter) for the transaction currently being processed using the context and a [`blockGasMeter`](../basics/04-gas-fees.md#block-gas-meter) for the entire block it belongs to. Users specify how much in fees they wish to pay for the execution of their transaction; these gas meters keep track of how much [gas](../basics/04-gas-fees.md) has been used in the transaction or block so far. If the gas meter runs out, execution halts. +* **CheckTx Mode:** A boolean value indicating whether a transaction should be processed in `CheckTx` or `DeliverTx` mode. +* **Min Gas Price:** The minimum [gas](../basics/04-gas-fees.md) price a node is willing to take in order to include a transaction in its block. This price is a local value configured by each node individually, and should therefore **not be used in any functions used in sequences leading to state-transitions**. +* **Consensus Params:** The ABCI type [Consensus Parameters](https://docs.cometbft.com/master/spec/abci/apps.html#consensus-parameters), which specify certain limits for the blockchain, such as maximum gas for a block. +* **Event Manager:** The event manager allows any caller with access to a `Context` to emit [`Events`](./08-events.md). Modules may define module specific + `Events` by defining various `Types` and `Attributes` or use the common definitions found in `types/`. Clients can subscribe or query for these `Events`. These `Events` are collected throughout `DeliverTx`, `BeginBlock`, and `EndBlock` and are returned to CometBFT for indexing. For example: +* **Priority:** The transaction priority, only relevant in `CheckTx`. +* **KV `GasConfig`:** Enables applications to set a custom `GasConfig` for the `KVStore`. +* **Transient KV `GasConfig`:** Enables applications to set a custom `GasConfig` for the transiant `KVStore`. + +## Go Context Package + +A basic `Context` is defined in the [Golang Context Package](https://pkg.go.dev/context). A `Context` +is an immutable data structure that carries request-scoped data across APIs and processes. Contexts +are also designed to enable concurrency and to be used in goroutines. + +Contexts are intended to be **immutable**; they should never be edited. Instead, the convention is +to create a child context from its parent using a `With` function. For example: + +```go +childCtx = parentCtx.WithBlockHeader(header) +``` + +The [Golang Context Package](https://pkg.go.dev/context) documentation instructs developers to +explicitly pass a context `ctx` as the first argument of a process. + +## Store branching + +The `Context` contains a `MultiStore`, which allows for branchinig and caching functionality using `CacheMultiStore` +(queries in `CacheMultiStore` are cached to avoid future round trips). +Each `KVStore` is branched in a safe and isolated ephemeral storage. Processes are free to write changes to +the `CacheMultiStore`. If a state-transition sequence is performed without issue, the store branch can +be committed to the underlying store at the end of the sequence or disregard them if something +goes wrong. The pattern of usage for a Context is as follows: + +1. A process receives a Context `ctx` from its parent process, which provides information needed to + perform the process. +2. The `ctx.ms` is a **branched store**, i.e. a branch of the [multistore](./04-store.md#multistore) is made so that the process can make changes to the state as it executes, without changing the original`ctx.ms`. This is useful to protect the underlying multistore in case the changes need to be reverted at some point in the execution. +3. The process may read and write from `ctx` as it is executing. It may call a subprocess and pass + `ctx` to it as needed. +4. When a subprocess returns, it checks if the result is a success or failure. If a failure, nothing + needs to be done - the branch `ctx` is simply discarded. If successful, the changes made to + the `CacheMultiStore` can be committed to the original `ctx.ms` via `Write()`. + +For example, here is a snippet from the [`runTx`](./00-baseapp.md#runtx-antehandler-runmsgs-posthandler) function in [`baseapp`](./00-baseapp.md): + +```go +runMsgCtx, msCache := app.cacheTxContext(ctx, txBytes) +result = app.runMsgs(runMsgCtx, msgs, mode) +result.GasWanted = gasWanted +if mode != runTxModeDeliver { + return result +} +if result.IsOK() { + msCache.Write() +} +``` + +Here is the process: + +1. Prior to calling `runMsgs` on the message(s) in the transaction, it uses `app.cacheTxContext()` + to branch and cache the context and multistore. +2. `runMsgCtx` - the context with branched store, is used in `runMsgs` to return a result. +3. If the process is running in [`checkTxMode`](./00-baseapp.md#checktx), there is no need to write the + changes - the result is returned immediately. +4. If the process is running in [`deliverTxMode`](./00-baseapp.md#delivertx) and the result indicates + a successful run over all the messages, the branched multistore is written back to the original. diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/03-node.md b/versioned_docs/version-0.47/develop/advanced-concepts/03-node.md new file mode 100644 index 000000000..67eb018ca --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/03-node.md @@ -0,0 +1,98 @@ +--- +sidebar_position: 1 +--- + +# Node Client (Daemon) + +:::note Synopsis +The main endpoint of a Cosmos SDK application is the daemon client, otherwise known as the full-node client. The full-node runs the state-machine, starting from a genesis file. It connects to peers running the same client in order to receive and relay transactions, block proposals and signatures. The full-node is constituted of the application, defined with the Cosmos SDK, and of a consensus engine connected to the application via the ABCI. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of an SDK application](../basics/00-app-anatomy.md) + +::: + +## `main` function + +The full-node client of any Cosmos SDK application is built by running a `main` function. The client is generally named by appending the `-d` suffix to the application name (e.g. `appd` for an application named `app`), and the `main` function is defined in a `./appd/cmd/main.go` file. Running this function creates an executable `appd` that comes with a set of commands. For an app named `app`, the main command is [`appd start`](#start-command), which starts the full-node. + +In general, developers will implement the `main.go` function with the following structure: + +* First, an [`encodingCodec`](./05-encoding.md) is instantiated for the application. +* Then, the `config` is retrieved and config parameters are set. This mainly involves setting the Bech32 prefixes for [addresses](../basics/03-accounts.md#addresses). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/config.go#L14-L29 +``` + +* Using [cobra](https://github.com/spf13/cobra), the root command of the full-node client is created. After that, all the custom commands of the application are added using the `AddCommand()` method of `rootCmd`. +* Add default server commands to `rootCmd` using the `server.AddCommands()` method. These commands are separated from the ones added above since they are standard and defined at Cosmos SDK level. They should be shared by all Cosmos SDK-based applications. They include the most important command: the [`start` command](#start-command). +* Prepare and execute the `executor`. + +```go reference +https://github.com/cometbft/cometbft/blob/v0.37.0/libs/cli/setup.go#L74-L78 +``` + +See an example of `main` function from the `simapp` application, the Cosmos SDK's application for demo purposes: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/main.go +``` + +## `start` command + +The `start` command is defined in the `/server` folder of the Cosmos SDK. It is added to the root command of the full-node client in the [`main` function](#main-function) and called by the end-user to start their node: + +```bash +# For an example app named "app", the following command starts the full-node. +appd start + +# Using the Cosmos SDK's own simapp, the following commands start the simapp node. +simd start +``` + +As a reminder, the full-node is composed of three conceptual layers: the networking layer, the consensus layer and the application layer. The first two are generally bundled together in an entity called the consensus engine (CometBFT by default), while the third is the state-machine defined with the help of the Cosmos SDK. Currently, the Cosmos SDK uses CometBFT as the default consensus engine, meaning the start command is implemented to boot up a CometBFT node. + +The flow of the `start` command is pretty straightforward. First, it retrieves the `config` from the `context` in order to open the `db` (a [`leveldb`](https://github.com/syndtr/goleveldb) instance by default). This `db` contains the latest known state of the application (empty if the application is started from the first time. + +With the `db`, the `start` command creates a new instance of the application using an `appCreator` function: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/start.go#L220 +``` + +Note that an `appCreator` is a function that fulfills the `AppCreator` signature: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/types/app.go#L64-L66 +``` + +In practice, the [constructor of the application](../basics/00-app-anatomy.md#constructor-function) is passed as the `appCreator`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L254-L268 +``` + +Then, the instance of `app` is used to instantiate a new CometBFT node: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/start.go#L336-L348 +``` + +The CometBFT node can be created with `app` because the latter satisfies the [`abci.Application` interface](https://github.com/cometbft/cometbft/blob/v0.37.0/abci/types/application.go#L9-L35) (given that `app` extends [`baseapp`](./00-baseapp.md)). As part of the `node.New` method, CometBFT makes sure that the height of the application (i.e. number of blocks since genesis) is equal to the height of the CometBFT node. The difference between these two heights should always be negative or null. If it is strictly negative, `node.New` will replay blocks until the height of the application reaches the height of the CometBFT node. Finally, if the height of the application is `0`, the CometBFT node will call [`InitChain`](./00-baseapp.md#initchain) on the application to initialize the state from the genesis file. + +Once the CometBFT node is instantiated and in sync with the application, the node can be started: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/start.go#L350-L352 +``` + +Upon starting, the node will bootstrap its RPC and P2P server and start dialing peers. During handshake with its peers, if the node realizes they are ahead, it will query all the blocks sequentially in order to catch up. Then, it will wait for new block proposals and block signatures from validators in order to make progress. + +## Other commands + +To discover how to concretely run a node and interact with it, please refer to our [Running a Node, API and CLI](../run-node/01-run-node.md) guide. diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/04-store.md b/versioned_docs/version-0.47/develop/advanced-concepts/04-store.md new file mode 100644 index 000000000..239cec484 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/04-store.md @@ -0,0 +1,290 @@ +--- +sidebar_position: 1 +--- + +# Store + +:::note Synopsis +A store is a data structure that holds the state of the application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/00-app-anatomy.md) + +::: + +## Introduction to Cosmos SDK Stores + +The Cosmos SDK comes with a large set of stores to persist the state of applications. By default, the main store of Cosmos SDK applications is a `multistore`, i.e. a store of stores. Developers can add any number of key-value stores to the multistore, depending on their application needs. The multistore exists to support the modularity of the Cosmos SDK, as it lets each module declare and manage their own subset of the state. Key-value stores in the multistore can only be accessed with a specific capability `key`, which is typically held in the [`keeper`](../building-modules/06-keeper.md) of the module that declared the store. + +```text ++-----------------------------------------------------+ +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 1 - Manage by keeper of Module 1 | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 2 - Manage by keeper of Module 2 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 3 - Manage by keeper of Module 2 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 4 - Manage by keeper of Module 3 | | +| | | | +| +--------------------------------------------+ | +| | +| +--------------------------------------------+ | +| | | | +| | KVStore 5 - Manage by keeper of Module 4 | | +| | | | +| +--------------------------------------------+ | +| | +| Main Multistore | +| | ++-----------------------------------------------------+ + + Application's State +``` + +### Store Interface + +At its very core, a Cosmos SDK `store` is an object that holds a `CacheWrapper` and has a `GetStoreType()` method: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/store.go#L15-L18 +``` + +The `GetStoreType` is a simple method that returns the type of store, whereas a `CacheWrapper` is a simple interface that implements store read caching and write branching through `Write` method: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/store.go#L260-L284 +``` + +Branching and cache is used ubiquitously in the Cosmos SDK and required to be implemented on every store type. A storage branch creates an isolated, ephemeral branch of a store that can be passed around and updated without affecting the main underlying store. This is used to trigger temporary state-transitions that may be reverted later should an error occur. Read more about it in [context](./02-context.md#Store-branching) + +### Commit Store + +A commit store is a store that has the ability to commit changes made to the underlying tree or db. The Cosmos SDK differentiates simple stores from commit stores by extending the basic store interfaces with a `Committer`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/store.go#L28-L33 +``` + +The `Committer` is an interface that defines methods to persist changes to disk: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/store.go#L20-L27 +``` + +The `CommitID` is a deterministic commit of the state tree. Its hash is returned to the underlying consensus engine and stored in the block header. Note that commit store interfaces exist for various purposes, one of which is to make sure not every object can commit the store. As part of the [object-capabilities model](./10-ocap.md) of the Cosmos SDK, only `baseapp` should have the ability to commit stores. For example, this is the reason why the `ctx.KVStore()` method by which modules typically access stores returns a `KVStore` and not a `CommitKVStore`. + +The Cosmos SDK comes with many types of stores, the most used being [`CommitMultiStore`](#multistore), [`KVStore`](#kvstore) and [`GasKv` store](#gaskv-store). [Other types of stores](#other-stores) include `Transient` and `TraceKV` stores. + +## Multistore + +### Multistore Interface + +Each Cosmos SDK application holds a multistore at its root to persist its state. The multistore is a store of `KVStores` that follows the `Multistore` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/store.go#L101-L133 +``` + +If tracing is enabled, then branching the multistore will firstly wrap all the underlying `KVStore` in [`TraceKv.Store`](#tracekv-store). + +### CommitMultiStore + +The main type of `Multistore` used in the Cosmos SDK is `CommitMultiStore`, which is an extension of the `Multistore` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/store.go#L141-L200 +``` + +As for concrete implementation, the [`rootMulti.Store`] is the go-to implementation of the `CommitMultiStore` interface. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/rootmulti/store.go#L53-L77 +``` + +The `rootMulti.Store` is a base-layer multistore built around a `db` on top of which multiple `KVStores` can be mounted, and is the default multistore store used in [`baseapp`](./00-baseapp.md). + +### CacheMultiStore + +Whenever the `rootMulti.Store` needs to be branched, a [`cachemulti.Store`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/cachemulti/store.go) is used. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/cachemulti/store.go#L19-L33 +``` + +`cachemulti.Store` branches all substores (creates a virtual store for each substore) in its constructor and hold them in `Store.stores`. Moreover caches all read queries. `Store.GetKVStore()` returns the store from `Store.stores`, and `Store.Write()` recursively calls `CacheWrap.Write()` on all the substores. + +## Base-layer KVStores + +### `KVStore` and `CommitKVStore` Interfaces + +A `KVStore` is a simple key-value store used to store and retrieve data. A `CommitKVStore` is a `KVStore` that also implements a `Committer`. By default, stores mounted in `baseapp`'s main `CommitMultiStore` are `CommitKVStore`s. The `KVStore` interface is primarily used to restrict modules from accessing the committer. + +Individual `KVStore`s are used by modules to manage a subset of the global state. `KVStores` can be accessed by objects that hold a specific key. This `key` should only be exposed to the [`keeper`](../building-modules/06-keeper.md) of the module that defines the store. + +`CommitKVStore`s are declared by proxy of their respective `key` and mounted on the application's [multistore](#multistore) in the [main application file](../basics/00-app-anatomy.md#core-application-file). In the same file, the `key` is also passed to the module's `keeper` that is responsible for managing the store. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/store.go#L206-L239 +``` + +Apart from the traditional `Get` and `Set` methods, that a `KVStore` must implement via the `BasicKVStore` interface; a `KVStore` must provide an `Iterator(start, end)` method which returns an `Iterator` object. It is used to iterate over a range of keys, typically keys that share a common prefix. Below is an example from the bank's module keeper, used to iterate over all account balances: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/view.go#L115-L132 +``` + +### `IAVL` Store + +The default implementation of `KVStore` and `CommitKVStore` used in `baseapp` is the `iavl.Store`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/iavl/store.go#L37-L41 +``` + +`iavl` stores are based around an [IAVL Tree](https://github.com/cosmos/iavl), a self-balancing binary tree which guarantees that: + +* `Get` and `Set` operations are O(log n), where n is the number of elements in the tree. +* Iteration efficiently returns the sorted elements within the range. +* Each tree version is immutable and can be retrieved even after a commit (depending on the pruning settings). + +The documentation on the IAVL Tree is located [here](https://github.com/cosmos/iavl/blob/master/docs/overview.md). + +### `DbAdapter` Store + +`dbadapter.Store` is a adapter for `dbm.DB` making it fulfilling the `KVStore` interface. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/dbadapter/store.go#L13-L16 +``` + +`dbadapter.Store` embeds `dbm.DB`, meaning most of the `KVStore` interface functions are implemented. The other functions (mostly miscellaneous) are manually implemented. This store is primarily used within [Transient Stores](#transient-store) + +### `Transient` Store + +`Transient.Store` is a base-layer `KVStore` which is automatically discarded at the end of the block. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/transient/store.go#L16-L19 +``` + +`Transient.Store` is a `dbadapter.Store` with a `dbm.NewMemDB()`. All `KVStore` methods are reused. When `Store.Commit()` is called, a new `dbadapter.Store` is assigned, discarding previous reference and making it garbage collected. + +This type of store is useful to persist information that is only relevant per-block. One example would be to store parameter changes (i.e. a bool set to `true` if a parameter changed in a block). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/params/types/subspace.go#L21-L31 +``` + +Transient stores are typically accessed via the [`context`](./02-context.md) via the `TransientStore()` method: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/context.go#L284-L287 +``` + +## KVStore Wrappers + +### CacheKVStore + +`cachekv.Store` is a wrapper `KVStore` which provides buffered writing / cached reading functionalities over the underlying `KVStore`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/cachekv/store.go#L26-L36 +``` + +This is the type used whenever an IAVL Store needs to be branched to create an isolated store (typically when we need to mutate a state that might be reverted later). + +#### `Get` + +`Store.Get()` firstly checks if `Store.cache` has an associated value with the key. If the value exists, the function returns it. If not, the function calls `Store.parent.Get()`, caches the result in `Store.cache`, and returns it. + +#### `Set` + +`Store.Set()` sets the key-value pair to the `Store.cache`. `cValue` has the field dirty bool which indicates whether the cached value is different from the underlying value. When `Store.Set()` caches a new pair, the `cValue.dirty` is set `true` so when `Store.Write()` is called it can be written to the underlying store. + +#### `Iterator` + +`Store.Iterator()` have to traverse on both cached items and the original items. In `Store.iterator()`, two iterators are generated for each of them, and merged. `memIterator` is essentially a slice of the `KVPairs`, used for cached items. `mergeIterator` is a combination of two iterators, where traverse happens ordered on both iterators. + +### `GasKv` Store + +Cosmos SDK applications use [`gas`](../basics/04-gas-fees.md) to track resources usage and prevent spam. [`GasKv.Store`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/gaskv/store.go) is a `KVStore` wrapper that enables automatic gas consumption each time a read or write to the store is made. It is the solution of choice to track storage usage in Cosmos SDK applications. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/gaskv/store.go#L11-L17 +``` + +When methods of the parent `KVStore` are called, `GasKv.Store` automatically consumes appropriate amount of gas depending on the `Store.gasConfig`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L219-L228 +``` + +By default, all `KVStores` are wrapped in `GasKv.Stores` when retrieved. This is done in the `KVStore()` method of the [`context`](./02-context.md): + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/context.go#L279-L282 +``` + +In this case, the gas configuration set in the `context` is used. The gas configuration can be set using the `WithKVGasConfig` method of the `context`. +Otherwise it uses the following default: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L230-L241 +``` + +### `TraceKv` Store + +`tracekv.Store` is a wrapper `KVStore` which provides operation tracing functionalities over the underlying `KVStore`. It is applied automatically by the Cosmos SDK on all `KVStore` if tracing is enabled on the parent `MultiStore`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/tracekv/store.go#L20-L43 +``` + +When each `KVStore` methods are called, `tracekv.Store` automatically logs `traceOperation` to the `Store.writer`. `traceOperation.Metadata` is filled with `Store.context` when it is not nil. `TraceContext` is a `map[string]interface{}`. + +### `Prefix` Store + +`prefix.Store` is a wrapper `KVStore` which provides automatic key-prefixing functionalities over the underlying `KVStore`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/prefix/store.go#L15-L21 +``` + +When `Store.{Get, Set}()` is called, the store forwards the call to its parent, with the key prefixed with the `Store.prefix`. + +When `Store.Iterator()` is called, it does not simply prefix the `Store.prefix`, since it does not work as intended. In that case, some of the elements are traversed even they are not starting with the prefix. + +### `ListenKv` Store + +`listenkv.Store` is a wrapper `KVStore` which provides state listening capabilities over the underlying `KVStore`. +It is applied automatically by the Cosmos SDK on any `KVStore` whose `StoreKey` is specified during state streaming configuration. +Additional information about state streaming configuration can be found in the [store/streaming/README.md](https://github.com/cosmos/cosmos-sdk/tree/v0.47.0-rc1/store/streaming). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/listenkv/store.go#L11-L18 +``` + +When `KVStore.Set` or `KVStore.Delete` methods are called, `listenkv.Store` automatically writes the operations to the set of `Store.listeners`. + +## `BasicKVStore` interface + +An interface providing only the basic CRUD functionality (`Get`, `Set`, `Has`, and `Delete` methods), without iteration or caching. This is used to partially expose components of a larger store. diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/05-encoding.md b/versioned_docs/version-0.47/develop/advanced-concepts/05-encoding.md new file mode 100644 index 000000000..55e889f98 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/05-encoding.md @@ -0,0 +1,320 @@ +--- +sidebar_position: 1 +--- + +# Encoding + +:::note Synopsis +While encoding in the Cosmos SDK used to be mainly handled by `go-amino` codec, the Cosmos SDK is moving towards using `gogoprotobuf` for both state and client-side encoding. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/00-app-anatomy.md) + +::: + +## Encoding + +The Cosmos SDK utilizes two binary wire encoding protocols, [Amino](https://github.com/tendermint/go-amino/) which is an object encoding specification and [Protocol Buffers](https://developers.google.com/protocol-buffers), a subset of Proto3 with an extension for +interface support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) +for more information on Proto3, which Amino is largely compatible with (but not with Proto2). + +Due to Amino having significant performance drawbacks, being reflection-based, and +not having any meaningful cross-language/client support, Protocol Buffers, specifically +[gogoprotobuf](https://github.com/cosmos/gogoproto/), is being used in place of Amino. +Note, this process of using Protocol Buffers over Amino is still an ongoing process. + +Binary wire encoding of types in the Cosmos SDK can be broken down into two main +categories, client encoding and store encoding. Client encoding mainly revolves +around transaction processing and signing, whereas store encoding revolves around +types used in state-machine transitions and what is ultimately stored in the Merkle +tree. + +For store encoding, protobuf definitions can exist for any type and will typically +have an Amino-based "intermediary" type. Specifically, the protobuf-based type +definition is used for serialization and persistence, whereas the Amino-based type +is used for business logic in the state-machine where they may convert back-n-forth. +Note, the Amino-based types may slowly be phased-out in the future, so developers +should take note to use the protobuf message definitions where possible. + +In the `codec` package, there exists two core interfaces, `BinaryCodec` and `JSONCodec`, +where the former encapsulates the current Amino interface except it operates on +types implementing the latter instead of generic `interface{}` types. + +In addition, there exists two implementations of `Codec`. The first being +`AminoCodec`, where both binary and JSON serialization is handled via Amino. The +second being `ProtoCodec`, where both binary and JSON serialization is handled +via Protobuf. + +This means that modules may use Amino or Protobuf encoding, but the types must +implement `ProtoMarshaler`. If modules wish to avoid implementing this interface +for their types, they may use an Amino codec directly. + +### Amino + +Every module uses an Amino codec to serialize types and interfaces. This codec typically +has types and interfaces registered in that module's domain only (e.g. messages), +but there are exceptions like `x/gov`. Each module exposes a `RegisterLegacyAminoCodec` function +that allows a user to provide a codec and have all the types registered. An application +will call this method for each necessary module. + +Where there is no protobuf-based type definition for a module (see below), Amino +is used to encode and decode raw wire bytes to the concrete type or interface: + +```go +bz := keeper.cdc.MustMarshal(typeOrInterface) +keeper.cdc.MustUnmarshal(bz, &typeOrInterface) +``` + +Note, there are length-prefixed variants of the above functionality and this is +typically used for when the data needs to be streamed or grouped together +(e.g. `ResponseDeliverTx.Data`) + +#### Authz authorizations and Gov/Group proposals + +Since authz's `MsgExec` and `MsgGrant` message types, as well as gov's and group's `MsgSubmitProposal`, can contain different messages instances, it is important that developers +add the following code inside the `init` method of their module's `codec.go` file: + +```go +import ( + authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" + govcodec "github.com/cosmos/cosmos-sdk/x/gov/codec" + groupcodec "github.com/cosmos/cosmos-sdk/x/group/codec" +) + +init() { + // Register all Amino interfaces and concrete types on the authz and gov Amino codec so that this can later be + // used to properly serialize MsgGrant, MsgExec and MsgSubmitProposal instances + RegisterLegacyAminoCodec(authzcodec.Amino) + RegisterLegacyAminoCodec(govcodec.Amino) + RegisterLegacyAminoCodec(groupcodec.Amino) +} +``` + +This will allow the `x/authz` module to properly serialize and de-serializes `MsgExec` instances using Amino, +which is required when signing this kind of messages using a Ledger. + +### Gogoproto + +Modules are encouraged to utilize Protobuf encoding for their respective types. In the Cosmos SDK, we use the [Gogoproto](https://github.com/cosmos/gogoproto) specific implementation of the Protobuf spec that offers speed and DX improvements compared to the official [Google protobuf implementation](https://github.com/protocolbuffers/protobuf). + +### Guidelines for protobuf message definitions + +In addition to [following official Protocol Buffer guidelines](https://developers.google.com/protocol-buffers/docs/proto3#simple), we recommend using these annotations in .proto files when dealing with interfaces: + +* use `cosmos_proto.accepts_interface` to annote `Any` fields that accept interfaces + * pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` + * example: `(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"` (and not just `Content`) +* annotate interface implementations with `cosmos_proto.implements_interface` + * pass the same fully qualified name as `protoName` to `InterfaceRegistry.RegisterInterface` + * example: `(cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"` (and not just `Authorization`) + +Code generators can then match the `accepts_interface` and `implements_interface` annotations to know whether some Protobuf messages are allowed to be packed in a given `Any` field or not. + +### Transaction Encoding + +Another important use of Protobuf is the encoding and decoding of +[transactions](./01-transactions.md). Transactions are defined by the application or +the Cosmos SDK but are then passed to the underlying consensus engine to be relayed to +other peers. Since the underlying consensus engine is agnostic to the application, +the consensus engine accepts only transactions in the form of raw bytes. + +* The `TxEncoder` object performs the encoding. +* The `TxDecoder` object performs the decoding. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L76-L80 +``` + +A standard implementation of both these objects can be found in the [`auth/tx` module](../modules/auth/tx/README.md): + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/decoder.go +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/tx/encoder.go +``` + +See [ADR-020](../architecture/adr-020-protobuf-transaction-encoding.md) for details of how a transaction is encoded. + +### Interface Encoding and Usage of `Any` + +The Protobuf DSL is strongly typed, which can make inserting variable-typed fields difficult. Imagine we want to create a `Profile` protobuf message that serves as a wrapper over [an account](../basics/03-accounts.md): + +```protobuf +message Profile { + // account is the account associated to a profile. + cosmos.auth.v1beta1.BaseAccount account = 1; + // bio is a short description of the account. + string bio = 4; +} +``` + +In this `Profile` example, we hardcoded `account` as a `BaseAccount`. However, there are several other types of [user accounts related to vesting](../modules/auth/1-vesting.md), such as `BaseVestingAccount` or `ContinuousVestingAccount`. All of these accounts are different, but they all implement the `AccountI` interface. How would you create a `Profile` that allows all these types of accounts with an `account` field that accepts an `AccountI` interface? + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/types/account.go#L307-L330 +``` + +In [ADR-019](../architecture/adr-019-protobuf-state-encoding.md), it has been decided to use [`Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto)s to encode interfaces in protobuf. An `Any` contains an arbitrary serialized message as bytes, along with a URL that acts as a globally unique identifier for and resolves to that message's type. This strategy allows us to pack arbitrary Go types inside protobuf messages. Our new `Profile` then looks like: + +```protobuf +message Profile { + // account is the account associated to a profile. + google.protobuf.Any account = 1 [ + (cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.AccountI"; // Asserts that this field only accepts Go types implementing `AccountI`. It is purely informational for now. + ]; + // bio is a short description of the account. + string bio = 4; +} +``` + +To add an account inside a profile, we need to "pack" it inside an `Any` first, using `codectypes.NewAnyWithValue`: + +```go +var myAccount AccountI +myAccount = ... // Can be a BaseAccount, a ContinuousVestingAccount or any struct implementing `AccountI` + +// Pack the account into an Any +accAny, err := codectypes.NewAnyWithValue(myAccount) +if err != nil { + return nil, err +} + +// Create a new Profile with the any. +profile := Profile { + Account: accAny, + Bio: "some bio", +} + +// We can then marshal the profile as usual. +bz, err := cdc.Marshal(profile) +jsonBz, err := cdc.MarshalJSON(profile) +``` + +To summarize, to encode an interface, you must 1/ pack the interface into an `Any` and 2/ marshal the `Any`. For convenience, the Cosmos SDK provides a `MarshalInterface` method to bundle these two steps. Have a look at [a real-life example in the x/auth module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/keeper.go#L240-L243). + +The reverse operation of retrieving the concrete Go type from inside an `Any`, called "unpacking", is done with the `GetCachedValue()` on `Any`. + +```go +profileBz := ... // The proto-encoded bytes of a Profile, e.g. retrieved through gRPC. +var myProfile Profile +// Unmarshal the bytes into the myProfile struct. +err := cdc.Unmarshal(profilebz, &myProfile) + +// Let's see the types of the Account field. +fmt.Printf("%T\n", myProfile.Account) // Prints "Any" +fmt.Printf("%T\n", myProfile.Account.GetCachedValue()) // Prints "BaseAccount", "ContinuousVestingAccount" or whatever was initially packed in the Any. + +// Get the address of the accountt. +accAddr := myProfile.Account.GetCachedValue().(AccountI).GetAddress() +``` + +It is important to note that for `GetCachedValue()` to work, `Profile` (and any other structs embedding `Profile`) must implement the `UnpackInterfaces` method: + +```go +func (p *Profile) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + if p.Account != nil { + var account AccountI + return unpacker.UnpackAny(p.Account, &account) + } + + return nil +} +``` + +The `UnpackInterfaces` gets called recursively on all structs implementing this method, to allow all `Any`s to have their `GetCachedValue()` correctly populated. + +For more information about interface encoding, and especially on `UnpackInterfaces` and how the `Any`'s `type_url` gets resolved using the `InterfaceRegistry`, please refer to [ADR-019](../architecture/adr-019-protobuf-state-encoding.md). + +#### `Any` Encoding in the Cosmos SDK + +The above `Profile` example is a fictive example used for educational purposes. In the Cosmos SDK, we use `Any` encoding in several places (non-exhaustive list): + +* the `cryptotypes.PubKey` interface for encoding different types of public keys, +* the `sdk.Msg` interface for encoding different `Msg`s in a transaction, +* the `AccountI` interface for encodinig different types of accounts (similar to the above example) in the x/auth query responses, +* the `Evidencei` interface for encoding different types of evidences in the x/evidence module, +* the `AuthorizationI` interface for encoding different types of x/authz authorizations, +* the [`Validator`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/types/staking.pb.go#L340-L377) struct that contains information about a validator. + +A real-life example of encoding the pubkey as `Any` inside the Validator struct in x/staking is shown in the following example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/types/validator.go#L41-L64 +``` + +## FAQ + +### How to create modules using protobuf encoding + +#### Defining module types + +Protobuf types can be defined to encode: + +* state +* [`Msg`s](../building-modules/02-messages-and-queries.md#messages) +* [Query services](../building-modules/04-query-services.md) +* [genesis](../building-modules/08-genesis.md) + +#### Naming and conventions + +We encourage developers to follow industry guidelines: [Protocol Buffers style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide), see more details in [ADR 023](../architecture/adr-023-protobuf-naming.md) + +### How to update modules to protobuf encoding + +If modules do not contain any interfaces (e.g. `Account` or `Content`), then they +may simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf (see 1. for further guidelines) and accept a `Marshaler` as the codec which is implemented via the `ProtoCodec` +without any further customization. + +However, if a module type composes an interface, it must wrap it in the `sdk.Any` (from `/types` package) type. To do that, a module-level .proto file must use [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto) for respective message type interface types. + +For example, in the `x/evidence` module defines an `Evidence` interface, which is used by the `MsgSubmitEvidence`. The structure definition must use `sdk.Any` to wrap the evidence file. In the proto file we define it as follows: + +```protobuf +// proto/cosmos/evidence/v1beta1/tx.proto + +message MsgSubmitEvidence { + string submitter = 1; + google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "cosmos.evidence.v1beta1.Evidence"]; +} +``` + +The Cosmos SDK `codec.Codec` interface provides support methods `MarshalInterface` and `UnmarshalInterface` to easy encoding of state to `Any`. + +Module should register interfaces using `InterfaceRegistry` which provides a mechanism for registering interfaces: `RegisterInterface(protoName string, iface interface{}, impls ...proto.Message)` and implementations: `RegisterImplementations(iface interface{}, impls ...proto.Message)` that can be safely unpacked from Any, similarly to type registration with Amino: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/types/interface_registry.go#L24-L57 +``` + +In addition, an `UnpackInterfaces` phase should be introduced to deserialization to unpack interfaces before they're needed. Protobuf types that contain a protobuf `Any` either directly or via one of their members should implement the `UnpackInterfacesMessage` interface: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +### Custom Stringer + +Using `option (gogoproto.goproto_stringer) = false;` in a proto message definition leads to unexpected behaviour, like returning wrong output or having missing fields in the output. +For that reason a proto Message's `String()` must not be customized, and the `goproto_stringer` option must be avoided. + +A correct YAML output can be obtained through ProtoJSON, using the `JSONToYAML` function: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/yaml.go#L8-L20 +``` + +For example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/types/account.go#L141-L151 +``` diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/06-grpc_rest.md b/versioned_docs/version-0.47/develop/advanced-concepts/06-grpc_rest.md new file mode 100644 index 000000000..51ca4db40 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/06-grpc_rest.md @@ -0,0 +1,100 @@ +--- +sidebar_position: 1 +--- + +# gRPC, REST, and CometBFT Endpoints + +:::note Synopsis +This document presents an overview of all the endpoints a node exposes: gRPC, REST as well as some other endpoints. +::: + +## An Overview of All Endpoints + +Each node exposes the following endpoints for users to interact with a node, each endpoint is served on a different port. Details on how to configure each endpoint is provided in the endpoint's own section. + +* the gRPC server (default port: `9090`), +* the REST server (default port: `1317`), +* the CometBFT RPC endpoint (default port: `26657`). + +:::tip +The node also exposes some other endpoints, such as the CometBFT P2P endpoint, or the [Prometheus endpoint](https://docs.cometbft.com/v0.37/core/metrics), which are not directly related to the Cosmos SDK. Please refer to the [CometBFT documentation](https://docs.cometbft.com/v0.37/core/configuration) for more information about these endpoints. +::: + +## gRPC Server + +In the Cosmos SDK, Protobuf is the main [encoding](./encoding) library. This brings a wide range of Protobuf-based tools that can be plugged into the Cosmos SDK. One such tool is [gRPC](https://grpc.io), a modern open-source high performance RPC framework that has decent client support in several languages. + +Each module exposes a [Protobuf `Query` service](../building-modules/02-messages-and-queries.md#queries) that defines state queries. The `Query` services and a transaction service used to broadcast transactions are hooked up to the gRPC server via the following function inside the application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/types/app.go#L46-L48 +``` + +Note: It is not possible to expose any [Protobuf `Msg` service](../building-modules/02-messages-and-queries.md#messages) endpoints via gRPC. Transactions must be generated and signed using the CLI or programmatically before they can be broadcasted using gRPC. See [Generating, Signing, and Broadcasting Transactions](../run-node/03-txs.md) for more information. + +The `grpc.Server` is a concrete gRPC server, which spawns and serves all gRPC query requests and a broadcast transaction request. This server can be configured inside `~/.simapp/config/app.toml`: + +* `grpc.enable = true|false` field defines if the gRPC server should be enabled. Defaults to `true`. +* `grpc.address = {string}` field defines the `ip:port` the server should bind to. Defaults to `localhost:9090`. + +:::tip +`~/.simapp` is the directory where the node's configuration and databases are stored. By default, it's set to `~/.{app_name}`. +::: + +Once the gRPC server is started, you can send requests to it using a gRPC client. Some examples are given in our [Interact with the Node](../run-node/02-interact-node.md#using-grpc) tutorial. + +An overview of all available gRPC endpoints shipped with the Cosmos SDK is [Protobuf documentation](https://buf.build/cosmos/cosmos-sdk). + +## REST Server + +Cosmos SDK supports REST routes via gRPC-gateway. + +All routes are configured under the following fields in `~/.simapp/config/app.toml`: + +* `api.enable = true|false` field defines if the REST server should be enabled. Defaults to `false`. +* `api.address = {string}` field defines the `ip:port` the server should bind to. Defaults to `tcp://localhost:1317`. +* some additional API configuration options are defined in `~/.simapp/config/app.toml`, along with comments, please refer to that file directly. + +### gRPC-gateway REST Routes + +If, for various reasons, you cannot use gRPC (for example, you are building a web application, and browsers don't support HTTP2 on which gRPC is built), then the Cosmos SDK offers REST routes via gRPC-gateway. + +[gRPC-gateway](https://grpc-ecosystem.github.io/grpc-gateway/) is a tool to expose gRPC endpoints as REST endpoints. For each gRPC endpoint defined in a Protobuf `Query` service, the Cosmos SDK offers a REST equivalent. For instance, querying a balance could be done via the `/cosmos.bank.v1beta1.QueryAllBalances` gRPC endpoint, or alternatively via the gRPC-gateway `"/cosmos/bank/v1beta1/balances/{address}"` REST endpoint: both will return the same result. For each RPC method defined in a Protobuf `Query` service, the corresponding REST endpoint is defined as an option: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/query.proto#L23-L30 +``` + +For application developers, gRPC-gateway REST routes needs to be wired up to the REST server, this is done by calling the `RegisterGRPCGatewayRoutes` function on the ModuleManager. + +### Swagger + +A [Swagger](https://swagger.io/) (or OpenAPIv2) specification file is exposed under the `/swagger` route on the API server. Swagger is an open specification describing the API endpoints a server serves, including description, input arguments, return types and much more about each endpoint. + +Enabling the `/swagger` endpoint is configurable inside `~/.simapp/config/app.toml` via the `api.swagger` field, which is set to true by default. + +For application developers, you may want to generate your own Swagger definitions based on your custom modules. +The Cosmos SDK's [Swagger generation script](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/protoc-swagger-gen.sh) is a good place to start. + +## CometBFT RPC + +Independently from the Cosmos SDK, CometBFT also exposes a RPC server. This RPC server can be configured by tuning parameters under the `rpc` table in the `~/.simapp/config/config.toml`, the default listening address is `tcp://localhost:26657`. An OpenAPI specification of all CometBFT RPC endpoints is available [here](https://docs.cometbft.com/master/rpc/). + +Some CometBFT RPC endpoints are directly related to the Cosmos SDK: + +* `/abci_query`: this endpoint will query the application for state. As the `path` parameter, you can send the following strings: + * any Protobuf fully-qualified service method, such as `/cosmos.bank.v1beta1.Query/AllBalances`. The `data` field should then include the method's request parameter(s) encoded as bytes using Protobuf. + * `/app/simulate`: this will simulate a transaction, and return some information such as gas used. + * `/app/version`: this will return the application's version. + * `/store/{path}`: this will query the store directly. + * `/p2p/filter/addr/{port}`: this will return a filtered list of the node's P2P peers by address port. + * `/p2p/filter/id/{id}`: this will return a filtered list of the node's P2P peers by ID. +* `/broadcast_tx_{aync,async,commit}`: these 3 endpoint will broadcast a transaction to other peers. CLI, gRPC and REST expose [a way to broadcast transations](./01-transactions.md#broadcasting-the-transaction), but they all use these 3 CometBFT RPCs under the hood. + +## Comparison Table + +| Name | Advantages | Disadvantages | +| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| gRPC | - can use code-generated stubs in various languages
- supports streaming and bidirectional communication (HTTP2)
- small wire binary sizes, faster transmission | - based on HTTP2, not available in browsers
- learning curve (mostly due to Protobuf) | +| REST | - ubiquitous
- client libraries in all languages, faster implementation
| - only supports unary request-response communication (HTTP1.1)
- bigger over-the-wire message sizes (JSON) | +| CometBFT RPC | - easy to use | - bigger over-the-wire message sizes (JSON) | diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/07-cli.md b/versioned_docs/version-0.47/develop/advanced-concepts/07-cli.md new file mode 100644 index 000000000..e149dad67 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/07-cli.md @@ -0,0 +1,171 @@ +--- +sidebar_position: 1 +--- + +# Command-Line Interface + +:::note Synopsis +This document describes how command-line interface (CLI) works on a high-level, for an [**application**](../basics/00-app-anatomy.md). A separate document for implementing a CLI for a Cosmos SDK [**module**](../building-modules/01-intro.md) can be found [here](../building-modules/09-module-interfaces.md#cli). +::: + +## Command-Line Interface + +### Example Command + +There is no set way to create a CLI, but Cosmos SDK modules typically use the [Cobra Library](https://github.com/spf13/cobra). Building a CLI with Cobra entails defining commands, arguments, and flags. [**Commands**](#root-command) understand the actions users wish to take, such as `tx` for creating a transaction and `query` for querying the application. Each command can also have nested subcommands, necessary for naming the specific transaction type. Users also supply **Arguments**, such as account numbers to send coins to, and [**Flags**](#flags) to modify various aspects of the commands, such as gas prices or which node to broadcast to. + +Here is an example of a command a user might enter to interact with the simapp CLI `simd` in order to send some tokens: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --gas auto --gas-prices +``` + +The first four strings specify the command: + +* The root command for the entire application `simd`. +* The subcommand `tx`, which contains all commands that let users create transactions. +* The subcommand `bank` to indicate which module to route the command to ([`x/bank`](../modules/bank/README.md) module in this case). +* The type of transaction `send`. + +The next two strings are arguments: the `from_address` the user wishes to send from, the `to_address` of the recipient, and the `amount` they want to send. Finally, the last few strings of the command are optional flags to indicate how much the user is willing to pay in fees (calculated using the amount of gas used to execute the transaction and the gas prices provided by the user). + +The CLI interacts with a [node](../core/03-node.md) to handle this command. The interface itself is defined in a `main.go` file. + +### Building the CLI + +The `main.go` file needs to have a `main()` function that creates a root command, to which all the application commands will be added as subcommands. The root command additionally handles: + +* **setting configurations** by reading in configuration files (e.g. the Cosmos SDK config file). +* **adding any flags** to it, such as `--chain-id`. +* **instantiating the `codec`** by calling the application's `MakeCodec()` function (called `MakeTestEncodingConfig` in `simapp`). The [`codec`](../core/05-encoding.md) is used to encode and decode data structures for the application - stores can only persist `[]byte`s so the developer must define a serialization format for their data structures or use the default, Protobuf. +* **adding subcommand** for all the possible user interactions, including [transaction commands](#transaction-commands) and [query commands](#query-commands). + +The `main()` function finally creates an executor and [execute](https://pkg.go.dev/github.com/spf13/cobra#Command.Execute) the root command. See an example of `main()` function from the `simapp` application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/main.go#L12-L24 +``` + +The rest of the document will detail what needs to be implemented for each step and include smaller portions of code from the `simapp` CLI files. + +## Adding Commands to the CLI + +Every application CLI first constructs a root command, then adds functionality by aggregating subcommands (often with further nested subcommands) using `rootCmd.AddCommand()`. The bulk of an application's unique capabilities lies in its transaction and query commands, called `TxCmd` and `QueryCmd` respectively. + +### Root Command + +The root command (called `rootCmd`) is what the user first types into the command line to indicate which application they wish to interact with. The string used to invoke the command (the "Use" field) is typically the name of the application suffixed with `-d`, e.g. `simd` or `gaiad`. The root command typically includes the following commands to support basic functionality in the application. + +* **Status** command from the Cosmos SDK rpc client tools, which prints information about the status of the connected [`Node`](../core/03-node.md). The Status of a node includes `NodeInfo`,`SyncInfo` and `ValidatorInfo`. +* **Keys** [commands](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/keys) from the Cosmos SDK client tools, which includes a collection of subcommands for using the key functions in the Cosmos SDK crypto tools, including adding a new key and saving it to the keyring, listing all public keys stored in the keyring, and deleting a key. For example, users can type `simd keys add ` to add a new key and save an encrypted copy to the keyring, using the flag `--recover` to recover a private key from a seed phrase or the flag `--multisig` to group multiple keys together to create a multisig key. For full details on the `add` key command, see the code [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/keys/add.go). For more details about usage of `--keyring-backend` for storage of key credentials look at the [keyring docs](../run-node/00-keyring.md). +* **Server** commands from the Cosmos SDK server package. These commands are responsible for providing the mechanisms necessary to start an ABCI CometBFT application and provides the CLI framework (based on [cobra](https://github.com/spf13/cobra)) necessary to fully bootstrap an application. The package exposes two core functions: `StartCmd` and `ExportCmd` which creates commands to start the application and export state respectively. +Learn more [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server). +* [**Transaction**](#transaction-commands) commands. +* [**Query**](#query-commands) commands. + +Next is an example `rootCmd` function from the `simapp` application. It instantiates the root command, adds a [*persistent* flag](#flags) and `PreRun` function to be run before every execution, and adds all of the necessary subcommands. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L38-L92 +``` + +`rootCmd` has a function called `initAppConfig()` which is useful for setting the application's custom configs. +By default app uses CometBFT app config template from Cosmos SDK, which can be over-written via `initAppConfig()`. +Here's an example code to override default `app.toml` template. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L106-L161 +``` + +The `initAppConfig()` also allows overriding the default Cosmos SDK's [server config](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/server/config/config.go#L235). One example is the `min-gas-prices` config, which defines the minimum gas prices a validator is willing to accept for processing a transaction. By default, the Cosmos SDK sets this parameter to `""` (empty string), which forces all validators to tweak their own `app.toml` and set a non-empty value, or else the node will halt on startup. This might not be the best UX for validators, so the chain developer can set a default `app.toml` value for validators inside this `initAppConfig()` function. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L126-L142 +``` + +The root-level `status` and `keys` subcommands are common across most applications and do not interact with application state. The bulk of an application's functionality - what users can actually *do* with it - is enabled by its `tx` and `query` commands. + +### Transaction Commands + +[Transactions](./01-transactions.md) are objects wrapping [`Msg`s](../building-modules/02-messages-and-queries.md#messages) that trigger state changes. To enable the creation of transactions using the CLI interface, a function `txCommand` is generally added to the `rootCmd`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L177-L184 +``` + +This `txCommand` function adds all the transaction available to end-users for the application. This typically includes: + +* **Sign command** from the [`auth`](../modules/auth/README.md) module that signs messages in a transaction. To enable multisig, add the `auth` module's `MultiSign` command. Since every transaction requires some sort of signature in order to be valid, the signing command is necessary for every application. +* **Broadcast command** from the Cosmos SDK client tools, to broadcast transactions. +* **All [module transaction commands](../building-modules/09-module-interfaces.md#transaction-commands)** the application is dependent on, retrieved by using the [basic module manager's](../building-modules/01-module-manager.md#basic-manager) `AddTxCommands()` function. + +Here is an example of a `txCommand` aggregating these subcommands from the `simapp` application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L227-L251 +``` + +### Query Commands + +[**Queries**](../building-modules/02-messages-and-queries.md#queries) are objects that allow users to retrieve information about the application's state. To enable the creation of queries using the CLI interface, a function `queryCommand` is generally added to the `rootCmd`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L177-L184 +``` + +This `queryCommand` function adds all the queries available to end-users for the application. This typically includes: + +* **QueryTx** and/or other transaction query commands] from the `auth` module which allow the user to search for a transaction by inputting its hash, a list of tags, or a block height. These queries allow users to see if transactions have been included in a block. +* **Account command** from the `auth` module, which displays the state (e.g. account balance) of an account given an address. +* **Validator command** from the Cosmos SDK rpc client tools, which displays the validator set of a given height. +* **Block command** from the Cosmos SDK RPC client tools, which displays the block data for a given height. +* **All [module query commands](../building-modules/09-module-interfaces.md#query-commands)** the application is dependent on, retrieved by using the [basic module manager's](../building-modules/01-module-manager.md#basic-manager) `AddQueryCommands()` function. + +Here is an example of a `queryCommand` aggregating subcommands from the `simapp` application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L204-L225 +``` + +## Flags + +Flags are used to modify commands; developers can include them in a `flags.go` file with their CLI. Users can explicitly include them in commands or pre-configure them by inside their [`app.toml`](../run-node/02-interact-node.md#configuring-the-node-using-apptoml). Commonly pre-configured flags include the `--node` to connect to and `--chain-id` of the blockchain the user wishes to interact with. + +A *persistent* flag (as opposed to a *local* flag) added to a command transcends all of its children: subcommands will inherit the configured values for these flags. Additionally, all flags have default values when they are added to commands; some toggle an option off but others are empty values that the user needs to override to create valid commands. A flag can be explicitly marked as *required* so that an error is automatically thrown if the user does not provide a value, but it is also acceptable to handle unexpected missing flags differently. + +Flags are added to commands directly (generally in the [module's CLI file](../building-modules/09-module-interfaces.md#flags) where module commands are defined) and no flag except for the `rootCmd` persistent flags has to be added at application level. It is common to add a *persistent* flag for `--chain-id`, the unique identifier of the blockchain the application pertains to, to the root command. Adding this flag can be done in the `main()` function. Adding this flag makes sense as the chain ID should not be changing across commands in this application CLI. + +## Environment variables + +Each flag is bound to it's respecteve named environment variable. Then name of the environment variable consist of two parts - capital case `basename` followed by flag name of the flag. `-` must be substituted with `_`. For example flag `--home` for application with basename `GAIA` is bound to `GAIA_HOME`. It allows reducing the amount of flags typed for routine operations. For example instead of: + +```shell +gaia --home=./ --node= --chain-id="testchain-1" --keyring-backend=test tx ... --from= +``` + +this will be more convenient: + +```shell +# define env variables in .env, .envrc etc +GAIA_HOME= +GAIA_NODE= +GAIA_CHAIN_ID="testchain-1" +GAIA_KEYRING_BACKEND="test" + +# and later just use +gaia tx ... --from= +``` + +## Configurations + +It is vital that the root command of an application uses `PersistentPreRun()` cobra command property for executing the command, so all child commands have access to the server and client contexts. These contexts are set as their default values initially and maybe modified, scoped to the command, in their respective `PersistentPreRun()` functions. Note that the `client.Context` is typically pre-populated with "default" values that may be useful for all commands to inherit and override if necessary. + +Here is an example of an `PersistentPreRun()` function from `simapp`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/simd/cmd/root.go#L63-L86 +``` + +The `SetCmdClientContextHandler` call reads persistent flags via `ReadPersistentCommandFlags` which creates a `client.Context` and sets that on the root command's `Context`. + +The `InterceptConfigsPreRunHandler` call creates a viper literal, default `server.Context`, and a logger and sets that on the root command's `Context`. The `server.Context` will be modified and saved to disk via the internal `interceptConfigs` call, which either reads or creates a CometBFT configuration based on the home path provided. In addition, `interceptConfigs` also reads and loads the application configuration, `app.toml`, and binds that to the `server.Context` viper literal. This is vital so the application can get access to not only the CLI flags, but also to the application configuration values provided by this file. diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/08-events.md b/versioned_docs/version-0.47/develop/advanced-concepts/08-events.md new file mode 100644 index 000000000..b07aaffd4 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/08-events.md @@ -0,0 +1,162 @@ +--- +sidebar_position: 1 +--- +# Events + +:::note Synopsis +`Event`s are objects that contain information about the execution of the application. They are mainly used by service providers like block explorers and wallet to track the execution of various messages and index transactions. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/00-app-anatomy.md) +* [CometBFT Documentation on Events](https://docs.cometbft.com/v0.37/spec/abci/abci++_basic_concepts#events) + +::: + +## Events + +Events are implemented in the Cosmos SDK as an alias of the ABCI `Event` type and +take the form of: `{eventType}.{attributeKey}={attributeValue}`. + +```protobuf reference +https://github.com/cometbft/cometbft/blob/v0.37.0/proto/tendermint/abci/types.proto#L334-L343 +``` + +An Event contains: + +* A `type` to categorize the Event at a high-level; for example, the Cosmos SDK uses the `"message"` type to filter Events by `Msg`s. +* A list of `attributes` are key-value pairs that give more information about the categorized Event. For example, for the `"message"` type, we can filter Events by key-value pairs using `message.action={some_action}`, `message.module={some_module}` or `message.sender={some_sender}`. + +:::tip +To parse the attribute values as strings, make sure to add `'` (single quotes) around each attribute value. +::: + +_Typed Events_ are Protobuf-defined [messages](../architecture/adr-032-typed-events.md) used by the Cosmos SDK +for emitting and querying Events. They are defined in a `event.proto` file, on a **per-module basis** and are read as `proto.Message`. +_Legacy Events_ are defined on a **per-module basis** in the module's `/types/events.go` file. +They are triggered from the module's Protobuf [`Msg` service](../building-modules/03-msg-services.md) +by using the [`EventManager`](#eventmanager). + +In addition, each module documents its events under in the `Events` sections of its specs (x/{moduleName}/`README.md`). + +Lastly, Events are returned to the underlying consensus engine in the response of the following ABCI messages: + +* [`BeginBlock`](./00-baseapp.md#beginblock) +* [`EndBlock`](./00-baseapp.md#endblock) +* [`CheckTx`](./00-baseapp.md#checktx) +* [`DeliverTx`](./00-baseapp.md#delivertx) + +### Examples + +The following examples show how to query Events using the Cosmos SDK. + +| Event | Description | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tx.height=23` | Query all transactions at height 23 | +| `message.action='/cosmos.bank.v1beta1.Msg/Send'` | Query all transactions containing a x/bank `Send` [Service `Msg`](../building-modules/03-msg-services.md). Note the `'`s around the value. | +| `message.action='send'` | Query all transactions containing a x/bank `Send` [legacy `Msg`](../building-modules/03-msg-services.md#legacy-amino-msgs). Note the `'`s around the value. | +| `message.module='bank'` | Query all transactions containing messages from the x/bank module. Note the `'`s around the value. | +| `create_validator.validator='cosmosval1...'` | x/staking-specific Event, see [x/staking SPEC](../modules/staking/README.md). | + +## EventManager + +In Cosmos SDK applications, Events are managed by an abstraction called the `EventManager`. +Internally, the `EventManager` tracks a list of Events for the entire execution flow of a +transaction or `BeginBlock`/`EndBlock`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/events.go#L24-L27 +``` + +The `EventManager` comes with a set of useful methods to manage Events. The method +that is used most by module and application developers is `EmitTypedEvent` or `EmitEvent` that tracks +an Event in the `EventManager`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/events.go#L53-L62 +``` + +Module developers should handle Event emission via the `EventManager#EmitTypedEvent` or `EventManager#EmitEvent` in each message +`Handler` and in each `BeginBlock`/`EndBlock` handler. The `EventManager` is accessed via +the [`Context`](./02-context.md), where Event should be already registered, and emitted like this: + + +**Typed events:** + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/keeper/msg_server.go#L88-L91 +``` + +**Legacy events:** + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent(eventType, sdk.NewAttribute(attributeKey, attributeValue)), +) +``` + +Module's `handler` function should also set a new `EventManager` to the `context` to isolate emitted Events per `message`: + +```go +func NewHandler(keeper Keeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) + switch msg := msg.(type) { +``` + +See the [`Msg` services](../building-modules/03-msg-services.md) concept doc for a more detailed +view on how to typically implement Events and use the `EventManager` in modules. + +## Subscribing to Events + +You can use CometBFT's [Websocket](https://docs.cometbft.com/v0.37/core/subscription) to subscribe to Events by calling the `subscribe` RPC method: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='eventCategory' AND eventType.eventAttribute='attributeValue'" + } +} +``` + +The main `eventCategory` you can subscribe to are: + +* `NewBlock`: Contains Events triggered during `BeginBlock` and `EndBlock`. +* `Tx`: Contains Events triggered during `DeliverTx` (i.e. transaction processing). +* `ValidatorSetUpdates`: Contains validator set updates for the block. + +These Events are triggered from the `state` package after a block is committed. You can get the +full list of Event categories [on the CometBFT Go documentation](https://pkg.go.dev/github.com/cometbft/cometbft/types#pkg-constants). + +The `type` and `attribute` value of the `query` allow you to filter the specific Event you are looking for. For example, a `Mint` transaction triggers an Event of type `EventMint` and has an `Id` and an `Owner` as `attributes` (as defined in the [`events.proto` file of the `NFT` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/nft/v1beta1/event.proto#L21-L31)). + +Subscribing to this Event would be done like so: + +```json +{ + "jsonrpc": "2.0", + "method": "subscribe", + "id": "0", + "params": { + "query": "tm.event='Tx' AND mint.owner='ownerAddress'" + } +} +``` + +where `ownerAddress` is an address following the [`AccAddress`](../basics/03-accounts.md#addresses) format. + +The same way can be used to subscribe to [legacy events](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/types/events.go). + +## Default Events + +There are a few events that are automatically emitted for all messages, directly from `baseapp`. + +* `message.action`: The name of the message type. +* `message.sender`: The address of the message signer. +* `message.module`: The name of the module that emitted the message. diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/09-telemetry.md b/versioned_docs/version-0.47/develop/advanced-concepts/09-telemetry.md new file mode 100644 index 000000000..2be2dc680 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/09-telemetry.md @@ -0,0 +1,128 @@ +--- +sidebar_position: 1 +--- + +# Telemetry + +:::note Synopsis +Gather relevant insights about your application and modules with custom metrics and telemetry. +::: + +The Cosmos SDK enables operators and developers to gain insight into the performance and behavior of +their application through the use of the `telemetry` package. To enable telemetrics, set `telemetry.enabled = true` in the app.toml config file. + +The Cosmos SDK currently supports enabling in-memory and prometheus as telemetry sinks. In-memory sink is always attached (when the telemetry is enabled) with 10 second interval and 1 minute retention. This means that metrics will be aggregated over 10 seconds, and metrics will be kept alive for 1 minute. + +To query active metrics (see retention note above) you have to enable API server (`api.enabled = true` in the app.toml). Single API endpoint is exposed: `http://localhost:1317/metrics?format={text|prometheus}`, the default being `text`. + +## Emitting metrics + +If telemetry is enabled via configuration, a single global metrics collector is registered via the +[go-metrics](https://github.com/armon/go-metrics) library. This allows emitting and collecting +metrics through simple [API](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/telemetry/wrapper.go). Example: + +```go +func EndBlocker(ctx sdk.Context, k keeper.Keeper) { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker) + + // ... +} +``` + +Developers may use the `telemetry` package directly, which provides wrappers around metric APIs +that include adding useful labels, or they must use the `go-metrics` library directly. It is preferable +to add as much context and adequate dimensionality to metrics as possible, so the `telemetry` package +is advised. Regardless of the package or method used, the Cosmos SDK supports the following metrics +types: + +* gauges +* summaries +* counters + +## Labels + +Certain components of modules will have their name automatically added as a label (e.g. `BeginBlock`). +Operators may also supply the application with a global set of labels that will be applied to all +metrics emitted using the `telemetry` package (e.g. chain-id). Global labels are supplied as a list +of [name, value] tuples. + +Example: + +```toml +global-labels = [ + ["chain_id", "chain-OfXo4V"], +] +``` + +## Cardinality + +Cardinality is key, specifically label and key cardinality. Cardinality is how many unique values of +something there are. So there is naturally a tradeoff between granularity and how much stress is put +on the telemetry sink in terms of indexing, scrape, and query performance. + +Developers should take care to support metrics with enough dimensionality and granularity to be +useful, but not increase the cardinality beyond the sink's limits. A general rule of thumb is to not +exceed a cardinality of 10. + +Consider the following examples with enough granularity and adequate cardinality: + +* begin/end blocker time +* tx gas used +* block gas used +* amount of tokens minted +* amount of accounts created + +The following examples expose too much cardinality and may not even prove to be useful: + +* transfers between accounts with amount +* voting/deposit amount from unique addresses + +## Supported Metrics + +| Metric | Description | Unit | Type | +|:--------------------------------|:------------------------------------------------------------------------------------------|:----------------|:--------| +| `tx_count` | Total number of txs processed via `DeliverTx` | tx | counter | +| `tx_successful` | Total number of successful txs processed via `DeliverTx` | tx | counter | +| `tx_failed` | Total number of failed txs processed via `DeliverTx` | tx | counter | +| `tx_gas_used` | The total amount of gas used by a tx | gas | gauge | +| `tx_gas_wanted` | The total amount of gas requested by a tx | gas | gauge | +| `tx_msg_send` | The total amount of tokens sent in a `MsgSend` (per denom) | token | gauge | +| `tx_msg_withdraw_reward` | The total amount of tokens withdrawn in a `MsgWithdrawDelegatorReward` (per denom) | token | gauge | +| `tx_msg_withdraw_commission` | The total amount of tokens withdrawn in a `MsgWithdrawValidatorCommission` (per denom) | token | gauge | +| `tx_msg_delegate` | The total amount of tokens delegated in a `MsgDelegate` | token | gauge | +| `tx_msg_begin_unbonding` | The total amount of tokens undelegated in a `MsgUndelegate` | token | gauge | +| `tx_msg_begin_begin_redelegate` | The total amount of tokens redelegated in a `MsgBeginRedelegate` | token | gauge | +| `tx_msg_ibc_transfer` | The total amount of tokens transferred via IBC in a `MsgTransfer` (source or sink chain) | token | gauge | +| `ibc_transfer_packet_receive` | The total amount of tokens received in a `FungibleTokenPacketData` (source or sink chain) | token | gauge | +| `new_account` | Total number of new accounts created | account | counter | +| `gov_proposal` | Total number of governance proposals | proposal | counter | +| `gov_vote` | Total number of governance votes for a proposal | vote | counter | +| `gov_deposit` | Total number of governance deposits for a proposal | deposit | counter | +| `staking_delegate` | Total number of delegations | delegation | counter | +| `staking_undelegate` | Total number of undelegations | undelegation | counter | +| `staking_redelegate` | Total number of redelegations | redelegation | counter | +| `ibc_transfer_send` | Total number of IBC transfers sent from a chain (source or sink) | transfer | counter | +| `ibc_transfer_receive` | Total number of IBC transfers received to a chain (source or sink) | transfer | counter | +| `ibc_client_create` | Total number of clients created | create | counter | +| `ibc_client_update` | Total number of client updates | update | counter | +| `ibc_client_upgrade` | Total number of client upgrades | upgrade | counter | +| `ibc_client_misbehaviour` | Total number of client misbehaviours | misbehaviour | counter | +| `ibc_connection_open-init` | Total number of connection `OpenInit` handshakes | handshake | counter | +| `ibc_connection_open-try` | Total number of connection `OpenTry` handshakes | handshake | counter | +| `ibc_connection_open-ack` | Total number of connection `OpenAck` handshakes | handshake | counter | +| `ibc_connection_open-confirm` | Total number of connection `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_open-init` | Total number of channel `OpenInit` handshakes | handshake | counter | +| `ibc_channel_open-try` | Total number of channel `OpenTry` handshakes | handshake | counter | +| `ibc_channel_open-ack` | Total number of channel `OpenAck` handshakes | handshake | counter | +| `ibc_channel_open-confirm` | Total number of channel `OpenConfirm` handshakes | handshake | counter | +| `ibc_channel_close-init` | Total number of channel `CloseInit` handshakes | handshake | counter | +| `ibc_channel_close-confirm` | Total number of channel `CloseConfirm` handshakes | handshake | counter | +| `tx_msg_ibc_recv_packet` | Total number of IBC packets received | packet | counter | +| `tx_msg_ibc_acknowledge_packet` | Total number of IBC packets acknowledged | acknowledgement | counter | +| `ibc_timeout_packet` | Total number of IBC timeout packets | timeout | counter | +| `store_iavl_get` | Duration of an IAVL `Store#Get` call | ms | summary | +| `store_iavl_set` | Duration of an IAVL `Store#Set` call | ms | summary | +| `store_iavl_has` | Duration of an IAVL `Store#Has` call | ms | summary | +| `store_iavl_delete` | Duration of an IAVL `Store#Delete` call | ms | summary | +| `store_iavl_commit` | Duration of an IAVL `Store#Commit` call | ms | summary | +| `store_iavl_query` | Duration of an IAVL `Store#Query` call | ms | summary | diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/10-ocap.md b/versioned_docs/version-0.47/develop/advanced-concepts/10-ocap.md similarity index 100% rename from versioned_docs/version-0.46/develop/advanced-concepts/10-ocap.md rename to versioned_docs/version-0.47/develop/advanced-concepts/10-ocap.md diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/11-runtx_middleware.md b/versioned_docs/version-0.47/develop/advanced-concepts/11-runtx_middleware.md new file mode 100644 index 000000000..1db62be7a --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/11-runtx_middleware.md @@ -0,0 +1,67 @@ +--- +sidebar_position: 1 +--- + +# RunTx recovery middleware + +`BaseApp.runTx()` function handles Go panics that might occur during transactions execution, for example, keeper has faced an invalid state and paniced. +Depending on the panic type different handler is used, for instance the default one prints an error log message. +Recovery middleware is used to add custom panic recovery for Cosmos SDK application developers. + +More context can found in the corresponding [ADR-022](../architecture/adr-022-custom-panic-handling.md) and the implementation in [recovery.go](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/recovery.go). + +## Interface + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/recovery.go#L11-L14 +``` + +`recoveryObj` is a return value for `recover()` function from the `buildin` Go package. + +**Contract:** + +* RecoveryHandler returns `nil` if `recoveryObj` wasn't handled and should be passed to the next recovery middleware; +* RecoveryHandler returns a non-nil `error` if `recoveryObj` was handled; + +## Custom RecoveryHandler register + +`BaseApp.AddRunTxRecoveryHandler(handlers ...RecoveryHandler)` + +BaseApp method adds recovery middleware to the default recovery chain. + +## Example + +Lets assume we want to emit the "Consensus failure" chain state if some particular error occurred. + +We have a module keeper that panics: + +```go +func (k FooKeeper) Do(obj interface{}) { + if obj == nil { + // that shouldn't happen, we need to crash the app + err := sdkErrors.Wrap(fooTypes.InternalError, "obj is nil") + panic(err) + } +} +``` + +By default that panic would be recovered and an error message will be printed to log. To override that behaviour we should register a custom RecoveryHandler: + +```go +// Cosmos SDK application constructor +customHandler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { + return nil + } + + if fooTypes.InternalError.Is(err) { + panic(fmt.Errorf("FooKeeper did panic with error: %w", err)) + } + + return nil +} + +baseApp := baseapp.NewBaseApp(...) +baseApp.AddRunTxRecoveryHandler(customHandler) +``` diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/12-simulation.md b/versioned_docs/version-0.47/develop/advanced-concepts/12-simulation.md new file mode 100644 index 000000000..ed23f3990 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/12-simulation.md @@ -0,0 +1,101 @@ +--- +sidebar_position: 1 +--- + +# Cosmos Blockchain Simulator + +The Cosmos SDK offers a full fledged simulation framework to fuzz test every +message defined by a module. + +On the Cosmos SDK, this functionality is provided by [`SimApp`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go), which is a +`Baseapp` application that is used for running the [`simulation`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/simulation) module. +This module defines all the simulation logic as well as the operations for +randomized parameters like accounts, balances etc. + +## Goals + +The blockchain simulator tests how the blockchain application would behave under +real life circumstances by generating and sending randomized messages. +The goal of this is to detect and debug failures that could halt a live chain, +by providing logs and statistics about the operations run by the simulator as +well as exporting the latest application state when a failure was found. + +Its main difference with integration testing is that the simulator app allows +you to pass parameters to customize the chain that's being simulated. +This comes in handy when trying to reproduce bugs that were generated in the +provided operations (randomized or not). + +## Simulation commands + +The simulation app has different commands, each of which tests a different +failure type: + +* `AppImportExport`: The simulator exports the initial app state and then it + creates a new app with the exported `genesis.json` as an input, checking for + inconsistencies between the stores. +* `AppSimulationAfterImport`: Queues two simulations together. The first one provides the app state (_i.e_ genesis) to the second. Useful to test software upgrades or hard-forks from a live chain. +* `AppStateDeterminism`: Checks that all the nodes return the same values, in the same order. +* `BenchmarkInvariants`: Analysis of the performance of running all modules' invariants (_i.e_ sequentially runs a [benchmark](https://pkg.go.dev/testing/#hdr-Benchmarks) test). An invariant checks for + differences between the values that are on the store and the passive tracker. Eg: total coins held by accounts vs total supply tracker. +* `FullAppSimulation`: General simulation mode. Runs the chain and the specified operations for a given number of blocks. Tests that there're no `panics` on the simulation. It does also run invariant checks on every `Period` but they are not benchmarked. + +Each simulation must receive a set of inputs (_i.e_ flags) such as the number of +blocks that the simulation is run, seed, block size, etc. +Check the full list of flags [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/simulation/client/cli/flags.go#L33-L57). + +## Simulator Modes + +In addition to the various inputs and commands, the simulator runs in three modes: + +1. Completely random where the initial state, module parameters and simulation + parameters are **pseudo-randomly generated**. +2. From a `genesis.json` file where the initial state and the module parameters are defined. + This mode is helpful for running simulations on a known state such as a live network export where a new (mostly likely breaking) version of the application needs to be tested. +3. From a `params.json` file where the initial state is pseudo-randomly generated but the module and simulation parameters can be provided manually. + This allows for a more controlled and deterministic simulation setup while allowing the state space to still be pseudo-randomly simulated. + The list of available parameters are listed [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/simulation/client/cli/flags.go#L59-L78). + +:::tip +These modes are not mutually exclusive. So you can for example run a randomly +generated genesis state (`1`) with manually generated simulation params (`3`). +::: + +## Usage + +This is a general example of how simulations are run. For more specific examples +check the Cosmos SDK [Makefile](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/Makefile#L282-L318). + +```bash + $ go test -mod=readonly github.com/cosmos/cosmos-sdk/simapp \ + -run=TestApp \ + ... + -v -timeout 24h +``` + +## Debugging Tips + +Here are some suggestions when encountering a simulation failure: + +* Export the app state at the height where the failure was found. You can do this + by passing the `-ExportStatePath` flag to the simulator. +* Use `-Verbose` logs. They could give you a better hint on all the operations + involved. +* Reduce the simulation `-Period`. This will run the invariants checks more + frequently. +* Print all the failed invariants at once with `-PrintAllInvariants`. +* Try using another `-Seed`. If it can reproduce the same error and if it fails + sooner, you will spend less time running the simulations. +* Reduce the `-NumBlocks` . How's the app state at the height previous to the + failure? +* Run invariants on every operation with `-SimulateEveryOperation`. _Note_: this + will slow down your simulation **a lot**. +* Try adding logs to operations that are not logged. You will have to define a + [Logger](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/keeper.go#L65-L68) on your `Keeper`. + +## Use simulation in your Cosmos SDK-based application + +Learn how you can integrate the simulation into your Cosmos SDK-based application: + +* Application Simulation Manager +* [Building modules: Simulator](../building-modules/14-simulator.md) +* Simulator tests diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/13-proto-docs.md b/versioned_docs/version-0.47/develop/advanced-concepts/13-proto-docs.md new file mode 100644 index 000000000..6c8574465 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/13-proto-docs.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 1 +--- + +# Protobuf Documentation + +See [Cosmos SDK Buf Proto-docs](https://buf.build/cosmos/cosmos-sdk/docs/main) diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/14-tips.md b/versioned_docs/version-0.47/develop/advanced-concepts/14-tips.md new file mode 100644 index 000000000..2c566cfcf --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/14-tips.md @@ -0,0 +1,214 @@ +--- +sidebar_position: 1 +--- + +# Transaction Tips + +:::note Synopsis +Transaction tips are a mechanism to pay for transaction fees using another denom than the native fee denom of the chain. They are still in beta, and are not included by default in the SDK. +::: + +## Context + +In a Cosmos ecosystem where more and more chains are connected via [IBC](https://ibc.cosmos.network/), it happens that users want to perform actions on chains where they don't have native tokens yet. An example would be an Osmosis user who wants to vote on a proposal on the Cosmos Hub, but they don't have ATOMs in their wallet. A solution would be to swap OSMO for ATOM just for voting on this proposal, but that is cumbersome. Cross-chain DeFi project [Emeris](https://emeris.com/) is another use case. + +Transaction tips is a new solution for cross-chain transaction fees payment, whereby the transaction initiator signs a transaction without specifying fees, but uses a new `Tip` field. They send this signed transaction to a fee relayer who will choose the transaction fees and broadcast the final transaction, and the SDK provides a mechanism that will transfer the pre-defined `Tip` to the fee payer, to cover for fees. + +Assuming we have two chains, A and B, we define the following terms: + +* **the tipper**: this is the initiator of the transaction, who wants to execute a `Msg` on chain A, but doesn't have any native chain A tokens, only chain B tokens. In our example above, the tipper is the Osmosis (chain B) user wanting to vote on a Cosmos Hub (chain A) proposal. +* **the fee payer**: this is the party that will relay and broadcast the final transaction on chain A, and has chain A tokens. The tipper doesn't need to trust the feepayer. +* **the target chain**: the chain where the `Msg` is executed, chain A in this case. + +## Transaction Tips Flow + +The transaction tips flow happens in multiple steps. + +1. The tipper sends via IBC some chain B tokens to chain A. These tokens will cover for fees on the target chain A. This means that chain A's bank module holds some IBC tokens under the tipper's address. + +2. The tipper drafts a transaction to be executed on the chain A. It can include chain A `Msg`s. However, instead of creating a normal transaction, they create the following `AuxSignerData` document: + + ```protobuf reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L237-L256 + ``` + + where we have defined `SignDocDirectAux` as: + + ```protobuf reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L67-L97 + ``` + + where `Tip` is defined as + + ```protobuf reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L226-L235 + ``` + + Notice that this document doesn't sign over the final chain A fees. Instead, it includes a `Tip` field. It also doesn't include the whole `AuthInfo` object as in `SIGN_MODE_DIRECT`, only the minimum information needed by the tipper + +3. The tipper signs the `SignDocDirectAux` document and attaches the signature to the `AuxSignerData`, then sends the signed `AuxSignerData` to the fee payer. + +4. From the signed `AuxSignerData` document, the fee payer constructs a transaction, using the following algorithm: + +* use as `TxBody` the exact `AuxSignerData.SignDocDirectAux.body_bytes`, to not alter the original intent of the tipper, +* create an `AuthInfo` with: + * `AuthInfo.Tip` copied from `AuxSignerData.SignDocDirectAux.Tip`, + * `AuthInfo.Fee` chosen by the fee payer, which should cover for the transaction gas, but also be small enough so that the tip/fee exchange rate is economically interesting for the fee payer, + * `AuthInfo.SignerInfos` has two signers: the first signer is the tipper, using the public key, sequence and sign mode specified in `AuxSignerData`; and the second signer is the fee payer, using their favorite sign mode, +* a `Signatures` array with two items: the tipper's signature from `AuxSignerData.Sig`, and the final fee payer's signature. + +5. Broadcast the final transaction signed by the two parties to the target chain. Once included, the Cosmos SDK will trigger a transfer of the `Tip` specified in the transaction from the tipper address to the fee payer address. + +### Fee Payers Market + +The benefit of transaction tips for the tipper is clear: there is no need to swap tokens before executing a cross-chain message. + +For the fee payer, the benefit is in the tip v.s. fee exchange. Put simply, the fee payer pays the fees of an unknown tipper's transaction, and gets in exchange the tip that the tipper chose. There is an economic incentive for the fee payer to do so only when the tip is greater than the transaction fees, given the exchange rates between the two tokens. + +In the future, we imagine a market where fee payers will compete to include transactions from tippers, who on their side will optimize by specifying the lowest tip possible. A number of automated services might spin up to perform transaction gas simulation and exchange rate monitoring to optimize both the tip and fee values in real-time. + +### Tipper and Fee Payer Sign Modes + +As we mentioned in the flow above, the tipper signs over the `SignDocDirectAux`, and the fee payer signs over the whole final transaction. As such, both parties might use different sign modes. + +* The tipper MUST use `SIGN_MODE_DIRECT_AUX` or `SIGN_MODE_LEGACY_AMINO_JSON`. That is because the tipper needs to sign over the body, the tip, but not the other signers' information and not over the fee (which is unknown to the tipper). +* The fee payer MUST use `SIGN_MODE_DIRECT` or `SIGN_MODE_LEGACY_AMINO_JSON`. The fee payer signs over the whole transaction. + +For example, if the fee payer signs the whole transaction with `SIGN_MODE_DIRECT_AUX`, it will be rejected by the node, as that would introduce malleability issues (`SIGN_MODE_DIRECT_AUX` doesn't sign over fees). + +In both cases, using `SIGN_MODE_LEGACY_AMINO_JSON` is recommended only if hardware wallet signing is needed. + +## Enabling Tips on your Chain + +The transaction tips functionality is introduced in Cosmos SDK v0.46, so earlier versions do not have support for tips. It is however not included by default in a v0.46 app. Sending a transaction with tips to a chain which didn't enable tips will result in a no-op, i.e. the `tip` field in the transaction will be ignored. + +Enabling tips on a chain is done by adding the `TipDecorator` in the posthandler chain: + +```go +// HandlerOptions are the options required for constructing a SDK PostHandler which supports tips. +type HandlerOptions struct { + BankKeeper types.BankKeeper +} + +// MyPostHandler returns a posthandler chain with the TipDecorator. +func MyPostHandler(options HandlerOptions) (sdk.AnteHandler, error) { + if options.BankKeeper == nil { + return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "bank keeper is required for posthandler") + } + + postDecorators := []sdk.AnteDecorator{ + posthandler.NewTipDecorator(options.bankKeeper), + } + + return sdk.ChainAnteDecorators(postDecorators...), nil +} + +func (app *SimApp) setPostHandler() { + postHandler, err := MyPostHandler( + HandlerOptions{ + BankKeeper: app.BankKeeper, + }, + ) + if err != nil { + panic(err) + } + + app.SetPostHandler(postHandler) +} +``` + +Notice that `NewTipDecorator` needs a reference to the BankKeeper, for transferring the tip to the fee payer. + +## CLI Usage + +The Cosmos SDK also provides some CLI tooling for the transaction tips flow, both for the tipper and for the feepayer. + +For the tipper, the CLI `tx` subcommand has two new flags: `--aux` and `--tip`. The `--aux` flag is used to denote that we are creating an `AuxSignerData` instead of a `Tx`, and the `--tip` is used to populate its `Tip` field. + +```bash +$ simd tx gov vote 16 yes --from --aux --tip 50ibcdenom + + +### Prints the AuxSignerData as JSON: +### {"address":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2","sign_doc":{"body_bytes":"CosBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEmsKLWNvc21vczFxMGF5ZjV2cTZmZDJ4eHJ3aDMwdXBnMDVoeGRueXcyaDUyNDlhMhItY29zbW9zMXdlNWoyZXI2MHV5OXF3YzBta3ptdGdtdHA5Z3F5NXY2bjhnZGdlGgsKBXN0YWtlEgIxMA==","public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AojOF/1luQ5H/nZDSrE1w3CyzGJhJdQuS7hFX5wAA6uJ"},"chain_id":"","account_number":"0","sequence":"1","tip":{"amount":[{"denom":"ibcdenom","amount":"50"}],"tipper":"cosmos1q0ayf5vq6fd2xxrwh30upg05hxdnyw2h5249a2"}},"mode":"SIGN_MODE_DIRECT_AUX","sig":"v/d/bGq9FGdecs6faMG2t//nRirFTiqwFtUB65M6kh0QdUeM6jg3r8oJX1o17xkoDxJ09EyJiSyvo6fbU7vUxg=="} +``` + +It is useful to pipe the JSON output to a file, `> aux_signed_tx.json` + +For the fee payer, the Cosmos SDK added a `tx aux-to-fee` subcommand to include an `AuxSignerData` into a transaction, add fees to it, and broadcast it. + +```bash +$ simd tx aux-to-fee aux_signed_tx.json --from --fees 30atom + +### Prints the broadcasted tx response: +### code: 0 +### codespace: sdk +### data: "" +### events: [] +### gas_used: "0" +### gas_wanted: "0" +### height: "0" +### info: "" +### logs: [] +### timestamp: "" +### tx: null +``` + +Upon completion of the second command, the fee payer's balance will be down the `30atom` fees, and up the `50ibcdenom` tip. + +For both commands, the flag `--sign-mode=amino-json` is still available for hardware wallet signing. + +## Programmatic Usage + +For the tipper, the SDK exposes a new transaction builder, the `AuxTxBuilder`, for generating an `AuxSignerData`. The API of `AuxTxBuilder` is defined [in `client/tx`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx/aux_builder.go#L16), and can be used as follows: + +```go +// Note: there's no need to use clientCtx.TxConfig anymore. + +bldr := clienttx.NewAuxTxBuilder() +err := bldr.SetMsgs(msgs...) +bldr.SetAddress("cosmos1...") +bldr.SetMemo(...) +bldr.SetTip(...) +bldr.SetPubKey(...) +err := bldr.SetSignMode(...) // DIRECT_AUX or AMINO, or else error +// ... other setters are also available + +// Get the bytes to sign. +signBz, err := bldr.GetSignBytes() + +// Sign the bz using your favorite method. +sig, err := privKey.sign(signBz) + +// Set the signature +bldr.SetSig(sig) + +// Get the final auxSignerData to be sent to the fee payer +auxSignerData, err:= bldr.GetAuxSignerData() +``` + +For the fee payer, the SDK added a new method on the existing `TxBuilder` to import data from an `AuxSignerData`: + +```go +// get `auxSignerData` from tipper, see code snippet above. + +txBuilder := clientCtx.TxConfig.NewTxBuilder() +err := txBuilder.AddAuxSignerData(auxSignerData) +if err != nil { + return err +} + +// A lot of fields will be populated in txBuilder, such as its Msgs, tip +// memo, etc... + +// The fee payer choses the fee to set on the transaction. +txBuilder.SetFeePayer() +txBuilder.SetFeeAmount(...) +txBuilder.SetGasLimit(...) + +// Usual signing code +err = authclient.SignTx(...) +if err != nil { + return err +} +``` diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/15-upgrade.md b/versioned_docs/version-0.47/develop/advanced-concepts/15-upgrade.md new file mode 100644 index 000000000..b5db25589 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/15-upgrade.md @@ -0,0 +1,162 @@ +--- +sidebar_position: 1 +--- + +# In-Place Store Migrations + +:::warning +Read and understand all the in-place store migration documentation before you run a migration on a live chain. +::: + +:::note Synopsis +Upgrade your app modules smoothly with custom in-place store migration logic. +::: + +The Cosmos SDK uses two methods to perform upgrades: + +* Exporting the entire application state to a JSON file using the `export` CLI command, making changes, and then starting a new binary with the changed JSON file as the genesis file. + +* Perform upgrades in place, which significantly decrease the upgrade time for chains with a larger state. Use the [Module Upgrade Guide](../building-modules/13-upgrade.md) to set up your application modules to take advantage of in-place upgrades. + +This document provides steps to use the In-Place Store Migrations upgrade method. + +## Tracking Module Versions + +Each module gets assigned a consensus version by the module developer. The consensus version serves as the breaking change version of the module. The Cosmos SDK keeps track of all module consensus versions in the x/upgrade `VersionMap` store. During an upgrade, the difference between the old `VersionMap` stored in state and the new `VersionMap` is calculated by the Cosmos SDK. For each identified difference, the module-specific migrations are run and the respective consensus version of each upgraded module is incremented. + +### Consensus Version + +The consensus version is defined on each app module by the module developer and serves as the breaking change version of the module. The consensus version informs the Cosmos SDK on which modules need to be upgraded. For example, if the bank module was version 2 and an upgrade introduces bank module 3, the Cosmos SDK upgrades the bank module and runs the "version 2 to 3" migration script. + +### Version Map + +The version map is a mapping of module names to consensus versions. The map is persisted to x/upgrade's state for use during in-place migrations. When migrations finish, the updated version map is persisted in the state. + +## Upgrade Handlers + +Upgrades use an `UpgradeHandler` to facilitate migrations. The `UpgradeHandler` functions implemented by the app developer must conform to the following function signature. These functions retrieve the `VersionMap` from x/upgrade's state and return the new `VersionMap` to be stored in x/upgrade after the upgrade. The diff between the two `VersionMap`s determines which modules need upgrading. + +```go +type UpgradeHandler func(ctx sdk.Context, plan Plan, fromVM VersionMap) (VersionMap, error) +``` + +Inside these functions, you must perform any upgrade logic to include in the provided `plan`. All upgrade handler functions must end with the following line of code: + +```go + return app.mm.RunMigrations(ctx, cfg, fromVM) +``` + +## Running Migrations + +Migrations are run inside of an `UpgradeHandler` using `app.mm.RunMigrations(ctx, cfg, vm)`. The `UpgradeHandler` functions describe the functionality to occur during an upgrade. The `RunMigration` function loops through the `VersionMap` argument and runs the migration scripts for all versions that are less than the versions of the new binary app module. After the migrations are finished, a new `VersionMap` is returned to persist the upgraded module versions to state. + +```go +cfg := module.NewConfigurator(...) +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // ... + // additional upgrade logic + // ... + + // returns a VersionMap with the updated module ConsensusVersions + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +To learn more about configuring migration scripts for your modules, see the [Module Upgrade Guide](../building-modules/13-upgrade.md). + +### Order Of Migrations + +By default, all migrations are run in module name alphabetical ascending order, except `x/auth` which is run last. The reason is state dependencies between x/auth and other modules (you can read more in [issue #10606](https://github.com/cosmos/cosmos-sdk/issues/10606)). + +If you want to change the order of migration, then you should call `app.mm.SetOrderMigrations(module1, module2, ...)` in your app.go file. The function will panic if you forget to include a module in the argument list. + +## Adding New Modules During Upgrades + +You can introduce entirely new modules to the application during an upgrade. New modules are recognized because they have not yet been registered in `x/upgrade`'s `VersionMap` store. In this case, `RunMigrations` calls the `InitGenesis` function from the corresponding module to set up its initial state. + +### Add StoreUpgrades for New Modules + +All chains preparing to run in-place store migrations will need to manually add store upgrades for new modules and then configure the store loader to apply those upgrades. This ensures that the new module's stores are added to the multistore before the migrations begin. + +```go +upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() +if err != nil { + panic(err) +} + +if upgradeInfo.Name == "my-plan" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + storeUpgrades := storetypes.StoreUpgrades{ + // add store upgrades for new modules + // Example: + // Added: []string{"foo", "bar"}, + // ... + } + + // configure store loader that checks if version == upgradeHeight and applies store upgrades + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) +} +``` + +## Genesis State + +When starting a new chain, the consensus version of each module MUST be saved to state during the application's genesis. To save the consensus version, add the following line to the `InitChainer` method in `app.go`: + +```diff +func (app *MyApp) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { + ... ++ app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) + ... +} +``` + +This information is used by the Cosmos SDK to detect when modules with newer versions are introduced to the app. + +For a new module `foo`, `InitGenesis` is called by `RunMigration` only when `foo` is registered in the module manager but it's not set in the `fromVM`. Therefore, if you want to skip `InitGenesis` when a new module is added to the app, then you should set its module version in `fromVM` to the module consensus version: + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + // ... + + // Set foo's version to the latest ConsensusVersion in the VersionMap. + // This will skip running InitGenesis on Foo + fromVM[foo.ModuleName] = foo.AppModule{}.ConsensusVersion() + + return app.mm.RunMigrations(ctx, fromVM) +}) +``` + +### Overwriting Genesis Functions + +The Cosmos SDK offers modules that the application developer can import in their app. These modules often have an `InitGenesis` function already defined. + +You can write your own `InitGenesis` function for an imported module. To do this, manually trigger your custom genesis function in the upgrade handler. + +:::warning +You MUST manually set the consensus version in the version map passed to the `UpgradeHandler` function. Without this, the SDK will run the Module's existing `InitGenesis` code even if you triggered your custom function in the `UpgradeHandler`. +::: + +```go +import foo "github.com/my/module/foo" + +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + + // Register the consensus version in the version map + // to avoid the SDK from triggering the default + // InitGenesis function. + fromVM["foo"] = foo.AppModule{}.ConsensusVersion() + + // Run custom InitGenesis for foo + app.mm["foo"].InitGenesis(ctx, app.appCodec, myCustomGenesisState) + + return app.mm.RunMigrations(ctx, cfg, fromVM) +}) +``` + +## Syncing a Full Node to an Upgraded Blockchain + +You can sync a full node to an existing blockchain which has been upgraded using Cosmovisor + +To successfully sync, you must start with the initial binary that the blockchain started with at genesis. If all Software Upgrade Plans contain binary instruction, then you can run Cosmovisor with auto-download option to automatically handle downloading and switching to the binaries associated with each sequential upgrade. Otherwise, you need to manually provide all binaries to Cosmovisor. + +To learn more about Cosmovisor, see the [Cosmovisor Quick Start](../tooling/01-cosmovisor.md). diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/_category_.json b/versioned_docs/version-0.47/develop/advanced-concepts/_category_.json new file mode 100644 index 000000000..2a5703c28 --- /dev/null +++ b/versioned_docs/version-0.47/develop/advanced-concepts/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Core Concepts", + "position": 2, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-begin_block.png b/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-begin_block.png new file mode 100644 index 0000000000000000000000000000000000000000..745d4a5a971292bb0346c35893b42ebfbcdc206e GIT binary patch literal 20565 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 HU84U7#M|-t literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-checktx.png b/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-checktx.png new file mode 100644 index 0000000000000000000000000000000000000000..38b217acdd04fb2430a2332946864de04474ae5a GIT binary patch literal 82308 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 N1zA-Y;BI{L{{e+~Yq9_U literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-deliver_tx.png b/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-deliver_tx.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a54b4ec34bbe282ed6eff81369428d02dec095 GIT binary patch literal 59007 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 E2iU8KRR910 literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-initchain.png b/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-initchain.png new file mode 100644 index 0000000000000000000000000000000000000000..167b4fad9ed05c2fc28884d7ab6bb1c9762eb87a GIT binary patch literal 243455 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%0DHjVx%9IiQ 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 z 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


kV~nocoZJ@&Isg-y|s8A&T_; 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

Ca5F$kg?&u`bYMrO4@tVd8s38KN3l9cMxc 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 iD`WgSz-V#2OJd4~i?gpLjs7^`pN5K-av|J2_ 1000uatom --from --gas auto --ga #### Other Transaction Creation Methods -The command-line is an easy way to interact with an application, but `Tx` can also be created using a [gRPC or REST interface](../advanced-concepts/09-grpc_rest.md) or some other entry point defined by the application developer. From the user's perspective, the interaction depends on the web interface or wallet they are using (e.g. creating `Tx` using [Lunie.io](https://lunie.io/#/) and signing it with a Ledger Nano S). +The command-line is an easy way to interact with an application, but `Tx` can also be created using a [gRPC or REST interface](../core/06-grpc_rest.md) or some other entry point defined by the application developer. From the user's perspective, the interaction depends on the web interface or wallet they are using (e.g. creating `Tx` using [Lunie.io](https://lunie.io/#/) and signing it with a Ledger Nano S). ## Addition to Mempool @@ -74,7 +72,7 @@ are not empty, enforcing nonnegative numbers, and other logic specified in the d **_Stateful_** checks validate transactions and messages based on a committed state. Examples include checking that the relevant values exist and can be transacted with, the address has sufficient funds, and the sender is authorized or has the correct ownership to transact. -At any given moment, full-nodes typically have [multiple versions](../advanced-concepts/00-baseapp.md#state-updates) +At any given moment, full-nodes typically have [multiple versions](../core/00-baseapp.md#state-updates) of the application's internal state for different purposes. For example, nodes execute state changes while in the process of verifying transactions, but still need a copy of the last committed state in order to answer queries - they should not respond using state with uncommitted changes. @@ -85,31 +83,26 @@ through several steps, beginning with decoding `Tx`. ### Decoding -When `Tx` is received by the application from the underlying consensus engine (e.g. CometBFT ), it is still in its [encoded](../advanced-concepts/06-encoding.md) `[]byte` form and needs to be unmarshaled in order to be processed. Then, the [`runTx`](../advanced-concepts/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) function is called to run in `runTxModeCheck` mode, meaning the function runs all checks but exits before executing messages and writing state changes. +When `Tx` is received by the application from the underlying consensus engine (e.g. CometBFT ), it is still in its [encoded](../core/05-encoding.md) `[]byte` form and needs to be unmarshaled in order to be processed. Then, the [`runTx`](../core/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) function is called to run in `runTxModeCheck` mode, meaning the function runs all checks but exits before executing messages and writing state changes. -### ValidateBasic (deprecated) +### ValidateBasic -Messages ([`sdk.Msg`](../advanced-concepts/01-transactions.md#messages)) are extracted from transactions (`Tx`). The `ValidateBasic` method of the `sdk.Msg` interface implemented by the module developer is run for each transaction. -To discard obviously invalid messages, the `BaseApp` type calls the `ValidateBasic` method very early in the processing of the message in the [`CheckTx`](../advanced-concepts/00-baseapp.md#checktx) and [`DeliverTx`](../advanced-concepts/00-baseapp.md#delivertx) transactions. +Messages ([`sdk.Msg`](../core/01-transactions.md#messages)) are extracted from transactions (`Tx`). The `ValidateBasic` method of the `sdk.Msg` interface implemented by the module developer is run for each transaction. +To discard obviously invalid messages, the `BaseApp` type calls the `ValidateBasic` method very early in the processing of the message in the [`CheckTx`](../core/00-baseapp.md#checktx) and [`DeliverTx`](../core/00-baseapp.md#delivertx) transactions. `ValidateBasic` can include only **stateless** checks (the checks that do not require access to the state). -:::warning -The `ValidateBasic` method on messages has been deprecated in the newest versions in favor of validating messages directly in their respective [`Msg` services](../../integrate/building-modules/03-msg-services.md#Validation). +#### Guideline -Read [RFC 001](https://docs.cosmos.network/main/rfc/rfc-001-tx-validation) for more details. -::: +Gas is not charged when `ValidateBasic` is executed, so we recommend only performing all necessary stateless checks to enable middleware operations (for example, parsing the required signer accounts to validate a signature by a middleware) and stateless sanity checks not impacting performance of the `CheckTx` phase. +Other validation operations must be performed when [handling a message](../building-modules/msg-services#Validation) in a module Msg Server. -:::note -`BaseApp` still calls `ValidateBasic` on messages that implements that method for backwards compatibility. -::: - -#### Guideline +For example, if the message is to send coins from one address to another, `ValidateBasic` likely checks for non-empty addresses and a non-negative coin amount, but does not require knowledge of state such as the account balance of an address. -`ValidateBasic` should not be used anymore. Message validation should be performed in the `Msg` service when [handling a message](../../integrate/building-modules/03-msg-services#Validation) in a module Msg Server. +See also [Msg Service Validation](../building-modules/03-msg-services.md#Validation). ### AnteHandler -After the ValidateBasic checks, the `AnteHandler`s are run. Technically, they are optional, but in practice, they are very often present to perform signature verification, gas calculation, fee deduction and other core operations related to blockchain transactions. +After the `ValidateBasic` checks, the `AnteHandler`s are run. Technically, they are optional, but in practice, they are very often present to perform signature verification, gas calculation, fee deduction, and other core operations related to blockchain transactions. A copy of the cached context is provided to the `AnteHandler`, which performs limited checks specified for the transaction type. Using a copy allows the `AnteHandler` to do stateful checks for `Tx` without modifying the last committed state, and revert back to the original if the execution fails. @@ -117,7 +110,7 @@ For example, the [`auth`](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth/ ### Gas -The [`Context`](../advanced-concepts/02-context.md), which keeps a `GasMeter` that tracks how much gas is used during the execution of `Tx`, is initialized. The user-provided amount of gas for `Tx` is known as `GasWanted`. If `GasConsumed`, the amount of gas consumed during execution, ever exceeds `GasWanted`, the execution stops and the changes made to the cached copy of the state are not committed. Otherwise, `CheckTx` sets `GasUsed` equal to `GasConsumed` and returns it in the result. After calculating the gas and fee values, validator-nodes check that the user-specified `gas-prices` is greater than their locally defined `min-gas-prices`. +The [`Context`](../core/02-context.md), which keeps a `GasMeter` that tracks how much gas is used during the execution of `Tx`, is initialized. The user-provided amount of gas for `Tx` is known as `GasWanted`. If `GasConsumed`, the amount of gas consumed during execution, ever exceeds `GasWanted`, the execution stops and the changes made to the cached copy of the state are not committed. Otherwise, `CheckTx` sets `GasUsed` equal to `GasConsumed` and returns it in the result. After calculating the gas and fee values, validator-nodes check that the user-specified `gas-prices` is greater than their locally defined `min-gas-prices`. ### Discard or Addition to Mempool @@ -159,8 +152,8 @@ must be in this proposer's mempool. The next step of consensus is to execute the transactions to fully validate them. All full-nodes that receive a block proposal from the correct proposer execute the transactions by calling the ABCI functions -[`BeginBlock`](00-overview-app.md#beginblocker-and-endblocker), `DeliverTx` for each transaction, -and [`EndBlock`](00-overview-app.md#beginblocker-and-endblocker). While each full-node runs everything +[`BeginBlock`](./00-app-anatomy.md#beginblocker-and-endblocker), `DeliverTx` for each transaction, +and [`EndBlock`](./00-app-anatomy.md#beginblocker-and-endblocker). While each full-node runs everything locally, this process yields a single, unambiguous result, since the messages' state transitions are deterministic and transactions are explicitly ordered in the block proposal. @@ -203,14 +196,14 @@ explicitly ordered in the block proposal. ### DeliverTx -The `DeliverTx` ABCI function defined in [`BaseApp`](../advanced-concepts/00-baseapp.md) does the bulk of the +The `DeliverTx` ABCI function defined in [`BaseApp`](../core/00-baseapp.md) does the bulk of the state transitions: it is run for each transaction in the block in sequential order as committed to during consensus. Under the hood, `DeliverTx` is almost identical to `CheckTx` but calls the -[`runTx`](../advanced-concepts/00-baseapp.md#runtx) function in deliver mode instead of check mode. +[`runTx`](../core/00-baseapp.md#runtx) function in deliver mode instead of check mode. Instead of using their `checkState`, full-nodes use `deliverState`: * **Decoding:** Since `DeliverTx` is an ABCI call, `Tx` is received in the encoded `[]byte` form. - Nodes first unmarshal the transaction, using the [`TxConfig`](00-overview-app#register-codec) defined in the app, then call `runTx` in `runTxModeDeliver`, which is very similar to `CheckTx` but also executes and writes state changes. + Nodes first unmarshal the transaction, using the [`TxConfig`](./app-anatomy#register-codec) defined in the app, then call `runTx` in `runTxModeDeliver`, which is very similar to `CheckTx` but also executes and writes state changes. * **Checks and `AnteHandler`:** Full-nodes call `validateBasicMsgs` and `AnteHandler` again. This second check happens because they may not have seen the same transactions during the addition to Mempool stage @@ -219,14 +212,14 @@ Instead of using their `checkState`, full-nodes use `deliverState`: to each node - differing values across nodes yield nondeterministic results. * **`MsgServiceRouter`:** After `CheckTx` exits, `DeliverTx` continues to run - [`runMsgs`](../advanced-concepts/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) to fully execute each `Msg` within the transaction. + [`runMsgs`](../core/00-baseapp.md#runtx-antehandler-runmsgs-posthandler) to fully execute each `Msg` within the transaction. Since the transaction may have messages from different modules, `BaseApp` needs to know which module - to find the appropriate handler. This is achieved using `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's Protobuf [`Msg` service](../../integrate/building-modules/03-msg-services.md). - For `LegacyMsg` routing, the `Route` function is called via the [module manager](../../integrate/building-modules/01-module-manager.md) to retrieve the route name and find the legacy [`Handler`](../../integrate/building-modules/03-msg-services.md#handler-type) within the module. + to find the appropriate handler. This is achieved using `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's Protobuf [`Msg` service](../building-modules/03-msg-services.md). + For `LegacyMsg` routing, the `Route` function is called via the [module manager](../building-modules/01-module-manager.md) to retrieve the route name and find the legacy [`Handler`](../building-modules/03-msg-services.md#handler-type) within the module. * **`Msg` service:** Protobuf `Msg` service is responsible for executing each message in the `Tx` and causes state transitions to persist in `deliverTxState`. -* **PostHandlers:** [`PostHandler`](../advanced-concepts/00-baseapp.md#posthandler)s run after the execution of the message. If they fail, the state change of `runMsgs`, as well of `PostHandlers`, are both reverted. +* **PostHandlers:** [`PostHandler`](../core/00-baseapp.md#posthandler)s run after the execution of the message. If they fail, the state change of `runMsgs`, as well of `PostHandlers`, are both reverted. * **Gas:** While a `Tx` is being delivered, a `GasMeter` is used to keep track of how much gas is being used; if execution completes, `GasUsed` is set and returned in the @@ -247,8 +240,8 @@ not they should commit the state changes. When they receive enough validator votes (2/3+ _precommits_ weighted by voting power), full nodes commit to a new block to be added to the blockchain and finalize the state transitions in the application layer. A new state root is generated to serve as -a merkle proof for the state transitions. Applications use the [`Commit`](../advanced-concepts/00-baseapp.md#commit) -ABCI method inherited from [Baseapp](../advanced-concepts/00-baseapp.md); it syncs all the state transitions by +a merkle proof for the state transitions. Applications use the [`Commit`](../core/00-baseapp.md#commit) +ABCI method inherited from [Baseapp](../core/00-baseapp.md); it syncs all the state transitions by writing the `deliverState` into the application's internal state. As soon as the state changes are committed, `checkState` starts afresh from the most recently committed state and `deliverState` resets to `nil` in order to be consistent and reflect the changes. diff --git a/versioned_docs/version-0.47/develop/high-level-concepts/02-query-lifecycle.md b/versioned_docs/version-0.47/develop/high-level-concepts/02-query-lifecycle.md new file mode 100644 index 000000000..27db1caf4 --- /dev/null +++ b/versioned_docs/version-0.47/develop/high-level-concepts/02-query-lifecycle.md @@ -0,0 +1,149 @@ +--- +sidebar_position: 1 +--- + +# Query Lifecycle + +:::note Synopsis +This document describes the lifecycle of a query in a Cosmos SDK application, from the user interface to application stores and back. The query is referred to as `MyQuery`. +::: + +:::note + +### Pre-requisite Readings + +* [Transaction Lifecycle](./01-tx-lifecycle.md) +::: + +## Query Creation + +A [**query**](../building-modules/02-messages-and-queries.md#queries) is a request for information made by end-users of applications through an interface and processed by a full-node. Users can query information about the network, the application itself, and application state directly from the application's stores or modules. Note that queries are different from [transactions](../core/01-transactions.md) (view the lifecycle [here](./01-tx-lifecycle.md)), particularly in that they do not require consensus to be processed (as they do not trigger state-transitions); they can be fully handled by one full-node. + +For the purpose of explaining the query lifecycle, let's say the query, `MyQuery`, is requesting a list of delegations made by a certain delegator address in the application called `simapp`. As is to be expected, the [`staking`](../modules/staking/README.md) module handles this query. But first, there are a few ways `MyQuery` can be created by users. + +### CLI + +The main interface for an application is the command-line interface. Users connect to a full-node and run the CLI directly from their machines - the CLI interacts directly with the full-node. To create `MyQuery` from their terminal, users type the following command: + +```bash +simd query staking delegations +``` + +This query command was defined by the [`staking`](../modules/staking/README.md) module developer and added to the list of subcommands by the application developer when creating the CLI. + +Note that the general format is as follows: + +```bash +simd query [moduleName] [command] --flag +``` + +To provide values such as `--node` (the full-node the CLI connects to), the user can use the [`app.toml`](../run-node/02-interact-node.md#configuring-the-node-using-apptoml) config file to set them or provide them as flags. + +The CLI understands a specific set of commands, defined in a hierarchical structure by the application developer: from the [root command](../core/07-cli.md#root-command) (`simd`), the type of command (`Myquery`), the module that contains the command (`staking`), and command itself (`delegations`). Thus, the CLI knows exactly which module handles this command and directly passes the call there. + +### gRPC + +Another interface through which users can make queries is [gRPC](https://grpc.io) requests to a [gRPC server](../core/06-grpc_rest.md#grpc-server). The endpoints are defined as [Protocol Buffers](https://developers.google.com/protocol-buffers) service methods inside `.proto` files, written in Protobuf's own language-agnostic interface definition language (IDL). The Protobuf ecosystem developed tools for code-generation from `*.proto` files into various languages. These tools allow to build gRPC clients easily. + +One such tool is [grpcurl](https://github.com/fullstorydev/grpcurl), and a gRPC request for `MyQuery` using this client looks like: + +```bash +grpcurl \ + -plaintext # We want results in plain test + -import-path ./proto \ # Import these .proto files + -proto ./proto/cosmos/staking/v1beta1/query.proto \ # Look into this .proto file for the Query protobuf service + -d '{"address":"$MY_DELEGATOR"}' \ # Query arguments + localhost:9090 \ # gRPC server endpoint + cosmos.staking.v1beta1.Query/Delegations # Fully-qualified service method name +``` + +### REST + +Another interface through which users can make queries is through HTTP Requests to a [REST server](../core/06-grpc_rest.md#rest-server). The REST server is fully auto-generated from Protobuf services, using [gRPC-gateway](https://github.com/grpc-ecosystem/grpc-gateway). + +An example HTTP request for `MyQuery` looks like: + +```bash +GET http://localhost:1317/cosmos/staking/v1beta1/delegators/{delegatorAddr}/delegations +``` + +## How Queries are Handled by the CLI + +The preceding examples show how an external user can interact with a node by querying its state. To understand in more detail the exact lifecycle of a query, let's dig into how the CLI prepares the query, and how the node handles it. The interactions from the users' perspective are a bit different, but the underlying functions are almost identical because they are implementations of the same command defined by the module developer. This step of processing happens within the CLI, gRPC, or REST server, and heavily involves a `client.Context`. + +### Context + +The first thing that is created in the execution of a CLI command is a `client.Context`. A `client.Context` is an object that stores all the data needed to process a request on the user side. In particular, a `client.Context` stores the following: + +* **Codec**: The [encoder/decoder](../core/05-encoding.md) used by the application, used to marshal the parameters and query before making the CometBFT RPC request and unmarshal the returned response into a JSON object. The default codec used by the CLI is Protobuf. +* **Account Decoder**: The account decoder from the [`auth`](../modules/auth/README.md) module, which translates `[]byte`s into accounts. +* **RPC Client**: The CometBFT RPC Client, or node, to which requests are relayed. +* **Keyring**: A [Key Manager](../basics/03-accounts.md#keyring) used to sign transactions and handle other operations with keys. +* **Output Writer**: A [Writer](https://pkg.go.dev/io/#Writer) used to output the response. +* **Configurations**: The flags configured by the user for this command, including `--height`, specifying the height of the blockchain to query, and `--indent`, which indicates to add an indent to the JSON response. + +The `client.Context` also contains various functions such as `Query()`, which retrieves the RPC Client and makes an ABCI call to relay a query to a full-node. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/context.go#L24-L64 +``` + +The `client.Context`'s primary role is to store data used during interactions with the end-user and provide methods to interact with this data - it is used before and after the query is processed by the full-node. Specifically, in handling `MyQuery`, the `client.Context` is utilized to encode the query parameters, retrieve the full-node, and write the output. Prior to being relayed to a full-node, the query needs to be encoded into a `[]byte` form, as full-nodes are application-agnostic and do not understand specific types. The full-node (RPC Client) itself is retrieved using the `client.Context`, which knows which node the user CLI is connected to. The query is relayed to this full-node to be processed. Finally, the `client.Context` contains a `Writer` to write output when the response is returned. These steps are further described in later sections. + +### Arguments and Route Creation + +At this point in the lifecycle, the user has created a CLI command with all of the data they wish to include in their query. A `client.Context` exists to assist in the rest of the `MyQuery`'s journey. Now, the next step is to parse the command or request, extract the arguments, and encode everything. These steps all happen on the user side within the interface they are interacting with. + +#### Encoding + +In our case (querying an address's delegations), `MyQuery` contains an [address](./03-accounts.md#addresses) `delegatorAddress` as its only argument. However, the request can only contain `[]byte`s, as it is ultimately relayed to a consensus engine (e.g. CometBFT) of a full-node that has no inherent knowledge of the application types. Thus, the `codec` of `client.Context` is used to marshal the address. + +Here is what the code looks like for the CLI command: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/client/cli/query.go#L323-L326 +``` + +#### gRPC Query Client Creation + +The Cosmos SDK leverages code generated from Protobuf services to make queries. The `staking` module's `MyQuery` service generates a `queryClient`, which the CLI uses to make queries. Here is the relevant code: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/client/cli/query.go#L317-L343 +``` + +Under the hood, the `client.Context` has a `Query()` function used to retrieve the pre-configured node and relay a query to it; the function takes the query fully-qualified service method name as path (in our case: `/cosmos.staking.v1beta1.Query/Delegations`), and arguments as parameters. It first retrieves the RPC Client (called the [**node**](../core/03-node.md)) configured by the user to relay this query to, and creates the `ABCIQueryOptions` (parameters formatted for the ABCI call). The node is then used to make the ABCI call, `ABCIQueryWithOptions()`. + +Here is what the code looks like: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/query.go#L79-L113 +``` + +## RPC + +With a call to `ABCIQueryWithOptions()`, `MyQuery` is received by a [full-node](../core/05-encoding.md) which then processes the request. Note that, while the RPC is made to the consensus engine (e.g. CometBFT) of a full-node, queries are not part of consensus and so are not broadcasted to the rest of the network, as they do not require anything the network needs to agree upon. + +Read more about ABCI Clients and CometBFT RPC in the [CometBFT documentation](https://docs.cometbft.com/v0.37/spec/rpc/). + +## Application Query Handling + +When a query is received by the full-node after it has been relayed from the underlying consensus engine, it is at that point being handled within an environment that understands application-specific types and has a copy of the state. [`baseapp`](../core/00-baseapp.md) implements the ABCI [`Query()`](../core/00-baseapp.md#query) function and handles gRPC queries. The query route is parsed, and it matches the fully-qualified service method name of an existing service method (most likely in one of the modules), then `baseapp` relays the request to the relevant module. + +Since `MyQuery` has a Protobuf fully-qualified service method name from the `staking` module (recall `/cosmos.staking.v1beta1.Query/Delegations`), `baseapp` first parses the path, then uses its own internal `GRPCQueryRouter` to retrieve the corresponding gRPC handler, and routes the query to the module. The gRPC handler is responsible for recognizing this query, retrieving the appropriate values from the application's stores, and returning a response. Read more about query services [here](../building-modules/04-query-services.md). + +Once a result is received from the querier, `baseapp` begins the process of returning a response to the user. + +## Response + +Since `Query()` is an ABCI function, `baseapp` returns the response as an [`abci.ResponseQuery`](https://docs.cometbft.com/master/spec/abci/abci.html#query-2) type. The `client.Context` `Query()` routine receives the response and. + +### CLI Response + +The application [`codec`](../core/05-encoding.md) is used to unmarshal the response to a JSON and the `client.Context` prints the output to the command line, applying any configurations such as the output type (text, JSON or YAML). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/context.go#L330-L358 +``` + +And that's a wrap! The result of the query is outputted to the console by the CLI. diff --git a/versioned_docs/version-0.47/develop/high-level-concepts/03-accounts.md b/versioned_docs/version-0.47/develop/high-level-concepts/03-accounts.md new file mode 100644 index 000000000..a9f8733ae --- /dev/null +++ b/versioned_docs/version-0.47/develop/high-level-concepts/03-accounts.md @@ -0,0 +1,281 @@ +--- +sidebar_position: 1 +--- + +# Accounts + +:::note Synopsis +This document describes the in-built account and public key system of the Cosmos SDK. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](./00-app-anatomy.md) + +::: + +## Account Definition + +In the Cosmos SDK, an _account_ designates a pair of _public key_ `PubKey` and _private key_ `PrivKey`. The `PubKey` can be derived to generate various `Addresses`, which are used to identify users (among other parties) in the application. `Addresses` are also associated with [`message`s](../building-modules/02-messages-and-queries.md#messages) to identify the sender of the `message`. The `PrivKey` is used to generate [digital signatures](#signatures) to prove that an `Address` associated with the `PrivKey` approved of a given `message`. + +For HD key derivation the Cosmos SDK uses a standard called [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki). The BIP32 allows users to create an HD wallet (as specified in [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)) - a set of accounts derived from an initial secret seed. A seed is usually created from a 12- or 24-word mnemonic. A single seed can derive any number of `PrivKey`s using a one-way cryptographic function. Then, a `PubKey` can be derived from the `PrivKey`. Naturally, the mnemonic is the most sensitive information, as private keys can always be re-generated if the mnemonic is preserved. + +```text + Account 0 Account 1 Account 2 + ++------------------+ +------------------+ +------------------+ +| | | | | | +| Address 0 | | Address 1 | | Address 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Public key 0 | | Public key 1 | | Public key 2 | +| ^ | | ^ | | ^ | +| | | | | | | | | +| | | | | | | | | +| | | | | | | | | +| + | | + | | + | +| Private key 0 | | Private key 1 | | Private key 2 | +| ^ | | ^ | | ^ | ++------------------+ +------------------+ +------------------+ + | | | + | | | + | | | + +--------------------------------------------------------------------+ + | + | + +---------+---------+ + | | + | Master PrivKey | + | | + +-------------------+ + | + | + +---------+---------+ + | | + | Mnemonic (Seed) | + | | + +-------------------+ +``` + +In the Cosmos SDK, keys are stored and managed by using an object called a [`Keyring`](#keyring). + +## Keys, accounts, addresses, and signatures + +The principal way of authenticating a user is done using [digital signatures](https://en.wikipedia.org/wiki/Digital_signature). Users sign transactions using their own private key. Signature verification is done with the associated public key. For on-chain signature verification purposes, we store the public key in an `Account` object (alongside other data required for a proper transaction validation). + +In the node, all data is stored using Protocol Buffers serialization. + +The Cosmos SDK supports the following digital key schemes for creating digital signatures: + +* `secp256k1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256k1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256k1/secp256k1.go). +* `secp256r1`, as implemented in the [Cosmos SDK's `crypto/keys/secp256r1` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/secp256r1/pubkey.go), +* `tm-ed25519`, as implemented in the [Cosmos SDK `crypto/keys/ed25519` package](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keys/ed25519/ed25519.go). This scheme is supported only for the consensus validation. + +| | Address length in bytes | Public key length in bytes | Used for transaction authentication | Used for consensus (cometbft) | +| :----------: | :---------------------: | :------------------------: | :---------------------------------: | :-----------------------------: | +| `secp256k1` | 20 | 33 | yes | no | +| `secp256r1` | 32 | 33 | yes | no | +| `tm-ed25519` | -- not used -- | 32 | no | yes | + +## Addresses + +`Addresses` and `PubKey`s are both public information that identifies actors in the application. `Account` is used to store authentication information. The basic account implementation is provided by a `BaseAccount` object. + +Each account is identified using `Address` which is a sequence of bytes derived from a public key. In the Cosmos SDK, we define 3 types of addresses that specify a context where an account is used: + +* `AccAddress` identifies users (the sender of a `message`). +* `ValAddress` identifies validator operators. +* `ConsAddress` identifies validator nodes that are participating in consensus. Validator nodes are derived using the **`ed25519`** curve. + +These types implement the `Address` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L108-L124 +``` + +Address construction algorithm is defined in [ADR-28](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-028-public-key-addresses.md). +Here is the standard way to obtain an account address from a `pub` public key: + +```go +sdk.AccAddress(pub.Address().Bytes()) +``` + +Of note, the `Marshal()` and `Bytes()` method both return the same raw `[]byte` form of the address. `Marshal()` is required for Protobuf compatibility. + +For user interaction, addresses are formatted using [Bech32](https://en.bitcoin.it/wiki/Bech32) and implemented by the `String` method. The Bech32 method is the only supported format to use when interacting with a blockchain. The Bech32 human-readable part (Bech32 prefix) is used to denote an address type. Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/address.go#L281-L295 +``` + +| | Address Bech32 Prefix | +| ------------------ | --------------------- | +| Accounts | cosmos | +| Validator Operator | cosmosvaloper | +| Consensus Nodes | cosmosvalcons | + +### Public Keys + +Public keys in Cosmos SDK are defined by `cryptotypes.PubKey` interface. Since public keys are saved in a store, `cryptotypes.PubKey` extends the `proto.Message` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/types/types.go#L8-L17 +``` + +A compressed format is used for `secp256k1` and `secp256r1` serialization. + +* The first byte is a `0x02` byte if the `y`-coordinate is the lexicographically largest of the two associated with the `x`-coordinate. +* Otherwise the first byte is a `0x03`. + +This prefix is followed by the `x`-coordinate. + +Public Keys are not used to reference accounts (or users) and in general are not used when composing transaction messages (with few exceptions: `MsgCreateValidator`, `Validator` and `Multisig` messages). +For user interactions, `PubKey` is formatted using Protobufs JSON ([ProtoMarshalJSON](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/codec/json.go#L14-L34) function). Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/output.go#L23-L39 +``` + +## Keyring + +A `Keyring` is an object that stores and manages accounts. In the Cosmos SDK, a `Keyring` implementation follows the `Keyring` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L54-L101 +``` + +The default implementation of `Keyring` comes from the third-party [`99designs/keyring`](https://github.com/99designs/keyring) library. + +A few notes on the `Keyring` methods: + +* `Sign(uid string, msg []byte) ([]byte, types.PubKey, error)` strictly deals with the signature of the `msg` bytes. You must prepare and encode the transaction into a canonical `[]byte` form. Because protobuf is not deterministic, it has been decided in [ADR-020](../architecture/adr-020-protobuf-transaction-encoding.md) that the canonical `payload` to sign is the `SignDoc` struct, deterministically encoded using [ADR-027](../architecture/adr-027-deterministic-protobuf-serialization.md). Note that signature verification is not implemented in the Cosmos SDK by default, it is deferred to the [`anteHandler`](../core/00-baseapp.md#antehandler). + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L48-L65 +``` + +* `NewAccount(uid, mnemonic, bip39Passphrase, hdPath string, algo SignatureAlgo) (*Record, error)` creates a new account based on the [`bip44 path`](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) and persists it on disk. The `PrivKey` is **never stored unencrypted**, instead it is [encrypted with a passphrase](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/armor.go) before being persisted. In the context of this method, the key type and sequence number refer to the segment of the BIP44 derivation path (for example, `0`, `1`, `2`, ...) that is used to derive a private and a public key from the mnemonic. Using the same mnemonic and derivation path, the same `PrivKey`, `PubKey` and `Address` is generated. The following keys are supported by the keyring: + +* `secp256k1` +* `ed25519` + +* `ExportPrivKeyArmor(uid, encryptPassphrase string) (armor string, err error)` exports a private key in ASCII-armored encrypted format using the given passphrase. You can then either import the private key again into the keyring using the `ImportPrivKey(uid, armor, passphrase string)` function or decrypt it into a raw private key using the `UnarmorDecryptPrivKey(armorStr string, passphrase string)` function. + +### Create New Key Type + +To create a new key type for using in keyring, `keyring.SignatureAlgo` interface must be fulfilled. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/signing_algorithms.go#L10-L15 +``` + +The interface consists in three methods where `Name()` returns the name of the algorithm as a `hd.PubKeyType` and `Derive()` and `Generate()` must return the following functions respectively: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/hd/algo.go#L28-L31 +``` +Once the `keyring.SignatureAlgo` has been implemented it must be added to the [list of supported algos](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L217) of the keyring. + +For simplicity the implementation of a new key type should be done inside the `crypto/hd` package. +There is an example of a working `secp256k1` implementation in [algo.go](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/hd/algo.go#L38). + + +#### Implementing secp256r1 algo + +Here is an example of how secp256r1 could be implemented. + +First a new function to create a private key from a secret number is needed in the secp256r1 package. This function could look like this: + +```go +// cosmos-sdk/crypto/keys/secp256r1/privkey.go + +// NewPrivKeyFromSecret creates a private key derived for the secret number +// represented in big-endian. The `secret` must be a valid ECDSA field element. +func NewPrivKeyFromSecret(secret []byte) (*PrivKey, error) { + var d = new(big.Int).SetBytes(secret) + if d.Cmp(secp256r1.Params().N) >= 1 { + return nil, sdkerrors.Wrap(errors.ErrInvalidRequest, "secret not in the curve base field") + } + sk := new(ecdsa.PrivKey) + return &PrivKey{&ecdsaSK{*sk}}, nil +} +``` + +After that `secp256r1Algo` can be implemented. + +```go +// cosmos-sdk/crypto/hd/secp256r1Algo.go + +package hd + +import ( + "github.com/cosmos/go-bip39" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" + "github.com/cosmos/cosmos-sdk/crypto/types" +) + +// Secp256r1Type uses the secp256r1 ECDSA parameters. +const Secp256r1Type = PubKeyType("secp256r1") + +var Secp256r1 = secp256r1Algo{} + +type secp256r1Algo struct{} + +func (s secp256r1Algo) Name() PubKeyType { + return Secp256r1Type +} + +// Derive derives and returns the secp256r1 private key for the given seed and HD path. +func (s secp256r1Algo) Derive() DeriveFn { + return func(mnemonic string, bip39Passphrase, hdPath string) ([]byte, error) { + seed, err := bip39.NewSeedWithErrorChecking(mnemonic, bip39Passphrase) + if err != nil { + return nil, err + } + + masterPriv, ch := ComputeMastersFromSeed(seed) + if len(hdPath) == 0 { + return masterPriv[:], nil + } + derivedKey, err := DerivePrivateKeyForPath(masterPriv, ch, hdPath) + + return derivedKey, err + } +} + +// Generate generates a secp256r1 private key from the given bytes. +func (s secp256r1Algo) Generate() GenerateFn { + return func(bz []byte) types.PrivKey { + key, err := secp256r1.NewPrivKeyFromSecret(bz) + if err != nil { + panic(err) + } + return key + } +} +``` + +Finally, the algo must be added to the list of [supported algos](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/crypto/keyring/keyring.go#L217) by the keyring. + +```go +// cosmos-sdk/crypto/keyring/keyring.go + +func newKeystore(kr keyring.Keyring, cdc codec.Codec, backend string, opts ...Option) keystore { + // Default options for keybase, these can be overwritten using the + // Option function + options := Options{ + SupportedAlgos: SigningAlgoList{hd.Secp256k1, hd.Secp256r1}, // added here + SupportedAlgosLedger: SigningAlgoList{hd.Secp256k1}, + } +... +``` + +Hereafter to create new keys using your algo, you must specify it with the flag `--algo` : + +`simd keys add myKey --algo secp256r1` \ No newline at end of file diff --git a/versioned_docs/version-0.47/develop/high-level-concepts/04-gas-fees.md b/versioned_docs/version-0.47/develop/high-level-concepts/04-gas-fees.md new file mode 100644 index 000000000..821fe9711 --- /dev/null +++ b/versioned_docs/version-0.47/develop/high-level-concepts/04-gas-fees.md @@ -0,0 +1,99 @@ +--- +sidebar_position: 1 +--- + +# Gas and Fees + +:::note Synopsis +This document describes the default strategies to handle gas and fees within a Cosmos SDK application. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](./00-app-anatomy.md) + +::: + +## Introduction to `Gas` and `Fees` + +In the Cosmos SDK, `gas` is a special unit that is used to track the consumption of resources during execution. `gas` is typically consumed whenever read and writes are made to the store, but it can also be consumed if expensive computation needs to be done. It serves two main purposes: + +* Make sure blocks are not consuming too many resources and are finalized. This is implemented by default in the Cosmos SDK via the [block gas meter](#block-gas-meter). +* Prevent spam and abuse from end-user. To this end, `gas` consumed during [`message`](../building-modules/02-messages-and-queries.md#messages) execution is typically priced, resulting in a `fee` (`fees = gas * gas-prices`). `fees` generally have to be paid by the sender of the `message`. Note that the Cosmos SDK does not enforce `gas` pricing by default, as there may be other ways to prevent spam (e.g. bandwidth schemes). Still, most applications implement `fee` mechanisms to prevent spam by using the [`AnteHandler`](#antehandler). + +## Gas Meter + +In the Cosmos SDK, `gas` is a simple alias for `uint64`, and is managed by an object called a _gas meter_. Gas meters implement the `GasMeter` interface + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/store/types/gas.go#L40-L51 +``` + +where: + +* `GasConsumed()` returns the amount of gas that was consumed by the gas meter instance. +* `GasConsumedToLimit()` returns the amount of gas that was consumed by gas meter instance, or the limit if it is reached. +* `GasRemaining()` returns the gas left in the GasMeter. +* `Limit()` returns the limit of the gas meter instance. `0` if the gas meter is infinite. +* `ConsumeGas(amount Gas, descriptor string)` consumes the amount of `gas` provided. If the `gas` overflows, it panics with the `descriptor` message. If the gas meter is not infinite, it panics if `gas` consumed goes above the limit. +* `RefundGas()` deducts the given amount from the gas consumed. This functionality enables refunding gas to the transaction or block gas pools so that EVM-compatible chains can fully support the go-ethereum StateDB interface. +* `IsPastLimit()` returns `true` if the amount of gas consumed by the gas meter instance is strictly above the limit, `false` otherwise. +* `IsOutOfGas()` returns `true` if the amount of gas consumed by the gas meter instance is above or equal to the limit, `false` otherwise. + +The gas meter is generally held in [`ctx`](../core/02-context.md), and consuming gas is done with the following pattern: + +```go +ctx.GasMeter().ConsumeGas(amount, "description") +``` + +By default, the Cosmos SDK makes use of two different gas meters, the [main gas meter](#main-gas-metter) and the [block gas meter](#block-gas-meter). + +### Main Gas Meter + +`ctx.GasMeter()` is the main gas meter of the application. The main gas meter is initialized in `BeginBlock` via `setDeliverState`, and then tracks gas consumption during execution sequences that lead to state-transitions, i.e. those originally triggered by [`BeginBlock`](../core/00-baseapp.md#beginblock), [`DeliverTx`](../core/00-baseapp.md#delivertx) and [`EndBlock`](../core/00-baseapp.md#endblock). At the beginning of each `DeliverTx`, the main gas meter **must be set to 0** in the [`AnteHandler`](#antehandler), so that it can track gas consumption per-transaction. + +Gas consumption can be done manually, generally by the module developer in the [`BeginBlocker`, `EndBlocker`](../building-modules/05-beginblock-endblock.md) or [`Msg` service](../building-modules/03-msg-services.md), but most of the time it is done automatically whenever there is a read or write to the store. This automatic gas consumption logic is implemented in a special store called [`GasKv`](../core/04-store.md#gaskv-store). + +### Block Gas Meter + +`ctx.BlockGasMeter()` is the gas meter used to track gas consumption per block and make sure it does not go above a certain limit. A new instance of the `BlockGasMeter` is created each time [`BeginBlock`](../core/00-baseapp.md#beginblock) is called. The `BlockGasMeter` is finite, and the limit of gas per block is defined in the application's consensus parameters. By default, Cosmos SDK applications use the default consensus parameters provided by CometBFT: + +```go reference +https://github.com/cometbft/cometbft/blob/v0.37.0/types/params.go#L66-L105 +``` + +When a new [transaction](../core/01-transactions.md) is being processed via `DeliverTx`, the current value of `BlockGasMeter` is checked to see if it is above the limit. If it is, `DeliverTx` returns immediately. This can happen even with the first transaction in a block, as `BeginBlock` itself can consume gas. If not, the transaction is processed normally. At the end of `DeliverTx`, the gas tracked by `ctx.BlockGasMeter()` is increased by the amount consumed to process the transaction: + +```go +ctx.BlockGasMeter().ConsumeGas( + ctx.GasMeter().GasConsumedToLimit(), + "block gas meter", +) +``` + +## AnteHandler + +The `AnteHandler` is run for every transaction during `CheckTx` and `DeliverTx`, before a Protobuf `Msg` service method for each `sdk.Msg` in the transaction. + +The anteHandler is not implemented in the core Cosmos SDK but in a module. That said, most applications today use the default implementation defined in the [`auth` module](https://github.com/cosmos/cosmos-sdk/tree/main/x/auth). Here is what the `anteHandler` is intended to do in a normal Cosmos SDK application: + +* Verify that the transactions are of the correct type. Transaction types are defined in the module that implements the `anteHandler`, and they follow the transaction interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L42-L50 +``` + + This enables developers to play with various types for the transaction of their application. In the default `auth` module, the default transaction type is `Tx`: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/tx/v1beta1/tx.proto#L13-L26 +``` + +* Verify signatures for each [`message`](../building-modules/02-messages-and-queries.md#messages) contained in the transaction. Each `message` should be signed by one or multiple sender(s), and these signatures must be verified in the `anteHandler`. +* During `CheckTx`, verify that the gas prices provided with the transaction is greater than the local `min-gas-prices` (as a reminder, gas-prices can be deducted from the following equation: `fees = gas * gas-prices`). `min-gas-prices` is a parameter local to each full-node and used during `CheckTx` to discard transactions that do not provide a minimum amount of fees. This ensures that the mempool cannot be spammed with garbage transactions. +* Verify that the sender of the transaction has enough funds to cover for the `fees`. When the end-user generates a transaction, they must indicate 2 of the 3 following parameters (the third one being implicit): `fees`, `gas` and `gas-prices`. This signals how much they are willing to pay for nodes to execute their transaction. The provided `gas` value is stored in a parameter called `GasWanted` for later use. +* Set `newCtx.GasMeter` to 0, with a limit of `GasWanted`. **This step is crucial**, as it not only makes sure the transaction cannot consume infinite gas, but also that `ctx.GasMeter` is reset in-between each `DeliverTx` (`ctx` is set to `newCtx` after `anteHandler` is run, and the `anteHandler` is run each time `DeliverTx` is called). + +As explained above, the `anteHandler` returns a maximum limit of `gas` the transaction can consume during execution called `GasWanted`. The actual amount consumed in the end is denominated `GasUsed`, and we must therefore have `GasUsed =< GasWanted`. Both `GasWanted` and `GasUsed` are relayed to the underlying consensus engine when [`DeliverTx`](../core/00-baseapp.md#delivertx) returns. diff --git a/versioned_docs/version-0.47/develop/high-level-concepts/_category_.json b/versioned_docs/version-0.47/develop/high-level-concepts/_category_.json new file mode 100644 index 000000000..1f2b57293 --- /dev/null +++ b/versioned_docs/version-0.47/develop/high-level-concepts/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Basics", + "position": 1, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/develop/intro/00-what-is-sdk.md b/versioned_docs/version-0.47/develop/intro/00-what-is-sdk.md new file mode 100644 index 000000000..cb14ee46a --- /dev/null +++ b/versioned_docs/version-0.47/develop/intro/00-what-is-sdk.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- +# What is the Cosmos SDK + +The [Cosmos SDK](https://github.com/cosmos/cosmos-sdk) is an open-source framework for building multi-asset public Proof-of-Stake (PoS) blockchains, like the Cosmos Hub, as well as permissioned Proof-of-Authority (PoA) blockchains. Blockchains built with the Cosmos SDK are generally referred to as **application-specific blockchains**. + +The goal of the Cosmos SDK is to allow developers to easily create custom blockchains from scratch that can natively interoperate with other blockchains. We envision the Cosmos SDK as the npm-like framework to build secure blockchain applications on top of [CometBFT](https://github.com/cometbft/cometbft). SDK-based blockchains are built out of composable [modules](../building-modules/01-intro.md), most of which are open-source and readily available for any developers to use. Anyone can create a module for the Cosmos SDK, and integrating already-built modules is as simple as importing them into your blockchain application. What's more, the Cosmos SDK is a capabilities-based system that allows developers to better reason about the security of interactions between modules. For a deeper look at capabilities, jump to [Object-Capability Model](../core/10-ocap.md). + +## What are Application-Specific Blockchains + +One development paradigm in the blockchain world today is that of virtual-machine blockchains like Ethereum, where development generally revolves around building decentralized applications on top of an existing blockchain as a set of smart contracts. While smart contracts can be very good for some use cases like single-use applications (e.g. ICOs), they often fall short for building complex decentralized platforms. More generally, smart contracts can be limiting in terms of flexibility, sovereignty and performance. + +Application-specific blockchains offer a radically different development paradigm than virtual-machine blockchains. An application-specific blockchain is a blockchain customized to operate a single application: developers have all the freedom to make the design decisions required for the application to run optimally. They can also provide better sovereignty, security and performance. + +Learn more about [application-specific blockchains](./01-why-app-specific.md). + +## Why the Cosmos SDK + +The Cosmos SDK is the most advanced framework for building custom application-specific blockchains today. Here are a few reasons why you might want to consider building your decentralized application with the Cosmos SDK: + +* The default consensus engine available within the Cosmos SDK is [CometBFT](https://github.com/cometbft/cometbft). CometBFT is the most (and only) mature BFT consensus engine in existence. It is widely used across the industry and is considered the gold standard consensus engine for building Proof-of-Stake systems. +* The Cosmos SDK is open-source and designed to make it easy to build blockchains out of composable [modules](../modules). As the ecosystem of open-source Cosmos SDK modules grows, it will become increasingly easier to build complex decentralized platforms with it. +* The Cosmos SDK is inspired by capabilities-based security, and informed by years of wrestling with blockchain state-machines. This makes the Cosmos SDK a very secure environment to build blockchains. +* Most importantly, the Cosmos SDK has already been used to build many application-specific blockchains that are already in production. Among others, we can cite [Cosmos Hub](https://hub.cosmos.network), [IRIS Hub](https://irisnet.org), [Binance Chain](https://docs.binance.org/), [Terra](https://terra.money/) or [Kava](https://www.kava.io/). [Many more](https://cosmos.network/ecosystem) are building on the Cosmos SDK. + +## Getting started with the Cosmos SDK + +* Learn more about the [architecture of a Cosmos SDK application](./02-sdk-app-architecture.md) +* Learn how to build an application-specific blockchain from scratch with the [Cosmos SDK Tutorial](https://cosmos.network/docs/tutorial) diff --git a/versioned_docs/version-0.47/develop/intro/01-why-app-specific.md b/versioned_docs/version-0.47/develop/intro/01-why-app-specific.md new file mode 100644 index 000000000..97a2d9a8d --- /dev/null +++ b/versioned_docs/version-0.47/develop/intro/01-why-app-specific.md @@ -0,0 +1,80 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- + +# Application-Specific Blockchains + +:::note Synopsis +This document explains what application-specific blockchains are, and why developers would want to build one as opposed to writing Smart Contracts. +::: + +## What are application-specific blockchains + +Application-specific blockchains are blockchains customized to operate a single application. Instead of building a decentralized application on top of an underlying blockchain like Ethereum, developers build their own blockchain from the ground up. This means building a full-node client, a light-client, and all the necessary interfaces (CLI, REST, ...) to interact with the nodes. + +```text + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | CometBFT + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +## What are the shortcomings of Smart Contracts + +Virtual-machine blockchains like Ethereum addressed the demand for more programmability back in 2014. At the time, the options available for building decentralized applications were quite limited. Most developers would build on top of the complex and limited Bitcoin scripting language, or fork the Bitcoin codebase which was hard to work with and customize. + +Virtual-machine blockchains came in with a new value proposition. Their state-machine incorporates a virtual-machine that is able to interpret turing-complete programs called Smart Contracts. These Smart Contracts are very good for use cases like one-time events (e.g. ICOs), but they can fall short for building complex decentralized platforms. Here is why: + +* Smart Contracts are generally developed with specific programming languages that can be interpreted by the underlying virtual-machine. These programming languages are often immature and inherently limited by the constraints of the virtual-machine itself. For example, the Ethereum Virtual Machine does not allow developers to implement automatic execution of code. Developers are also limited to the account-based system of the EVM, and they can only choose from a limited set of functions for their cryptographic operations. These are examples, but they hint at the lack of **flexibility** that a smart contract environment often entails. +* Smart Contracts are all run by the same virtual machine. This means that they compete for resources, which can severely restrain **performance**. And even if the state-machine were to be split in multiple subsets (e.g. via sharding), Smart Contracts would still need to be interpreted by a virtual machine, which would limit performance compared to a native application implemented at state-machine level (our benchmarks show an improvement on the order of 10x in performance when the virtual-machine is removed). +* Another issue with the fact that Smart Contracts share the same underlying environment is the resulting limitation in **sovereignty**. A decentralized application is an ecosystem that involves multiple players. If the application is built on a general-purpose virtual-machine blockchain, stakeholders have very limited sovereignty over their application, and are ultimately superseded by the governance of the underlying blockchain. If there is a bug in the application, very little can be done about it. + +Application-Specific Blockchains are designed to address these shortcomings. + +## Application-Specific Blockchains Benefits + +### Flexibility + +Application-specific blockchains give maximum flexibility to developers: + +* In Cosmos blockchains, the state-machine is typically connected to the underlying consensus engine via an interface called the [ABCI](https://docs.cometbft.com/v0.37/spec/abci/). This interface can be wrapped in any programming language, meaning developers can build their state-machine in the programming language of their choice. + +* Developers can choose among multiple frameworks to build their state-machine. The most widely used today is the Cosmos SDK, but others exist (e.g. [Lotion](https://github.com/nomic-io/lotion), [Weave](https://github.com/iov-one/weave), ...). Typically the choice will be made based on the programming language they want to use (Cosmos SDK and Weave are in Golang, Lotion is in Javascript, ...). +* The ABCI also allows developers to swap the consensus engine of their application-specific blockchain. Today, only CometBFT is production-ready, but in the future other consensus engines are expected to emerge. +* Even when they settle for a framework and consensus engine, developers still have the freedom to tweak them if they don't perfectly match their requirements in their pristine forms. +* Developers are free to explore the full spectrum of tradeoffs (e.g. number of validators vs transaction throughput, safety vs availability in asynchrony, ...) and design choices (DB or IAVL tree for storage, UTXO or account model, ...). +* Developers can implement automatic execution of code. In the Cosmos SDK, logic can be automatically triggered at the beginning and the end of each block. They are also free to choose the cryptographic library used in their application, as opposed to being constrained by what is made available by the underlying environment in the case of virtual-machine blockchains. + +The list above contains a few examples that show how much flexibility application-specific blockchains give to developers. The goal of Cosmos and the Cosmos SDK is to make developer tooling as generic and composable as possible, so that each part of the stack can be forked, tweaked and improved without losing compatibility. As the community grows, more alternatives for each of the core building blocks will emerge, giving more options to developers. + +### Performance + +decentralized applications built with Smart Contracts are inherently capped in performance by the underlying environment. For a decentralized application to optimise performance, it needs to be built as an application-specific blockchain. Next are some of the benefits an application-specific blockchain brings in terms of performance: + +* Developers of application-specific blockchains can choose to operate with a novel consensus engine such as CometBFT BFT. Compared to Proof-of-Work (used by most virtual-machine blockchains today), it offers significant gains in throughput. +* An application-specific blockchain only operates a single application, so that the application does not compete with others for computation and storage. This is the opposite of most non-sharded virtual-machine blockchains today, where smart contracts all compete for computation and storage. +* Even if a virtual-machine blockchain offered application-based sharding coupled with an efficient consensus algorithm, performance would still be limited by the virtual-machine itself. The real throughput bottleneck is the state-machine, and requiring transactions to be interpreted by a virtual-machine significantly increases the computational complexity of processing them. + +### Security + +Security is hard to quantify, and greatly varies from platform to platform. That said here are some important benefits an application-specific blockchain can bring in terms of security: + +* Developers can choose proven programming languages like Go when building their application-specific blockchains, as opposed to smart contract programming languages that are often more immature. +* Developers are not constrained by the cryptographic functions made available by the underlying virtual-machines. They can use their own custom cryptography, and rely on well-audited crypto libraries. +* Developers do not have to worry about potential bugs or exploitable mechanisms in the underlying virtual-machine, making it easier to reason about the security of the application. + +### Sovereignty + +One of the major benefits of application-specific blockchains is sovereignty. A decentralized application is an ecosystem that involves many actors: users, developers, third-party services, and more. When developers build on virtual-machine blockchain where many decentralized applications coexist, the community of the application is different than the community of the underlying blockchain, and the latter supersedes the former in the governance process. If there is a bug or if a new feature is needed, stakeholders of the application have very little leeway to upgrade the code. If the community of the underlying blockchain refuses to act, nothing can happen. + +The fundamental issue here is that the governance of the application and the governance of the network are not aligned. This issue is solved by application-specific blockchains. Because application-specific blockchains specialize to operate a single application, stakeholders of the application have full control over the entire chain. This ensures that the community will not be stuck if a bug is discovered, and that it has the freedom to choose how it is going to evolve. diff --git a/versioned_docs/version-0.47/develop/intro/02-sdk-app-architecture.md b/versioned_docs/version-0.47/develop/intro/02-sdk-app-architecture.md new file mode 100644 index 000000000..a7ef4fa7a --- /dev/null +++ b/versioned_docs/version-0.47/develop/intro/02-sdk-app-architecture.md @@ -0,0 +1,94 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- + +# Blockchain Architecture + +## State machine + +At its core, a blockchain is a [replicated deterministic state machine](https://en.wikipedia.org/wiki/State_machine_replication). + +A state machine is a computer science concept whereby a machine can have multiple states, but only one at any given time. There is a `state`, which describes the current state of the system, and `transactions`, that trigger state transitions. + +Given a state S and a transaction T, the state machine will return a new state S'. + +```text ++--------+ +--------+ +| | | | +| S +---------------->+ S' | +| | apply(T) | | ++--------+ +--------+ +``` + +In practice, the transactions are bundled in blocks to make the process more efficient. Given a state S and a block of transactions B, the state machine will return a new state S'. + +```text ++--------+ +--------+ +| | | | +| S +----------------------------> | S' | +| | For each T in B: apply(T) | | ++--------+ +--------+ +``` + +In a blockchain context, the state machine is deterministic. This means that if a node is started at a given state and replays the same sequence of transactions, it will always end up with the same final state. + +The Cosmos SDK gives developers maximum flexibility to define the state of their application, transaction types and state transition functions. The process of building state-machines with the Cosmos SDK will be described more in depth in the following sections. But first, let us see how the state-machine is replicated using **CometBFT**. + +## CometBFT + +Thanks to the Cosmos SDK, developers just have to define the state machine, and [*CometBFT*](https://docs.cometbft.com/v0.37/introduction/what-is-cometbft) will handle replication over the network for them. + +```text + ^ +-------------------------------+ ^ + | | | | Built with Cosmos SDK + | | State-machine = Application | | + | | | v + | +-------------------------------+ + | | | ^ +Blockchain node | | Consensus | | + | | | | + | +-------------------------------+ | CometBFT + | | | | + | | Networking | | + | | | | + v +-------------------------------+ v +``` + +[CometBFT](https://docs.cometbft.com/v0.37/introduction/what-is-cometbft) is an application-agnostic engine that is responsible for handling the *networking* and *consensus* layers of a blockchain. In practice, this means that CometBFT is responsible for propagating and ordering transaction bytes. CometBFT relies on an eponymous Byzantine-Fault-Tolerant (BFT) algorithm to reach consensus on the order of transactions. + +The CometBFT [consensus algorithm](https://docs.cometbft.com/v0.37/introduction/what-is-cometbft#consensus-overview) works with a set of special nodes called *Validators*. Validators are responsible for adding blocks of transactions to the blockchain. At any given block, there is a validator set V. A validator in V is chosen by the algorithm to be the proposer of the next block. This block is considered valid if more than two thirds of V signed a `prevote` and a `precommit` on it, and if all the transactions that it contains are valid. The validator set can be changed by rules written in the state-machine. + +## ABCI + +CometBFT passes transactions to the application through an interface called the [ABCI](https://docs.cometbft.com/v0.37/spec/abci/), which the application must implement. + +```text + +---------------------+ + | | + | Application | + | | + +--------+---+--------+ + ^ | + | | ABCI + | v + +--------+---+--------+ + | | + | | + | CometBFT | + | | + | | + +---------------------+ +``` + +Note that **CometBFT only handles transaction bytes**. It has no knowledge of what these bytes mean. All CometBFT does is order these transaction bytes deterministically. CometBFT passes the bytes to the application via the ABCI, and expects a return code to inform it if the messages contained in the transactions were successfully processed or not. + +Here are the most important messages of the ABCI: + +* `CheckTx`: When a transaction is received by CometBFT, it is passed to the application to check if a few basic requirements are met. `CheckTx` is used to protect the mempool of full-nodes against spam transactions. . A special handler called the [`AnteHandler`](../basics/04-gas-fees.md#antehandler) is used to execute a series of validation steps such as checking for sufficient fees and validating the signatures. If the checks are valid, the transaction is added to the [mempool](https://docs.cometbft.com/v0.37/spec/p2p/messages/mempool) and relayed to peer nodes. Note that transactions are not processed (i.e. no modification of the state occurs) with `CheckTx` since they have not been included in a block yet. +* `DeliverTx`: When a [valid block](https://docs.cometbft.com/v0.37/spec/core/data_structures#block) is received by CometBFT, each transaction in the block is passed to the application via `DeliverTx` in order to be processed. It is during this stage that the state transitions occur. The `AnteHandler` executes again, along with the actual [`Msg` service](../building-modules/03-msg-services.md) RPC for each message in the transaction. +* `BeginBlock`/`EndBlock`: These messages are executed at the beginning and the end of each block, whether the block contains transactions or not. It is useful to trigger automatic execution of logic. Proceed with caution though, as computationally expensive loops could slow down your blockchain, or even freeze it if the loop is infinite. + +Find a more detailed view of the ABCI methods from the [CometBFT docs](https://docs.cometbft.com/v0.37/spec/abci/). + +Any application built on CometBFT needs to implement the ABCI interface in order to communicate with the underlying local CometBFT engine. Fortunately, you do not have to implement the ABCI interface. The Cosmos SDK provides a boilerplate implementation of it in the form of [baseapp](./03-sdk-design.md#baseapp). diff --git a/versioned_docs/version-0.47/develop/intro/03-sdk-design.md b/versioned_docs/version-0.47/develop/intro/03-sdk-design.md new file mode 100644 index 000000000..6a8bc52de --- /dev/null +++ b/versioned_docs/version-0.47/develop/intro/03-sdk-design.md @@ -0,0 +1,96 @@ +--- +sidebar_position: 0 +dislayed_sidebar: developSidebar +--- + +# Main Components of the Cosmos SDK + +The Cosmos SDK is a framework that facilitates the development of secure state-machines on top of CometBFT. At its core, the Cosmos SDK is a boilerplate implementation of the [ABCI](./02-sdk-app-architecture.md#abci) in Golang. It comes with a [`multistore`](../core/04-store.md#multistore) to persist data and a [`router`](../core/00-baseapp.md#routing) to handle transactions. + +Here is a simplified view of how transactions are handled by an application built on top of the Cosmos SDK when transferred from CometBFT via `DeliverTx`: + +1. Decode `transactions` received from the CometBFT consensus engine (remember that CometBFT only deals with `[]bytes`). +2. Extract `messages` from `transactions` and do basic sanity checks. +3. Route each message to the appropriate module so that it can be processed. +4. Commit state changes. + +## `baseapp` + +`baseapp` is the boilerplate implementation of a Cosmos SDK application. It comes with an implementation of the ABCI to handle the connection with the underlying consensus engine. Typically, a Cosmos SDK application extends `baseapp` by embedding it in [`app.go`](../basics/00-app-anatomy.md#core-application-file). + +Here is an example of this from `simapp`, the Cosmos SDK demonstration app: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L164-L203 +``` + +The goal of `baseapp` is to provide a secure interface between the store and the extensible state machine while defining as little about the state machine as possible (staying true to the ABCI). + +For more on `baseapp`, please click [here](../core/00-baseapp.md). + +## Multistore + +The Cosmos SDK provides a [`multistore`](../core/04-store.md#multistore) for persisting state. The multistore allows developers to declare any number of [`KVStores`](../core/04-store.md#base-layer-kvstores). These `KVStores` only accept the `[]byte` type as value and therefore any custom structure needs to be marshalled using [a codec](../core/05-encoding.md) before being stored. + +The multistore abstraction is used to divide the state in distinct compartments, each managed by its own module. For more on the multistore, click [here](../core/04-store.md#multistore) + +## Modules + +The power of the Cosmos SDK lies in its modularity. Cosmos SDK applications are built by aggregating a collection of interoperable modules. Each module defines a subset of the state and contains its own message/transaction processor, while the Cosmos SDK is responsible for routing each message to its respective module. + +Here is a simplified view of how a transaction is processed by the application of each full-node when it is received in a valid block: + +```text + + + | + | Transaction relayed from the full-node's + | CometBFT engine to the node's application + | via DeliverTx + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | Message routed to + | the correct module + | to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to CometBFT + | (0=Ok, 1=Err) + v +``` + +Each module can be seen as a little state-machine. Developers need to define the subset of the state handled by the module, as well as custom message types that modify the state (*Note:* `messages` are extracted from `transactions` by `baseapp`). In general, each module declares its own `KVStore` in the `multistore` to persist the subset of the state it defines. Most developers will need to access other 3rd party modules when building their own modules. Given that the Cosmos SDK is an open framework, some of the modules may be malicious, which means there is a need for security principles to reason about inter-module interactions. These principles are based on [object-capabilities](../core/10-ocap.md). In practice, this means that instead of having each module keep an access control list for other modules, each module implements special objects called `keepers` that can be passed to other modules to grant a pre-defined set of capabilities. + +Cosmos SDK modules are defined in the `x/` folder of the Cosmos SDK. Some core modules include: + +* `x/auth`: Used to manage accounts and signatures. +* `x/bank`: Used to enable tokens and token transfers. +* `x/staking` + `x/slashing`: Used to build Proof-Of-Stake blockchains. + +In addition to the already existing modules in `x/`, that anyone can use in their app, the Cosmos SDK lets you build your own custom modules. You can check an [example of that in the tutorial](https://tutorials.cosmos.network/). diff --git a/versioned_docs/version-0.47/develop/intro/_category_.json b/versioned_docs/version-0.47/develop/intro/_category_.json new file mode 100644 index 000000000..b218fe9be --- /dev/null +++ b/versioned_docs/version-0.47/develop/intro/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Introduction", + "position": 0, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/architecture/PROCESS.md b/versioned_docs/version-0.47/integrate/architecture/PROCESS.md new file mode 100644 index 000000000..c5140bbe4 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/PROCESS.md @@ -0,0 +1,56 @@ +# ADR Creation Process + +1. Copy the `adr-template.md` file. Use the following filename pattern: `adr-next_number-title.md` +2. Create a draft Pull Request if you want to get an early feedback. +3. Make sure the context and a solution is clear and well documented. +4. Add an entry to a list in the [README](./README.md) file. +5. Create a Pull Request to propose a new ADR. + +## ADR life cycle + +ADR creation is an **iterative** process. Instead of trying to solve all decisions in a single ADR pull request, we MUST firstly understand the problem and collect feedback through a GitHub Issue. + +1. Every proposal SHOULD start with a new GitHub Issue or be a result of existing Issues. The Issue should contain just a brief proposal summary. + +2. Once the motivation is validated, a GitHub Pull Request (PR) is created with a new document based on the `adr-template.md`. + +3. An ADR doesn't have to arrive to `main` with an _accepted_ status in a single PR. If the motivation is clear and the solution is sound, we SHOULD be able to merge it and keep a _proposed_ status. It's preferable to have an iterative approach rather than long, not merged Pull Requests. + +4. If a _proposed_ ADR is merged, then it should clearly document outstanding issues either in ADR document notes or in a GitHub Issue. + +5. The PR SHOULD always be merged. In the case of a faulty ADR, we still prefer to merge it with a _rejected_ status. The only time the ADR SHOULD NOT be merged is if the author abandons it. + +6. Merged ADRs SHOULD NOT be pruned. + +### ADR status + +Status has two components: + +```text +{CONSENSUS STATUS} {IMPLEMENTATION STATUS} +``` + +IMPLEMENTATION STATUS is either `Implemented` or `Not Implemented`. + +#### Consensus Status + +```text +DRAFT -> PROPOSED -> LAST CALL yyyy-mm-dd -> ACCEPTED | REJECTED -> SUPERSEDED by ADR-xxx + \ | + \ | + v v + ABANDONED +``` + +* `DRAFT`: [optional] an ADR which is work in progress, not being ready for a general review. This is to present an early work and get an early feedback in a Draft Pull Request form. +* `PROPOSED`: an ADR covering a full solution architecture and still in the review - project stakeholders haven't reached an agreed yet. +* `LAST CALL `: [optional] clear notify that we are close to accept updates. Changing a status to `LAST CALL` means that social consensus (of Cosmos SDK maintainers) has been reached and we still want to give it a time to let the community react or analyze. +* `ACCEPTED`: ADR which will represent a currently implemented or to be implemented architecture design. +* `REJECTED`: ADR can go from PROPOSED or ACCEPTED to rejected if the consensus among project stakeholders will decide so. +* `SUPERSEEDED by ADR-xxx`: ADR which has been superseded by a new ADR. +* `ABANDONED`: the ADR is no longer pursued by the original authors. + +## Language used in ADR + +* The context/background should be written in the present tense. +* Avoid using a first, personal form. diff --git a/versioned_docs/version-0.47/integrate/architecture/README.md b/versioned_docs/version-0.47/integrate/architecture/README.md new file mode 100644 index 000000000..ee65454da --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/README.md @@ -0,0 +1,89 @@ +--- +sidebar_position: 1 +--- + +# Architecture Decision Records (ADR) + +This is a location to record all high-level architecture decisions in the Cosmos-SDK. + +An Architectural Decision (**AD**) is a software design choice that addresses a functional or non-functional requirement that is architecturally significant. +An Architecturally Significant Requirement (**ASR**) is a requirement that has a measurable effect on a software system’s architecture and quality. +An Architectural Decision Record (**ADR**) captures a single AD, such as often done when writing personal notes or meeting minutes; the collection of ADRs created and maintained in a project constitute its decision log. All these are within the topic of Architectural Knowledge Management (AKM). + +You can read more about the ADR concept in this [blog post](https://product.reverb.com/documenting-architecture-decisions-the-reverb-way-a3563bb24bd0#.78xhdix6t). + +## Rationale + +ADRs are intended to be the primary mechanism for proposing new feature designs and new processes, for collecting community input on an issue, and for documenting the design decisions. +An ADR should provide: + +* Context on the relevant goals and the current state +* Proposed changes to achieve the goals +* Summary of pros and cons +* References +* Changelog + +Note the distinction between an ADR and a spec. The ADR provides the context, intuition, reasoning, and +justification for a change in architecture, or for the architecture of something +new. The spec is much more compressed and streamlined summary of everything as +it stands today. + +If recorded decisions turned out to be lacking, convene a discussion, record the new decisions here, and then modify the code to match. + +## Creating new ADR + +Read about the [PROCESS](./PROCESS.md). + +### Use RFC 2119 Keywords + +When writing ADRs, follow the same best practices for writing RFCs. When writing RFCs, key words are used to signify the requirements in the specification. These words are often capitalized: "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL. They are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119). + +## ADR Table of Contents + +### Accepted + +* [ADR 002: SDK Documentation Structure](./adr-002-docs-structure.md) +* [ADR 004: Split Denomination Keys](./adr-004-split-denomination-keys.md) +* [ADR 006: Secret Store Replacement](./adr-006-secret-store-replacement.md) +* [ADR 009: Evidence Module](./adr-009-evidence-module.md) +* [ADR 010: Modular AnteHandler](./adr-010-modular-antehandler.md) +* [ADR 019: Protocol Buffer State Encoding](./adr-019-protobuf-state-encoding.md) +* [ADR 020: Protocol Buffer Transaction Encoding](./adr-020-protobuf-transaction-encoding.md) +* [ADR 021: Protocol Buffer Query Encoding](./adr-021-protobuf-query-encoding.md) +* [ADR 023: Protocol Buffer Naming and Versioning](./adr-023-protobuf-naming.md) +* [ADR 029: Fee Grant Module](./adr-029-fee-grant-module.md) +* [ADR 030: Message Authorization Module](./adr-030-authz-module.md) +* [ADR 031: Protobuf Msg Services](./adr-031-msg-service.md) +* [ADR 055: ORM](./adr-055-orm.md) +* [ADR 058: Auto-Generated CLI](./adr-058-auto-generated-cli.md) + +### Proposed + +* [ADR 003: Dynamic Capability Store](./adr-003-dynamic-capability-store.md) +* [ADR 011: Generalize Genesis Accounts](./adr-011-generalize-genesis-accounts.md) +* [ADR 012: State Accessors](./adr-012-state-accessors.md) +* [ADR 013: Metrics](./adr-013-metrics.md) +* [ADR 016: Validator Consensus Key Rotation](./adr-016-validator-consensus-key-rotation.md) +* [ADR 017: Historical Header Module](./adr-017-historical-header-module.md) +* [ADR 018: Extendable Voting Periods](./adr-018-extendable-voting-period.md) +* [ADR 022: Custom baseapp panic handling](./adr-022-custom-panic-handling.md) +* [ADR 024: Coin Metadata](./adr-024-coin-metadata.md) +* [ADR 027: Deterministic Protobuf Serialization](./adr-027-deterministic-protobuf-serialization.md) +* [ADR 028: Public Key Addresses](./adr-028-public-key-addresses.md) +* [ADR 032: Typed Events](./adr-032-typed-events.md) +* [ADR 033: Inter-module RPC](./adr-033-protobuf-inter-module-comm.md) +* [ADR 035: Rosetta API Support](./adr-035-rosetta-api-support.md) +* [ADR 037: Governance Split Votes](./adr-037-gov-split-vote.md) +* [ADR 038: State Listening](./adr-038-state-listening.md) +* [ADR 039: Epoched Staking](./adr-039-epoched-staking.md) +* [ADR 040: Storage and SMT State Commitments](./adr-040-storage-and-smt-state-commitments.md) +* [ADR 046: Module Params](./adr-046-module-params.md) +* [ADR 057: App Wiring](./adr-057-app-wiring.md) +* [ADR 059: Test Scopes](./adr-059-test-scopes.md) +* [ADR 060: ABCI 1.0](adr-060-abci-1.0.md) + +### Draft + +* [ADR 044: Guidelines for Updating Protobuf Definitions](./adr-044-protobuf-updates-guidelines.md) +* [ADR 047: Extend Upgrade Plan](./adr-047-extend-upgrade-plan.md) +* [ADR 053: Go Module Refactoring](./adr-053-go-module-refactoring.md) diff --git a/versioned_docs/version-0.47/integrate/architecture/_category_.json b/versioned_docs/version-0.47/integrate/architecture/_category_.json new file mode 100644 index 000000000..d138de900 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "ADRs", + "position": 10, + "link": null +} diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-002-docs-structure.md b/versioned_docs/version-0.47/integrate/architecture/adr-002-docs-structure.md new file mode 100644 index 000000000..5819151fc --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-002-docs-structure.md @@ -0,0 +1,86 @@ +# ADR 002: SDK Documentation Structure + +## Context + +There is a need for a scalable structure of the Cosmos SDK documentation. Current documentation includes a lot of non-related Cosmos SDK material, is difficult to maintain and hard to follow as a user. + +Ideally, we would have: + +* All docs related to dev frameworks or tools live in their respective github repos (sdk repo would contain sdk docs, hub repo would contain hub docs, lotion repo would contain lotion docs, etc.) +* All other docs (faqs, whitepaper, high-level material about Cosmos) would live on the website. + +## Decision + +Re-structure the `/docs` folder of the Cosmos SDK github repo as follows: + +```text +docs/ +├── README +├── intro/ +├── concepts/ +│ ├── baseapp +│ ├── types +│ ├── store +│ ├── server +│ ├── modules/ +│ │ ├── keeper +│ │ ├── handler +│ │ ├── cli +│ ├── gas +│ └── commands +├── clients/ +│ ├── lite/ +│ ├── service-providers +├── modules/ +├── spec/ +├── translations/ +└── architecture/ +``` + +The files in each sub-folders do not matter and will likely change. What matters is the sectioning: + +* `README`: Landing page of the docs. +* `intro`: Introductory material. Goal is to have a short explainer of the Cosmos SDK and then channel people to the resource they need. The [Cosmos SDK tutorial](https://github.com/cosmos/sdk-application-tutorial/) will be highlighted, as well as the `godocs`. +* `concepts`: Contains high-level explanations of the abstractions of the Cosmos SDK. It does not contain specific code implementation and does not need to be updated often. **It is not an API specification of the interfaces**. API spec is the `godoc`. +* `clients`: Contains specs and info about the various Cosmos SDK clients. +* `spec`: Contains specs of modules, and others. +* `modules`: Contains links to `godocs` and the spec of the modules. +* `architecture`: Contains architecture-related docs like the present one. +* `translations`: Contains different translations of the documentation. + +Website docs sidebar will only include the following sections: + +* `README` +* `intro` +* `concepts` +* `clients` + +`architecture` need not be displayed on the website. + +## Status + +Accepted + +## Consequences + +### Positive + +* Much clearer organisation of the Cosmos SDK docs. +* The `/docs` folder now only contains Cosmos SDK and gaia related material. Later, it will only contain Cosmos SDK related material. +* Developers only have to update `/docs` folder when they open a PR (and not `/examples` for example). +* Easier for developers to find what they need to update in the docs thanks to reworked architecture. +* Cleaner vuepress build for website docs. +* Will help build an executable doc (cf https://github.com/cosmos/cosmos-sdk/issues/2611) + +### Neutral + +* We need to move a bunch of deprecated stuff to `/_attic` folder. +* We need to integrate content in `docs/sdk/docs/core` in `concepts`. +* We need to move all the content that currently lives in `docs` and does not fit in new structure (like `lotion`, intro material, whitepaper) to the website repository. +* Update `DOCS_README.md` + +## References + +* https://github.com/cosmos/cosmos-sdk/issues/1460 +* https://github.com/cosmos/cosmos-sdk/pull/2695 +* https://github.com/cosmos/cosmos-sdk/issues/2611 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-003-dynamic-capability-store.md b/versioned_docs/version-0.47/integrate/architecture/adr-003-dynamic-capability-store.md new file mode 100644 index 000000000..f9ddd3643 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-003-dynamic-capability-store.md @@ -0,0 +1,344 @@ +# ADR 3: Dynamic Capability Store + +## Changelog + +* 12 December 2019: Initial version +* 02 April 2020: Memory Store Revisions + +## Context + +Full implementation of the [IBC specification](https://github.com/cosmos/ibc) requires the ability to create and authenticate object-capability keys at runtime (i.e., during transaction execution), +as described in [ICS 5](https://github.com/cosmos/ibc/tree/master/spec/core/ics-005-port-allocation#technical-specification). In the IBC specification, capability keys are created for each newly initialised +port & channel, and are used to authenticate future usage of the port or channel. Since channels and potentially ports can be initialised during transaction execution, the state machine must be able to create +object-capability keys at this time. + +At present, the Cosmos SDK does not have the ability to do this. Object-capability keys are currently pointers (memory addresses) of `StoreKey` structs created at application initialisation in `app.go` ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L132)) +and passed to Keepers as fixed arguments ([example](https://github.com/cosmos/gaia/blob/dcbddd9f04b3086c0ad07ee65de16e7adedc7da4/app/app.go#L160)). Keepers cannot create or store capability keys during transaction execution — although they could call `NewKVStoreKey` and take the memory address +of the returned struct, storing this in the Merklised store would result in a consensus fault, since the memory address will be different on each machine (this is intentional — were this not the case, the keys would be predictable and couldn't serve as object capabilities). + +Keepers need a way to keep a private map of store keys which can be altered during transaction execution, along with a suitable mechanism for regenerating the unique memory addresses (capability keys) in this map whenever the application is started or restarted, along with a mechanism to revert capability creation on tx failure. +This ADR proposes such an interface & mechanism. + +## Decision + +The Cosmos SDK will include a new `CapabilityKeeper` abstraction, which is responsible for provisioning, +tracking, and authenticating capabilities at runtime. During application initialisation in `app.go`, +the `CapabilityKeeper` will be hooked up to modules through unique function references +(by calling `ScopeToModule`, defined below) so that it can identify the calling module when later +invoked. + +When the initial state is loaded from disk, the `CapabilityKeeper`'s `Initialise` function will create +new capability keys for all previously allocated capability identifiers (allocated during execution of +past transactions and assigned to particular modes), and keep them in a memory-only store while the +chain is running. + +The `CapabilityKeeper` will include a persistent `KVStore`, a `MemoryStore`, and an in-memory map. +The persistent `KVStore` tracks which capability is owned by which modules. +The `MemoryStore` stores a forward mapping that map from module name, capability tuples to capability names and +a reverse mapping that map from module name, capability name to the capability index. +Since we cannot marshal the capability into a `KVStore` and unmarshal without changing the memory location of the capability, +the reverse mapping in the KVStore will simply map to an index. This index can then be used as a key in the ephemeral +go-map to retrieve the capability at the original memory location. + +The `CapabilityKeeper` will define the following types & functions: + +The `Capability` is similar to `StoreKey`, but has a globally unique `Index()` instead of +a name. A `String()` method is provided for debugging. + +A `Capability` is simply a struct, the address of which is taken for the actual capability. + +```go +type Capability struct { + index uint64 +} +``` + +A `CapabilityKeeper` contains a persistent store key, memory store key, and mapping of allocated module names. + +```go +type CapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleNames map[string]interface{} + sealed bool +} +``` + +The `CapabilityKeeper` provides the ability to create *scoped* sub-keepers which are tied to a +particular module name. These `ScopedCapabilityKeeper`s must be created at application initialisation +and passed to modules, which can then use them to claim capabilities they receive and retrieve +capabilities which they own by name, in addition to creating new capabilities & authenticating capabilities +passed by other modules. + +```go +type ScopedCapabilityKeeper struct { + persistentKey StoreKey + memKey StoreKey + capMap map[uint64]*Capability + moduleName string +} +``` + +`ScopeToModule` is used to create a scoped sub-keeper with a particular name, which must be unique. +It MUST be called before `InitialiseAndSeal`. + +```go +func (ck CapabilityKeeper) ScopeToModule(moduleName string) ScopedCapabilityKeeper { + if k.sealed { + panic("cannot scope to module via a sealed capability keeper") + } + + if _, ok := k.scopedModules[moduleName]; ok { + panic(fmt.Sprintf("cannot create multiple scoped keepers for the same module name: %s", moduleName)) + } + + k.scopedModules[moduleName] = struct{}{} + + return ScopedKeeper{ + cdc: k.cdc, + storeKey: k.storeKey, + memKey: k.memKey, + capMap: k.capMap, + module: moduleName, + } +} +``` + +`InitialiseAndSeal` MUST be called exactly once, after loading the initial state and creating all +necessary `ScopedCapabilityKeeper`s, in order to populate the memory store with newly-created +capability keys in accordance with the keys previously claimed by particular modules and prevent the +creation of any new `ScopedCapabilityKeeper`s. + +```go +func (ck CapabilityKeeper) InitialiseAndSeal(ctx Context) { + if ck.sealed { + panic("capability keeper is sealed") + } + + persistentStore := ctx.KVStore(ck.persistentKey) + map := ctx.KVStore(ck.memKey) + + // initialise memory store for all names in persistent store + for index, value := range persistentStore.Iter() { + capability = &CapabilityKey{index: index} + + for moduleAndCapability := range value { + moduleName, capabilityName := moduleAndCapability.Split("/") + memStore.Set(moduleName + "/fwd/" + capability, capabilityName) + memStore.Set(moduleName + "/rev/" + capabilityName, index) + + ck.capMap[index] = capability + } + } + + ck.sealed = true +} +``` + +`NewCapability` can be called by any module to create a new unique, unforgeable object-capability +reference. The newly created capability is automatically persisted; the calling module need not +call `ClaimCapability`. + +```go +func (sck ScopedCapabilityKeeper) NewCapability(ctx Context, name string) (Capability, error) { + // check name not taken in memory store + if capStore.Get("rev/" + name) != nil { + return nil, errors.New("name already taken") + } + + // fetch the current index + index := persistentStore.Get("index") + + // create a new capability + capability := &CapabilityKey{index: index} + + // set persistent store + persistentStore.Set(index, Set.singleton(sck.moduleName + "/" + name)) + + // update the index + index++ + persistentStore.Set("index", index) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to index + memStore.Set(sck.moduleName + "/rev/" + name, index) + + // set the in-memory mapping from index to capability pointer + capMap[index] = capability + + // return the newly created capability + return capability +} +``` + +`AuthenticateCapability` can be called by any module to check that a capability +does in fact correspond to a particular name (the name can be untrusted user input) +with which the calling module previously associated it. + +```go +func (sck ScopedCapabilityKeeper) AuthenticateCapability(name string, capability Capability) bool { + // return whether forward mapping in memory store matches name + return memStore.Get(sck.moduleName + "/fwd/" + capability) === name +} +``` + +`ClaimCapability` allows a module to claim a capability key which it has received from another module +so that future `GetCapability` calls will succeed. + +`ClaimCapability` MUST be called if a module which receives a capability wishes to access it by name +in the future. Capabilities are multi-owner, so if multiple modules have a single `Capability` reference, +they will all own it. + +```go +func (sck ScopedCapabilityKeeper) ClaimCapability(ctx Context, capability Capability, name string) error { + persistentStore := ctx.KVStore(sck.persistentKey) + + // set forward mapping in memory store from capability to name + memStore.Set(sck.moduleName + "/fwd/" + capability, name) + + // set reverse mapping in memory store from name to capability + memStore.Set(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.add(sck.moduleName + "/" + name) + persistentStore.Set(capability.Index(), owners) +} +``` + +`GetCapability` allows a module to fetch a capability which it has previously claimed by name. +The module is not allowed to retrieve capabilities which it does not own. + +```go +func (sck ScopedCapabilityKeeper) GetCapability(ctx Context, name string) (Capability, error) { + // fetch the index of capability using reverse mapping in memstore + index := memStore.Get(sck.moduleName + "/rev/" + name) + + // fetch capability from go-map using index + capability := capMap[index] + + // return the capability + return capability +} +``` + +`ReleaseCapability` allows a module to release a capability which it had previously claimed. If no +more owners exist, the capability will be deleted globally. + +```go +func (sck ScopedCapabilityKeeper) ReleaseCapability(ctx Context, capability Capability) err { + persistentStore := ctx.KVStore(sck.persistentKey) + + name := capStore.Get(sck.moduleName + "/fwd/" + capability) + if name == nil { + return error("capability not owned by module") + } + + // delete forward mapping in memory store + memoryStore.Delete(sck.moduleName + "/fwd/" + capability, name) + + // delete reverse mapping in memory store + memoryStore.Delete(sck.moduleName + "/rev/" + name, capability) + + // update owner set in persistent store + owners := persistentStore.Get(capability.Index()) + owners.remove(sck.moduleName + "/" + name) + if owners.size() > 0 { + // there are still other owners, keep the capability around + persistentStore.Set(capability.Index(), owners) + } else { + // no more owners, delete the capability + persistentStore.Delete(capability.Index()) + delete(capMap[capability.Index()]) + } +} +``` + +### Usage patterns + +#### Initialisation + +Any modules which use dynamic capabilities must be provided a `ScopedCapabilityKeeper` in `app.go`: + +```go +ck := NewCapabilityKeeper(persistentKey, memoryKey) +mod1Keeper := NewMod1Keeper(ck.ScopeToModule("mod1"), ....) +mod2Keeper := NewMod2Keeper(ck.ScopeToModule("mod2"), ....) + +// other initialisation logic ... + +// load initial state... + +ck.InitialiseAndSeal(initialContext) +``` + +#### Creating, passing, claiming and using capabilities + +Consider the case where `mod1` wants to create a capability, associate it with a resource (e.g. an IBC channel) by name, then pass it to `mod2` which will use it later: + +Module 1 would have the following code: + +```go +capability := scopedCapabilityKeeper.NewCapability(ctx, "resourceABC") +mod2Keeper.SomeFunction(ctx, capability, args...) +``` + +`SomeFunction`, running in module 2, could then claim the capability: + +```go +func (k Mod2Keeper) SomeFunction(ctx Context, capability Capability) { + k.sck.ClaimCapability(ctx, capability, "resourceABC") + // other logic... +} +``` + +Later on, module 2 can retrieve that capability by name and pass it to module 1, which will authenticate it against the resource: + +```go +func (k Mod2Keeper) SomeOtherFunction(ctx Context, name string) { + capability := k.sck.GetCapability(ctx, name) + mod1.UseResource(ctx, capability, "resourceABC") +} +``` + +Module 1 will then check that this capability key is authenticated to use the resource before allowing module 2 to use it: + +```go +func (k Mod1Keeper) UseResource(ctx Context, capability Capability, resource string) { + if !k.sck.AuthenticateCapability(name, capability) { + return errors.New("unauthenticated") + } + // do something with the resource +} +``` + +If module 2 passed the capability key to module 3, module 3 could then claim it and call module 1 just like module 2 did +(in which case module 1, module 2, and module 3 would all be able to use this capability). + +## Status + +Proposed. + +## Consequences + +### Positive + +* Dynamic capability support. +* Allows CapabilityKeeper to return same capability pointer from go-map while reverting any writes to the persistent `KVStore` and in-memory `MemoryStore` on tx failure. + +### Negative + +* Requires an additional keeper. +* Some overlap with existing `StoreKey` system (in the future they could be combined, since this is a superset functionality-wise). +* Requires an extra level of indirection in the reverse mapping, since MemoryStore must map to index which must then be used as key in a go map to retrieve the actual capability + +### Neutral + +(none known) + +## References + +* [Original discussion](https://github.com/cosmos/cosmos-sdk/pull/5230#discussion_r343978513) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-004-split-denomination-keys.md b/versioned_docs/version-0.47/integrate/architecture/adr-004-split-denomination-keys.md new file mode 100644 index 000000000..8abf25fda --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-004-split-denomination-keys.md @@ -0,0 +1,120 @@ +# ADR 004: Split Denomination Keys + +## Changelog + +* 2020-01-08: Initial version +* 2020-01-09: Alterations to handle vesting accounts +* 2020-01-14: Updates from review feedback +* 2020-01-30: Updates from implementation + +### Glossary + +* denom / denomination key -- unique token identifier. + +## Context + +With permissionless IBC, anyone will be able to send arbitrary denominations to any other account. Currently, all non-zero balances are stored along with the account in an `sdk.Coins` struct, which creates a potential denial-of-service concern, as too many denominations will become expensive to load & store each time the account is modified. See issues [5467](https://github.com/cosmos/cosmos-sdk/issues/5467) and [4982](https://github.com/cosmos/cosmos-sdk/issues/4982) for additional context. + +Simply rejecting incoming deposits after a denomination count limit doesn't work, since it opens up a griefing vector: someone could send a user lots of nonsensical coins over IBC, and then prevent the user from receiving real denominations (such as staking rewards). + +## Decision + +Balances shall be stored per-account & per-denomination under a denomination- and account-unique key, thus enabling O(1) read & write access to the balance of a particular account in a particular denomination. + +### Account interface (x/auth) + +`GetCoins()` and `SetCoins()` will be removed from the account interface, since coin balances will +now be stored in & managed by the bank module. + +The vesting account interface will replace `SpendableCoins` in favor of `LockedCoins` which does +not require the account balance anymore. In addition, `TrackDelegation()` will now accept the +account balance of all tokens denominated in the vesting balance instead of loading the entire +account balance. + +Vesting accounts will continue to store original vesting, delegated free, and delegated +vesting coins (which is safe since these cannot contain arbitrary denominations). + +### Bank keeper (x/bank) + +The following APIs will be added to the `x/bank` keeper: + +* `GetAllBalances(ctx Context, addr AccAddress) Coins` +* `GetBalance(ctx Context, addr AccAddress, denom string) Coin` +* `SetBalance(ctx Context, addr AccAddress, coin Coin)` +* `LockedCoins(ctx Context, addr AccAddress) Coins` +* `SpendableCoins(ctx Context, addr AccAddress) Coins` + +Additional APIs may be added to facilitate iteration and auxiliary functionality not essential to +core functionality or persistence. + +Balances will be stored first by the address, then by the denomination (the reverse is also possible, +but retrieval of all balances for a single account is presumed to be more frequent): + +```go +var BalancesPrefix = []byte("balances") + +func (k Keeper) SetBalance(ctx Context, addr AccAddress, balance Coin) error { + if !balance.IsValid() { + return err + } + + store := ctx.KVStore(k.storeKey) + balancesStore := prefix.NewStore(store, BalancesPrefix) + accountStore := prefix.NewStore(balancesStore, addr.Bytes()) + + bz := Marshal(balance) + accountStore.Set([]byte(balance.Denom), bz) + + return nil +} +``` + +This will result in the balances being indexed by the byte representation of +`balances/{address}/{denom}`. + +`DelegateCoins()` and `UndelegateCoins()` will be altered to only load each individual +account balance by denomination found in the (un)delegation amount. As a result, +any mutations to the account balance by will made by denomination. + +`SubtractCoins()` and `AddCoins()` will be altered to read & write the balances +directly instead of calling `GetCoins()` / `SetCoins()` (which no longer exist). + +`trackDelegation()` and `trackUndelegation()` will be altered to no longer update +account balances. + +External APIs will need to scan all balances under an account to retain backwards-compatibility. It +is advised that these APIs use `GetBalance` and `SetBalance` instead of `GetAllBalances` when +possible as to not load the entire account balance. + +### Supply module + +The supply module, in order to implement the total supply invariant, will now need +to scan all accounts & call `GetAllBalances` using the `x/bank` Keeper, then sum +the balances and check that they match the expected total supply. + +## Status + +Accepted. + +## Consequences + +### Positive + +* O(1) reads & writes of balances (with respect to the number of denominations for +which an account has non-zero balances). Note, this does not relate to the actual +I/O cost, rather the total number of direct reads needed. + +### Negative + +* Slightly less efficient reads/writes when reading & writing all balances of a +single account in a transaction. + +### Neutral + +None in particular. + +## References + +* Ref: https://github.com/cosmos/cosmos-sdk/issues/4982 +* Ref: https://github.com/cosmos/cosmos-sdk/issues/5467 +* Ref: https://github.com/cosmos/cosmos-sdk/issues/5492 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-006-secret-store-replacement.md b/versioned_docs/version-0.47/integrate/architecture/adr-006-secret-store-replacement.md new file mode 100644 index 000000000..fe2e25467 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-006-secret-store-replacement.md @@ -0,0 +1,54 @@ +# ADR 006: Secret Store Replacement + +## Changelog + +* July 29th, 2019: Initial draft +* September 11th, 2019: Work has started +* November 4th: Cosmos SDK changes merged in +* November 18th: Gaia changes merged in + +## Context + +Currently, a Cosmos SDK application's CLI directory stores key material and metadata in a plain text database in the user’s home directory. Key material is encrypted by a passphrase, protected by bcrypt hashing algorithm. Metadata (e.g. addresses, public keys, key storage details) is available in plain text. + +This is not desirable for a number of reasons. Perhaps the biggest reason is insufficient security protection of key material and metadata. Leaking the plain text allows an attacker to surveil what keys a given computer controls via a number of techniques, like compromised dependencies without any privilege execution. This could be followed by a more targeted attack on a particular user/computer. + +All modern desktop computers OS (Ubuntu, Debian, MacOS, Windows) provide a built-in secret store that is designed to allow applications to store information that is isolated from all other applications and requires passphrase entry to access the data. + +We are seeking solution that provides a common abstraction layer to the many different backends and reasonable fallback for minimal platforms that don’t provide a native secret store. + +## Decision + +We recommend replacing the current Keybase backend based on LevelDB with [Keyring](https://github.com/99designs/keyring) by 99 designs. This application is designed to provide a common abstraction and uniform interface between many secret stores and is used by AWS Vault application by 99-designs application. + +This appears to fulfill the requirement of protecting both key material and metadata from rouge software on a user’s machine. + +## Status + +Accepted + +## Consequences + +### Positive + +Increased safety for users. + +### Negative + +Users must manually migrate. + +Testing against all supported backends is difficult. + +Running tests locally on a Mac require numerous repetitive password entries. + +### Neutral + +{neutral consequences} + +## References + +* #4754 Switch secret store to the keyring secret store (original PR by @poldsam) [__CLOSED__] +* #5029 Add support for github.com/99designs/keyring-backed keybases [__MERGED__] +* #5097 Add keys migrate command [__MERGED__] +* #5180 Drop on-disk keybase in favor of keyring [_PENDING_REVIEW_] +* cosmos/gaia#164 Drop on-disk keybase in favor of keyring (gaia's changes) [_PENDING_REVIEW_] diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-007-specialization-groups.md b/versioned_docs/version-0.47/integrate/architecture/adr-007-specialization-groups.md new file mode 100644 index 000000000..58f78abf5 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-007-specialization-groups.md @@ -0,0 +1,177 @@ +# ADR 007: Specialization Groups + +## Changelog + +* 2019 Jul 31: Initial Draft + +## Context + +This idea was first conceived of in order to fulfill the use case of the +creation of a decentralized Computer Emergency Response Team (dCERT), whose +members would be elected by a governing community and would fulfill the role of +coordinating the community under emergency situations. This thinking +can be further abstracted into the conception of "blockchain specialization +groups". + +The creation of these groups are the beginning of specialization capabilities +within a wider blockchain community which could be used to enable a certain +level of delegated responsibilities. Examples of specialization which could be +beneficial to a blockchain community include: code auditing, emergency response, +code development etc. This type of community organization paves the way for +individual stakeholders to delegate votes by issue type, if in the future +governance proposals include a field for issue type. + +## Decision + +A specialization group can be broadly broken down into the following functions +(herein containing examples): + +* Membership Admittance +* Membership Acceptance +* Membership Revocation + * (probably) Without Penalty + * member steps down (self-Revocation) + * replaced by new member from governance + * (probably) With Penalty + * due to breach of soft-agreement (determined through governance) + * due to breach of hard-agreement (determined by code) +* Execution of Duties + * Special transactions which only execute for members of a specialization + group (for example, dCERT members voting to turn off transaction routes in + an emergency scenario) +* Compensation + * Group compensation (further distribution decided by the specialization group) + * Individual compensation for all constituents of a group from the + greater community + +Membership admittance to a specialization group could take place over a wide +variety of mechanisms. The most obvious example is through a general vote among +the entire community, however in certain systems a community may want to allow +the members already in a specialization group to internally elect new members, +or maybe the community may assign a permission to a particular specialization +group to appoint members to other 3rd party groups. The sky is really the limit +as to how membership admittance can be structured. We attempt to capture +some of these possiblities in a common interface dubbed the `Electionator`. For +its initial implementation as a part of this ADR we recommend that the general +election abstraction (`Electionator`) is provided as well as a basic +implementation of that abstraction which allows for a continuous election of +members of a specialization group. + +``` golang +// The Electionator abstraction covers the concept space for +// a wide variety of election kinds. +type Electionator interface { + + // is the election object accepting votes. + Active() bool + + // functionality to execute for when a vote is cast in this election, here + // the vote field is anticipated to be marshalled into a vote type used + // by an election. + // + // NOTE There are no explicit ids here. Just votes which pertain specifically + // to one electionator. Anyone can create and send a vote to the electionator item + // which will presumably attempt to marshal those bytes into a particular struct + // and apply the vote information in some arbitrary way. There can be multiple + // Electionators within the Cosmos-Hub for multiple specialization groups, votes + // would need to be routed to the Electionator upstream of here. + Vote(addr sdk.AccAddress, vote []byte) + + // here lies all functionality to authenticate and execute changes for + // when a member accepts being elected + AcceptElection(sdk.AccAddress) + + // Register a revoker object + RegisterRevoker(Revoker) + + // No more revokers may be registered after this function is called + SealRevokers() + + // register hooks to call when an election actions occur + RegisterHooks(ElectionatorHooks) + + // query for the current winner(s) of this election based on arbitrary + // election ruleset + QueryElected() []sdk.AccAddress + + // query metadata for an address in the election this + // could include for example position that an address + // is being elected for within a group + // + // this metadata may be directly related to + // voting information and/or privileges enabled + // to members within a group. + QueryMetadata(sdk.AccAddress) []byte +} + +// ElectionatorHooks, once registered with an Electionator, +// trigger execution of relevant interface functions when +// Electionator events occur. +type ElectionatorHooks interface { + AfterVoteCast(addr sdk.AccAddress, vote []byte) + AfterMemberAccepted(addr sdk.AccAddress) + AfterMemberRevoked(addr sdk.AccAddress, cause []byte) +} + +// Revoker defines the function required for a membership revocation rule-set +// used by a specialization group. This could be used to create self revoking, +// and evidence based revoking, etc. Revokers types may be created and +// reused for different election types. +// +// When revoking the "cause" bytes may be arbitrarily marshalled into evidence, +// memos, etc. +type Revoker interface { + RevokeName() string // identifier for this revoker type + RevokeMember(addr sdk.AccAddress, cause []byte) error +} +``` + +Certain level of commonality likely exists between the existing code within +`x/governance` and required functionality of elections. This common +functionality should be abstracted during implementation. Similarly for each +vote implementation client CLI/REST functionality should be abstracted +to be reused for multiple elections. + +The specialization group abstraction firstly extends the `Electionator` +but also further defines traits of the group. + +``` golang +type SpecializationGroup interface { + Electionator + GetName() string + GetDescription() string + + // general soft contract the group is expected + // to fulfill with the greater community + GetContract() string + + // messages which can be executed by the members of the group + Handler(ctx sdk.Context, msg sdk.Msg) sdk.Result + + // logic to be executed at endblock, this may for instance + // include payment of a stipend to the group members + // for participation in the security group. + EndBlocker(ctx sdk.Context) +} +``` + +## Status + +> Proposed + +## Consequences + +### Positive + +* increases specialization capabilities of a blockchain +* improve abstractions in `x/gov/` such that they can be used with specialization groups + +### Negative + +* could be used to increase centralization within a community + +### Neutral + +## References + +* [dCERT ADR](./adr-008-dCERT-group.md) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-008-dCERT-group.md b/versioned_docs/version-0.47/integrate/architecture/adr-008-dCERT-group.md new file mode 100644 index 000000000..2b2d2b826 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-008-dCERT-group.md @@ -0,0 +1,171 @@ +# ADR 008: Decentralized Computer Emergency Response Team (dCERT) Group + +## Changelog + +* 2019 Jul 31: Initial Draft + +## Context + +In order to reduce the number of parties involved with handling sensitive +information in an emergency scenario, we propose the creation of a +specialization group named The Decentralized Computer Emergency Response Team +(dCERT). Initially this group's role is intended to serve as coordinators +between various actors within a blockchain community such as validators, +bug-hunters, and developers. During a time of crisis, the dCERT group would +aggregate and relay input from a variety of stakeholders to the developers who +are actively devising a patch to the software, this way sensitive information +does not need to be publicly disclosed while some input from the community can +still be gained. + +Additionally, a special privilege is proposed for the dCERT group: the capacity +to "circuit-break" (aka. temporarily disable) a particular message path. Note +that this privilege should be enabled/disabled globally with a governance +parameter such that this privilege could start disabled and later be enabled +through a parameter change proposal, once a dCERT group has been established. + +In the future it is foreseeable that the community may wish to expand the roles +of dCERT with further responsibilities such as the capacity to "pre-approve" a +security update on behalf of the community prior to a full community +wide vote whereby the sensitive information would be revealed prior to a +vulnerability being patched on the live network. + +## Decision + +The dCERT group is proposed to include an implementation of a `SpecializationGroup` +as defined in [ADR 007](./adr-007-specialization-groups.md). This will include the +implementation of: + +* continuous voting +* slashing due to breach of soft contract +* revoking a member due to breach of soft contract +* emergency disband of the entire dCERT group (ex. for colluding maliciously) +* compensation stipend from the community pool or other means decided by + governance + +This system necessitates the following new parameters: + +* blockly stipend allowance per dCERT member +* maximum number of dCERT members +* required staked slashable tokens for each dCERT member +* quorum for suspending a particular member +* proposal wager for disbanding the dCERT group +* stabilization period for dCERT member transition +* circuit break dCERT privileges enabled + +These parameters are expected to be implemented through the param keeper such +that governance may change them at any given point. + +### Continuous Voting Electionator + +An `Electionator` object is to be implemented as continuous voting and with the +following specifications: + +* All delegation addresses may submit votes at any point which updates their + preferred representation on the dCERT group. +* Preferred representation may be arbitrarily split between addresses (ex. 50% + to John, 25% to Sally, 25% to Carol) +* In order for a new member to be added to the dCERT group they must + send a transaction accepting their admission at which point the validity of + their admission is to be confirmed. + * A sequence number is assigned when a member is added to dCERT group. + If a member leaves the dCERT group and then enters back, a new sequence number + is assigned. +* Addresses which control the greatest amount of preferred-representation are + eligible to join the dCERT group (up the _maximum number of dCERT members_). + If the dCERT group is already full and new member is admitted, the existing + dCERT member with the lowest amount of votes is kicked from the dCERT group. + * In the split situation where the dCERT group is full but a vying candidate + has the same amount of vote as an existing dCERT member, the existing + member should maintain its position. + * In the split situation where somebody must be kicked out but the two + addresses with the smallest number of votes have the same number of votes, + the address with the smallest sequence number maintains its position. +* A stabilization period can be optionally included to reduce the + "flip-flopping" of the dCERT membership tail members. If a stabilization + period is provided which is greater than 0, when members are kicked due to + insufficient support, a queue entry is created which documents which member is + to replace which other member. While this entry is in the queue, no new entries + to kick that same dCERT member can be made. When the entry matures at the + duration of the stabilization period, the new member is instantiated, and old + member kicked. + +### Staking/Slashing + +All members of the dCERT group must stake tokens _specifically_ to maintain +eligibility as a dCERT member. These tokens can be staked directly by the vying +dCERT member or out of the good will of a 3rd party (who shall gain no on-chain +benefits for doing so). This staking mechanism should use the existing global +unbonding time of tokens staked for network validator security. A dCERT member +can _only be_ a member if it has the required tokens staked under this +mechanism. If those tokens are unbonded then the dCERT member must be +automatically kicked from the group. + +Slashing of a particular dCERT member due to soft-contract breach should be +performed by governance on a per member basis based on the magnitude of the +breach. The process flow is anticipated to be that a dCERT member is suspended +by the dCERT group prior to being slashed by governance. + +Membership suspension by the dCERT group takes place through a voting procedure +by the dCERT group members. After this suspension has taken place, a governance +proposal to slash the dCERT member must be submitted, if the proposal is not +approved by the time the rescinding member has completed unbonding their +tokens, then the tokens are no longer staked and unable to be slashed. + +Additionally in the case of an emergency situation of a colluding and malicious +dCERT group, the community needs the capability to disband the entire dCERT +group and likely fully slash them. This could be achieved though a special new +proposal type (implemented as a general governance proposal) which would halt +the functionality of the dCERT group until the proposal was concluded. This +special proposal type would likely need to also have a fairly large wager which +could be slashed if the proposal creator was malicious. The reason a large +wager should be required is because as soon as the proposal is made, the +capability of the dCERT group to halt message routes is put on temporarily +suspended, meaning that a malicious actor who created such a proposal could +then potentially exploit a bug during this period of time, with no dCERT group +capable of shutting down the exploitable message routes. + +### dCERT membership transactions + +Active dCERT members + +* change of the description of the dCERT group +* circuit break a message route +* vote to suspend a dCERT member. + +Here circuit-breaking refers to the capability to disable a groups of messages, +This could for instance mean: "disable all staking-delegation messages", or +"disable all distribution messages". This could be accomplished by verifying +that the message route has not been "circuit-broken" at CheckTx time (in +`baseapp/baseapp.go`). + +"unbreaking" a circuit is anticipated only to occur during a hard fork upgrade +meaning that no capability to unbreak a message route on a live chain is +required. + +Note also, that if there was a problem with governance voting (for instance a +capability to vote many times) then governance would be broken and should be +halted with this mechanism, it would be then up to the validator set to +coordinate and hard-fork upgrade to a patched version of the software where +governance is re-enabled (and fixed). If the dCERT group abuses this privilege +they should all be severely slashed. + +## Status + +> Proposed + +## Consequences + +### Positive + +* Potential to reduces the number of parties to coordinate with during an emergency +* Reduction in possibility of disclosing sensitive information to malicious parties + +### Negative + +* Centralization risks + +### Neutral + +## References + + [Specialization Groups ADR](./adr-007-specialization-groups.md) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-009-evidence-module.md b/versioned_docs/version-0.47/integrate/architecture/adr-009-evidence-module.md new file mode 100644 index 000000000..ded04a142 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-009-evidence-module.md @@ -0,0 +1,182 @@ +# ADR 009: Evidence Module + +## Changelog + +* 2019 July 31: Initial draft +* 2019 October 24: Initial implementation + +## Status + +Accepted + +## Context + +In order to support building highly secure, robust and interoperable blockchain +applications, it is vital for the Cosmos SDK to expose a mechanism in which arbitrary +evidence can be submitted, evaluated and verified resulting in some agreed upon +penalty for any misbehavior committed by a validator, such as equivocation (double-voting), +signing when unbonded, signing an incorrect state transition (in the future), etc. +Furthermore, such a mechanism is paramount for any +[IBC](https://github.com/cosmos/ics/blob/master/ibc/2_IBC_ARCHITECTURE.md) or +cross-chain validation protocol implementation in order to support the ability +for any misbehavior to be relayed back from a collateralized chain to a primary +chain so that the equivocating validator(s) can be slashed. + +## Decision + +We will implement an evidence module in the Cosmos SDK supporting the following +functionality: + +* Provide developers with the abstractions and interfaces necessary to define + custom evidence messages, message handlers, and methods to slash and penalize + accordingly for misbehavior. +* Support the ability to route evidence messages to handlers in any module to + determine the validity of submitted misbehavior. +* Support the ability, through governance, to modify slashing penalties of any + evidence type. +* Querier implementation to support querying params, evidence types, params, and + all submitted valid misbehavior. + +### Types + +First, we define the `Evidence` interface type. The `x/evidence` module may implement +its own types that can be used by many chains (e.g. `CounterFactualEvidence`). +In addition, other modules may implement their own `Evidence` types in a similar +manner in which governance is extensible. It is important to note any concrete +type implementing the `Evidence` interface may include arbitrary fields such as +an infraction time. We want the `Evidence` type to remain as flexible as possible. + +When submitting evidence to the `x/evidence` module, the concrete type must provide +the validator's consensus address, which should be known by the `x/slashing` +module (assuming the infraction is valid), the height at which the infraction +occurred and the validator's power at same height in which the infraction occurred. + +```go +type Evidence interface { + Route() string + Type() string + String() string + Hash() HexBytes + ValidateBasic() error + + // The consensus address of the malicious validator at time of infraction + GetConsensusAddress() ConsAddress + + // Height at which the infraction occurred + GetHeight() int64 + + // The total power of the malicious validator at time of infraction + GetValidatorPower() int64 + + // The total validator set power at time of infraction + GetTotalPower() int64 +} +``` + +### Routing & Handling + +Each `Evidence` type must map to a specific unique route and be registered with +the `x/evidence` module. It accomplishes this through the `Router` implementation. + +```go +type Router interface { + AddRoute(r string, h Handler) Router + HasRoute(r string) bool + GetRoute(path string) Handler + Seal() +} +``` + +Upon successful routing through the `x/evidence` module, the `Evidence` type +is passed through a `Handler`. This `Handler` is responsible for executing all +corresponding business logic necessary for verifying the evidence as valid. In +addition, the `Handler` may execute any necessary slashing and potential jailing. +Since slashing fractions will typically result from some form of static functions, +allow the `Handler` to do this provides the greatest flexibility. An example could +be `k * evidence.GetValidatorPower()` where `k` is an on-chain parameter controlled +by governance. The `Evidence` type should provide all the external information +necessary in order for the `Handler` to make the necessary state transitions. +If no error is returned, the `Evidence` is considered valid. + +```go +type Handler func(Context, Evidence) error +``` + +### Submission + +`Evidence` is submitted through a `MsgSubmitEvidence` message type which is internally +handled by the `x/evidence` module's `SubmitEvidence`. + +```go +type MsgSubmitEvidence struct { + Evidence +} + +func handleMsgSubmitEvidence(ctx Context, keeper Keeper, msg MsgSubmitEvidence) Result { + if err := keeper.SubmitEvidence(ctx, msg.Evidence); err != nil { + return err.Result() + } + + // emit events... + + return Result{ + // ... + } +} +``` + +The `x/evidence` module's keeper is responsible for matching the `Evidence` against +the module's router and invoking the corresponding `Handler` which may include +slashing and jailing the validator. Upon success, the submitted evidence is persisted. + +```go +func (k Keeper) SubmitEvidence(ctx Context, evidence Evidence) error { + handler := keeper.router.GetRoute(evidence.Route()) + if err := handler(ctx, evidence); err != nil { + return ErrInvalidEvidence(keeper.codespace, err) + } + + keeper.setEvidence(ctx, evidence) + return nil +} +``` + +### Genesis + +Finally, we need to represent the genesis state of the `x/evidence` module. The +module only needs a list of all submitted valid infractions and any necessary params +for which the module needs in order to handle submitted evidence. The `x/evidence` +module will naturally define and route native evidence types for which it'll most +likely need slashing penalty constants for. + +```go +type GenesisState struct { + Params Params + Infractions []Evidence +} +``` + +## Consequences + +### Positive + +* Allows the state machine to process misbehavior submitted on-chain and penalize + validators based on agreed upon slashing parameters. +* Allows evidence types to be defined and handled by any module. This further allows + slashing and jailing to be defined by more complex mechanisms. +* Does not solely rely on Tendermint to submit evidence. + +### Negative + +* No easy way to introduce new evidence types through governance on a live chain + due to the inability to introduce the new evidence type's corresponding handler + +### Neutral + +* Should we persist infractions indefinitely? Or should we rather rely on events? + +## References + +* [ICS](https://github.com/cosmos/ics) +* [IBC Architecture](https://github.com/cosmos/ics/blob/master/ibc/1_IBC_ARCHITECTURE.md) +* [Tendermint Fork Accountability](https://github.com/tendermint/spec/blob/7b3138e69490f410768d9b1ffc7a17abc23ea397/spec/consensus/fork-accountability.md) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-010-modular-antehandler.md b/versioned_docs/version-0.47/integrate/architecture/adr-010-modular-antehandler.md new file mode 100644 index 000000000..386af1a77 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-010-modular-antehandler.md @@ -0,0 +1,290 @@ +# ADR 010: Modular AnteHandler + +## Changelog + +* 2019 Aug 31: Initial draft +* 2021 Sep 14: Superseded by ADR-045 + +## Status + +SUPERSEDED by ADR-045 + +## Context + +The current AnteHandler design allows users to either use the default AnteHandler provided in `x/auth` or to build their own AnteHandler from scratch. Ideally AnteHandler functionality is split into multiple, modular functions that can be chained together along with custom ante-functions so that users do not have to rewrite common antehandler logic when they want to implement custom behavior. + +For example, let's say a user wants to implement some custom signature verification logic. In the current codebase, the user would have to write their own Antehandler from scratch largely reimplementing much of the same code and then set their own custom, monolithic antehandler in the baseapp. Instead, we would like to allow users to specify custom behavior when necessary and combine them with default ante-handler functionality in a way that is as modular and flexible as possible. + +## Proposals + +### Per-Module AnteHandler + +One approach is to use the [ModuleManager](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types/module) and have each module implement its own antehandler if it requires custom antehandler logic. The ModuleManager can then be passed in an AnteHandler order in the same way it has an order for BeginBlockers and EndBlockers. The ModuleManager returns a single AnteHandler function that will take in a tx and run each module's `AnteHandle` in the specified order. The module manager's AnteHandler is set as the baseapp's AnteHandler. + +Pros: + +1. Simple to implement +2. Utilizes the existing ModuleManager architecture + +Cons: + +1. Improves granularity but still cannot get more granular than a per-module basis. e.g. If auth's `AnteHandle` function is in charge of validating memo and signatures, users cannot swap the signature-checking functionality while keeping the rest of auth's `AnteHandle` functionality. +2. Module AnteHandler are run one after the other. There is no way for one AnteHandler to wrap or "decorate" another. + +### Decorator Pattern + +The [weave project](https://github.com/iov-one/weave) achieves AnteHandler modularity through the use of a decorator pattern. The interface is designed as follows: + +```go +// Decorator wraps a Handler to provide common functionality +// like authentication, or fee-handling, to many Handlers +type Decorator interface { + Check(ctx Context, store KVStore, tx Tx, next Checker) (*CheckResult, error) + Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) (*DeliverResult, error) +} +``` + +Each decorator works like a modularized Cosmos SDK antehandler function, but it can take in a `next` argument that may be another decorator or a Handler (which does not take in a next argument). These decorators can be chained together, one decorator being passed in as the `next` argument of the previous decorator in the chain. The chain ends in a Router which can take a tx and route to the appropriate msg handler. + +A key benefit of this approach is that one Decorator can wrap its internal logic around the next Checker/Deliverer. A weave Decorator may do the following: + +```go +// Example Decorator's Deliver function +func (example Decorator) Deliver(ctx Context, store KVStore, tx Tx, next Deliverer) { + // Do some pre-processing logic + + res, err := next.Deliver(ctx, store, tx) + + // Do some post-processing logic given the result and error +} +``` + +Pros: + +1. Weave Decorators can wrap over the next decorator/handler in the chain. The ability to both pre-process and post-process may be useful in certain settings. +2. Provides a nested modular structure that isn't possible in the solution above, while also allowing for a linear one-after-the-other structure like the solution above. + +Cons: + +1. It is hard to understand at first glance the state updates that would occur after a Decorator runs given the `ctx`, `store`, and `tx`. A Decorator can have an arbitrary number of nested Decorators being called within its function body, each possibly doing some pre- and post-processing before calling the next decorator on the chain. Thus to understand what a Decorator is doing, one must also understand what every other decorator further along the chain is also doing. This can get quite complicated to understand. A linear, one-after-the-other approach while less powerful, may be much easier to reason about. + +### Chained Micro-Functions + +The benefit of Weave's approach is that the Decorators can be very concise, which when chained together allows for maximum customizability. However, the nested structure can get quite complex and thus hard to reason about. + +Another approach is to split the AnteHandler functionality into tightly scoped "micro-functions", while preserving the one-after-the-other ordering that would come from the ModuleManager approach. + +We can then have a way to chain these micro-functions so that they run one after the other. Modules may define multiple ante micro-functions and then also provide a default per-module AnteHandler that implements a default, suggested order for these micro-functions. + +Users can order the AnteHandlers easily by simply using the ModuleManager. The ModuleManager will take in a list of AnteHandlers and return a single AnteHandler that runs each AnteHandler in the order of the list provided. If the user is comfortable with the default ordering of each module, this is as simple as providing a list with each module's antehandler (exactly the same as BeginBlocker and EndBlocker). + +If however, users wish to change the order or add, modify, or delete ante micro-functions in anyway; they can always define their own ante micro-functions and add them explicitly to the list that gets passed into module manager. + +#### Default Workflow + +This is an example of a user's AnteHandler if they choose not to make any custom micro-functions. + +##### Cosmos SDK code + +```go +// Chains together a list of AnteHandler micro-functions that get run one after the other. +// Returned AnteHandler will abort on first error. +func Chainer(order []AnteHandler) AnteHandler { + return func(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + for _, ante := range order { + ctx, err := ante(ctx, tx, simulate) + if err != nil { + return ctx, err + } + } + return ctx, err + } +} +``` + +```go +// AnteHandler micro-function to verify signatures +func VerifySignatures(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // verify signatures + // Returns InvalidSignature Result and abort=true if sigs invalid + // Return OK result and abort=false if sigs are valid +} + +// AnteHandler micro-function to validate memo +func ValidateMemo(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // validate memo +} + +// Auth defines its own default ante-handler by chaining its micro-functions in a recommended order +AuthModuleAnteHandler := Chainer([]AnteHandler{VerifySignatures, ValidateMemo}) +``` + +```go +// Distribution micro-function to deduct fees from tx +func DeductFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // Deduct fees from tx + // Abort if insufficient funds in account to pay for fees +} + +// Distribution micro-function to check if fees > mempool parameter +func CheckMempoolFees(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // If CheckTx: Abort if the fees are less than the mempool's minFee parameter +} + +// Distribution defines its own default ante-handler by chaining its micro-functions in a recommended order +DistrModuleAnteHandler := Chainer([]AnteHandler{CheckMempoolFees, DeductFees}) +``` + +```go +type ModuleManager struct { + // other fields + AnteHandlerOrder []AnteHandler +} + +func (mm ModuleManager) GetAnteHandler() AnteHandler { + retun Chainer(mm.AnteHandlerOrder) +} +``` + +##### User Code + +```go +// Note: Since user is not making any custom modifications, we can just SetAnteHandlerOrder with the default AnteHandlers provided by each module in our preferred order +moduleManager.SetAnteHandlerOrder([]AnteHandler(AuthModuleAnteHandler, DistrModuleAnteHandler)) + +app.SetAnteHandler(mm.GetAnteHandler()) +``` + +#### Custom Workflow + +This is an example workflow for a user that wants to implement custom antehandler logic. In this example, the user wants to implement custom signature verification and change the order of antehandler so that validate memo runs before signature verification. + +##### User Code + +```go +// User can implement their own custom signature verification antehandler micro-function +func CustomSigVerify(ctx Context, tx Tx, simulate bool) (newCtx Context, err error) { + // do some custom signature verification logic +} +``` + +```go +// Micro-functions allow users to change order of when they get executed, and swap out default ante-functionality with their own custom logic. +// Note that users can still chain the default distribution module handler, and auth micro-function along with their custom ante function +moduleManager.SetAnteHandlerOrder([]AnteHandler(ValidateMemo, CustomSigVerify, DistrModuleAnteHandler)) +``` + +Pros: + +1. Allows for ante functionality to be as modular as possible. +2. For users that do not need custom ante-functionality, there is little difference between how antehandlers work and how BeginBlock and EndBlock work in ModuleManager. +3. Still easy to understand + +Cons: + +1. Cannot wrap antehandlers with decorators like you can with Weave. + +### Simple Decorators + +This approach takes inspiration from Weave's decorator design while trying to minimize the number of breaking changes to the Cosmos SDK and maximizing simplicity. Like Weave decorators, this approach allows one `AnteDecorator` to wrap the next AnteHandler to do pre- and post-processing on the result. This is useful since decorators can do defer/cleanups after an AnteHandler returns as well as perform some setup beforehand. Unlike Weave decorators, these `AnteDecorator` functions can only wrap over the AnteHandler rather than the entire handler execution path. This is deliberate as we want decorators from different modules to perform authentication/validation on a `tx`. However, we do not want decorators being capable of wrapping and modifying the results of a `MsgHandler`. + +In addition, this approach will not break any core Cosmos SDK API's. Since we preserve the notion of an AnteHandler and still set a single AnteHandler in baseapp, the decorator is simply an additional approach available for users that desire more customization. The API of modules (namely `x/auth`) may break with this approach, but the core API remains untouched. + +Allow Decorator interface that can be chained together to create a Cosmos SDK AnteHandler. + +This allows users to choose between implementing an AnteHandler by themselves and setting it in the baseapp, or use the decorator pattern to chain their custom decorators with the Cosmos SDK provided decorators in the order they wish. + +```go +// An AnteDecorator wraps an AnteHandler, and can do pre- and post-processing on the next AnteHandler +type AnteDecorator interface { + AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) +} +``` + +```go +// ChainAnteDecorators will recursively link all of the AnteDecorators in the chain and return a final AnteHandler function +// This is done to preserve the ability to set a single AnteHandler function in the baseapp. +func ChainAnteDecorators(chain ...AnteDecorator) AnteHandler { + if len(chain) == 1 { + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, nil) + } + } + return func(ctx Context, tx Tx, simulate bool) { + chain[0].AnteHandle(ctx, tx, simulate, ChainAnteDecorators(chain[1:])) + } +} +``` + +#### Example Code + +Define AnteDecorator functions + +```go +// Setup GasMeter, catch OutOfGasPanic and handle appropriately +type SetUpContextDecorator struct{} + +func (sud SetUpContextDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + ctx.GasMeter = NewGasMeter(tx.Gas) + + defer func() { + // recover from OutOfGas panic and handle appropriately + } + + return next(ctx, tx, simulate) +} + +// Signature Verification decorator. Verify Signatures and move on +type SigVerifyDecorator struct{} + +func (svd SigVerifyDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // verify sigs. Return error if invalid + + // call next antehandler if sigs ok + return next(ctx, tx, simulate) +} + +// User-defined Decorator. Can choose to pre- and post-process on AnteHandler +type UserDefinedDecorator struct{ + // custom fields +} + +func (udd UserDefinedDecorator) AnteHandle(ctx Context, tx Tx, simulate bool, next AnteHandler) (newCtx Context, err error) { + // pre-processing logic + + ctx, err = next(ctx, tx, simulate) + + // post-processing logic +} +``` + +Link AnteDecorators to create a final AnteHandler. Set this AnteHandler in baseapp. + +```go +// Create final antehandler by chaining the decorators together +antehandler := ChainAnteDecorators(NewSetUpContextDecorator(), NewSigVerifyDecorator(), NewUserDefinedDecorator()) + +// Set chained Antehandler in the baseapp +bapp.SetAnteHandler(antehandler) +``` + +Pros: + +1. Allows one decorator to pre- and post-process the next AnteHandler, similar to the Weave design. +2. Do not need to break baseapp API. Users can still set a single AnteHandler if they choose. + +Cons: + +1. Decorator pattern may have a deeply nested structure that is hard to understand, this is mitigated by having the decorator order explicitly listed in the `ChainAnteDecorators` function. +2. Does not make use of the ModuleManager design. Since this is already being used for BeginBlocker/EndBlocker, this proposal seems unaligned with that design pattern. + +## Consequences + +Since pros and cons are written for each approach, it is omitted from this section + +## References + +* [#4572](https://github.com/cosmos/cosmos-sdk/issues/4572): Modular AnteHandler Issue +* [#4582](https://github.com/cosmos/cosmos-sdk/pull/4583): Initial Implementation of Per-Module AnteHandler Approach +* [Weave Decorator Code](https://github.com/iov-one/weave/blob/master/handler.go#L35) +* [Weave Design Videos](https://vimeo.com/showcase/6189877) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-011-generalize-genesis-accounts.md b/versioned_docs/version-0.47/integrate/architecture/adr-011-generalize-genesis-accounts.md new file mode 100644 index 000000000..92a704ba6 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-011-generalize-genesis-accounts.md @@ -0,0 +1,170 @@ +# ADR 011: Generalize Genesis Accounts + +## Changelog + +* 2019-08-30: initial draft + +## Context + +Currently, the Cosmos SDK allows for custom account types; the `auth` keeper stores any type fulfilling its `Account` interface. However `auth` does not handle exporting or loading accounts to/from a genesis file, this is done by `genaccounts`, which only handles one of 4 concrete account types (`BaseAccount`, `ContinuousVestingAccount`, `DelayedVestingAccount` and `ModuleAccount`). + +Projects desiring to use custom accounts (say custom vesting accounts) need to fork and modify `genaccounts`. + +## Decision + +In summary, we will (un)marshal all accounts (interface types) directly using amino, rather than converting to `genaccounts`’s `GenesisAccount` type. Since doing this removes the majority of `genaccounts`'s code, we will merge `genaccounts` into `auth`. Marshalled accounts will be stored in `auth`'s genesis state. + +Detailed changes: + +### 1) (Un)Marshal accounts directly using amino + +The `auth` module's `GenesisState` gains a new field `Accounts`. Note these aren't of type `exported.Account` for reasons outlined in section 3. + +```go +// GenesisState - all auth state that must be provided at genesis +type GenesisState struct { + Params Params `json:"params" yaml:"params"` + Accounts []GenesisAccount `json:"accounts" yaml:"accounts"` +} +``` + +Now `auth`'s `InitGenesis` and `ExportGenesis` (un)marshal accounts as well as the defined params. + +```go +// InitGenesis - Init store state from genesis data +func InitGenesis(ctx sdk.Context, ak AccountKeeper, data GenesisState) { + ak.SetParams(ctx, data.Params) + // load the accounts + for _, a := range data.Accounts { + acc := ak.NewAccount(ctx, a) // set account number + ak.SetAccount(ctx, acc) + } +} + +// ExportGenesis returns a GenesisState for a given context and keeper +func ExportGenesis(ctx sdk.Context, ak AccountKeeper) GenesisState { + params := ak.GetParams(ctx) + + var genAccounts []exported.GenesisAccount + ak.IterateAccounts(ctx, func(account exported.Account) bool { + genAccount := account.(exported.GenesisAccount) + genAccounts = append(genAccounts, genAccount) + return false + }) + + return NewGenesisState(params, genAccounts) +} +``` + +### 2) Register custom account types on the `auth` codec + +The `auth` codec must have all custom account types registered to marshal them. We will follow the pattern established in `gov` for proposals. + +An example custom account definition: + +```go +import authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + +// Register the module account type with the auth module codec so it can decode module accounts stored in a genesis file +func init() { + authtypes.RegisterAccountTypeCodec(ModuleAccount{}, "cosmos-sdk/ModuleAccount") +} + +type ModuleAccount struct { + ... +``` + +The `auth` codec definition: + +```go +var ModuleCdc *codec.LegacyAmino + +func init() { + ModuleCdc = codec.NewLegacyAmino() + // register module msg's and Account interface + ... + // leave the codec unsealed +} + +// RegisterAccountTypeCodec registers an external account type defined in another module for the internal ModuleCdc. +func RegisterAccountTypeCodec(o interface{}, name string) { + ModuleCdc.RegisterConcrete(o, name, nil) +} +``` + +### 3) Genesis validation for custom account types + +Modules implement a `ValidateGenesis` method. As `auth` does not know of account implementations, accounts will need to validate themselves. + +We will unmarshal accounts into a `GenesisAccount` interface that includes a `Validate` method. + +```go +type GenesisAccount interface { + exported.Account + Validate() error +} +``` + +Then the `auth` `ValidateGenesis` function becomes: + +```go +// ValidateGenesis performs basic validation of auth genesis data returning an +// error for any failed validation criteria. +func ValidateGenesis(data GenesisState) error { + // Validate params + ... + + // Validate accounts + addrMap := make(map[string]bool, len(data.Accounts)) + for _, acc := range data.Accounts { + + // check for duplicated accounts + addrStr := acc.GetAddress().String() + if _, ok := addrMap[addrStr]; ok { + return fmt.Errorf("duplicate account found in genesis state; address: %s", addrStr) + } + addrMap[addrStr] = true + + // check account specific validation + if err := acc.Validate(); err != nil { + return fmt.Errorf("invalid account found in genesis state; address: %s, error: %s", addrStr, err.Error()) + } + + } + return nil +} +``` + +### 4) Move add-genesis-account cli to `auth` + +The `genaccounts` module contains a cli command to add base or vesting accounts to a genesis file. + +This will be moved to `auth`. We will leave it to projects to write their own commands to add custom accounts. An extensible cli handler, similar to `gov`, could be created but it is not worth the complexity for this minor use case. + +### 5) Update module and vesting accounts + +Under the new scheme, module and vesting account types need some minor updates: + +* Type registration on `auth`'s codec (shown above) +* A `Validate` method for each `Account` concrete type + +## Status + +Proposed + +## Consequences + +### Positive + +* custom accounts can be used without needing to fork `genaccounts` +* reduction in lines of code + +### Negative + +### Neutral + +* `genaccounts` module no longer exists +* accounts in genesis files are stored under `accounts` in `auth` rather than in the `genaccounts` module. +-`add-genesis-account` cli command now in `auth` + +## References diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-012-state-accessors.md b/versioned_docs/version-0.47/integrate/architecture/adr-012-state-accessors.md new file mode 100644 index 000000000..93600000f --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-012-state-accessors.md @@ -0,0 +1,155 @@ +# ADR 012: State Accessors + +## Changelog + +* 2019 Sep 04: Initial draft + +## Context + +Cosmos SDK modules currently use the `KVStore` interface and `Codec` to access their respective state. While +this provides a large degree of freedom to module developers, it is hard to modularize and the UX is +mediocre. + +First, each time a module tries to access the state, it has to marshal the value and set or get the +value and finally unmarshal. Usually this is done by declaring `Keeper.GetXXX` and `Keeper.SetXXX` functions, +which are repetitive and hard to maintain. + +Second, this makes it harder to align with the object capability theorem: the right to access the +state is defined as a `StoreKey`, which gives full access on the entire Merkle tree, so a module cannot +send the access right to a specific key-value pair (or a set of key-value pairs) to another module safely. + +Finally, because the getter/setter functions are defined as methods of a module's `Keeper`, the reviewers +have to consider the whole Merkle tree space when they reviewing a function accessing any part of the state. +There is no static way to know which part of the state that the function is accessing (and which is not). + +## Decision + +We will define a type named `Value`: + +```go +type Value struct { + m Mapping + key []byte +} +``` + +The `Value` works as a reference for a key-value pair in the state, where `Value.m` defines the key-value +space it will access and `Value.key` defines the exact key for the reference. + +We will define a type named `Mapping`: + +```go +type Mapping struct { + storeKey sdk.StoreKey + cdc *codec.LegacyAmino + prefix []byte +} +``` + +The `Mapping` works as a reference for a key-value space in the state, where `Mapping.storeKey` defines +the IAVL (sub-)tree and `Mapping.prefix` defines the optional subspace prefix. + +We will define the following core methods for the `Value` type: + +```go +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Value) Get(ctx Context, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Value) GetSafe(ctx Context, ptr interface{}) {} + +// Get stored data as raw byte slice +func (Value) GetRaw(ctx Context) []byte {} + +// Marshal and set a raw value +func (Value) Set(ctx Context, o interface{}) {} + +// Check if a raw value exists +func (Value) Exists(ctx Context) bool {} + +// Delete a raw value value +func (Value) Delete(ctx Context) {} +``` + +We will define the following core methods for the `Mapping` type: + +```go +// Constructs key-value pair reference corresponding to the key argument in the Mapping space +func (Mapping) Value(key []byte) Value {} + +// Get and unmarshal stored data, noop if not exists, panic if cannot unmarshal +func (Mapping) Get(ctx Context, key []byte, ptr interface{}) {} + +// Get and unmarshal stored data, return error if not exists or cannot unmarshal +func (Mapping) GetSafe(ctx Context, key []byte, ptr interface{}) + +// Get stored data as raw byte slice +func (Mapping) GetRaw(ctx Context, key []byte) []byte {} + +// Marshal and set a raw value +func (Mapping) Set(ctx Context, key []byte, o interface{}) {} + +// Check if a raw value exists +func (Mapping) Has(ctx Context, key []byte) bool {} + +// Delete a raw value value +func (Mapping) Delete(ctx Context, key []byte) {} +``` + +Each method of the `Mapping` type that is passed the arguments `ctx`, `key`, and `args...` will proxy +the call to `Mapping.Value(key)` with arguments `ctx` and `args...`. + +In addition, we will define and provide a common set of types derived from the `Value` type: + +```go +type Boolean struct { Value } +type Enum struct { Value } +type Integer struct { Value; enc IntEncoding } +type String struct { Value } +// ... +``` + +Where the encoding schemes can be different, `o` arguments in core methods are typed, and `ptr` arguments +in core methods are replaced by explicit return types. + +Finally, we will define a family of types derived from the `Mapping` type: + +```go +type Indexer struct { + m Mapping + enc IntEncoding +} +``` + +Where the `key` argument in core method is typed. + +Some of the properties of the accessor types are: + +* State access happens only when a function which takes a `Context` as an argument is invoked +* Accessor type structs give rights to access the state only that the struct is referring, no other +* Marshalling/Unmarshalling happens implicitly within the core methods + +## Status + +Proposed + +## Consequences + +### Positive + +* Serialization will be done automatically +* Shorter code size, less boilerplate, better UX +* References to the state can be transferred safely +* Explicit scope of accessing + +### Negative + +* Serialization format will be hidden +* Different architecture from the current, but the use of accessor types can be opt-in +* Type-specific types (e.g. `Boolean` and `Integer`) have to be defined manually + +### Neutral + +## References + +* [#4554](https://github.com/cosmos/cosmos-sdk/issues/4554) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-013-metrics.md b/versioned_docs/version-0.47/integrate/architecture/adr-013-metrics.md new file mode 100644 index 000000000..33849b56c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-013-metrics.md @@ -0,0 +1,157 @@ +# ADR 013: Observability + +## Changelog + +* 20-01-2020: Initial Draft + +## Status + +Proposed + +## Context + +Telemetry is paramount into debugging and understanding what the application is doing and how it is +performing. We aim to expose metrics from modules and other core parts of the Cosmos SDK. + +In addition, we should aim to support multiple configurable sinks that an operator may choose from. +By default, when telemetry is enabled, the application should track and expose metrics that are +stored in-memory. The operator may choose to enable additional sinks, where we support only +[Prometheus](https://prometheus.io/) for now, as it's battle-tested, simple to setup, open source, +and is rich with ecosystem tooling. + +We must also aim to integrate metrics into the Cosmos SDK in the most seamless way possible such that +metrics may be added or removed at will and without much friction. To do this, we will use the +[go-metrics](https://github.com/armon/go-metrics) library. + +Finally, operators may enable telemetry along with specific configuration options. If enabled, metrics +will be exposed via `/metrics?format={text|prometheus}` via the API server. + +## Decision + +We will add an additional configuration block to `app.toml` that defines telemetry settings: + +```toml +############################################################################### +### Telemetry Configuration ### +############################################################################### + +[telemetry] + +# Prefixed with keys to separate services +service-name = {{ .Telemetry.ServiceName }} + +# Enabled enables the application telemetry functionality. When enabled, +# an in-memory sink is also enabled by default. Operators may also enabled +# other sinks such as Prometheus. +enabled = {{ .Telemetry.Enabled }} + +# Enable prefixing gauge values with hostname +enable-hostname = {{ .Telemetry.EnableHostname }} + +# Enable adding hostname to labels +enable-hostname-label = {{ .Telemetry.EnableHostnameLabel }} + +# Enable adding service to labels +enable-service-label = {{ .Telemetry.EnableServiceLabel }} + +# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. +prometheus-retention-time = {{ .Telemetry.PrometheusRetentionTime }} +``` + +The given configuration allows for two sinks -- in-memory and Prometheus. We create a `Metrics` +type that performs all the bootstrapping for the operator, so capturing metrics becomes seamless. + +```go +// Metrics defines a wrapper around application telemetry functionality. It allows +// metrics to be gathered at any point in time. When creating a Metrics object, +// internally, a global metrics is registered with a set of sinks as configured +// by the operator. In addition to the sinks, when a process gets a SIGUSR1, a +// dump of formatted recent metrics will be sent to STDERR. +type Metrics struct { + memSink *metrics.InmemSink + prometheusEnabled bool +} + +// Gather collects all registered metrics and returns a GatherResponse where the +// metrics are encoded depending on the type. Metrics are either encoded via +// Prometheus or JSON if in-memory. +func (m *Metrics) Gather(format string) (GatherResponse, error) { + switch format { + case FormatPrometheus: + return m.gatherPrometheus() + + case FormatText: + return m.gatherGeneric() + + case FormatDefault: + return m.gatherGeneric() + + default: + return GatherResponse{}, fmt.Errorf("unsupported metrics format: %s", format) + } +} +``` + +In addition, `Metrics` allows us to gather the current set of metrics at any given point in time. An +operator may also choose to send a signal, SIGUSR1, to dump and print formatted metrics to STDERR. + +During an application's bootstrapping and construction phase, if `Telemetry.Enabled` is `true`, the +API server will create an instance of a reference to `Metrics` object and will register a metrics +handler accordingly. + +```go +func (s *Server) Start(cfg config.Config) error { + // ... + + if cfg.Telemetry.Enabled { + m, err := telemetry.New(cfg.Telemetry) + if err != nil { + return err + } + + s.metrics = m + s.registerMetrics() + } + + // ... +} + +func (s *Server) registerMetrics() { + metricsHandler := func(w http.ResponseWriter, r *http.Request) { + format := strings.TrimSpace(r.FormValue("format")) + + gr, err := s.metrics.Gather(format) + if err != nil { + rest.WriteErrorResponse(w, http.StatusBadRequest, fmt.Sprintf("failed to gather metrics: %s", err)) + return + } + + w.Header().Set("Content-Type", gr.ContentType) + _, _ = w.Write(gr.Metrics) + } + + s.Router.HandleFunc("/metrics", metricsHandler).Methods("GET") +} +``` + +Application developers may track counters, gauges, summaries, and key/value metrics. There is no +additional lifting required by modules to leverage profiling metrics. To do so, it's as simple as: + +```go +func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { + defer metrics.MeasureSince(time.Now(), "MintCoins") + // ... +} +``` + +## Consequences + +### Positive + +* Exposure into the performance and behavior of an application + +### Negative + +### Neutral + +## References diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-014-proportional-slashing.md b/versioned_docs/version-0.47/integrate/architecture/adr-014-proportional-slashing.md new file mode 100644 index 000000000..63cd04dee --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-014-proportional-slashing.md @@ -0,0 +1,85 @@ +# ADR 14: Proportional Slashing + +## Changelog + +* 2019-10-15: Initial draft +* 2020-05-25: Removed correlation root slashing +* 2020-07-01: Updated to include S-curve function instead of linear + +## Context + +In Proof of Stake-based chains, centralization of consensus power amongst a small set of validators can cause harm to the network due to increased risk of censorship, liveness failure, fork attacks, etc. However, while this centralization causes a negative externality to the network, it is not directly felt by the delegators contributing towards delegating towards already large validators. We would like a way to pass on the negative externality cost of centralization onto those large validators and their delegators. + +## Decision + +### Design + +To solve this problem, we will implement a procedure called Proportional Slashing. The desire is that the larger a validator is, the more they should be slashed. The first naive attempt is to make a validator's slash percent proportional to their share of consensus voting power. + +```text +slash_amount = k * power // power is the faulting validator's voting power and k is some on-chain constant +``` + +However, this will incentivize validators with large amounts of stake to split up their voting power amongst accounts (sybil attack), so that if they fault, they all get slashed at a lower percent. The solution to this is to take into account not just a validator's own voting percentage, but also the voting percentage of all the other validators who get slashed in a specified time frame. + +```text +slash_amount = k * (power_1 + power_2 + ... + power_n) // where power_i is the voting power of the ith validator faulting in the specified time frame and k is some on-chain constant +``` + +Now, if someone splits a validator of 10% into two validators of 5% each which both fault, then they both fault in the same time frame, they both will get slashed at the sum 10% amount. + +However in practice, we likely don't want a linear relation between amount of stake at fault, and the percentage of stake to slash. In particular, solely 5% of stake double signing effectively did nothing to majorly threaten security, whereas 30% of stake being at fault clearly merits a large slashing factor, due to being very close to the point at which Tendermint security is threatened. A linear relation would require a factor of 6 gap between these two, whereas the difference in risk posed to the network is much larger. We propose using S-curves (formally [logistic functions](https://en.wikipedia.org/wiki/Logistic_function) to solve this). S-Curves capture the desired criterion quite well. They allow the slashing factor to be minimal for small values, and then grow very rapidly near some threshold point where the risk posed becomes notable. + +#### Parameterization + +This requires parameterizing a logistic function. It is very well understood how to parameterize this. It has four parameters: + +1) A minimum slashing factor +2) A maximum slashing factor +3) The inflection point of the S-curve (essentially where do you want to center the S) +4) The rate of growth of the S-curve (How elongated is the S) + +#### Correlation across non-sybil validators + +One will note, that this model doesn't differentiate between multiple validators run by the same operators vs validators run by different operators. This can be seen as an additional benefit in fact. It incentivizes validators to differentiate their setups from other validators, to avoid having correlated faults with them or else they risk a higher slash. So for example, operators should avoid using the same popular cloud hosting platforms or using the same Staking as a Service providers. This will lead to a more resilient and decentralized network. + +#### Griefing + +Griefing, the act of intentionally getting oneself slashed in order to make another's slash worse, could be a concern here. However, using the protocol described here, the attacker also gets equally impacted by the grief as the victim, so it would not provide much benefit to the griefer. + +### Implementation + +In the slashing module, we will add two queues that will track all of the recent slash events. For double sign faults, we will define "recent slashes" as ones that have occurred within the last `unbonding period`. For liveness faults, we will define "recent slashes" as ones that have occurred withing the last `jail period`. + +```go +type SlashEvent struct { + Address sdk.ValAddress + ValidatorVotingPercent sdk.Dec + SlashedSoFar sdk.Dec +} +``` + +These slash events will be pruned from the queue once they are older than their respective "recent slash period". + +Whenever a new slash occurs, a `SlashEvent` struct is created with the faulting validator's voting percent and a `SlashedSoFar` of 0. Because recent slash events are pruned before the unbonding period and unjail period expires, it should not be possible for the same validator to have multiple SlashEvents in the same Queue at the same time. + +We then will iterate over all the SlashEvents in the queue, adding their `ValidatorVotingPercent` to calculate the new percent to slash all the validators in the queue at, using the "Square of Sum of Roots" formula introduced above. + +Once we have the `NewSlashPercent`, we then iterate over all the `SlashEvent`s in the queue once again, and if `NewSlashPercent > SlashedSoFar` for that SlashEvent, we call the `staking.Slash(slashEvent.Address, slashEvent.Power, Math.Min(Math.Max(minSlashPercent, NewSlashPercent - SlashedSoFar), maxSlashPercent)` (we pass in the power of the validator before any slashes occurred, so that we slash the right amount of tokens). We then set `SlashEvent.SlashedSoFar` amount to `NewSlashPercent`. + +## Status + +Proposed + +## Consequences + +### Positive + +* Increases decentralization by disincentivizing delegating to large validators +* Incentivizes Decorrelation of Validators +* More severely punishes attacks than accidental faults +* More flexibility in slashing rates parameterization + +### Negative + +* More computationally expensive than current implementation. Will require more data about "recent slashing events" to be stored on chain. diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-016-validator-consensus-key-rotation.md b/versioned_docs/version-0.47/integrate/architecture/adr-016-validator-consensus-key-rotation.md new file mode 100644 index 000000000..0510c2b9b --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-016-validator-consensus-key-rotation.md @@ -0,0 +1,125 @@ +# ADR 016: Validator Consensus Key Rotation + +## Changelog + +* 2019 Oct 23: Initial draft +* 2019 Nov 28: Add key rotation fee + +## Context + +Validator consensus key rotation feature has been discussed and requested for a long time, for the sake of safer validator key management policy (e.g. https://github.com/tendermint/tendermint/issues/1136). So, we suggest one of the simplest form of validator consensus key rotation implementation mostly onto Cosmos SDK. + +We don't need to make any update on consensus logic in Tendermint because Tendermint does not have any mapping information of consensus key and validator operator key, meaning that from Tendermint point of view, a consensus key rotation of a validator is simply a replacement of a consensus key to another. + +Also, it should be noted that this ADR includes only the simplest form of consensus key rotation without considering multiple consensus keys concept. Such multiple consensus keys concept shall remain a long term goal of Tendermint and Cosmos SDK. + +## Decision + +### Pseudo procedure for consensus key rotation + +* create new random consensus key. +* create and broadcast a transaction with a `MsgRotateConsPubKey` that states the new consensus key is now coupled with the validator operator with signature from the validator's operator key. +* old consensus key becomes unable to participate on consensus immediately after the update of key mapping state on-chain. +* start validating with new consensus key. +* validators using HSM and KMS should update the consensus key in HSM to use the new rotated key after the height `h` when `MsgRotateConsPubKey` committed to the blockchain. + +### Considerations + +* consensus key mapping information management strategy + * store history of each key mapping changes in the kvstore. + * the state machine can search corresponding consensus key paired with given validator operator for any arbitrary height in a recent unbonding period. + * the state machine does not need any historical mapping information which is past more than unbonding period. +* key rotation costs related to LCD and IBC + * LCD and IBC will have traffic/computation burden when there exists frequent power changes + * In current Tendermint design, consensus key rotations are seen as power changes from LCD or IBC perspective + * Therefore, to minimize unnecessary frequent key rotation behavior, we limited maximum number of rotation in recent unbonding period and also applied exponentially increasing rotation fee +* limits + * a validator cannot rotate its consensus key more than `MaxConsPubKeyRotations` time for any unbonding period, to prevent spam. + * parameters can be decided by governance and stored in genesis file. +* key rotation fee + * a validator should pay `KeyRotationFee` to rotate the consensus key which is calculated as below + * `KeyRotationFee` = (max(`VotingPowerPercentage` *100, 1)* `InitialKeyRotationFee`) * 2^(number of rotations in `ConsPubKeyRotationHistory` in recent unbonding period) +* evidence module + * evidence module can search corresponding consensus key for any height from slashing keeper so that it can decide which consensus key is supposed to be used for given height. +* abci.ValidatorUpdate + * tendermint already has ability to change a consensus key by ABCI communication(`ValidatorUpdate`). + * validator consensus key update can be done via creating new + delete old by change the power to zero. + * therefore, we expect we even do not need to change tendermint codebase at all to implement this feature. +* new genesis parameters in `staking` module + * `MaxConsPubKeyRotations` : maximum number of rotation can be executed by a validator in recent unbonding period. default value 10 is suggested(11th key rotation will be rejected) + * `InitialKeyRotationFee` : the initial key rotation fee when no key rotation has happened in recent unbonding period. default value 1atom is suggested(1atom fee for the first key rotation in recent unbonding period) + +### Workflow + +1. The validator generates a new consensus keypair. +2. The validator generates and signs a `MsgRotateConsPubKey` tx with their operator key and new ConsPubKey + + ```go + type MsgRotateConsPubKey struct { + ValidatorAddress sdk.ValAddress + NewPubKey crypto.PubKey + } + ``` + +3. `handleMsgRotateConsPubKey` gets `MsgRotateConsPubKey`, calls `RotateConsPubKey` with emits event +4. `RotateConsPubKey` + * checks if `NewPubKey` is not duplicated on `ValidatorsByConsAddr` + * checks if the validator is does not exceed parameter `MaxConsPubKeyRotations` by iterating `ConsPubKeyRotationHistory` + * checks if the signing account has enough balance to pay `KeyRotationFee` + * pays `KeyRotationFee` to community fund + * overwrites `NewPubKey` in `validator.ConsPubKey` + * deletes old `ValidatorByConsAddr` + * `SetValidatorByConsAddr` for `NewPubKey` + * Add `ConsPubKeyRotationHistory` for tracking rotation + + ```go + type ConsPubKeyRotationHistory struct { + OperatorAddress sdk.ValAddress + OldConsPubKey crypto.PubKey + NewConsPubKey crypto.PubKey + RotatedHeight int64 + } + ``` + +5. `ApplyAndReturnValidatorSetUpdates` checks if there is `ConsPubKeyRotationHistory` with `ConsPubKeyRotationHistory.RotatedHeight == ctx.BlockHeight()` and if so, generates 2 `ValidatorUpdate` , one for a remove validator and one for create new validator + + ```go + abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(OldConsPubKey), + Power: 0, + } + + abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(NewConsPubKey), + Power: v.ConsensusPower(), + } + ``` + +6. at `previousVotes` Iteration logic of `AllocateTokens`, `previousVote` using `OldConsPubKey` match up with `ConsPubKeyRotationHistory`, and replace validator for token allocation +7. Migrate `ValidatorSigningInfo` and `ValidatorMissedBlockBitArray` from `OldConsPubKey` to `NewConsPubKey` + +* Note : All above features shall be implemented in `staking` module. + +## Status + +Proposed + +## Consequences + +### Positive + +* Validators can immediately or periodically rotate their consensus key to have better security policy +* improved security against Long-Range attacks (https://nearprotocol.com/blog/long-range-attacks-and-a-new-fork-choice-rule) given a validator throws away the old consensus key(s) + +### Negative + +* Slash module needs more computation because it needs to lookup corresponding consensus key of validators for each height +* frequent key rotations will make light client bisection less efficient + +### Neutral + +## References + +* on tendermint repo : https://github.com/tendermint/tendermint/issues/1136 +* on cosmos-sdk repo : https://github.com/cosmos/cosmos-sdk/issues/5231 +* about multiple consensus keys : https://github.com/tendermint/tendermint/issues/1758#issuecomment-545291698 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-017-historical-header-module.md b/versioned_docs/version-0.47/integrate/architecture/adr-017-historical-header-module.md new file mode 100644 index 000000000..573c632c2 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-017-historical-header-module.md @@ -0,0 +1,61 @@ +# ADR 17: Historical Header Module + +## Changelog + +* 26 November 2019: Start of first version +* 2 December 2019: Final draft of first version + +## Context + +In order for the Cosmos SDK to implement the [IBC specification](https://github.com/cosmos/ics), modules within the Cosmos SDK must have the ability to introspect recent consensus states (validator sets & commitment roots) as proofs of these values on other chains must be checked during the handshakes. + +## Decision + +The application MUST store the most recent `n` headers in a persistent store. At first, this store MAY be the current Merklised store. A non-Merklised store MAY be used later as no proofs are necessary. + +The application MUST store this information by storing new headers immediately when handling `abci.RequestBeginBlock`: + +```go +func BeginBlock(ctx sdk.Context, keeper HistoricalHeaderKeeper, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + info := HistoricalInfo{ + Header: ctx.BlockHeader(), + ValSet: keeper.StakingKeeper.GetAllValidators(ctx), // note that this must be stored in a canonical order + } + keeper.SetHistoricalInfo(ctx, ctx.BlockHeight(), info) + n := keeper.GetParamRecentHeadersToStore() + keeper.PruneHistoricalInfo(ctx, ctx.BlockHeight() - n) + // continue handling request +} +``` + +Alternatively, the application MAY store only the hash of the validator set. + +The application MUST make these past `n` committed headers available for querying by Cosmos SDK modules through the `Keeper`'s `GetHistoricalInfo` function. This MAY be implemented in a new module, or it MAY also be integrated into an existing one (likely `x/staking` or `x/ibc`). + +`n` MAY be configured as a parameter store parameter, in which case it could be changed by `ParameterChangeProposal`s, although it will take some blocks for the stored information to catch up if `n` is increased. + +## Status + +Proposed. + +## Consequences + +Implementation of this ADR will require changes to the Cosmos SDK. It will not require changes to Tendermint. + +### Positive + +* Easy retrieval of headers & state roots for recent past heights by modules anywhere in the Cosmos SDK. +* No RPC calls to Tendermint required. +* No ABCI alterations required. + +### Negative + +* Duplicates `n` headers data in Tendermint & the application (additional disk usage) - in the long term, an approach such as [this](https://github.com/tendermint/tendermint/issues/4210) might be preferable. + +### Neutral + +(none known) + +## References + +* [ICS 2: "Consensus state introspection"](https://github.com/cosmos/ibc/tree/master/spec/core/ics-002-client-semantics#consensus-state-introspection) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-018-extendable-voting-period.md b/versioned_docs/version-0.47/integrate/architecture/adr-018-extendable-voting-period.md new file mode 100644 index 000000000..ee238fc35 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-018-extendable-voting-period.md @@ -0,0 +1,66 @@ +# ADR 18: Extendable Voting Periods + +## Changelog + +* 1 January 2020: Start of first version + +## Context + +Currently the voting period for all governance proposals is the same. However, this is suboptimal as all governance proposals do not require the same time period. For more non-contentious proposals, they can be dealt with more efficently with a faster period, while more contentious or complex proposals may need a longer period for extended discussion/consideration. + +## Decision + +We would like to design a mechanism for making the voting period of a governance proposal variable based on the demand of voters. We would like it to be based on the view of the governance participants, rather than just the proposer of a governance proposal (thus, allowing the proposer to select the voting period length is not sufficient). + +However, we would like to avoid the creation of an entire second voting process to determine the length of the voting period, as it just pushed the problem to determining the length of that first voting period. + +Thus, we propose the following mechanism: + +### Params + +* The current gov param `VotingPeriod` is to be replaced by a `MinVotingPeriod` param. This is the default voting period that all governance proposal voting periods start with. +* There is a new gov param called `MaxVotingPeriodExtension`. + +### Mechanism + +There is a new `Msg` type called `MsgExtendVotingPeriod`, which can be sent by any staked account during a proposal's voting period. It allows the sender to unilaterally extend the length of the voting period by `MaxVotingPeriodExtension * sender's share of voting power`. Every address can only call `MsgExtendVotingPeriod` once per proposal. + +So for example, if the `MaxVotingPeriodExtension` is set to 100 Days, then anyone with 1% of voting power can extend the voting power by 1 day. If 33% of voting power has sent the message, the voting period will be extended by 33 days. Thus, if absolutely everyone chooses to extend the voting period, the absolute maximum voting period will be `MinVotingPeriod + MaxVotingPeriodExtension`. + +This system acts as a sort of distributed coordination, where individual stakers choosing to extend or not, allows the system the guage the conentiousness/complexity of the proposal. It is extremely unlikely that many stakers will choose to extend at the exact same time, it allows stakers to view how long others have already extended thus far, to decide whether or not to extend further. + +### Dealing with Unbonding/Redelegation + +There is one thing that needs to be addressed. How to deal with redelegation/unbonding during the voting period. If a staker of 5% calls `MsgExtendVotingPeriod` and then unbonds, does the voting period then decrease by 5 days again? This is not good as it can give people a false sense of how long they have to make their decision. For this reason, we want to design it such that the voting period length can only be extended, not shortened. To do this, the current extension amount is based on the highest percent that voted extension at any time. This is best explained by example: + +1. Let's say 2 stakers of voting power 4% and 3% respectively vote to extend. The voting period will be extended by 7 days. +2. Now the staker of 3% decides to unbond before the end of the voting period. The voting period extension remains 7 days. +3. Now, let's say another staker of 2% voting power decides to extend voting period. There is now 6% of active voting power choosing the extend. The voting power remains 7 days. +4. If a fourth staker of 10% chooses to extend now, there is a total of 16% of active voting power wishing to extend. The voting period will be extended to 16 days. + +### Delegators + +Just like votes in the actual voting period, delegators automatically inherit the extension of their validators. If their validator chooses to extend, their voting power will be used in the validator's extension. However, the delegator is unable to override their validator and "unextend" as that would contradict the "voting power length can only be ratcheted up" principle described in the previous section. However, a delegator may choose the extend using their personal voting power, if their validator has not done so. + +## Status + +Proposed + +## Consequences + +### Positive + +* More complex/contentious governance proposals will have more time to properly digest and deliberate + +### Negative + +* Governance process becomes more complex and requires more understanding to interact with effectively +* Can no longer predict when a governance proposal will end. Can't assume order in which governance proposals will end. + +### Neutral + +* The minimum voting period can be made shorter + +## References + +* [Cosmos Forum post where idea first originated](https://forum.cosmos.network/t/proposal-draft-reduce-governance-voting-period-to-7-days/3032/9) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-019-protobuf-state-encoding.md b/versioned_docs/version-0.47/integrate/architecture/adr-019-protobuf-state-encoding.md new file mode 100644 index 000000000..5ad1b953e --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-019-protobuf-state-encoding.md @@ -0,0 +1,379 @@ +# ADR 019: Protocol Buffer State Encoding + +## Changelog + +* 2020 Feb 15: Initial Draft +* 2020 Feb 24: Updates to handle messages with interface fields +* 2020 Apr 27: Convert usages of `oneof` for interfaces to `Any` +* 2020 May 15: Describe `cosmos_proto` extensions and amino compatibility +* 2020 Dec 4: Move and rename `MarshalAny` and `UnmarshalAny` into the `codec.Codec` interface. +* 2021 Feb 24: Remove mentions of `HybridCodec`, which has been abandoned in [#6843](https://github.com/cosmos/cosmos-sdk/pull/6843). + +## Status + +Accepted + +## Context + +Currently, the Cosmos SDK utilizes [go-amino](https://github.com/tendermint/go-amino/) for binary +and JSON object encoding over the wire bringing parity between logical objects and persistence objects. + +From the Amino docs: + +> Amino is an object encoding specification. It is a subset of Proto3 with an extension for interface +> support. See the [Proto3 spec](https://developers.google.com/protocol-buffers/docs/proto3) for more +> information on Proto3, which Amino is largely compatible with (but not with Proto2). +> +> The goal of the Amino encoding protocol is to bring parity into logic objects and persistence objects. + +Amino also aims to have the following goals (not a complete list): + +* Binary bytes must be decode-able with a schema. +* Schema must be upgradeable. +* The encoder and decoder logic must be reasonably simple. + +However, we believe that Amino does not fulfill these goals completely and does not fully meet the +needs of a truly flexible cross-language and multi-client compatible encoding protocol in the Cosmos SDK. +Namely, Amino has proven to be a big pain-point in regards to supporting object serialization across +clients written in various languages while providing virtually little in the way of true backwards +compatibility and upgradeability. Furthermore, through profiling and various benchmarks, Amino has +been shown to be an extremely large performance bottleneck in the Cosmos SDK 1. This is +largely reflected in the performance of simulations and application transaction throughput. + +Thus, we need to adopt an encoding protocol that meets the following criteria for state serialization: + +* Language agnostic +* Platform agnostic +* Rich client support and thriving ecosystem +* High performance +* Minimal encoded message size +* Codegen-based over reflection-based +* Supports backward and forward compatibility + +Note, migrating away from Amino should be viewed as a two-pronged approach, state and client encoding. +This ADR focuses on state serialization in the Cosmos SDK state machine. A corresponding ADR will be +made to address client-side encoding. + +## Decision + +We will adopt [Protocol Buffers](https://developers.google.com/protocol-buffers) for serializing +persisted structured data in the Cosmos SDK while providing a clean mechanism and developer UX for +applications wishing to continue to use Amino. We will provide this mechanism by updating modules to +accept a codec interface, `Marshaler`, instead of a concrete Amino codec. Furthermore, the Cosmos SDK +will provide two concrete implementations of the `Marshaler` interface: `AminoCodec` and `ProtoCodec`. + +* `AminoCodec`: Uses Amino for both binary and JSON encoding. +* `ProtoCodec`: Uses Protobuf for both binary and JSON encoding. + +Modules will use whichever codec that is instantiated in the app. By default, the Cosmos SDK's `simapp` +instantiates a `ProtoCodec` as the concrete implementation of `Marshaler`, inside the `MakeTestEncodingConfig` +function. This can be easily overwritten by app developers if they so desire. + +The ultimate goal will be to replace Amino JSON encoding with Protobuf encoding and thus have +modules accept and/or extend `ProtoCodec`. Until then, Amino JSON is still provided for legacy use-cases. +A handful of places in the Cosmos SDK still have Amino JSON hardcoded, such as the Legacy API REST endpoints +and the `x/params` store. They are planned to be converted to Protobuf in a gradual manner. + +### Module Codecs + +Modules that do not require the ability to work with and serialize interfaces, the path to Protobuf +migration is pretty straightforward. These modules are to simply migrate any existing types that +are encoded and persisted via their concrete Amino codec to Protobuf and have their keeper accept a +`Marshaler` that will be a `ProtoCodec`. This migration is simple as things will just work as-is. + +Note, any business logic that needs to encode primitive types like `bool` or `int64` should use +[gogoprotobuf](https://github.com/cosmos/gogoproto) Value types. + +Example: + +```go + ts, err := gogotypes.TimestampProto(completionTime) + if err != nil { + // ... + } + + bz := cdc.MustMarshal(ts) +``` + +However, modules can vary greatly in purpose and design and so we must support the ability for modules +to be able to encode and work with interfaces (e.g. `Account` or `Content`). For these modules, they +must define their own codec interface that extends `Marshaler`. These specific interfaces are unique +to the module and will contain method contracts that know how to serialize the needed interfaces. + +Example: + +```go +// x/auth/types/codec.go + +type Codec interface { + codec.Codec + + MarshalAccount(acc exported.Account) ([]byte, error) + UnmarshalAccount(bz []byte) (exported.Account, error) + + MarshalAccountJSON(acc exported.Account) ([]byte, error) + UnmarshalAccountJSON(bz []byte) (exported.Account, error) +} +``` + +### Usage of `Any` to encode interfaces + +In general, module-level .proto files should define messages which encode interfaces +using [`google.protobuf.Any`](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). +After [extension discussion](https://github.com/cosmos/cosmos-sdk/issues/6030), +this was chosen as the preferred alternative to application-level `oneof`s +as in our original protobuf design. The arguments in favor of `Any` can be +summarized as follows: + +* `Any` provides a simpler, more consistent client UX for dealing with +interfaces than app-level `oneof`s that will need to be coordinated more +carefully across applications. Creating a generic transaction +signing library using `oneof`s may be cumbersome and critical logic may need +to be reimplemented for each chain +* `Any` provides more resistance against human error than `oneof` +* `Any` is generally simpler to implement for both modules and apps + +The main counter-argument to using `Any` centers around its additional space +and possibly performance overhead. The space overhead could be dealt with using +compression at the persistence layer in the future and the performance impact +is likely to be small. Thus, not using `Any` is seem as a pre-mature optimization, +with user experience as the higher order concern. + +Note, that given the Cosmos SDK's decision to adopt the `Codec` interfaces described +above, apps can still choose to use `oneof` to encode state and transactions +but it is not the recommended approach. If apps do choose to use `oneof`s +instead of `Any` they will likely lose compatibility with client apps that +support multiple chains. Thus developers should think carefully about whether +they care more about what is possibly a pre-mature optimization or end-user +and client developer UX. + +### Safe usage of `Any` + +By default, the [gogo protobuf implementation of `Any`](https://pkg.go.dev/github.com/cosmos/gogoproto/types) +uses [global type registration]( https://github.com/cosmos/gogoproto/blob/master/proto/properties.go#L540) +to decode values packed in `Any` into concrete +go types. This introduces a vulnerability where any malicious module +in the dependency tree could register a type with the global protobuf registry +and cause it to be loaded and unmarshaled by a transaction that referenced +it in the `type_url` field. + +To prevent this, we introduce a type registration mechanism for decoding `Any` +values into concrete types through the `InterfaceRegistry` interface which +bears some similarity to type registration with Amino: + +```go +type InterfaceRegistry interface { + // RegisterInterface associates protoName as the public name for the + // interface passed in as iface + // Ex: + // registry.RegisterInterface("cosmos_sdk.Msg", (*sdk.Msg)(nil)) + RegisterInterface(protoName string, iface interface{}) + + // RegisterImplementations registers impls as a concrete implementations of + // the interface iface + // Ex: + // registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSend{}, &MsgMultiSend{}) + RegisterImplementations(iface interface{}, impls ...proto.Message) + +} +``` + +In addition to serving as a whitelist, `InterfaceRegistry` can also serve +to communicate the list of concrete types that satisfy an interface to clients. + +In .proto files: + +* fields which accept interfaces should be annotated with `cosmos_proto.accepts_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` +* interface implementations should be annotated with `cosmos_proto.implements_interface` +using the same full-qualified name passed as `protoName` to `InterfaceRegistry.RegisterInterface` + +In the future, `protoName`, `cosmos_proto.accepts_interface`, `cosmos_proto.implements_interface` +may be used via code generation, reflection &/or static linting. + +The same struct that implements `InterfaceRegistry` will also implement an +interface `InterfaceUnpacker` to be used for unpacking `Any`s: + +```go +type InterfaceUnpacker interface { + // UnpackAny unpacks the value in any to the interface pointer passed in as + // iface. Note that the type in any must have been registered with + // RegisterImplementations as a concrete type for that interface + // Ex: + // var msg sdk.Msg + // err := ctx.UnpackAny(any, &msg) + // ... + UnpackAny(any *Any, iface interface{}) error +} +``` + +Note that `InterfaceRegistry` usage does not deviate from standard protobuf +usage of `Any`, it just introduces a security and introspection layer for +golang usage. + +`InterfaceRegistry` will be a member of `ProtoCodec` +described above. In order for modules to register interface types, app modules +can optionally implement the following interface: + +```go +type InterfaceModule interface { + RegisterInterfaceTypes(InterfaceRegistry) +} +``` + +The module manager will include a method to call `RegisterInterfaceTypes` on +every module that implements it in order to populate the `InterfaceRegistry`. + +### Using `Any` to encode state + +The Cosmos SDK will provide support methods `MarshalInterface` and `UnmarshalInterface` to hide a complexity of wrapping interface types into `Any` and allow easy serialization. + +```go +import "github.com/cosmos/cosmos-sdk/codec" + +// note: eviexported.Evidence is an interface type +func MarshalEvidence(cdc codec.BinaryCodec, e eviexported.Evidence) ([]byte, error) { + return cdc.MarshalInterface(e) +} + +func UnmarshalEvidence(cdc codec.BinaryCodec, bz []byte) (eviexported.Evidence, error) { + var evi eviexported.Evidence + err := cdc.UnmarshalInterface(&evi, bz) + return err, nil +} +``` + +### Using `Any` in `sdk.Msg`s + +A similar concept is to be applied for messages that contain interfaces fields. +For example, we can define `MsgSubmitEvidence` as follows where `Evidence` is +an interface: + +```protobuf +// x/evidence/types/types.proto + +message MsgSubmitEvidence { + bytes submitter = 1 + [ + (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress" + ]; + google.protobuf.Any evidence = 2; +} +``` + +Note that in order to unpack the evidence from `Any` we do need a reference to +`InterfaceRegistry`. In order to reference evidence in methods like +`ValidateBasic` which shouldn't have to know about the `InterfaceRegistry`, we +introduce an `UnpackInterfaces` phase to deserialization which unpacks +interfaces before they're needed. + +### Unpacking Interfaces + +To implement the `UnpackInterfaces` phase of deserialization which unpacks +interfaces wrapped in `Any` before they're needed, we create an interface +that `sdk.Msg`s and other types can implement: + +```go +type UnpackInterfacesMessage interface { + UnpackInterfaces(InterfaceUnpacker) error +} +``` + +We also introduce a private `cachedValue interface{}` field onto the `Any` +struct itself with a public getter `GetCachedValue() interface{}`. + +The `UnpackInterfaces` method is to be invoked during message deserialization right +after `Unmarshal` and any interface values packed in `Any`s will be decoded +and stored in `cachedValue` for reference later. + +Then unpacked interface values can safely be used in any code afterwards +without knowledge of the `InterfaceRegistry` +and messages can introduce a simple getter to cast the cached value to the +correct interface type. + +This has the added benefit that unmarshaling of `Any` values only happens once +during initial deserialization rather than every time the value is read. Also, +when `Any` values are first packed (for instance in a call to +`NewMsgSubmitEvidence`), the original interface value is cached so that +unmarshaling isn't needed to read it again. + +`MsgSubmitEvidence` could implement `UnpackInterfaces`, plus a convenience getter +`GetEvidence` as follows: + +```go +func (msg MsgSubmitEvidence) UnpackInterfaces(ctx sdk.InterfaceRegistry) error { + var evi eviexported.Evidence + return ctx.UnpackAny(msg.Evidence, *evi) +} + +func (msg MsgSubmitEvidence) GetEvidence() eviexported.Evidence { + return msg.Evidence.GetCachedValue().(eviexported.Evidence) +} +``` + +### Amino Compatibility + +Our custom implementation of `Any` can be used transparently with Amino if used +with the proper codec instance. What this means is that interfaces packed within +`Any`s will be amino marshaled like regular Amino interfaces (assuming they +have been registered properly with Amino). + +In order for this functionality to work: + +* **all legacy code must use `*codec.LegacyAmino` instead of `*amino.Codec` which is + now a wrapper which properly handles `Any`** +* **all new code should use `Marshaler` which is compatible with both amino and + protobuf** +* Also, before v0.39, `codec.LegacyAmino` will be renamed to `codec.LegacyAmino`. + +### Why Wasn't X Chosen Instead + +For a more complete comparison to alternative protocols, see [here](https://codeburst.io/json-vs-protocol-buffers-vs-flatbuffers-a4247f8bda6f). + +### Cap'n Proto + +While [Cap’n Proto](https://capnproto.org/) does seem like an advantageous alternative to Protobuf +due to it's native support for interfaces/generics and built in canonicalization, it does lack the +rich client ecosystem compared to Protobuf and is a bit less mature. + +### FlatBuffers + +[FlatBuffers](https://google.github.io/flatbuffers/) is also a potentially viable alternative, with the +primary difference being that FlatBuffers does not need a parsing/unpacking step to a secondary +representation before you can access data, often coupled with per-object memory allocation. + +However, it would require great efforts into research and full understanding the scope of the migration +and path forward -- which isn't immediately clear. In addition, FlatBuffers aren't designed for +untrusted inputs. + +## Future Improvements & Roadmap + +In the future we may consider a compression layer right above the persistence +layer which doesn't change tx or merkle tree hashes, but reduces the storage +overhead of `Any`. In addition, we may adopt protobuf naming conventions which +make type URLs a bit more concise while remaining descriptive. + +Additional code generation support around the usage of `Any` is something that +could also be explored in the future to make the UX for go developers more +seamless. + +## Consequences + +### Positive + +* Significant performance gains. +* Supports backward and forward type compatibility. +* Better support for cross-language clients. + +### Negative + +* Learning curve required to understand and implement Protobuf messages. +* Slightly larger message size due to use of `Any`, although this could be offset + by a compression layer in the future + +### Neutral + +## References + +1. https://github.com/cosmos/cosmos-sdk/issues/4977 +2. https://github.com/cosmos/cosmos-sdk/issues/5444 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-020-protobuf-transaction-encoding.md b/versioned_docs/version-0.47/integrate/architecture/adr-020-protobuf-transaction-encoding.md new file mode 100644 index 000000000..4c30bb9eb --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-020-protobuf-transaction-encoding.md @@ -0,0 +1,464 @@ +# ADR 020: Protocol Buffer Transaction Encoding + +## Changelog + +* 2020 March 06: Initial Draft +* 2020 March 12: API Updates +* 2020 April 13: Added details on interface `oneof` handling +* 2020 April 30: Switch to `Any` +* 2020 May 14: Describe public key encoding +* 2020 June 08: Store `TxBody` and `AuthInfo` as bytes in `SignDoc`; Document `TxRaw` as broadcast and storage type. +* 2020 August 07: Use ADR 027 for serializing `SignDoc`. +* 2020 August 19: Move sequence field from `SignDoc` to `SignerInfo`, as discussed in [#6966](https://github.com/cosmos/cosmos-sdk/issues/6966). +* 2020 September 25: Remove `PublicKey` type in favor of `secp256k1.PubKey`, `ed25519.PubKey` and `multisig.LegacyAminoPubKey`. +* 2020 October 15: Add `GetAccount` and `GetAccountWithHeight` methods to the `AccountRetriever` interface. +* 2021 Feb 24: The Cosmos SDK does not use Tendermint's `PubKey` interface anymore, but its own `cryptotypes.PubKey`. Updates to reflect this. +* 2021 May 3: Rename `clientCtx.JSONMarshaler` to `clientCtx.JSONCodec`. +* 2021 June 10: Add `clientCtx.Codec: codec.Codec`. + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](./adr-019-protobuf-state-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +Specifically, the client-side migration path primarily includes tx generation and +signing, message construction and routing, in addition to CLI & REST handlers and +business logic (i.e. queriers). + +With this in mind, we will tackle the migration path via two main areas, txs and +querying. However, this ADR solely focuses on transactions. Querying should be +addressed in a future ADR, but it should build off of these proposals. + +Based on detailed discussions ([\#6030](https://github.com/cosmos/cosmos-sdk/issues/6030) +and [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078)), the original +design for transactions was changed substantially from an `oneof` /JSON-signing +approach to the approach described below. + +## Decision + +### Transactions + +Since interface values are encoded with `google.protobuf.Any` in state (see [ADR 019](adr-019-protobuf-state-encoding.md)), +`sdk.Msg`s are encoding with `Any` in transactions. + +One of the main goals of using `Any` to encode interface values is to have a +core set of types which is reused by apps so that +clients can safely be compatible with as many chains as possible. + +It is one of the goals of this specification to provide a flexible cross-chain transaction +format that can serve a wide variety of use cases without breaking client +compatibility. + +In order to facilitate signing, transactions are separated into `TxBody`, +which will be re-used by `SignDoc` below, and `signatures`: + +```protobuf +// types/types.proto +package cosmos_sdk.v1; + +message Tx { + TxBody body = 1; + AuthInfo auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +// A variant of Tx that pins the signer's exact binary represenation of body and +// auth_info. This is used for signing, broadcasting and verification. The binary +// `serialize(tx: TxRaw)` is stored in Tendermint and the hash `sha256(serialize(tx: TxRaw))` +// becomes the "txhash", commonly used as the transaction ID. +message TxRaw { + // A protobuf serialization of a TxBody that matches the representation in SignDoc. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in SignDoc. + bytes auth_info = 2; + // A list of signatures that matches the length and order of AuthInfo's signer_infos to + // allow connecting signature meta information like public key and signing mode by position. + repeated bytes signatures = 3; +} + +message TxBody { + // A list of messages to be executed. The required signers of those messages define + // the number and order of elements in AuthInfo's signer_infos and Tx's signatures. + // Each required signer address is added to the list only the first time it occurs. + // + // By convention, the first required signer (usually from the first message) is referred + // to as the primary signer and pays the fee for the whole transaction. + repeated google.protobuf.Any messages = 1; + string memo = 2; + int64 timeout_height = 3; + repeated google.protobuf.Any extension_options = 1023; +} + +message AuthInfo { + // This list defines the signing modes for the required signers. The number + // and order of elements must match the required signers from TxBody's messages. + // The first element is the primary signer and the one which pays the fee. + repeated SignerInfo signer_infos = 1; + // The fee can be calculated based on the cost of evaluating the body and doing signature verification of the signers. This can be estimated via simulation. + Fee fee = 2; +} + +message SignerInfo { + // The public key is optional for accounts that already exist in state. If unset, the + // verifier can use the required signer address for this position and lookup the public key. + google.protobuf.Any public_key = 1; + // ModeInfo describes the signing mode of the signer and is a nested + // structure to support nested multisig pubkey's + ModeInfo mode_info = 2; + // sequence is the sequence of the account, which describes the + // number of committed transactions signed by a given address. It is used to prevent + // replay attacks. + uint64 sequence = 3; +} + +message ModeInfo { + oneof sum { + Single single = 1; + Multi multi = 2; + } + + // Single is the mode info for a single signer. It is structured as a message + // to allow for additional fields such as locale for SIGN_MODE_TEXTUAL in the future + message Single { + SignMode mode = 1; + } + + // Multi is the mode info for a multisig public key + message Multi { + // bitarray specifies which keys within the multisig are signing + CompactBitArray bitarray = 1; + // mode_infos is the corresponding modes of the signers of the multisig + // which could include nested multisig public keys + repeated ModeInfo mode_infos = 2; + } +} + +enum SignMode { + SIGN_MODE_UNSPECIFIED = 0; + + SIGN_MODE_DIRECT = 1; + + SIGN_MODE_TEXTUAL = 2; + + SIGN_MODE_LEGACY_AMINO_JSON = 127; +} +``` + +As will be discussed below, in order to include as much of the `Tx` as possible +in the `SignDoc`, `SignerInfo` is separated from signatures so that only the +raw signatures themselves live outside of what is signed over. + +Because we are aiming for a flexible, extensible cross-chain transaction +format, new transaction processing options should be added to `TxBody` as soon +those use cases are discovered, even if they can't be implemented yet. + +Because there is coordination overhead in this, `TxBody` includes an +`extension_options` field which can be used for any transaction processing +options that are not already covered. App developers should, nevertheless, +attempt to upstream important improvements to `Tx`. + +### Signing + +All of the signing modes below aim to provide the following guarantees: + +* **No Malleability**: `TxBody` and `AuthInfo` cannot change once the transaction + is signed +* **Predictable Gas**: if I am signing a transaction where I am paying a fee, + the final gas is fully dependent on what I am signing + +These guarantees give the maximum amount confidence to message signers that +manipulation of `Tx`s by intermediaries can't result in any meaningful changes. + +#### `SIGN_MODE_DIRECT` + +The "direct" signing behavior is to sign the raw `TxBody` bytes as broadcast over +the wire. This has the advantages of: + +* requiring the minimum additional client capabilities beyond a standard protocol + buffers implementation +* leaving effectively zero holes for transaction malleability (i.e. there are no + subtle differences between the signing and encoding formats which could + potentially be exploited by an attacker) + +Signatures are structured using the `SignDoc` below which reuses the serialization of +`TxBody` and `AuthInfo` and only adds the fields which are needed for signatures: + +```protobuf +// types/types.proto +message SignDoc { + // A protobuf serialization of a TxBody that matches the representation in TxRaw. + bytes body = 1; + // A protobuf serialization of an AuthInfo that matches the representation in TxRaw. + bytes auth_info = 2; + string chain_id = 3; + uint64 account_number = 4; +} +``` + +In order to sign in the default mode, clients take the following steps: + +1. Serialize `TxBody` and `AuthInfo` using any valid protobuf implementation. +2. Create a `SignDoc` and serialize it using [ADR 027](./adr-027-deterministic-protobuf-serialization.md). +3. Sign the encoded `SignDoc` bytes. +4. Build a `TxRaw` and serialize it for broadcasting. + +Signature verification is based on comparing the raw `TxBody` and `AuthInfo` +bytes encoded in `TxRaw` not based on any ["canonicalization"](https://github.com/regen-network/canonical-proto3) +algorithm which creates added complexity for clients in addition to preventing +some forms of upgradeability (to be addressed later in this document). + +Signature verifiers do: + +1. Deserialize a `TxRaw` and pull out `body` and `auth_info`. +2. Create a list of required signer addresses from the messages. +3. For each required signer: + * Pull account number and sequence from the state. + * Obtain the public key either from state or `AuthInfo`'s `signer_infos`. + * Create a `SignDoc` and serialize it using [ADR 027](./adr-027-deterministic-protobuf-serialization.md). + * Verify the signature at the same list position against the serialized `SignDoc`. + +#### `SIGN_MODE_LEGACY_AMINO` + +In order to support legacy wallets and exchanges, Amino JSON will be temporarily +supported transaction signing. Once wallets and exchanges have had a +chance to upgrade to protobuf based signing, this option will be disabled. In +the meantime, it is foreseen that disabling the current Amino signing would cause +too much breakage to be feasible. Note that this is mainly a requirement of the +Cosmos Hub and other chains may choose to disable Amino signing immediately. + +Legacy clients will be able to sign a transaction using the current Amino +JSON format and have it encoded to protobuf using the REST `/tx/encode` +endpoint before broadcasting. + +#### `SIGN_MODE_TEXTUAL` + +As was discussed extensively in [\#6078](https://github.com/cosmos/cosmos-sdk/issues/6078), +there is a desire for a human-readable signing encoding, especially for hardware +wallets like the [Ledger](https://www.ledger.com) which display +transaction contents to users before signing. JSON was an attempt at this but +falls short of the ideal. + +`SIGN_MODE_TEXTUAL` is intended as a placeholder for a human-readable +encoding which will replace Amino JSON. This new encoding should be even more +focused on readability than JSON, possibly based on formatting strings like +[MessageFormat](http://userguide.icu-project.org/formatparse/messages). + +In order to ensure that the new human-readable format does not suffer from +transaction malleability issues, `SIGN_MODE_TEXTUAL` +requires that the _human-readable bytes are concatenated with the raw `SignDoc`_ +to generate sign bytes. + +Multiple human-readable formats (maybe even localized messages) may be supported +by `SIGN_MODE_TEXTUAL` when it is implemented. + +### Unknown Field Filtering + +Unknown fields in protobuf messages should generally be rejected by transaction +processors because: + +* important data may be present in the unknown fields, that if ignored, will + cause unexpected behavior for clients +* they present a malleability vulnerability where attackers can bloat tx size + by adding random uninterpreted data to unsigned content (i.e. the master `Tx`, + not `TxBody`) + +There are also scenarios where we may choose to safely ignore unknown fields +(https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-624400188) to +provide graceful forwards compatibility with newer clients. + +We propose that field numbers with bit 11 set (for most use cases this is +the range of 1024-2047) be considered non-critical fields that can safely be +ignored if unknown. + +To handle this we will need a unknown field filter that: + +* always rejects unknown fields in unsigned content (i.e. top-level `Tx` and + unsigned parts of `AuthInfo` if present based on the signing mode) +* rejects unknown fields in all messages (including nested `Any`s) other than + fields with bit 11 set + +This will likely need to be a custom protobuf parser pass that takes message bytes +and `FileDescriptor`s and returns a boolean result. + +### Public Key Encoding + +Public keys in the Cosmos SDK implement the `cryptotypes.PubKey` interface. +We propose to use `Any` for protobuf encoding as we are doing with other interfaces (for example, in `BaseAccount.PubKey` and `SignerInfo.PublicKey`). +The following public keys are implemented: secp256k1, secp256r1, ed25519 and legacy-multisignature. + +Ex: + +```protobuf +message PubKey { + bytes key = 1; +} +``` + +`multisig.LegacyAminoPubKey` has an array of `Any`'s member to support any +protobuf public key type. + +Apps should only attempt to handle a registered set of public keys that they +have tested. The provided signature verification ante handler decorators will +enforce this. + +### CLI & REST + +Currently, the REST and CLI handlers encode and decode types and txs via Amino +JSON encoding using a concrete Amino codec. Being that some of the types dealt with +in the client can be interfaces, similar to how we described in [ADR 019](./adr-019-protobuf-state-encoding.md), +the client logic will now need to take a codec interface that knows not only how +to handle all the types, but also knows how to generate transactions, signatures, +and messages. + +```go +type AccountRetriever interface { + GetAccount(clientCtx Context, addr sdk.AccAddress) (client.Account, error) + GetAccountWithHeight(clientCtx Context, addr sdk.AccAddress) (client.Account, int64, error) + EnsureExists(clientCtx client.Context, addr sdk.AccAddress) error + GetAccountNumberSequence(clientCtx client.Context, addr sdk.AccAddress) (uint64, uint64, error) +} + +type Generator interface { + NewTx() TxBuilder + NewFee() ClientFee + NewSignature() ClientSignature + MarshalTx(tx types.Tx) ([]byte, error) +} + +type TxBuilder interface { + GetTx() sdk.Tx + + SetMsgs(...sdk.Msg) error + GetSignatures() []sdk.Signature + SetSignatures(...sdk.Signature) + GetFee() sdk.Fee + SetFee(sdk.Fee) + GetMemo() string + SetMemo(string) +} +``` + +We then update `Context` to have new fields: `Codec`, `TxGenerator`, +and `AccountRetriever`, and we update `AppModuleBasic.GetTxCmd` to take +a `Context` which should have all of these fields pre-populated. + +Each client method should then use one of the `Init` methods to re-initialize +the pre-populated `Context`. `tx.GenerateOrBroadcastTx` can be used to +generate or broadcast a transaction. For example: + +```go +import "github.com/spf13/cobra" +import "github.com/cosmos/cosmos-sdk/client" +import "github.com/cosmos/cosmos-sdk/client/tx" + +func NewCmdDoSomething(clientCtx client.Context) *cobra.Command { + return &cobra.Command{ + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := ctx.InitWithInput(cmd.InOrStdin()) + msg := NewSomeMsg{...} + tx.GenerateOrBroadcastTx(clientCtx, msg) + }, + } +} +``` + +## Future Improvements + +### `SIGN_MODE_TEXTUAL` specification + +A concrete specification and implementation of `SIGN_MODE_TEXTUAL` is intended +as a near-term future improvement so that the ledger app and other wallets +can gracefully transition away from Amino JSON. + +### `SIGN_MODE_DIRECT_AUX` + +(\*Documented as option (3) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933) + +We could add a mode `SIGN_MODE_DIRECT_AUX` +to support scenarios where multiple signatures +are being gathered into a single transaction but the message composer does not +yet know which signatures will be included in the final transaction. For instance, +I may have a 3/5 multisig wallet and want to send a `TxBody` to all 5 +signers to see who signs first. As soon as I have 3 signatures then I will go +ahead and build the full transaction. + +With `SIGN_MODE_DIRECT`, each signer needs +to sign the full `AuthInfo` which includes the full list of all signers and +their signing modes, making the above scenario very hard. + +`SIGN_MODE_DIRECT_AUX` would allow "auxiliary" signers to create their signature +using only `TxBody` and their own `PublicKey`. This allows the full list of +signers in `AuthInfo` to be delayed until signatures have been collected. + +An "auxiliary" signer is any signer besides the primary signer who is paying +the fee. For the primary signer, the full `AuthInfo` is actually needed to calculate gas and fees +because that is dependent on how many signers and which key types and signing +modes they are using. Auxiliary signers, however, do not need to worry about +fees or gas and thus can just sign `TxBody`. + +To generate a signature in `SIGN_MODE_DIRECT_AUX` these steps would be followed: + +1. Encode `SignDocAux` (with the same requirement that fields must be serialized + in order): + + ```protobuf + // types/types.proto + message SignDocAux { + bytes body_bytes = 1; + // PublicKey is included in SignDocAux : + // 1. as a special case for multisig public keys. For multisig public keys, + // the signer should use the top-level multisig public key they are signing + // against, not their own public key. This is to prevent against a form + // of malleability where a signature could be taken out of context of the + // multisig key that was intended to be signed for + // 2. to guard against scenario where configuration information is encoded + // in public keys (it has been proposed) such that two keys can generate + // the same signature but have different security properties + // + // By including it here, the composer of AuthInfo cannot reference the + // a public key variant the signer did not intend to use + PublicKey public_key = 2; + string chain_id = 3; + uint64 account_number = 4; + } + ``` + +2. Sign the encoded `SignDocAux` bytes +3. Send their signature and `SignerInfo` to primary signer who will then + sign and broadcast the final transaction (with `SIGN_MODE_DIRECT` and `AuthInfo` + added) once enough signatures have been collected + +### `SIGN_MODE_DIRECT_RELAXED` + +(_Documented as option (1)(a) in https://github.com/cosmos/cosmos-sdk/issues/6078#issuecomment-628026933_) + +This is a variation of `SIGN_MODE_DIRECT` where multiple signers wouldn't need to +coordinate public keys and signing modes in advance. It would involve an alternate +`SignDoc` similar to `SignDocAux` above with fee. This could be added in the future +if client developers found the burden of collecting public keys and modes in advance +too burdensome. + +## Consequences + +### Positive + +* Significant performance gains. +* Supports backward and forward type compatibility. +* Better support for cross-language clients. +* Multiple signing modes allow for greater protocol evolution + +### Negative + +* `google.protobuf.Any` type URLs increase transaction size although the effect + may be negligible or compression may be able to mitigate it. + +### Neutral + +## References diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-021-protobuf-query-encoding.md b/versioned_docs/version-0.47/integrate/architecture/adr-021-protobuf-query-encoding.md new file mode 100644 index 000000000..a90e807d5 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-021-protobuf-query-encoding.md @@ -0,0 +1,256 @@ +# ADR 021: Protocol Buffer Query Encoding + +## Changelog + +* 2020 March 27: Initial Draft + +## Status + +Accepted + +## Context + +This ADR is a continuation of the motivation, design, and context established in +[ADR 019](./adr-019-protobuf-state-encoding.md) and +[ADR 020](./adr-020-protobuf-transaction-encoding.md), namely, we aim to design the +Protocol Buffer migration path for the client-side of the Cosmos SDK. + +This ADR continues from [ADD 020](./adr-020-protobuf-transaction-encoding.md) +to specify the encoding of queries. + +## Decision + +### Custom Query Definition + +Modules define custom queries through a protocol buffers `service` definition. +These `service` definitions are generally associated with and used by the +GRPC protocol. However, the protocol buffers specification indicates that +they can be used more generically by any request/response protocol that uses +protocol buffer encoding. Thus, we can use `service` definitions for specifying +custom ABCI queries and even reuse a substantial amount of the GRPC infrastructure. + +Each module with custom queries should define a service canonically named `Query`: + +```protobuf +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { } +} +``` + +#### Handling of Interface Types + +Modules that use interface types and need true polymorphism generally force a +`oneof` up to the app-level that provides the set of concrete implementations of +that interface that the app supports. While app's are welcome to do the same for +queries and implement an app-level query service, it is recommended that modules +provide query methods that expose these interfaces via `google.protobuf.Any`. +There is a concern on the transaction level that the overhead of `Any` is too +high to justify its usage. However for queries this is not a concern, and +providing generic module-level queries that use `Any` does not preclude apps +from also providing app-level queries that return use the app-level `oneof`s. + +A hypothetical example for the `gov` module would look something like: + +```protobuf +// x/gov/types/types.proto + +import "google/protobuf/any.proto"; + +service Query { + rpc GetProposal(GetProposalParams) returns (AnyProposal) { } +} + +message AnyProposal { + ProposalBase base = 1; + google.protobuf.Any content = 2; +} +``` + +### Custom Query Implementation + +In order to implement the query service, we can reuse the existing [gogo protobuf](https://github.com/cosmos/gogoproto) +grpc plugin, which for a service named `Query` generates an interface named +`QueryServer` as below: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +The custom queries for our module are implemented by implementing this interface. + +The first parameter in this generated interface is a generic `context.Context`, +whereas querier methods generally need an instance of `sdk.Context` to read +from the store. Since arbitrary values can be attached to `context.Context` +using the `WithValue` and `Value` methods, the Cosmos SDK should provide a function +`sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +An example implementation of `QueryBalance` for the bank module as above would +look something like: + +```go +type Querier struct { + Keeper +} + +func (q Querier) QueryBalance(ctx context.Context, params *types.QueryBalanceParams) (*sdk.Coin, error) { + balance := q.GetBalance(sdk.UnwrapSDKContext(ctx), params.Address, params.Denom) + return &balance, nil +} +``` + +### Custom Query Registration and Routing + +Query server implementations as above would be registered with `AppModule`s using +a new method `RegisterQueryService(grpc.Server)` which could be implemented simply +as below: + +```go +// x/bank/module.go +func (am AppModule) RegisterQueryService(server grpc.Server) { + types.RegisterQueryServer(server, keeper.Querier{am.keeper}) +} +``` + +Underneath the hood, a new method `RegisterService(sd *grpc.ServiceDesc, handler interface{})` +will be added to the existing `baseapp.QueryRouter` to add the queries to the custom +query routing table (with the routing method being described below). +The signature for this method matches the existing +`RegisterServer` method on the GRPC `Server` type where `handler` is the custom +query server implementation described above. + +GRPC-like requests are routed by the service name (ex. `cosmos_sdk.x.bank.v1.Query`) +and method name (ex. `QueryBalance`) combined with `/`s to form a full +method name (ex. `/cosmos_sdk.x.bank.v1.Query/QueryBalance`). This gets translated +into an ABCI query as `custom/cosmos_sdk.x.bank.v1.Query/QueryBalance`. Service handlers +registered with `QueryRouter.RegisterService` will be routed this way. + +Beyond the method name, GRPC requests carry a protobuf encoded payload, which maps naturally +to `RequestQuery.Data`, and receive a protobuf encoded response or error. Thus +there is a quite natural mapping of GRPC-like rpc methods to the existing +`sdk.Query` and `QueryRouter` infrastructure. + +This basic specification allows us to reuse protocol buffer `service` definitions +for ABCI custom queries substantially reducing the need for manual decoding and +encoding in query methods. + +### GRPC Protocol Support + +In addition to providing an ABCI query pathway, we can easily provide a GRPC +proxy server that routes requests in the GRPC protocol to ABCI query requests +under the hood. In this way, clients could use their host languages' existing +GRPC implementations to make direct queries against Cosmos SDK app's using +these `service` definitions. In order for this server to work, the `QueryRouter` +on `BaseApp` will need to expose the service handlers registered with +`QueryRouter.RegisterService` to the proxy server implementation. Nodes could +launch the proxy server on a separate port in the same process as the ABCI app +with a command-line flag. + +### REST Queries and Swagger Generation + +[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) is a project that +translates REST calls into GRPC calls using special annotations on service +methods. Modules that want to expose REST queries should add `google.api.http` +annotations to their `rpc` methods as in this example below. + +```protobuf +// x/bank/types/types.proto + +service Query { + rpc QueryBalance(QueryBalanceParams) returns (cosmos_sdk.v1.Coin) { + option (google.api.http) = { + get: "/x/bank/v1/balance/{address}/{denom}" + }; + } + rpc QueryAllBalances(QueryAllBalancesParams) returns (QueryAllBalancesResponse) { + option (google.api.http) = { + get: "/x/bank/v1/balances/{address}" + }; + } +} +``` + +grpc-gateway will work direcly against the GRPC proxy described above which will +translate requests to ABCI queries under the hood. grpc-gateway can also +generate Swagger definitions automatically. + +In the current implementation of REST queries, each module needs to implement +REST queries manually in addition to ABCI querier methods. Using the grpc-gateway +approach, there will be no need to generate separate REST query handlers, just +query servers as described above as grpc-gateway handles the translation of protobuf +to REST as well as Swagger definitions. + +The Cosmos SDK should provide CLI commands for apps to start GRPC gateway either in +a separate process or the same process as the ABCI app, as well as provide a +command for generating grpc-gateway proxy `.proto` files and the `swagger.json` +file. + +### Client Usage + +The gogo protobuf grpc plugin generates client interfaces in addition to server +interfaces. For the `Query` service defined above we would get a `QueryClient` +interface like: + +```go +type QueryClient interface { + QueryBalance(ctx context.Context, in *QueryBalanceParams, opts ...grpc.CallOption) (*types.Coin, error) + QueryAllBalances(ctx context.Context, in *QueryAllBalancesParams, opts ...grpc.CallOption) (*QueryAllBalancesResponse, error) +} +``` + +Via a small patch to gogo protobuf ([gogo/protobuf#675](https://github.com/gogo/protobuf/pull/675)) +we have tweaked the grpc codegen to use an interface rather than concrete type +for the generated client struct. This allows us to also reuse the GRPC infrastructure +for ABCI client queries. + +1Context`will receive a new method`QueryConn`that returns a`ClientConn` +that routes calls to ABCI queries + +Clients (such as CLI methods) will then be able to call query methods like this: + +```go +clientCtx := client.NewContext() +queryClient := types.NewQueryClient(clientCtx.QueryConn()) +params := &types.QueryBalanceParams{addr, denom} +result, err := queryClient.QueryBalance(gocontext.Background(), params) +``` + +### Testing + +Tests would be able to create a query client directly from keeper and `sdk.Context` +references using a `QueryServerTestHelper` as below: + +```go +queryHelper := baseapp.NewQueryServerTestHelper(ctx) +types.RegisterQueryServer(queryHelper, keeper.Querier{app.BankKeeper}) +queryClient := types.NewQueryClient(queryHelper) +``` + +## Future Improvements + +## Consequences + +### Positive + +* greatly simplified querier implementation (no manual encoding/decoding) +* easy query client generation (can use existing grpc and swagger tools) +* no need for REST query implementations +* type safe query methods (generated via grpc plugin) +* going forward, there will be less breakage of query methods because of the +backwards compatibility guarantees provided by buf + +### Negative + +* all clients using the existing ABCI/REST queries will need to be refactored +for both the new GRPC/REST query paths as well as protobuf/proto-json encoded +data, but this is more or less unavoidable in the protobuf refactoring + +### Neutral + +## References diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-022-custom-panic-handling.md b/versioned_docs/version-0.47/integrate/architecture/adr-022-custom-panic-handling.md new file mode 100644 index 000000000..6ed7b6246 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-022-custom-panic-handling.md @@ -0,0 +1,218 @@ +# ADR 022: Custom BaseApp panic handling + +## Changelog + +* 2020 Apr 24: Initial Draft +* 2021 Sep 14: Superseded by ADR-045 + +## Status + +SUPERSEDED by ADR-045 + +## Context + +The current implementation of BaseApp does not allow developers to write custom error handlers during panic recovery +[runTx()](https://github.com/cosmos/cosmos-sdk/blob/bad4ca75f58b182f600396ca350ad844c18fc80b/baseapp/baseapp.go#L539) +method. We think that this method can be more flexible and can give Cosmos SDK users more options for customizations without +the need to rewrite whole BaseApp. Also there's one special case for `sdk.ErrorOutOfGas` error handling, that case +might be handled in a "standard" way (middleware) alongside the others. + +We propose middleware-solution, which could help developers implement the following cases: + +* add external logging (let's say sending reports to external services like [Sentry](https://sentry.io)); +* call panic for specific error cases; + +It will also make `OutOfGas` case and `default` case one of the middlewares. +`Default` case wraps recovery object to an error and logs it ([example middleware implementation](#Recovery-middleware)). + +Our project has a sidecar service running alongside the blockchain node (smart contracts virtual machine). It is +essential that node <-> sidecar connectivity stays stable for TXs processing. So when the communication breaks we need +to crash the node and reboot it once the problem is solved. That behaviour makes node's state machine execution +deterministic. As all keeper panics are caught by runTx's `defer()` handler, we have to adjust the BaseApp code +in order to customize it. + +## Decision + +### Design + +#### Overview + +Instead of hardcoding custom error handling into BaseApp we suggest using set of middlewares which can be customized +externally and will allow developers use as many custom error handlers as they want. Implementation with tests +can be found [here](https://github.com/cosmos/cosmos-sdk/pull/6053). + +#### Implementation details + +##### Recovery handler + +New `RecoveryHandler` type added. `recoveryObj` input argument is an object returned by the standard Go function +`recover()` from the `builtin` package. + +```go +type RecoveryHandler func(recoveryObj interface{}) error +``` + +Handler should type assert (or other methods) an object to define if object should be handled. +`nil` should be returned if input object can't be handled by that `RecoveryHandler` (not a handler's target type). +Not `nil` error should be returned if input object was handled and middleware chain execution should be stopped. + +An example: + +```go +func exampleErrHandler(recoveryObj interface{}) error { + err, ok := recoveryObj.(error) + if !ok { return nil } + + if someSpecificError.Is(err) { + panic(customPanicMsg) + } else { + return nil + } +} +``` + +This example breaks the application execution, but it also might enrich the error's context like the `OutOfGas` handler. + +##### Recovery middleware + +We also add a middleware type (decorator). That function type wraps `RecoveryHandler` and returns the next middleware in +execution chain and handler's `error`. Type is used to separate actual `recovery()` object handling from middleware +chain processing. + +```go +type recoveryMiddleware func(recoveryObj interface{}) (recoveryMiddleware, error) + +func newRecoveryMiddleware(handler RecoveryHandler, next recoveryMiddleware) recoveryMiddleware { + return func(recoveryObj interface{}) (recoveryMiddleware, error) { + if err := handler(recoveryObj); err != nil { + return nil, err + } + return next, nil + } +} +``` + +Function receives a `recoveryObj` object and returns: + +* (next `recoveryMiddleware`, `nil`) if object wasn't handled (not a target type) by `RecoveryHandler`; +* (`nil`, not nil `error`) if input object was handled and other middlewares in the chain should not be executed; +* (`nil`, `nil`) in case of invalid behavior. Panic recovery might not have been properly handled; +this can be avoided by always using a `default` as a rightmost middleware in the chain (always returns an `error`'); + +`OutOfGas` middleware example: + +```go +func newOutOfGasRecoveryMiddleware(gasWanted uint64, ctx sdk.Context, next recoveryMiddleware) recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + err, ok := recoveryObj.(sdk.ErrorOutOfGas) + if !ok { return nil } + + return sdkerrors.Wrap( + sdkerrors.ErrOutOfGas, fmt.Sprintf( + "out of gas in location: %v; gasWanted: %d, gasUsed: %d", err.Descriptor, gasWanted, ctx.GasMeter().GasConsumed(), + ), + ) + } + + return newRecoveryMiddleware(handler, next) +} +``` + +`Default` middleware example: + +```go +func newDefaultRecoveryMiddleware() recoveryMiddleware { + handler := func(recoveryObj interface{}) error { + return sdkerrors.Wrap( + sdkerrors.ErrPanic, fmt.Sprintf("recovered: %v\nstack:\n%v", recoveryObj, string(debug.Stack())), + ) + } + + return newRecoveryMiddleware(handler, nil) +} +``` + +##### Recovery processing + +Basic chain of middlewares processing would look like: + +```go +func processRecovery(recoveryObj interface{}, middleware recoveryMiddleware) error { + if middleware == nil { return nil } + + next, err := middleware(recoveryObj) + if err != nil { return err } + if next == nil { return nil } + + return processRecovery(recoveryObj, next) +} +``` + +That way we can create a middleware chain which is executed from left to right, the rightmost middleware is a +`default` handler which must return an `error`. + +##### BaseApp changes + +The `default` middleware chain must exist in a `BaseApp` object. `Baseapp` modifications: + +```go +type BaseApp struct { + // ... + runTxRecoveryMiddleware recoveryMiddleware +} + +func NewBaseApp(...) { + // ... + app.runTxRecoveryMiddleware = newDefaultRecoveryMiddleware() +} + +func (app *BaseApp) runTx(...) { + // ... + defer func() { + if r := recover(); r != nil { + recoveryMW := newOutOfGasRecoveryMiddleware(gasWanted, ctx, app.runTxRecoveryMiddleware) + err, result = processRecovery(r, recoveryMW), nil + } + + gInfo = sdk.GasInfo{GasWanted: gasWanted, GasUsed: ctx.GasMeter().GasConsumed()} + }() + // ... +} +``` + +Developers can add their custom `RecoveryHandler`s by providing `AddRunTxRecoveryHandler` as a BaseApp option parameter to the `NewBaseapp` constructor: + +```go +func (app *BaseApp) AddRunTxRecoveryHandler(handlers ...RecoveryHandler) { + for _, h := range handlers { + app.runTxRecoveryMiddleware = newRecoveryMiddleware(h, app.runTxRecoveryMiddleware) + } +} +``` + +This method would prepend handlers to an existing chain. + +## Consequences + +### Positive + +* Developers of Cosmos SDK based projects can add custom panic handlers to: + * add error context for custom panic sources (panic inside of custom keepers); + * emit `panic()`: passthrough recovery object to the Tendermint core; + * other necessary handling; +* Developers can use standard Cosmos SDK `BaseApp` implementation, rather that rewriting it in their projects; +* Proposed solution doesn't break the current "standard" `runTx()` flow; + +### Negative + +* Introduces changes to the execution model design. + +### Neutral + +* `OutOfGas` error handler becomes one of the middlewares; +* Default panic handler becomes one of the middlewares; + +## References + +* [PR-6053 with proposed solution](https://github.com/cosmos/cosmos-sdk/pull/6053) +* [Similar solution. ADR-010 Modular AnteHandler](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-010-modular-antehandler.md) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-023-protobuf-naming.md b/versioned_docs/version-0.47/integrate/architecture/adr-023-protobuf-naming.md new file mode 100644 index 000000000..4360befde --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-023-protobuf-naming.md @@ -0,0 +1,263 @@ +# ADR 023: Protocol Buffer Naming and Versioning Conventions + +## Changelog + +* 2020 April 27: Initial Draft +* 2020 August 5: Update guidelines + +## Status + +Accepted + +## Context + +Protocol Buffers provide a basic [style guide](https://developers.google.com/protocol-buffers/docs/style) +and [Buf](https://buf.build/docs/style-guide) builds upon that. To the +extent possible, we want to follow industry accepted guidelines and wisdom for +the effective usage of protobuf, deviating from those only when there is clear +rationale for our use case. + +### Adoption of `Any` + +The adoption of `google.protobuf.Any` as the recommended approach for encoding +interface types (as opposed to `oneof`) makes package naming a central part +of the encoding as fully-qualified message names now appear in encoded +messages. + +### Current Directory Organization + +Thus far we have mostly followed [Buf's](https://buf.build) [DEFAULT](https://buf.build/docs/lint-checkers#default) +recommendations, with the minor deviation of disabling [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout) +which although being convenient for developing code comes with the warning +from Buf that: + +> you will have a very bad time with many Protobuf plugins across various languages if you do not do this + +### Adoption of gRPC Queries + +In [ADR 021](adr-021-protobuf-query-encoding.md), gRPC was adopted for Protobuf +native queries. The full gRPC service path thus becomes a key part of ABCI query +path. In the future, gRPC queries may be allowed from within persistent scripts +by technologies such as CosmWasm and these query routes would be stored within +script binaries. + +## Decision + +The goal of this ADR is to provide thoughtful naming conventions that: + +* encourage a good user experience for when users interact directly with +.proto files and fully-qualified protobuf names +* balance conciseness against the possibility of either over-optimizing (making +names too short and cryptic) or under-optimizing (just accepting bloated names +with lots of redundant information) + +These guidelines are meant to act as a style guide for both the Cosmos SDK and +third-party modules. + +As a starting point, we should adopt all of the [DEFAULT](https://buf.build/docs/lint-checkers#default) +checkers in [Buf's](https://buf.build) including [`PACKAGE_DIRECTORY_MATCH`](https://buf.build/docs/lint-checkers#file_layout), +except: + +* [PACKAGE_VERSION_SUFFIX](https://buf.build/docs/lint-checkers#package_version_suffix) +* [SERVICE_SUFFIX](https://buf.build/docs/lint-checkers#service_suffix) + +Further guidelines to be described below. + +### Principles + +#### Concise and Descriptive Names + +Names should be descriptive enough to convey their meaning and distinguish +them from other names. + +Given that we are using fully-qualifed names within +`google.protobuf.Any` as well as within gRPC query routes, we should aim to +keep names concise, without going overboard. The general rule of thumb should +be if a shorter name would convey more or else the same thing, pick the shorter +name. + +For instance, `cosmos.bank.MsgSend` (19 bytes) conveys roughly the same information +as `cosmos_sdk.x.bank.v1.MsgSend` (28 bytes) but is more concise. + +Such conciseness makes names both more pleasant to work with and take up less +space within transactions and on the wire. + +We should also resist the temptation to over-optimize, by making names +cryptically short with abbreviations. For instance, we shouldn't try to +reduce `cosmos.bank.MsgSend` to `csm.bk.MSnd` just to save a few bytes. + +The goal is to make names **_concise but not cryptic_**. + +#### Names are for Clients First + +Package and type names should be chosen for the benefit of users, not +necessarily because of legacy concerns related to the go code-base. + +#### Plan for Longevity + +In the interests of long-term support, we should plan on the names we do +choose to be in usage for a long time, so now is the opportunity to make +the best choices for the future. + +### Versioning + +#### Guidelines on Stable Package Versions + +In general, schema evolution is the way to update protobuf schemas. That means that new fields, +messages, and RPC methods are _added_ to existing schemas and old fields, messages and RPC methods +are maintained as long as possible. + +Breaking things is often unacceptable in a blockchain scenario. For instance, immutable smart contracts +may depend on certain data schemas on the host chain. If the host chain breaks those schemas, the smart +contract may be irreparably broken. Even when things can be fixed (for instance in client software), +this often comes at a high cost. + +Instead of breaking things, we should make every effort to evolve schemas rather than just breaking them. +[Buf](https://buf.build) breaking change detection should be used on all stable (non-alpha or beta) packages +to prevent such breakage. + +With that in mind, different stable versions (i.e. `v1` or `v2`) of a package should more or less be considered +different packages and this should be last resort approach for upgrading protobuf schemas. Scenarios where creating +a `v2` may make sense are: + +* we want to create a new module with similar functionality to an existing module and adding `v2` is the most natural +way to do this. In that case, there are really just two different, but similar modules with different APIs. +* we want to add a new revamped API for an existing module and it's just too cumbersome to add it to the existing package, +so putting it in `v2` is cleaner for users. In this case, care should be made to not deprecate support for +`v1` if it is actively used in immutable smart contracts. + +#### Guidelines on unstable (alpha and beta) package versions + +The following guidelines are recommended for marking packages as alpha or beta: + +* marking something as `alpha` or `beta` should be a last resort and just putting something in the +stable package (i.e. `v1` or `v2`) should be preferred +* a package _should_ be marked as `alpha` _if and only if_ there are active discussions to remove +or significantly alter the package in the near future +* a package _should_ be marked as `beta` _if and only if_ there is an active discussion to +significantly refactor/rework the functionality in the near future but not remove it +* modules _can and should_ have types in both stable (i.e. `v1` or `v2`) and unstable (`alpha` or `beta`) packages. + +_`alpha` and `beta` should not be used to avoid responsibility for maintaining compatibility._ +Whenever code is released into the wild, especially on a blockchain, there is a high cost to changing things. In some +cases, for instance with immutable smart contracts, a breaking change may be impossible to fix. + +When marking something as `alpha` or `beta`, maintainers should ask the questions: + +* what is the cost of asking others to change their code vs the benefit of us maintaining the optionality to change it? +* what is the plan for moving this to `v1` and how will that affect users? + +`alpha` or `beta` should really be used to communicate "changes are planned". + +As a case study, gRPC reflection is in the package `grpc.reflection.v1alpha`. It hasn't been changed since +2017 and it is now used in other widely used software like gRPCurl. Some folks probably use it in production services +and so if they actually went and changed the package to `grpc.reflection.v1`, some software would break and +they probably don't want to do that... So now the `v1alpha` package is more or less the de-facto `v1`. Let's not do that. + +The following are guidelines for working with non-stable packages: + +* [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix) +(ex. `v1alpha1`) _should_ be used for non-stable packages +* non-stable packages should generally be excluded from breaking change detection +* immutable smart contract modules (i.e. CosmWasm) _should_ block smart contracts/persistent +scripts from interacting with `alpha`/`beta` packages + +#### Omit v1 suffix + +Instead of using [Buf's recommended version suffix](https://buf.build/docs/lint-checkers#package_version_suffix), +we can omit `v1` for packages that don't actually have a second version. This +allows for more concise names for common use cases like `cosmos.bank.Send`. +Packages that do have a second or third version can indicate that with `.v2` +or `.v3`. + +### Package Naming + +#### Adopt a short, unique top-level package name + +Top-level packages should adopt a short name that is known to not collide with +other names in common usage within the Cosmos ecosystem. In the near future, a +registry should be created to reserve and index top-level package names used +within the Cosmos ecosystem. Because the Cosmos SDK is intended to provide +the top-level types for the Cosmos project, the top-level package name `cosmos` +is recommended for usage within the Cosmos SDK instead of the longer `cosmos_sdk`. +[ICS](https://github.com/cosmos/ics) specifications could consider a +short top-level package like `ics23` based upon the standard number. + +#### Limit sub-package depth + +Sub-package depth should be increased with caution. Generally a single +sub-package is needed for a module or a library. Even though `x` or `modules` +is used in source code to denote modules, this is often unnecessary for .proto +files as modules are the primary thing sub-packages are used for. Only items which +are known to be used infrequently should have deep sub-package depths. + +For the Cosmos SDK, it is recommended that that we simply write `cosmos.bank`, +`cosmos.gov`, etc. rather than `cosmos.x.bank`. In practice, most non-module +types can go straight in the `cosmos` package or we can introduce a +`cosmos.base` package if needed. Note that this naming _will not_ change +go package names, i.e. the `cosmos.bank` protobuf package will still live in +`x/bank`. + +### Message Naming + +Message type names should be as concise possible without losing clarity. `sdk.Msg` +types which are used in transactions will retain the `Msg` prefix as that provides +helpful context. + +### Service and RPC Naming + +[ADR 021](adr-021-protobuf-query-encoding.md) specifies that modules should +implement a gRPC query service. We should consider the principle of conciseness +for query service and RPC names as these may be called from persistent script +modules such as CosmWasm. Also, users may use these query paths from tools like +[gRPCurl](https://github.com/fullstorydev/grpcurl). As an example, we can shorten +`/cosmos_sdk.x.bank.v1.QueryService/QueryBalance` to +`/cosmos.bank.Query/Balance` without losing much useful information. + +RPC request and response types _should_ follow the `ServiceNameMethodNameRequest`/ +`ServiceNameMethodNameResponse` naming convention. i.e. for an RPC method named `Balance` +on the `Query` service, the request and response types would be `QueryBalanceRequest` +and `QueryBalanceResponse`. This will be more self-explanatory than `BalanceRequest` +and `BalanceResponse`. + +#### Use just `Query` for the query service + +Instead of [Buf's default service suffix recommendation](https://github.com/cosmos/cosmos-sdk/pull/6033), +we should simply use the shorter `Query` for query services. + +For other types of gRPC services, we should consider sticking with Buf's +default recommendation. + +#### Omit `Get` and `Query` from query service RPC names + +`Get` and `Query` should be omitted from `Query` service names because they are +redundant in the fully-qualified name. For instance, `/cosmos.bank.Query/QueryBalance` +just says `Query` twice without any new information. + +## Future Improvements + +A registry of top-level package names should be created to coordinate naming +across the ecosystem, prevent collisions, and also help developers discover +useful schemas. A simple starting point would be a git repository with +community-based governance. + +## Consequences + +### Positive + +* names will be more concise and easier to read and type +* all transactions using `Any` will be at shorter (`_sdk.x` and `.v1` will be removed) +* `.proto` file imports will be more standard (without `"third_party/proto"` in +the path) +* code generation will be easier for clients because .proto files will be +in a single `proto/` directory which can be copied rather than scattered +throughout the Cosmos SDK + +### Negative + +### Neutral + +* `.proto` files will need to be reorganized and refactored +* some modules may need to be marked as alpha or beta + +## References diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-024-coin-metadata.md b/versioned_docs/version-0.47/integrate/architecture/adr-024-coin-metadata.md new file mode 100644 index 000000000..3c55f80f0 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-024-coin-metadata.md @@ -0,0 +1,139 @@ +# ADR 024: Coin Metadata + +## Changelog + +* 05/19/2020: Initial draft + +## Status + +Proposed + +## Context + +Assets in the Cosmos SDK are represented via a `Coins` type that consists of an `amount` and a `denom`, +where the `amount` can be any arbitrarily large or small value. In addition, the Cosmos SDK uses an +account-based model where there are two types of primary accounts -- basic accounts and module accounts. +All account types have a set of balances that are composed of `Coins`. The `x/bank` module keeps +track of all balances for all accounts and also keeps track of the total supply of balances in an +application. + +With regards to a balance `amount`, the Cosmos SDK assumes a static and fixed unit of denomination, +regardless of the denomination itself. In other words, clients and apps built atop a Cosmos-SDK-based +chain may choose to define and use arbitrary units of denomination to provide a richer UX, however, by +the time a tx or operation reaches the Cosmos SDK state machine, the `amount` is treated as a single +unit. For example, for the Cosmos Hub (Gaia), clients assume 1 ATOM = 10^6 uatom, and so all txs and +operations in the Cosmos SDK work off of units of 10^6. + +This clearly provides a poor and limited UX especially as interoperability of networks increases and +as a result the total amount of asset types increases. We propose to have `x/bank` additionally keep +track of metadata per `denom` in order to help clients, wallet providers, and explorers improve their +UX and remove the requirement for making any assumptions on the unit of denomination. + +## Decision + +The `x/bank` module will be updated to store and index metadata by `denom`, specifically the "base" or +smallest unit -- the unit the Cosmos SDK state-machine works with. + +Metadata may also include a non-zero length list of denominations. Each entry contains the name of +the denomination `denom`, the exponent to the base and a list of aliases. An entry is to be +interpreted as `1 denom = 10^exponent base_denom` (e.g. `1 ETH = 10^18 wei` and `1 uatom = 10^0 uatom`). + +There are two denominations that are of high importance for clients: the `base`, which is the smallest +possible unit and the `display`, which is the unit that is commonly referred to in human communication +and on exchanges. The values in those fields link to an entry in the list of denominations. + +The list in `denom_units` and the `display` entry may be changed via governance. + +As a result, we can define the type as follows: + +```protobuf +message DenomUnit { + string denom = 1; + uint32 exponent = 2; + repeated string aliases = 3; +} + +message Metadata { + string description = 1; + repeated DenomUnit denom_units = 2; + string base = 3; + string display = 4; +} +``` + +As an example, the ATOM's metadata can be defined as follows: + +```json +{ + "description": "The native staking token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "uatom", + "exponent": 0, + "aliases": [ + "microatom" + ], + }, + { + "denom": "matom", + "exponent": 3, + "aliases": [ + "milliatom" + ] + }, + { + "denom": "atom", + "exponent": 6, + } + ], + "base": "uatom", + "display": "atom", +} +``` + +Given the above metadata, a client may infer the following things: + +* 4.3atom = 4.3 * (10^6) = 4,300,000uatom +* The string "atom" can be used as a display name in a list of tokens. +* The balance 4300000 can be displayed as 4,300,000uatom or 4,300matom or 4.3atom. + The `display` denomination 4.3atom is a good default if the authors of the client don't make + an explicit decision to choose a different representation. + +A client should be able to query for metadata by denom both via the CLI and REST interfaces. In +addition, we will add handlers to these interfaces to convert from any unit to another given unit, +as the base framework for this already exists in the Cosmos SDK. + +Finally, we need to ensure metadata exists in the `GenesisState` of the `x/bank` module which is also +indexed by the base `denom`. + +```go +type GenesisState struct { + SendEnabled bool `json:"send_enabled" yaml:"send_enabled"` + Balances []Balance `json:"balances" yaml:"balances"` + Supply sdk.Coins `json:"supply" yaml:"supply"` + DenomMetadata []Metadata `json:"denom_metadata" yaml:"denom_metadata"` +} +``` + +## Future Work + +In order for clients to avoid having to convert assets to the base denomination -- either manually or +via an endpoint, we may consider supporting automatic conversion of a given unit input. + +## Consequences + +### Positive + +* Provides clients, wallet providers and block explorers with additional data on + asset denomination to improve UX and remove any need to make assumptions on + denomination units. + +### Negative + +* A small amount of required additional storage in the `x/bank` module. The amount + of additional storage should be minimal as the amount of total assets should not + be large. + +### Neutral + +## References diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-027-deterministic-protobuf-serialization.md b/versioned_docs/version-0.47/integrate/architecture/adr-027-deterministic-protobuf-serialization.md new file mode 100644 index 000000000..66ce6e2b7 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-027-deterministic-protobuf-serialization.md @@ -0,0 +1,314 @@ +# ADR 027: Deterministic Protobuf Serialization + +## Changelog + +* 2020-08-07: Initial Draft +* 2020-09-01: Further clarify rules + +## Status + +Proposed + +## Abstract + +Fully deterministic structure serialization, which works across many languages and clients, +is needed when signing messages. We need to be sure that whenever we serialize +a data structure, no matter in which supported language, the raw bytes +will stay the same. +[Protobuf](https://developers.google.com/protocol-buffers/docs/proto3) +serialization is not bijective (i.e. there exist a practically unlimited number of +valid binary representations for a given protobuf document)1. + +This document describes a deterministic serialization scheme for +a subset of protobuf documents, that covers this use case but can be reused in +other cases as well. + +### Context + +For signature verification in Cosmos SDK, the signer and verifier need to agree on +the same serialization of a `SignDoc` as defined in +[ADR-020](./adr-020-protobuf-transaction-encoding.md) without transmitting the +serialization. + +Currently, for block signatures we are using a workaround: we create a new [TxRaw](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L30) +instance (as defined in [adr-020-protobuf-transaction-encoding](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-020-protobuf-transaction-encoding.md#transactions)) +by converting all [Tx](https://github.com/cosmos/cosmos-sdk/blob/9e85e81e0e8140067dd893421290c191529c148c/proto/cosmos/tx/v1beta1/tx.proto#L13) +fields to bytes on the client side. This adds an additional manual +step when sending and signing transactions. + +### Decision + +The following encoding scheme is to be used by other ADRs, +and in particular for `SignDoc` serialization. + +## Specification + +### Scope + +This ADR defines a protobuf3 serializer. The output is a valid protobuf +serialization, such that every protobuf parser can parse it. + +No maps are supported in version 1 due to the complexity of defining a +deterministic serialization. This might change in future. Implementations must +reject documents containing maps as invalid input. + +### Background - Protobuf3 Encoding + +Most numeric types in protobuf3 are encoded as +[varints](https://developers.google.com/protocol-buffers/docs/encoding#varints). +Varints are at most 10 bytes, and since each varint byte has 7 bits of data, +varints are a representation of `uint70` (70-bit unsigned integer). When +encoding, numeric values are casted from their base type to `uint70`, and when +decoding, the parsed `uint70` is casted to the appropriate numeric type. + +The maximum valid value for a varint that complies with protobuf3 is +`FF FF FF FF FF FF FF FF FF 7F` (i.e. `2**70 -1`). If the field type is +`{,u,s}int64`, the highest 6 bits of the 70 are dropped during decoding, +introducing 6 bits of malleability. If the field type is `{,u,s}int32`, the +highest 38 bits of the 70 are dropped during decoding, introducing 38 bits of +malleability. + +Among other sources of non-determinism, this ADR eliminates the possibility of +encoding malleability. + +### Serialization rules + +The serialization is based on the +[protobuf3 encoding](https://developers.google.com/protocol-buffers/docs/encoding) +with the following additions: + +1. Fields must be serialized only once in ascending order +2. Extra fields or any extra data must not be added +3. [Default values](https://developers.google.com/protocol-buffers/docs/proto3#default) + must be omitted +4. `repeated` fields of scalar numeric types must use + [packed encoding](https://developers.google.com/protocol-buffers/docs/encoding#packed) +5. Varint encoding must not be longer than needed: + * No trailing zero bytes (in little endian, i.e. no leading zeroes in big + endian). Per rule 3 above, the default value of `0` must be omitted, so + this rule does not apply in such cases. + * The maximum value for a varint must be `FF FF FF FF FF FF FF FF FF 01`. + In other words, when decoded, the highest 6 bits of the 70-bit unsigned + integer must be `0`. (10-byte varints are 10 groups of 7 bits, i.e. + 70 bits, of which only the lowest 70-6=64 are useful.) + * The maximum value for 32-bit values in varint encoding must be `FF FF FF FF 0F` + with one exception (below). In other words, when decoded, the highest 38 + bits of the 70-bit unsigned integer must be `0`. + * The one exception to the above is _negative_ `int32`, which must be + encoded using the full 10 bytes for sign extension2. + * The maximum value for Boolean values in varint encoding must be `01` (i.e. + it must be `0` or `1`). Per rule 3 above, the default value of `0` must + be omitted, so if a Boolean is included it must have a value of `1`. + +While rule number 1. and 2. should be pretty straight forward and describe the +default behavior of all protobuf encoders the author is aware of, the 3rd rule +is more interesting. After a protobuf3 deserialization you cannot differentiate +between unset fields and fields set to the default value3. At +serialization level however, it is possible to set the fields with an empty +value or omitting them entirely. This is a significant difference to e.g. JSON +where a property can be empty (`""`, `0`), `null` or undefined, leading to 3 +different documents. + +Omitting fields set to default values is valid because the parser must assign +the default value to fields missing in the serialization4. For scalar +types, omitting defaults is required by the spec5. For `repeated` +fields, not serializing them is the only way to express empty lists. Enums must +have a first element of numeric value 0, which is the default6. And +message fields default to unset7. + +Omitting defaults allows for some amount of forward compatibility: users of +newer versions of a protobuf schema produce the same serialization as users of +older versions as long as newly added fields are not used (i.e. set to their +default value). + +### Implementation + +There are three main implementation strategies, ordered from the least to the +most custom development: + +* **Use a protobuf serializer that follows the above rules by default.** E.g. + [gogoproto](https://pkg.go.dev/github.com/cosmos/gogoproto/gogoproto) is known to + be compliant by in most cases, but not when certain annotations such as + `nullable = false` are used. It might also be an option to configure an + existing serializer accordingly. +* **Normalize default values before encoding them.** If your serializer follows + rule 1. and 2. and allows you to explicitly unset fields for serialization, + you can normalize default values to unset. This can be done when working with + [protobuf.js](https://www.npmjs.com/package/protobufjs): + + ```js + const bytes = SignDoc.encode({ + bodyBytes: body.length > 0 ? body : null, // normalize empty bytes to unset + authInfoBytes: authInfo.length > 0 ? authInfo : null, // normalize empty bytes to unset + chainId: chainId || null, // normalize "" to unset + accountNumber: accountNumber || null, // normalize 0 to unset + accountSequence: accountSequence || null, // normalize 0 to unset + }).finish(); + ``` + +* **Use a hand-written serializer for the types you need.** If none of the above + ways works for you, you can write a serializer yourself. For SignDoc this + would look something like this in Go, building on existing protobuf utilities: + + ```go + if !signDoc.body_bytes.empty() { + buf.WriteUVarInt64(0xA) // wire type and field number for body_bytes + buf.WriteUVarInt64(signDoc.body_bytes.length()) + buf.WriteBytes(signDoc.body_bytes) + } + + if !signDoc.auth_info.empty() { + buf.WriteUVarInt64(0x12) // wire type and field number for auth_info + buf.WriteUVarInt64(signDoc.auth_info.length()) + buf.WriteBytes(signDoc.auth_info) + } + + if !signDoc.chain_id.empty() { + buf.WriteUVarInt64(0x1a) // wire type and field number for chain_id + buf.WriteUVarInt64(signDoc.chain_id.length()) + buf.WriteBytes(signDoc.chain_id) + } + + if signDoc.account_number != 0 { + buf.WriteUVarInt64(0x20) // wire type and field number for account_number + buf.WriteUVarInt(signDoc.account_number) + } + + if signDoc.account_sequence != 0 { + buf.WriteUVarInt64(0x28) // wire type and field number for account_sequence + buf.WriteUVarInt(signDoc.account_sequence) + } + ``` + +### Test vectors + +Given the protobuf definition `Article.proto` + +```protobuf +package blog; +syntax = "proto3"; + +enum Type { + UNSPECIFIED = 0; + IMAGES = 1; + NEWS = 2; +}; + +enum Review { + UNSPECIFIED = 0; + ACCEPTED = 1; + REJECTED = 2; +}; + +message Article { + string title = 1; + string description = 2; + uint64 created = 3; + uint64 updated = 4; + bool public = 5; + bool promoted = 6; + Type type = 7; + Review review = 8; + repeated string comments = 9; + repeated string backlinks = 10; +}; +``` + +serializing the values + +```yaml +title: "The world needs change 🌳" +description: "" +created: 1596806111080 +updated: 0 +public: true +promoted: false +type: Type.NEWS +review: Review.UNSPECIFIED +comments: ["Nice one", "Thank you"] +backlinks: [] +``` + +must result in the serialization + +```text +0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 +``` + +When inspecting the serialized document, you see that every second field is +omitted: + +```shell +$ echo 0a1b54686520776f726c64206e65656473206368616e676520f09f8cb318e8bebec8bc2e280138024a084e696365206f6e654a095468616e6b20796f75 | xxd -r -p | protoc --decode_raw +1: "The world needs change \360\237\214\263" +3: 1596806111080 +5: 1 +7: 2 +9: "Nice one" +9: "Thank you" +``` + +## Consequences + +Having such an encoding available allows us to get deterministic serialization +for all protobuf documents we need in the context of Cosmos SDK signing. + +### Positive + +* Well defined rules that can be verified independent of a reference + implementation +* Simple enough to keep the barrier to implement transaction signing low +* It allows us to continue to use 0 and other empty values in SignDoc, avoiding + the need to work around 0 sequences. This does not imply the change from + https://github.com/cosmos/cosmos-sdk/pull/6949 should not be merged, but not + too important anymore. + +### Negative + +* When implementing transaction signing, the encoding rules above must be + understood and implemented. +* The need for rule number 3. adds some complexity to implementations. +* Some data structures may require custom code for serialization. Thus + the code is not very portable - it will require additional work for each + client implementing serialization to properly handle custom data structures. + +### Neutral + +### Usage in Cosmos SDK + +For the reasons mentioned above ("Negative" section) we prefer to keep workarounds +for shared data structure. Example: the aforementioned `TxRaw` is using raw bytes +as a workaround. This allows them to use any valid Protobuf library without +the need of implementing a custom serializer that adheres to this standard (and related risks of bugs). + +## References + +* 1 _When a message is serialized, there is no guaranteed order for + how its known or unknown fields should be written. Serialization order is an + implementation detail and the details of any particular implementation may + change in the future. Therefore, protocol buffer parsers must be able to parse + fields in any order._ from + https://developers.google.com/protocol-buffers/docs/encoding#order +* 2 https://developers.google.com/protocol-buffers/docs/encoding#signed_integers +* 3 _Note that for scalar message fields, once a message is parsed + there's no way of telling whether a field was explicitly set to the default + value (for example whether a boolean was set to false) or just not set at all: + you should bear this in mind when defining your message types. For example, + don't have a boolean that switches on some behavior when set to false if you + don't want that behavior to also happen by default._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 4 _When a message is parsed, if the encoded message does not + contain a particular singular element, the corresponding field in the parsed + object is set to the default value for that field._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 5 _Also note that if a scalar message field is set to its default, + the value will not be serialized on the wire._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 6 _For enums, the default value is the first defined enum value, + which must be 0._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* 7 _For message fields, the field is not set. Its exact value is + language-dependent._ from + https://developers.google.com/protocol-buffers/docs/proto3#default +* Encoding rules and parts of the reasoning taken from + [canonical-proto3 Aaron Craelius](https://github.com/regen-network/canonical-proto3) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-028-public-key-addresses.md b/versioned_docs/version-0.47/integrate/architecture/adr-028-public-key-addresses.md new file mode 100644 index 000000000..9f394f7a2 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-028-public-key-addresses.md @@ -0,0 +1,342 @@ +# ADR 028: Public Key Addresses + +## Changelog + +* 2020/08/18: Initial version +* 2021/01/15: Analysis and algorithm update + +## Status + +Proposed + +## Abstract + +This ADR defines an address format for all addressable Cosmos SDK accounts. That includes: new public key algorithms, multisig public keys, and module accounts. + +## Context + +Issue [\#3685](https://github.com/cosmos/cosmos-sdk/issues/3685) identified that public key +address spaces are currently overlapping. We confirmed that it significantly decreases security of Cosmos SDK. + +### Problem + +An attacker can control an input for an address generation function. This leads to a birthday attack, which significantly decreases the security space. +To overcome this, we need to separate the inputs for different kind of account types: +a security break of one account type shouldn't impact the security of other account types. + +### Initial proposals + +One initial proposal was extending the address length and +adding prefixes for different types of addresses. + +@ethanfrey explained an alternate approach originally used in https://github.com/iov-one/weave: + +> I spent quite a bit of time thinking about this issue while building weave... The other cosmos Sdk. +> Basically I define a condition to be a type and format as human readable string with some binary data appended. This condition is hashed into an Address (again at 20 bytes). The use of this prefix makes it impossible to find a preimage for a given address with a different condition (eg ed25519 vs secp256k1). +> This is explained in depth here https://weave.readthedocs.io/en/latest/design/permissions.html +> And the code is here, look mainly at the top where we process conditions. https://github.com/iov-one/weave/blob/master/conditions.go + +And explained how this approach should be sufficiently collision resistant: + +> Yeah, AFAIK, 20 bytes should be collision resistance when the preimages are unique and not malleable. A space of 2^160 would expect some collision to be likely around 2^80 elements (birthday paradox). And if you want to find a collision for some existing element in the database, it is still 2^160. 2^80 only is if all these elements are written to state. +> The good example you brought up was eg. a public key bytes being a valid public key on two algorithms supported by the codec. Meaning if either was broken, you would break accounts even if they were secured with the safer variant. This is only as the issue when no differentiating type info is present in the preimage (before hashing into an address). +> I would like to hear an argument if the 20 bytes space is an actual issue for security, as I would be happy to increase my address sizes in weave. I just figured cosmos and ethereum and bitcoin all use 20 bytes, it should be good enough. And the arguments above which made me feel it was secure. But I have not done a deeper analysis. + +This led to the first proposal (which we proved to be not good enough): +we concatenate a key type with a public key, hash it and take the first 20 bytes of that hash, summarized as `sha256(keyTypePrefix || keybytes)[:20]`. + +### Review and Discussions + +In [\#5694](https://github.com/cosmos/cosmos-sdk/issues/5694) we discussed various solutions. +We agreed that 20 bytes it's not future proof, and extending the address length is the only way to allow addresses of different types, various signature types, etc. +This disqualifies the initial proposal. + +In the issue we discussed various modifications: + +* Choice of the hash function. +* Move the prefix out of the hash function: `keyTypePrefix + sha256(keybytes)[:20]` [post-hash-prefix-proposal]. +* Use double hashing: `sha256(keyTypePrefix + sha256(keybytes)[:20])`. +* Increase to keybytes hash slice from 20 byte to 32 or 40 bytes. We concluded that 32 bytes, produced by a good hash functions is future secure. + +### Requirements + +* Support currently used tools - we don't want to break an ecosystem, or add a long adaptation period. Ref: https://github.com/cosmos/cosmos-sdk/issues/8041 +* Try to keep the address length small - addresses are widely used in state, both as part of a key and object value. + +### Scope + +This ADR only defines a process for the generation of address bytes. For end-user interactions with addresses (through the API, or CLI, etc.), we still use bech32 to format these addresses as strings. This ADR doesn't change that. +Using Bech32 for string encoding gives us support for checksum error codes and handling of user typos. + +## Decision + +We define the following account types, for which we define the address function: + +1. simple accounts: represented by a regular public key (ie: secp256k1, sr25519) +2. naive multisig: accounts composed by other addressable objects (ie: naive multisig) +3. composed accounts with a native address key (ie: bls, group module accounts) +4. module accounts: basically any accounts which cannot sign transactions and which are managed internally by modules + +### Legacy Public Key Addresses Don't Change + +Currently (Jan 2021), the only officially supported Cosmos SDK user accounts are `secp256k1` basic accounts and legacy amino multisig. +They are used in existing Cosmos SDK zones. They use the following address formats: + +* secp256k1: `ripemd160(sha256(pk_bytes))[:20]` +* legacy amino multisig: `sha256(aminoCdc.Marshal(pk))[:20]` + +We don't want to change existing addresses. So the addresses for these two key types will remain the same. + +The current multisig public keys use amino serialization to generate the address. We will retain +those public keys and their address formatting, and call them "legacy amino" multisig public keys +in protobuf. We will also create multisig public keys without amino addresses to be described below. + +### Hash Function Choice + +As in other parts of the Cosmos SDK, we will use `sha256`. + +### Basic Address + +We start with defining a base algorithm for generating addresses which we will call `Hash`. Notably, it's used for accounts represented by a single key pair. For each public key schema we have to have an associated `typ` string, explained in the next section. `hash` is the cryptographic hash function defined in the previous section. + +```go +const A_LEN = 32 + +func Hash(typ string, key []byte) []byte { + return hash(hash(typ) + key)[:A_LEN] +} +``` + +The `+` is bytes concatenation, which doesn't use any separator. + +This algorithm is the outcome of a consultation session with a professional cryptographer. +Motivation: this algorithm keeps the address relatively small (length of the `typ` doesn't impact the length of the final address) +and it's more secure than [post-hash-prefix-proposal] (which uses the first 20 bytes of a pubkey hash, significantly reducing the address space). +Moreover the cryptographer motivated the choice of adding `typ` in the hash to protect against a switch table attack. + +`address.Hash` is a low level function to generate _base_ addresses for new key types. Example: + +* BLS: `address.Hash("bls", pubkey)` + +### Composed Addresses + +For simple composed accounts (like a new naive multisig) we generalize the `address.Hash`. The address is constructed by recursively creating addresses for the sub accounts, sorting the addresses and composing them into a single address. It ensures that the ordering of keys doesn't impact the resulting address. + +```go +// We don't need a PubKey interface - we need anything which is addressable. +type Addressable interface { + Address() []byte +} + +func Composed(typ string, subaccounts []Addressable) []byte { + addresses = map(subaccounts, \a -> LengthPrefix(a.Address())) + addresses = sort(addresses) + return address.Hash(typ, addresses[0] + ... + addresses[n]) +} +``` + +The `typ` parameter should be a schema descriptor, containing all significant attributes with deterministic serialization (eg: utf8 string). +`LengthPrefix` is a function which prepends 1 byte to the address. The value of that byte is the length of the address bits before prepending. The address must be at most 255 bits long. +We are using `LengthPrefix` to eliminate conflicts - it assures, that for 2 lists of addresses: `as = {a1, a2, ..., an}` and `bs = {b1, b2, ..., bm}` such that every `bi` and `ai` is at most 255 long, `concatenate(map(as, (a) => LengthPrefix(a))) = map(bs, (b) => LengthPrefix(b))` if `as = bs`. + +Implementation Tip: account implementations should cache addresses. + +#### Multisig Addresses + +For a new multisig public keys, we define the `typ` parameter not based on any encoding scheme (amino or protobuf). This avoids issues with non-determinism in the encoding scheme. + +Example: + +```protobuf +package cosmos.crypto.multisig; + +message PubKey { + uint32 threshold = 1; + repeated google.protobuf.Any pubkeys = 2; +} +``` + +```go +func (multisig PubKey) Address() { + // first gather all nested pub keys + var keys []address.Addressable // cryptotypes.PubKey implements Addressable + for _, _key := range multisig.Pubkeys { + keys = append(keys, key.GetCachedValue().(cryptotypes.PubKey)) + } + + // form the type from the message name (cosmos.crypto.multisig.PubKey) and the threshold joined together + prefix := fmt.Sprintf("%s/%d", proto.MessageName(multisig), multisig.Threshold) + + // use the Composed function defined above + return address.Composed(prefix, keys) +} +``` + + +### Derived Addresses + +We must be able to cryptographically derive one address from another one. The derivation process must guarantee hash properties, hence we use the already defined `Hash` function: + +```go +func Derive(address, derivationKey []byte) []byte { + return Hash(addres, derivationKey) +} +``` + +### Module Account Addresses + +A module account will have `"module"` type. Module accounts can have sub accounts. The submodule account will be created based on module name, and sequence of derivation keys. Typically, the first derivation key should be a class of the derived accounts. The derivation process has a defined order: module name, submodule key, subsubmodule key... An example module account is created using: + +```go +address.Module(moduleName, key) +``` + +An example sub-module account is created using: + +```go +groupPolicyAddresses := []byte{1} +address.Module(moduleName, groupPolicyAddresses, policyID) +``` + +The `address.Module` function is using `address.Hash` with `"module"` as the type argument, and byte representation of the module name concatenated with submodule key. The two last component must be uniquely separated to avoid potential clashes (example: modulename="ab" & submodulekey="bc" will have the same derivation key as modulename="a" & submodulekey="bbc"). +We use a null byte (`'\x00'`) to separate module name from the submodule key. This works, because null byte is not a part of a valid module name. Finally, the sub-submodule accounts are created by applying the `Derive` function recursively. +We could use `Derive` function also in the first step (rather than concatenating module name with zero byte and the submodule key). We decided to do concatenation to avoid one level of derivation and speed up computation. + +For backward compatibility with the existing `authtypes.NewModuleAddress`, we add a special case in `Module` function: when no derivation key is provided, we fallback to the "legacy" implementation. + +```go +func Module(moduleName string, derivationKeys ...[]byte) []byte{ + if len(derivationKeys) == 0 { + return authtypes.NewModuleAddress(modulenName) // legacy case + } + submoduleAddress := Hash("module", []byte(moduleName) + 0 + key) + return fold((a, k) => Derive(a, k), subsubKeys, submoduleAddress) +} +``` + +**Example 1** A lending BTC pool address would be: + +```go +btcPool := address.Module("lending", btc.Address()}) +``` + +If we want to create an address for a module account depending on more than one key, we can concatenate them: + +```go +btcAtomAMM := address.Module("amm", btc.Address() + atom.Address()}) +``` + +**Example 2** a smart-contract address could be constructed by: + +```go +smartContractAddr = Module("mySmartContractVM", smartContractsNamespace, smartContractKey}) + +// which equals to: +smartContractAddr = Derived( + Module("mySmartContractVM", smartContractsNamespace), + []{smartContractKey}) +``` + +### Schema Types + +A `typ` parameter used in `Hash` function SHOULD be unique for each account type. +Since all Cosmos SDK account types are serialized in the state, we propose to use the protobuf message name string. + +Example: all public key types have a unique protobuf message type similar to: + +```protobuf +package cosmos.crypto.sr25519; + +message PubKey { + bytes key = 1; +} +``` + +All protobuf messages have unique fully qualified names, in this example `cosmos.crypto.sr25519.PubKey`. +These names are derived directly from .proto files in a standardized way and used +in other places such as the type URL in `Any`s. We can easily obtain the name using +`proto.MessageName(msg)`. + +## Consequences + +### Backwards Compatibility + +This ADR is compatible with what was committed and directly supported in the Cosmos SDK repository. + +### Positive + +* a simple algorithm for generating addresses for new public keys, complex accounts and modules +* the algorithm generalizes _native composed keys_ +* increased security and collision resistance of addresses +* the approach is extensible for future use-cases - one can use other address types, as long as they don't conflict with the address length specified here (20 or 32 bytes). +* support new account types. + +### Negative + +* addresses do not communicate key type, a prefixed approach would have done this +* addresses are 60% longer and will consume more storage space +* requires a refactor of KVStore store keys to handle variable length addresses + +### Neutral + +* protobuf message names are used as key type prefixes + +## Further Discussions + +Some accounts can have a fixed name or may be constructed in other way (eg: modules). We were discussing an idea of an account with a predefined name (eg: `me.regen`), which could be used by institutions. +Without going into details, these kinds of addresses are compatible with the hash based addresses described here as long as they don't have the same length. +More specifically, any special account address must not have a length equal to 20 or 32 bytes. + +## Appendix: Consulting session + +End of Dec 2020 we had a session with [Alan Szepieniec](https://scholar.google.be/citations?user=4LyZn8oAAAAJ&hl=en) to consult the approach presented above. + +Alan general observations: + +* we don’t need 2-preimage resistance +* we need 32bytes address space for collision resistance +* when an attacker can control an input for object with an address then we have a problem with birthday attack +* there is an issue with smart-contracts for hashing +* sha2 mining can be use to breaking address pre-image + +Hashing algorithm + +* any attack breaking blake3 will break blake2 +* Alan is pretty confident about the current security analysis of the blake hash algorithm. It was a finalist, and the author is well known in security analysis. + +Algorithm: + +* Alan recommends to hash the prefix: `address(pub_key) = hash(hash(key_type) + pub_key)[:32]`, main benefits: + * we are free to user arbitrary long prefix names + * we still don’t risk collisions + * switch tables +* discussion about penalization -> about adding prefix post hash +* Aaron asked about post hash prefixes (`address(pub_key) = key_type + hash(pub_key)`) and differences. Alan noted that this approach has longer address space and it’s stronger. + +Algorithm for complex / composed keys: + +* merging tree like addresses with same algorithm are fine + +Module addresses: Should module addresses have different size to differentiate it? + +* we will need to set a pre-image prefix for module addresse to keept them in 32-byte space: `hash(hash('module') + module_key)` +* Aaron observation: we already need to deal with variable length (to not break secp256k1 keys). + +Discssion about arithmetic hash function for ZKP + +* Posseidon / Rescue +* Problem: much bigger risk because we don’t know much techniques and history of crypto-analysis of arithmetic constructions. It’s still a new ground and area of active research. + +Post quantum signature size + +* Alan suggestion: Falcon: speed / size ration - very good. +* Aaron - should we think about it? + Alan: based on early extrapolation this thing will get able to break EC cryptography in 2050 . But that’s a lot of uncertainty. But there is magic happening with recurions / linking / simulation and that can speedup the progress. + +Other ideas + +* Let’s say we use same key and two different address algorithms for 2 different use cases. Is it still safe to use it? Alan: if we want to hide the public key (which is not our use case), then it’s less secure but there are fixes. + +### References + +* [Notes](https://hackmd.io/_NGWI4xZSbKzj1BkCqyZMw) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-029-fee-grant-module.md b/versioned_docs/version-0.47/integrate/architecture/adr-029-fee-grant-module.md new file mode 100644 index 000000000..6b52556ff --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-029-fee-grant-module.md @@ -0,0 +1,153 @@ +# ADR 029: Fee Grant Module + +## Changelog + +* 2020/08/18: Initial Draft +* 2021/05/05: Removed height based expiration support and simplified naming. + +## Status + +Accepted + +## Context + +In order to make blockchain transactions, the signing account must possess a sufficient balance of the right denomination +in order to pay fees. There are classes of transactions where needing to maintain a wallet with sufficient fees is a +barrier to adoption. + +For instance, when proper permissions are setup, someone may temporarily delegate the ability to vote on proposals to +a "burner" account that is stored on a mobile phone with only minimal security. + +Other use cases include workers tracking items in a supply chain or farmers submitting field data for analytics +or compliance purposes. + +For all of these use cases, UX would be significantly enhanced by obviating the need for these accounts to always +maintain the appropriate fee balance. This is especially true if we wanted to achieve enterprise adoption for something +like supply chain tracking. + +While one solution would be to have a service that fills up these accounts automatically with the appropriate fees, a better UX +would be provided by allowing these accounts to pull from a common fee pool account with proper spending limits. +A single pool would reduce the churn of making lots of small "fill up" transactions and also more effectively leverages +the resources of the organization setting up the pool. + +## Decision + +As a solution we propose a module, `x/feegrant` which allows one account, the "granter" to grant another account, the "grantee" +an allowance to spend the granter's account balance for fees within certain well-defined limits. + +Fee allowances are defined by the extensible `FeeAllowanceI` interface: + +```go +type FeeAllowanceI { + // Accept can use fee payment requested as well as timestamp of the current block + // to determine whether or not to process this. This is checked in + // Keeper.UseGrantedFees and the return values should match how it is handled there. + // + // If it returns an error, the fee payment is rejected, otherwise it is accepted. + // The FeeAllowance implementation is expected to update it's internal state + // and will be saved again after an acceptance. + // + // If remove is true (regardless of the error), the FeeAllowance will be deleted from storage + // (eg. when it is used up). (See call to RevokeFeeAllowance in Keeper.UseGrantedFees) + Accept(ctx sdk.Context, fee sdk.Coins, msgs []sdk.Msg) (remove bool, err error) + + // ValidateBasic should evaluate this FeeAllowance for internal consistency. + // Don't allow negative amounts, or negative periods for example. + ValidateBasic() error +} +``` + +Two basic fee allowance types, `BasicAllowance` and `PeriodicAllowance` are defined to support known use cases: + +```protobuf +// BasicAllowance implements FeeAllowanceI with a one-time grant of tokens +// that optionally expires. The delegatee can use up to SpendLimit to cover fees. +message BasicAllowance { + // spend_limit specifies the maximum amount of tokens that can be spent + // by this allowance and will be updated as tokens are spent. If it is + // empty, there is no spend limit and any amount of coins can be spent. + repeated cosmos_sdk.v1.Coin spend_limit = 1; + + // expiration specifies an optional time when this allowance expires + google.protobuf.Timestamp expiration = 2; +} + +// PeriodicAllowance extends FeeAllowanceI to allow for both a maximum cap, +// as well as a limit per time period. +message PeriodicAllowance { + BasicAllowance basic = 1; + + // period specifies the time duration in which period_spend_limit coins can + // be spent before that allowance is reset + google.protobuf.Duration period = 2; + + // period_spend_limit specifies the maximum number of coins that can be spent + // in the period + repeated cosmos_sdk.v1.Coin period_spend_limit = 3; + + // period_can_spend is the number of coins left to be spent before the period_reset time + repeated cosmos_sdk.v1.Coin period_can_spend = 4; + + // period_reset is the time at which this period resets and a new one begins, + // it is calculated from the start time of the first transaction after the + // last period ended + google.protobuf.Timestamp period_reset = 5; +} + +``` + +Allowances can be granted and revoked using `MsgGrantAllowance` and `MsgRevokeAllowance`: + +```protobuf +// MsgGrantAllowance adds permission for Grantee to spend up to Allowance +// of fees from the account of Granter. +message MsgGrantAllowance { + string granter = 1; + string grantee = 2; + google.protobuf.Any allowance = 3; + } + + // MsgRevokeAllowance removes any existing FeeAllowance from Granter to Grantee. + message MsgRevokeAllowance { + string granter = 1; + string grantee = 2; + } +``` + +In order to use allowances in transactions, we add a new field `granter` to the transaction `Fee` type: + +```protobuf +package cosmos.tx.v1beta1; + +message Fee { + repeated cosmos.base.v1beta1.Coin amount = 1; + uint64 gas_limit = 2; + string payer = 3; + string granter = 4; +} +``` + +`granter` must either be left empty or must correspond to an account which has granted +a fee allowance to fee payer (either the first signer or the value of the `payer` field). + +A new `AnteDecorator` named `DeductGrantedFeeDecorator` will be created in order to process transactions with `fee_payer` +set and correctly deduct fees based on fee allowances. + +## Consequences + +### Positive + +* improved UX for use cases where it is cumbersome to maintain an account balance just for fees + +### Negative + +### Neutral + +* a new field must be added to the transaction `Fee` message and a new `AnteDecorator` must be +created to use it + +## References + +* Blog article describing initial work: https://medium.com/regen-network/hacking-the-cosmos-cosmwasm-and-key-management-a08b9f561d1b +* Initial public specification: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56 +* Original subkeys proposal from B-harvest which influenced this design: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-030-authz-module.md b/versioned_docs/version-0.47/integrate/architecture/adr-030-authz-module.md new file mode 100644 index 000000000..5aab72c5c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-030-authz-module.md @@ -0,0 +1,258 @@ +# ADR 030: Authorization Module + +## Changelog + +* 2019-11-06: Initial Draft +* 2020-10-12: Updated Draft +* 2020-11-13: Accepted +* 2020-05-06: proto API updates, use `sdk.Msg` instead of `sdk.ServiceMsg` (the latter concept was removed from Cosmos SDK) +* 2022-04-20: Updated the `SendAuthorization` proto docs to clarify the `SpendLimit` is a required field. (Generic authorization can be used with bank msg type url to create limit less bank authorization) + +## Status + +Accepted + +## Abstract + +This ADR defines the `x/authz` module which allows accounts to grant authorizations to perform actions +on behalf of that account to other accounts. + +## Context + +The concrete use cases which motivated this module include: + +* the desire to delegate the ability to vote on proposals to other accounts besides the account which one has +delegated stake +* "sub-keys" functionality, as originally proposed in [\#4480](https://github.com/cosmos/cosmos-sdk/issues/4480) which +is a term used to describe the functionality provided by this module together with +the `fee_grant` module from [ADR 029](./adr-029-fee-grant-module.md) and the [group module](https://github.com/cosmos/cosmos-sdk/tree/main/x/group). + +The "sub-keys" functionality roughly refers to the ability for one account to grant some subset of its capabilities to +other accounts with possibly less robust, but easier to use security measures. For instance, a master account representing +an organization could grant the ability to spend small amounts of the organization's funds to individual employee accounts. +Or an individual (or group) with a multisig wallet could grant the ability to vote on proposals to any one of the member +keys. + +The current implementation is based on work done by the [Gaian's team at Hackatom Berlin 2019](https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation). + +## Decision + +We will create a module named `authz` which provides functionality for +granting arbitrary privileges from one account (the _granter_) to another account (the _grantee_). Authorizations +must be granted for a particular `Msg` service methods one by one using an implementation +of `Authorization` interface. + +### Types + +Authorizations determine exactly what privileges are granted. They are extensible +and can be defined for any `Msg` service method even outside of the module where +the `Msg` method is defined. `Authorization`s reference `Msg`s using their TypeURL. + +#### Authorization + +```go +type Authorization interface { + proto.Message + + // MsgTypeURL returns the fully-qualified Msg TypeURL (as described in ADR 020), + // which will process and accept or reject a request. + MsgTypeURL() string + + // Accept determines whether this grant permits the provided sdk.Msg to be performed, and if + // so provides an upgraded authorization instance. + Accept(ctx sdk.Context, msg sdk.Msg) (AcceptResponse, error) + + // ValidateBasic does a simple validation check that + // doesn't require access to any other information. + ValidateBasic() error +} + +// AcceptResponse instruments the controller of an authz message if the request is accepted +// and if it should be updated or deleted. +type AcceptResponse struct { + // If Accept=true, the controller can accept and authorization and handle the update. + Accept bool + // If Delete=true, the controller must delete the authorization object and release + // storage resources. + Delete bool + // Controller, who is calling Authorization.Accept must check if `Updated != nil`. If yes, + // it must use the updated version and handle the update on the storage level. + Updated Authorization +} +``` + +For example a `SendAuthorization` like this is defined for `MsgSend` that takes +a `SpendLimit` and updates it down to zero: + +```go +type SendAuthorization struct { + // SpendLimit specifies the maximum amount of tokens that can be spent + // by this authorization and will be updated as tokens are spent. This field is required. (Generic authorization + // can be used with bank msg type url to create limit less bank authorization). + SpendLimit sdk.Coins +} + +func (a SendAuthorization) MsgTypeURL() string { + return sdk.MsgTypeURL(&MsgSend{}) +} + +func (a SendAuthorization) Accept(ctx sdk.Context, msg sdk.Msg) (authz.AcceptResponse, error) { + mSend, ok := msg.(*MsgSend) + if !ok { + return authz.AcceptResponse{}, sdkerrors.ErrInvalidType.Wrap("type mismatch") + } + limitLeft, isNegative := a.SpendLimit.SafeSub(mSend.Amount) + if isNegative { + return authz.AcceptResponse{}, sdkerrors.ErrInsufficientFunds.Wrapf("requested amount is more than spend limit") + } + if limitLeft.IsZero() { + return authz.AcceptResponse{Accept: true, Delete: true}, nil + } + + return authz.AcceptResponse{Accept: true, Delete: false, Updated: &SendAuthorization{SpendLimit: limitLeft}}, nil +} +``` + +A different type of capability for `MsgSend` could be implemented +using the `Authorization` interface with no need to change the underlying +`bank` module. + +##### Small notes on `AcceptResponse` + +* The `AcceptResponse.Accept` field will be set to `true` if the authorization is accepted. +However, if it is rejected, the function `Accept` will raise an error (without setting `AcceptResponse.Accept` to `false`). + +* The `AcceptResponse.Updated` field will be set to a non-nil value only if there is a real change to the authorization. +If authorization remains the same (as is, for instance, always the case for a [`GenericAuthorization`](#genericauthorization)), +the field will be `nil`. + +### `Msg` Service + +```protobuf +service Msg { + // Grant grants the provided authorization to the grantee on the granter's + // account with the provided expiration time. + rpc Grant(MsgGrant) returns (MsgGrantResponse); + + // Exec attempts to execute the provided messages using + // authorizations granted to the grantee. Each message should have only + // one signer corresponding to the granter of the authorization. + rpc Exec(MsgExec) returns (MsgExecResponse); + + // Revoke revokes any authorization corresponding to the provided method name on the + // granter's account that has been granted to the grantee. + rpc Revoke(MsgRevoke) returns (MsgRevokeResponse); +} + +// Grant gives permissions to execute +// the provided method with expiration time. +message Grant { + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; +} + +message MsgGrant { + string granter = 1; + string grantee = 2; + + Grant grant = 3 [(gogoproto.nullable) = false]; +} + +message MsgExecResponse { + cosmos.base.abci.v1beta1.Result result = 1; +} + +message MsgExec { + string grantee = 1; + // Authorization Msg requests to execute. Each msg must implement Authorization interface + repeated google.protobuf.Any msgs = 2 [(cosmos_proto.accepts_interface) = "cosmos.base.v1beta1.Msg"];; +} +``` + +### Router Middleware + +The `authz` `Keeper` will expose a `DispatchActions` method which allows other modules to send `Msg`s +to the router based on `Authorization` grants: + +```go +type Keeper interface { + // DispatchActions routes the provided msgs to their respective handlers if the grantee was granted an authorization + // to send those messages by the first (and only) signer of each msg. + DispatchActions(ctx sdk.Context, grantee sdk.AccAddress, msgs []sdk.Msg) sdk.Result` +} +``` + +### CLI + +#### `tx exec` Method + +When a CLI user wants to run a transaction on behalf of another account using `MsgExec`, they +can use the `exec` method. For instance `gaiacli tx gov vote 1 yes --from --generate-only | gaiacli tx authz exec --send-as --from ` +would send a transaction like this: + +```go +MsgExec { + Grantee: mykey, + Msgs: []sdk.Msg{ + MsgVote { + ProposalID: 1, + Voter: cosmos3thsdgh983egh823 + Option: Yes + } + } +} +``` + +#### `tx grant --from ` + +This CLI command will send a `MsgGrant` transaction. `authorization` should be encoded as +JSON on the CLI. + +#### `tx revoke --from ` + +This CLI command will send a `MsgRevoke` transaction. + +### Built-in Authorizations + +#### `SendAuthorization` + +```protobuf +// SendAuthorization allows the grantee to spend up to spend_limit coins from +// the granter's account. +message SendAuthorization { + repeated cosmos.base.v1beta1.Coin spend_limit = 1; +} +``` + +#### `GenericAuthorization` + +```protobuf +// GenericAuthorization gives the grantee unrestricted permissions to execute +// the provided method on behalf of the granter's account. +message GenericAuthorization { + option (cosmos_proto.implements_interface) = "Authorization"; + + // Msg, identified by it's type URL, to grant unrestricted permissions to execute + string msg = 1; +} +``` + +## Consequences + +### Positive + +* Users will be able to authorize arbitrary actions on behalf of their accounts to other +users, improving key management for many use cases +* The solution is more generic than previously considered approaches and the +`Authorization` interface approach can be extended to cover other use cases by +SDK users + +### Negative + +### Neutral + +## References + +* Initial Hackatom implementation: https://github.com/cosmos-gaians/cosmos-sdk/tree/hackatom/x/delegation +* Post-Hackatom spec: https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#delegation-module +* B-Harvest subkeys spec: https://github.com/cosmos/cosmos-sdk/issues/4480 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-031-msg-service.md b/versioned_docs/version-0.47/integrate/architecture/adr-031-msg-service.md new file mode 100644 index 000000000..861f4b3f3 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-031-msg-service.md @@ -0,0 +1,202 @@ +# ADR 031: Protobuf Msg Services + +## Changelog + +* 2020-10-05: Initial Draft +* 2021-04-21: Remove `ServiceMsg`s to follow Protobuf `Any`'s spec, see [#9063](https://github.com/cosmos/cosmos-sdk/issues/9063). + +## Status + +Accepted + +## Abstract + +We want to leverage protobuf `service` definitions for defining `Msg`s which will give us significant developer UX +improvements in terms of the code that is generated and the fact that return types will now be well defined. + +## Context + +Currently `Msg` handlers in the Cosmos SDK do have return values that are placed in the `data` field of the response. +These return values, however, are not specified anywhere except in the golang handler code. + +In early conversations [it was proposed](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc/edit) +that `Msg` return types be captured using a protobuf extension field, ex: + +```protobuf +package cosmos.gov; + +message MsgSubmitProposal + option (cosmos_proto.msg_return) = “uint64”; + string delegator_address = 1; + string validator_address = 2; + repeated sdk.Coin amount = 3; +} +``` + +This was never adopted, however. + +Having a well-specified return value for `Msg`s would improve client UX. For instance, +in `x/gov`, `MsgSubmitProposal` returns the proposal ID as a big-endian `uint64`. +This isn’t really documented anywhere and clients would need to know the internals +of the Cosmos SDK to parse that value and return it to users. + +Also, there may be cases where we want to use these return values programatically. +For instance, https://github.com/cosmos/cosmos-sdk/issues/7093 proposes a method for +doing inter-module Ocaps using the `Msg` router. A well-defined return type would +improve the developer UX for this approach. + +In addition, handler registration of `Msg` types tends to add a bit of +boilerplate on top of keepers and is usually done through manual type switches. +This isn't necessarily bad, but it does add overhead to creating modules. + +## Decision + +We decide to use protobuf `service` definitions for defining `Msg`s as well as +the code generated by them as a replacement for `Msg` handlers. + +Below we define how this will look for the `SubmitProposal` message from `x/gov` module. +We start with a `Msg` `service` definition: + +```protobuf +package cosmos.gov; + +service Msg { + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); +} + +// Note that for backwards compatibility this uses MsgSubmitProposal as the request +// type instead of the more canonical MsgSubmitProposalRequest +message MsgSubmitProposal { + google.protobuf.Any content = 1; + string proposer = 2; +} + +message MsgSubmitProposalResponse { + uint64 proposal_id; +} +``` + +While this is most commonly used for gRPC, overloading protobuf `service` definitions like this does not violate +the intent of the [protobuf spec](https://developers.google.com/protocol-buffers/docs/proto3#services) which says: +> If you don’t want to use gRPC, it’s also possible to use protocol buffers with your own RPC implementation. +With this approach, we would get an auto-generated `MsgServer` interface: + +In addition to clearly specifying return types, this has the benefit of generating client and server code. On the server +side, this is almost like an automatically generated keeper method and could maybe be used intead of keepers eventually +(see [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093)): + +```go +package gov + +type MsgServer interface { + SubmitProposal(context.Context, *MsgSubmitProposal) (*MsgSubmitProposalResponse, error) +} +``` + +On the client side, developers could take advantage of this by creating RPC implementations that encapsulate transaction +logic. Protobuf libraries that use asynchronous callbacks, like [protobuf.js](https://github.com/protobufjs/protobuf.js#using-services) +could use this to register callbacks for specific messages even for transactions that include multiple `Msg`s. + +Each `Msg` service method should have exactly one request parameter: its corresponding `Msg` type. For example, the `Msg` service method `/cosmos.gov.v1beta1.Msg/SubmitProposal` above has exactly one request parameter, namely the `Msg` type `/cosmos.gov.v1beta1.MsgSubmitProposal`. It is important the reader understands clearly the nomenclature difference between a `Msg` service (a Protobuf service) and a `Msg` type (a Protobuf message), and the differences in their fully-qualified name. + +This convention has been decided over the more canonical `Msg...Request` names mainly for backwards compatibility, but also for better readability in `TxBody.messages` (see [Encoding section](#encoding) below): transactions containing `/cosmos.gov.MsgSubmitProposal` read better than those containing `/cosmos.gov.v1beta1.MsgSubmitProposalRequest`. + +One consequence of this convention is that each `Msg` type can be the request parameter of only one `Msg` service method. However, we consider this limitation a good practice in explicitness. + +### Encoding + +Encoding of transactions generated with `Msg` services do not differ from current Protobuf transaction encoding as defined in [ADR-020](./adr-020-protobuf-transaction-encoding.md). We are encoding `Msg` types (which are exactly `Msg` service methods' request parameters) as `Any` in `Tx`s which involves packing the +binary-encoded `Msg` with its type URL. + +### Decoding + +Since `Msg` types are packed into `Any`, decoding transactions messages are done by unpacking `Any`s into `Msg` types. For more information, please refer to [ADR-020](./adr-020-protobuf-transaction-encoding.md#transactions). + +### Routing + +We propose to add a `msg_service_router` in BaseApp. This router is a key/value map which maps `Msg` types' `type_url`s to their corresponding `Msg` service method handler. Since there is a 1-to-1 mapping between `Msg` types and `Msg` service method, the `msg_service_router` has exactly one entry per `Msg` service method. + +When a transaction is processed by BaseApp (in CheckTx or in DeliverTx), its `TxBody.messages` are decoded as `Msg`s. Each `Msg`'s `type_url` is matched against an entry in the `msg_service_router`, and the respective `Msg` service method handler is called. + +For backward compatability, the old handlers are not removed yet. If BaseApp receives a legacy `Msg` with no correspoding entry in the `msg_service_router`, it will be routed via its legacy `Route()` method into the legacy handler. + +### Module Configuration + +In [ADR 021](./adr-021-protobuf-query-encoding.md), we introduced a method `RegisterQueryService` +to `AppModule` which allows for modules to register gRPC queriers. + +To register `Msg` services, we attempt a more extensible approach by converting `RegisterQueryService` +to a more generic `RegisterServices` method: + +```go +type AppModule interface { + RegisterServices(Configurator) + ... +} + +type Configurator interface { + QueryServer() grpc.Server + MsgServer() grpc.Server +} + +// example module: +func (am AppModule) RegisterServices(cfg Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper) +} +``` + +The `RegisterServices` method and the `Configurator` interface are intended to +evolve to satisfy the use cases discussed in [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) +and [\#7122](https://github.com/cosmos/cosmos-sdk/issues/7421). + +When `Msg` services are registered, the framework _should_ verify that all `Msg` types +implement the `sdk.Msg` interface and throw an error during initialization rather +than later when transactions are processed. + +### `Msg` Service Implementation + +Just like query services, `Msg` service methods can retrieve the `sdk.Context` +from the `context.Context` parameter method using the `sdk.UnwrapSDKContext` +method: + +```go +package gov + +func (k Keeper) SubmitProposal(goCtx context.Context, params *types.MsgSubmitProposal) (*MsgSubmitProposalResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + ... +} +``` + +The `sdk.Context` should have an `EventManager` already attached by BaseApp's `msg_service_router`. + +Separate handler definition is no longer needed with this approach. + +## Consequences + +This design changes how a module functionality is exposed and accessed. It deprecates the existing `Handler` interface and `AppModule.Route` in favor of [Protocol Buffer Services](https://developers.google.com/protocol-buffers/docs/proto3#services) and Service Routing described above. This dramatically simplifies the code. We don't need to create handlers and keepers any more. Use of Protocol Buffer auto-generated clients clearly separates the communication interfaces between the module and a modules user. The control logic (aka handlers and keepers) is not exposed any more. A module interface can be seen as a black box accessible through a client API. It's worth to note that the client interfaces are also generated by Protocol Buffers. + +This also allows us to change how we perform functional tests. Instead of mocking AppModules and Router, we will mock a client (server will stay hidden). More specifically: we will never mock `moduleA.MsgServer` in `moduleB`, but rather `moduleA.MsgClient`. One can think about it as working with external services (eg DBs, or online servers...). We assume that the transmission between clients and servers is correctly handled by generated Protocol Buffers. + +Finally, closing a module to client API opens desirable OCAP patterns discussed in ADR-033. Since server implementation and interface is hidden, nobody can hold "keepers"/servers and will be forced to relay on the client interface, which will drive developers for correct encapsulation and software engineering patterns. + +### Pros + +* communicates return type clearly +* manual handler registration and return type marshaling is no longer needed, just implement the interface and register it +* communication interface is automatically generated, the developer can now focus only on the state transition methods - this would improve the UX of [\#7093](https://github.com/cosmos/cosmos-sdk/issues/7093) approach (1) if we chose to adopt that +* generated client code could be useful for clients and tests +* dramatically reduces and simplifies the code + +### Cons + +* using `service` definitions outside the context of gRPC could be confusing (but doesn’t violate the proto3 spec) + +## References + +* [Initial Github Issue \#7122](https://github.com/cosmos/cosmos-sdk/issues/7122) +* [proto 3 Language Guide: Defining Services](https://developers.google.com/protocol-buffers/docs/proto3#services) +* [Initial pre-`Any` `Msg` designs](https://docs.google.com/document/d/1eEgYgvgZqLE45vETjhwIw4VOqK-5hwQtZtjVbiXnIGc) +* [ADR 020](./adr-020-protobuf-transaction-encoding.md) +* [ADR 021](./adr-021-protobuf-query-encoding.md) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-032-typed-events.md b/versioned_docs/version-0.47/integrate/architecture/adr-032-typed-events.md new file mode 100644 index 000000000..1e769f450 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-032-typed-events.md @@ -0,0 +1,319 @@ +# ADR 032: Typed Events + +## Changelog + +* 28-Sept-2020: Initial Draft + +## Authors + +* Anil Kumar (@anilcse) +* Jack Zampolin (@jackzampolin) +* Adam Bozanich (@boz) + +## Status + +Proposed + +## Abstract + +Currently in the Cosmos SDK, events are defined in the handlers for each message as well as `BeginBlock` and `EndBlock`. Each module doesn't have types defined for each event, they are implemented as `map[string]string`. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +## Context + +Currently in the Cosmos SDK, events are defined in the handlers for each message, meaning each module doesn't have a cannonical set of types for each event. Above all else this makes these events difficult to consume as it requires a great deal of raw string matching and parsing. This proposal focuses on updating the events to use **typed events** defined in each module such that emiting and subscribing to events will be much easier. This workflow comes from the experience of the Akash Network team. + +[Our platform](http://github.com/ovrclk/akash) requires a number of programatic on chain interactions both on the provider (datacenter - to bid on new orders and listen for leases created) and user (application developer - to send the app manifest to the provider) side. In addition the Akash team is now maintaining the IBC [`relayer`](https://github.com/ovrclk/relayer), another very event driven process. In working on these core pieces of infrastructure, and integrating lessons learned from Kubernetes developement, our team has developed a standard method for defining and consuming typed events in Cosmos SDK modules. We have found that it is extremely useful in building this type of event driven application. + +As the Cosmos SDK gets used more extensively for apps like `peggy`, other peg zones, IBC, DeFi, etc... there will be an exploding demand for event driven applications to support new features desired by users. We propose upstreaming our findings into the Cosmos SDK to enable all Cosmos SDK applications to quickly and easily build event driven apps to aid their core application. Wallets, exchanges, explorers, and defi protocols all stand to benefit from this work. + +If this proposal is accepted, users will be able to build event driven Cosmos SDK apps in go by just writing `EventHandler`s for their specific event types and passing them to `EventEmitters` that are defined in the Cosmos SDK. + +The end of this proposal contains a detailed example of how to consume events after this refactor. + +This proposal is specifically about how to consume these events as a client of the blockchain, not for intermodule communication. + +## Decision + +**Step-1**: Implement additional functionality in the `types` package: `EmitTypedEvent` and `ParseTypedEvent` functions + +```go +// types/events.go + +// EmitTypedEvent takes typed event and emits converting it into sdk.Event +func (em *EventManager) EmitTypedEvent(event proto.Message) error { + evtType := proto.MessageName(event) + evtJSON, err := codec.ProtoMarshalJSON(event) + if err != nil { + return err + } + + var attrMap map[string]json.RawMessage + err = json.Unmarshal(evtJSON, &attrMap) + if err != nil { + return err + } + + var attrs []abci.EventAttribute + for k, v := range attrMap { + attrs = append(attrs, abci.EventAttribute{ + Key: []byte(k), + Value: v, + }) + } + + em.EmitEvent(Event{ + Type: evtType, + Attributes: attrs, + }) + + return nil +} + +// ParseTypedEvent converts abci.Event back to typed event +func ParseTypedEvent(event abci.Event) (proto.Message, error) { + concreteGoType := proto.MessageType(event.Type) + if concreteGoType == nil { + return nil, fmt.Errorf("failed to retrieve the message of type %q", event.Type) + } + + var value reflect.Value + if concreteGoType.Kind() == reflect.Ptr { + value = reflect.New(concreteGoType.Elem()) + } else { + value = reflect.Zero(concreteGoType) + } + + protoMsg, ok := value.Interface().(proto.Message) + if !ok { + return nil, fmt.Errorf("%q does not implement proto.Message", event.Type) + } + + attrMap := make(map[string]json.RawMessage) + for _, attr := range event.Attributes { + attrMap[string(attr.Key)] = attr.Value + } + + attrBytes, err := json.Marshal(attrMap) + if err != nil { + return nil, err + } + + err = jsonpb.Unmarshal(strings.NewReader(string(attrBytes)), protoMsg) + if err != nil { + return nil, err + } + + return protoMsg, nil +} +``` + +Here, the `EmitTypedEvent` is a method on `EventManager` which takes typed event as input and apply json serialization on it. Then it maps the JSON key/value pairs to `event.Attributes` and emits it in form of `sdk.Event`. `Event.Type` will be the type URL of the proto message. + +When we subscribe to emitted events on the tendermint websocket, they are emitted in the form of an `abci.Event`. `ParseTypedEvent` parses the event back to it's original proto message. + +**Step-2**: Add proto definitions for typed events for msgs in each module: + +For example, let's take `MsgSubmitProposal` of `gov` module and implement this event's type. + +```protobuf +// proto/cosmos/gov/v1beta1/gov.proto +// Add typed event definition + +package cosmos.gov.v1beta1; + +message EventSubmitProposal { + string from_address = 1; + uint64 proposal_id = 2; + TextProposal proposal = 3; +} +``` + +**Step-3**: Refactor event emission to use the typed event created and emit using `sdk.EmitTypedEvent`: + +```go +// x/gov/handler.go +func handleMsgSubmitProposal(ctx sdk.Context, keeper keeper.Keeper, msg types.MsgSubmitProposalI) (*sdk.Result, error) { + ... + types.Context.EventManager().EmitTypedEvent( + &EventSubmitProposal{ + FromAddress: fromAddress, + ProposalId: id, + Proposal: proposal, + }, + ) + ... +} +``` + +### How to subscribe to these typed events in `Client` + +> NOTE: Full code example below + +Users will be able to subscribe using `client.Context.Client.Subscribe` and consume events which are emitted using `EventHandler`s. + +Akash Network has built a simple [`pubsub`](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/pubsub/bus.go#L20). This can be used to subscribe to `abci.Events` and [publish](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L21) them as typed events. + +Please see the below code sample for more detail on this flow looks for clients. + +## Consequences + +### Positive + +* Improves consistency of implementation for the events currently in the Cosmos SDK +* Provides a much more ergonomic way to handle events and facilitates writing event driven applications +* This implementation will support a middleware ecosystem of `EventHandler`s + +### Negative + +## Detailed code example of publishing events + +This ADR also proposes adding affordances to emit and consume these events. This way developers will only need to write +`EventHandler`s which define the actions they desire to take. + +```go +// EventEmitter is a type that describes event emitter functions +// This should be defined in `types/events.go` +type EventEmitter func(context.Context, client.Context, ...EventHandler) error + +// EventHandler is a type of function that handles events coming out of the event bus +// This should be defined in `types/events.go` +type EventHandler func(proto.Message) error + +// Sample use of the functions below +func main() { + ctx, cancel := context.WithCancel(context.Background()) + + if err := TxEmitter(ctx, client.Context{}.WithNodeURI("tcp://localhost:26657"), SubmitProposalEventHandler); err != nil { + cancel() + panic(err) + } + + return +} + +// SubmitProposalEventHandler is an example of an event handler that prints proposal details +// when any EventSubmitProposal is emitted. +func SubmitProposalEventHandler(ev proto.Message) (err error) { + switch event := ev.(type) { + // Handle governance proposal events creation events + case govtypes.EventSubmitProposal: + // Users define business logic here e.g. + fmt.Println(ev.FromAddress, ev.ProposalId, ev.Proposal) + return nil + default: + return nil + } +} + +// TxEmitter is an example of an event emitter that emits just transaction events. This can and +// should be implemented somewhere in the Cosmos SDK. The Cosmos SDK can include an EventEmitters for tm.event='Tx' +// and/or tm.event='NewBlock' (the new block events may contain typed events) +func TxEmitter(ctx context.Context, cliCtx client.Context, ehs ...EventHandler) (err error) { + // Instantiate and start tendermint RPC client + client, err := cliCtx.GetNode() + if err != nil { + return err + } + + if err = client.Start(); err != nil { + return err + } + + // Start the pubsub bus + bus := pubsub.NewBus() + defer bus.Close() + + // Initialize a new error group + eg, ctx := errgroup.WithContext(ctx) + + // Publish chain events to the pubsub bus + eg.Go(func() error { + return PublishChainTxEvents(ctx, client, bus, simapp.ModuleBasics) + }) + + // Subscribe to the bus events + subscriber, err := bus.Subscribe() + if err != nil { + return err + } + + // Handle all the events coming out of the bus + eg.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + return nil + case <-subscriber.Done(): + return nil + case ev := <-subscriber.Events(): + for _, eh := range ehs { + if err = eh(ev); err != nil { + break + } + } + } + } + return nil + }) + + return group.Wait() +} + +// PublishChainTxEvents events using tmclient. Waits on context shutdown signals to exit. +func PublishChainTxEvents(ctx context.Context, client tmclient.EventsClient, bus pubsub.Bus, mb module.BasicManager) (err error) { + // Subscribe to transaction events + txch, err := client.Subscribe(ctx, "txevents", "tm.event='Tx'", 100) + if err != nil { + return err + } + + // Unsubscribe from transaction events on function exit + defer func() { + err = client.UnsubscribeAll(ctx, "txevents") + }() + + // Use errgroup to manage concurrency + g, ctx := errgroup.WithContext(ctx) + + // Publish transaction events in a goroutine + g.Go(func() error { + var err error + for { + select { + case <-ctx.Done(): + break + case ed := <-ch: + switch evt := ed.Data.(type) { + case tmtypes.EventDataTx: + if !evt.Result.IsOK() { + continue + } + // range over events, parse them using the basic manager and + // send them to the pubsub bus + for _, abciEv := range events { + typedEvent, err := sdk.ParseTypedEvent(abciEv) + if err != nil { + return er + } + if err := bus.Publish(typedEvent); err != nil { + bus.Close() + return + } + continue + } + } + } + } + return err + }) + + // Exit on error or context cancelation + return g.Wait() +} +``` + +## References + +* [Publish Custom Events via a bus](https://github.com/ovrclk/akash/blob/90d258caeb933b611d575355b8df281208a214f8/events/publish.go#L19-L58) +* [Consuming the events in `Client`](https://github.com/ovrclk/deploy/blob/bf6c633ab6c68f3026df59efd9982d6ca1bf0561/cmd/event-handlers.go#L57) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-033-protobuf-inter-module-comm.md b/versioned_docs/version-0.47/integrate/architecture/adr-033-protobuf-inter-module-comm.md new file mode 100644 index 000000000..ea634dac9 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-033-protobuf-inter-module-comm.md @@ -0,0 +1,400 @@ +# ADR 033: Protobuf-based Inter-Module Communication + +## Changelog + +* 2020-10-05: Initial Draft + +## Status + +Proposed + +## Abstract + +This ADR introduces a system for permissioned inter-module communication leveraging the protobuf `Query` and `Msg` +service definitions defined in [ADR 021](./adr-021-protobuf-query-encoding.md) and +[ADR 031](./adr-031-msg-service.md) which provides: + +* stable protobuf based module interfaces to potentially later replace the keeper paradigm +* stronger inter-module object capabilities (OCAPs) guarantees +* module accounts and sub-account authorization + +## Context + +In the current Cosmos SDK documentation on the [Object-Capability Model](../core/10-ocap.md), it is stated that: + +> We assume that a thriving ecosystem of Cosmos SDK modules that are easy to compose into a blockchain application will contain faulty or malicious modules. + +There is currently not a thriving ecosystem of Cosmos SDK modules. We hypothesize that this is in part due to: + +1. lack of a stable v1.0 Cosmos SDK to build modules off of. Module interfaces are changing, sometimes dramatically, from +point release to point release, often for good reasons, but this does not create a stable foundation to build on. +2. lack of a properly implemented object capability or even object-oriented encapsulation system which makes refactors +of module keeper interfaces inevitable because the current interfaces are poorly constrained. + +### `x/bank` Case Study + +Currently the `x/bank` keeper gives pretty much unrestricted access to any module which references it. For instance, the +`SetBalance` method allows the caller to set the balance of any account to anything, bypassing even proper tracking of supply. + +There appears to have been some later attempts to implement some semblance of OCAPs using module-level minting, staking +and burning permissions. These permissions allow a module to mint, burn or delegate tokens with reference to the module’s +own account. These permissions are actually stored as a `[]string` array on the `ModuleAccount` type in state. + +However, these permissions don’t really do much. They control what modules can be referenced in the `MintCoins`, +`BurnCoins` and `DelegateCoins***` methods, but for one there is no unique object capability token that controls access — +just a simple string. So the `x/upgrade` module could mint tokens for the `x/staking` module simple by calling +`MintCoins(“staking”)`. Furthermore, all modules which have access to these keeper methods, also have access to +`SetBalance` negating any other attempt at OCAPs and breaking even basic object-oriented encapsulation. + +## Decision + +Based on [ADR-021](./adr-021-protobuf-query-encoding.md) and [ADR-031](./adr-031-msg-service.md), we introduce the +Inter-Module Communication framework for secure module authorization and OCAPs. +When implemented, this could also serve as an alternative to the existing paradigm of passing keepers between +modules. The approach outlined here-in is intended to form the basis of a Cosmos SDK v1.0 that provides the necessary +stability and encapsulation guarantees that allow a thriving module ecosystem to emerge. + +Of particular note — the decision is to _enable_ this functionality for modules to adopt at their own discretion. +Proposals to migrate existing modules to this new paradigm will have to be a separate conversation, potentially +addressed as amendments to this ADR. + +### New "Keeper" Paradigm + +In [ADR 021](./adr-021-protobuf-query-encoding.md), a mechanism for using protobuf service definitions to define queriers +was introduced and in [ADR 31](./adr-031-msg-service.md), a mechanism for using protobuf service to define `Msg`s was added. +Protobuf service definitions generate two golang interfaces representing the client and server sides of a service plus +some helper code. Here is a minimal example for the bank `cosmos.bank.Msg/Send` message type: + +```go +package bank + +type MsgClient interface { + Send(context.Context, *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) +} + +type MsgServer interface { + Send(context.Context, *MsgSend) (*MsgSendResponse, error) +} +``` + +[ADR 021](./adr-021-protobuf-query-encoding.md) and [ADR 31](./adr-031-msg-service.md) specifies how modules can implement the generated `QueryServer` +and `MsgServer` interfaces as replacements for the legacy queriers and `Msg` handlers respectively. + +In this ADR we explain how modules can make queries and send `Msg`s to other modules using the generated `QueryClient` +and `MsgClient` interfaces and propose this mechanism as a replacement for the existing `Keeper` paradigm. To be clear, +this ADR does not necessitate the creation of new protobuf definitions or services. Rather, it leverages the same proto +based service interfaces already used by clients for inter-module communication. + +Using this `QueryClient`/`MsgClient` approach has the following key benefits over exposing keepers to external modules: + +1. Protobuf types are checked for breaking changes using [buf](https://buf.build/docs/breaking-overview) and because of +the way protobuf is designed this will give us strong backwards compatibility guarantees while allowing for forward +evolution. +2. The separation between the client and server interfaces will allow us to insert permission checking code in between +the two which checks if one module is authorized to send the specified `Msg` to the other module providing a proper +object capability system (see below). +3. The router for inter-module communication gives us a convenient place to handle rollback of transactions, +enabling atomicy of operations ([currently a problem](https://github.com/cosmos/cosmos-sdk/issues/8030)). Any failure within a module-to-module call would result in a failure of the entire +transaction + +This mechanism has the added benefits of: + +* reducing boilerplate through code generation, and +* allowing for modules in other languages either via a VM like CosmWasm or sub-processes using gRPC + +### Inter-module Communication + +To use the `Client` generated by the protobuf compiler we need a `grpc.ClientConn` [interface](https://github.com/grpc/grpc-go/blob/v1.49.x/clientconn.go#L441-L450) +implementation. For this we introduce +a new type, `ModuleKey`, which implements the `grpc.ClientConn` interface. `ModuleKey` can be thought of as the "private +key" corresponding to a module account, where authentication is provided through use of a special `Invoker()` function, +described in more detail below. + +Blockchain users (external clients) use their account's private key to sign transactions containing `Msg`s where they are listed as signers (each +message specifies required signers with `Msg.GetSigner`). The authentication checks is performed by `AnteHandler`. + +Here, we extend this process, by allowing modules to be identified in `Msg.GetSigners`. When a module wants to trigger the execution a `Msg` in another module, +its `ModuleKey` acts as the sender (through the `ClientConn` interface we describe below) and is set as a sole "signer". It's worth to note +that we don't use any cryptographic signature in this case. +For example, module `A` could use its `A.ModuleKey` to create `MsgSend` object for `/cosmos.bank.Msg/Send` transaction. `MsgSend` validation +will assure that the `from` account (`A.ModuleKey` in this case) is the signer. + +Here's an example of a hypothetical module `foo` interacting with `x/bank`: + +```go +package foo + + +type FooMsgServer { + // ... + + bankQuery bank.QueryClient + bankMsg bank.MsgClient +} + +func NewFooMsgServer(moduleKey RootModuleKey, ...) FooMsgServer { + // ... + + return FooMsgServer { + // ... + modouleKey: moduleKey, + bankQuery: bank.NewQueryClient(moduleKey), + bankMsg: bank.NewMsgClient(moduleKey), + } +} + +func (foo *FooMsgServer) Bar(ctx context.Context, req *MsgBarRequest) (*MsgBarResponse, error) { + balance, err := foo.bankQuery.Balance(&bank.QueryBalanceRequest{Address: fooMsgServer.moduleKey.Address(), Denom: "foo"}) + + ... + + res, err := foo.bankMsg.Send(ctx, &bank.MsgSendRequest{FromAddress: fooMsgServer.moduleKey.Address(), ...}) + + ... +} +``` + +This design is also intended to be extensible to cover use cases of more fine grained permissioning like minting by +denom prefix being restricted to certain modules (as discussed in +[#7459](https://github.com/cosmos/cosmos-sdk/pull/7459#discussion_r529545528)). + +### `ModuleKey`s and `ModuleID`s + +A `ModuleKey` can be thought of as a "private key" for a module account and a `ModuleID` can be thought of as the +corresponding "public key". From the [ADR 028](./adr-028-public-key-addresses.md), modules can have both a root module account and any number of sub-accounts +or derived accounts that can be used for different pools (ex. staking pools) or managed accounts (ex. group +accounts). We can also think of module sub-accounts as similar to derived keys - there is a root key and then some +derivation path. `ModuleID` is a simple struct which contains the module name and optional "derivation" path, +and forms its address based on the `AddressHash` method from [the ADR-028](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-028-public-key-addresses.md): + +```go +type ModuleID struct { + ModuleName string + Path []byte +} + +func (key ModuleID) Address() []byte { + return AddressHash(key.ModuleName, key.Path) +} +``` + +In addition to being able to generate a `ModuleID` and address, a `ModuleKey` contains a special function called +`Invoker` which is the key to safe inter-module access. The `Invoker` creates an `InvokeFn` closure which is used as an `Invoke` method in +the `grpc.ClientConn` interface and under the hood is able to route messages to the appropriate `Msg` and `Query` handlers +performing appropriate security checks on `Msg`s. This allows for even safer inter-module access than keeper's whose +private member variables could be manipulated through reflection. Golang does not support reflection on a function +closure's captured variables and direct manipulation of memory would be needed for a truly malicious module to bypass +the `ModuleKey` security. + +The two `ModuleKey` types are `RootModuleKey` and `DerivedModuleKey`: + +```go +type Invoker func(callInfo CallInfo) func(ctx context.Context, request, response interface{}, opts ...interface{}) error + +type CallInfo { + Method string + Caller ModuleID +} + +type RootModuleKey struct { + moduleName string + invoker Invoker +} + +func (rm RootModuleKey) Derive(path []byte) DerivedModuleKey { /* ... */} + +type DerivedModuleKey struct { + moduleName string + path []byte + invoker Invoker +} +``` + +A module can get access to a `DerivedModuleKey`, using the `Derive(path []byte)` method on `RootModuleKey` and then +would use this key to authenticate `Msg`s from a sub-account. Ex: + +```go +package foo + +func (fooMsgServer *MsgServer) Bar(ctx context.Context, req *MsgBar) (*MsgBarResponse, error) { + derivedKey := fooMsgServer.moduleKey.Derive(req.SomePath) + bankMsgClient := bank.NewMsgClient(derivedKey) + res, err := bankMsgClient.Balance(ctx, &bank.MsgSend{FromAddress: derivedKey.Address(), ...}) + ... +} +``` + +In this way, a module can gain permissioned access to a root account and any number of sub-accounts and send +authenticated `Msg`s from these accounts. The `Invoker` `callInfo.Caller` parameter is used under the hood to +distinguish between different module accounts, but either way the function returned by `Invoker` only allows `Msg`s +from either the root or a derived module account to pass through. + +Note that `Invoker` itself returns a function closure based on the `CallInfo` passed in. This will allow client implementations +in the future that cache the invoke function for each method type avoiding the overhead of hash table lookup. +This would reduce the performance overhead of this inter-module communication method to the bare minimum required for +checking permissions. + +To re-iterate, the closure only allows access to authorized calls. There is no access to anything else regardless of any +name impersonation. + +Below is a rough sketch of the implementation of `grpc.ClientConn.Invoke` for `RootModuleKey`: + +```go +func (key RootModuleKey) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...grpc.CallOption) error { + f := key.invoker(CallInfo {Method: method, Caller: ModuleID {ModuleName: key.moduleName}}) + return f(ctx, args, reply) +} +``` + +### `AppModule` Wiring and Requirements + +In [ADR 031](./adr-031-msg-service.md), the `AppModule.RegisterService(Configurator)` method was introduced. To support +inter-module communication, we extend the `Configurator` interface to pass in the `ModuleKey` and to allow modules to +specify their dependencies on other modules using `RequireServer()`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + + ModuleKey() ModuleKey + RequireServer(msgServer interface{}) +} +``` + +The `ModuleKey` is passed to modules in the `RegisterService` method itself so that `RegisterServices` serves as a single +entry point for configuring module services. This is intended to also have the side-effect of greatly reducing boilerplate in +`app.go`. For now, `ModuleKey`s will be created based on `AppModuleBasic.Name()`, but a more flexible system may be +introduced in the future. The `ModuleManager` will handle creation of module accounts behind the scenes. + +Because modules do not get direct access to each other anymore, modules may have unfulfilled dependencies. To make sure +that module dependencies are resolved at startup, the `Configurator.RequireServer` method should be added. The `ModuleManager` +will make sure that all dependencies declared with `RequireServer` can be resolved before the app starts. An example +module `foo` could declare it's dependency on `x/bank` like this: + +```go +package foo + +func (am AppModule) RegisterServices(cfg Configurator) { + cfg.RequireServer((*bank.QueryServer)(nil)) + cfg.RequireServer((*bank.MsgServer)(nil)) +} +``` + +### Security Considerations + +In addition to checking for `ModuleKey` permissions, a few additional security precautions will need to be taken by +the underlying router infrastructure. + +#### Recursion and Re-entry + +Recursive or re-entrant method invocations pose a potential security threat. This can be a problem if Module A +calls Module B and Module B calls module A again in the same call. + +One basic way for the router system to deal with this is to maintain a call stack which prevents a module from +being referenced more than once in the call stack so that there is no re-entry. A `map[string]interface{}` table +in the router could be used to perform this security check. + +#### Queries + +Queries in Cosmos SDK are generally un-permissioned so allowing one module to query another module should not pose +any major security threats assuming basic precautions are taken. The basic precaution that the router system will +need to take is making sure that the `sdk.Context` passed to query methods does not allow writing to the store. This +can be done for now with a `CacheMultiStore` as is currently done for `BaseApp` queries. + +### Internal Methods + +In many cases, we may wish for modules to call methods on other modules which are not exposed to clients at all. For this +purpose, we add the `InternalServer` method to `Configurator`: + +```go +type Configurator interface { + MsgServer() grpc.Server + QueryServer() grpc.Server + InternalServer() grpc.Server +} +``` + +As an example, x/slashing's Slash must call x/staking's Slash, but we don't want to expose x/staking's Slash to end users +and clients. + +Internal protobuf services will be defined in a corresponding `internal.proto` file in the given module's +proto package. + +Services registered against `InternalServer` will be callable from other modules but not by external clients. + +An alternative solution to internal-only methods could involve hooks / plugins as discussed [here](https://github.com/cosmos/cosmos-sdk/pull/7459#issuecomment-733807753). +A more detailed evaluation of a hooks / plugin system will be addressed later in follow-ups to this ADR or as a separate +ADR. + +### Authorization + +By default, the inter-module router requires that messages are sent by the first signer returned by `GetSigners`. The +inter-module router should also accept authorization middleware such as that provided by [ADR 030](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-030-authz-module.md). +This middleware will allow accounts to otherwise specific module accounts to perform actions on their behalf. +Authorization middleware should take into account the need to grant certain modules effectively "admin" privileges to +other modules. This will be addressed in separate ADRs or updates to this ADR. + +### Future Work + +Other future improvements may include: + +* custom code generation that: + * simplifies interfaces (ex. generates code with `sdk.Context` instead of `context.Context`) + * optimizes inter-module calls - for instance caching resolved methods after first invocation +* combining `StoreKey`s and `ModuleKey`s into a single interface so that modules have a single OCAPs handle +* code generation which makes inter-module communication more performant +* decoupling `ModuleKey` creation from `AppModuleBasic.Name()` so that app's can override root module account names +* inter-module hooks and plugins + +## Alternatives + +### MsgServices vs `x/capability` + +The `x/capability` module does provide a proper object-capability implementation that can be used by any module in the +Cosmos SDK and could even be used for inter-module OCAPs as described in [\#5931](https://github.com/cosmos/cosmos-sdk/issues/5931). + +The advantages of the approach described in this ADR are mostly around how it integrates with other parts of the Cosmos SDK, +specifically: + +* protobuf so that: + * code generation of interfaces can be leveraged for a better dev UX + * module interfaces are versioned and checked for breakage using [buf](https://docs.buf.build/breaking-overview) +* sub-module accounts as per ADR 028 +* the general `Msg` passing paradigm and the way signers are specified by `GetSigners` + +Also, this is a complete replacement for keepers and could be applied to _all_ inter-module communication whereas the +`x/capability` approach in #5931 would need to be applied method by method. + +## Consequences + +### Backwards Compatibility + +This ADR is intended to provide a pathway to a scenario where there is greater long term compatibility between modules. +In the short-term, this will likely result in breaking certain `Keeper` interfaces which are too permissive and/or +replacing `Keeper` interfaces altogether. + +### Positive + +* an alternative to keepers which can more easily lead to stable inter-module interfaces +* proper inter-module OCAPs +* improved module developer DevX, as commented on by several particpants on + [Architecture Review Call, Dec 3](https://hackmd.io/E0wxxOvRQ5qVmTf6N_k84Q) +* lays the groundwork for what can be a greatly simplified `app.go` +* router can be setup to enforce atomic transactions for module-to-module calls + +### Negative + +* modules which adopt this will need significant refactoring + +### Neutral + +## Test Cases [optional] + +## References + +* [ADR 021](./adr-021-protobuf-query-encoding.md) +* [ADR 031](./adr-031-msg-service.md) +* [ADR 028](./adr-028-public-key-addresses.md) +* [ADR 030 draft](https://github.com/cosmos/cosmos-sdk/pull/7105) +* [Object-Capability Model](https://docs.network.com/main/core/ocap) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-034-account-rekeying.md b/versioned_docs/version-0.47/integrate/architecture/adr-034-account-rekeying.md new file mode 100644 index 000000000..cd9b91469 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-034-account-rekeying.md @@ -0,0 +1,76 @@ +# ADR 034: Account Rekeying + +## Changelog + +* 30-09-2020: Initial Draft + +## Status + +PROPOSED + +## Abstract + +Account rekeying is a process hat allows an account to replace its authentication pubkey with a new one. + +## Context + +Currently, in the Cosmos SDK, the address of an auth `BaseAccount` is based on the hash of the public key. Once an account is created, the public key for the account is set in stone, and cannot be changed. This can be a problem for users, as key rotation is a useful security practice, but is not possible currently. Furthermore, as multisigs are a type of pubkey, once a multisig for an account is set, it can not be updated. This is problematic, as multisigs are often used by organizations or companies, who may need to change their set of multisig signers for internal reasons. + +Transferring all the assets of an account to a new account with the updated pubkey is not sufficient, because some "engagements" of an account are not easily transferable. For example, in staking, to transfer bonded Atoms, an account would have to unbond all delegations and wait the three week unbonding period. Even more significantly, for validator operators, ownership over a validator is not transferrable at all, meaning that the operator key for a validator can never be updated, leading to poor operational security for validators. + +## Decision + +We propose the addition of a new feature to `x/auth` that allows accounts to update the public key associated with their account, while keeping the address the same. + +This is possible because the Cosmos SDK `BaseAccount` stores the public key for an account in state, instead of making the assumption that the public key is included in the transaction (whether explicitly or implicitly through the signature) as in other blockchains such as Bitcoin and Ethereum. Because the public key is stored on chain, it is okay for the public key to not hash to the address of an account, as the address is not pertinent to the signature checking process. + +To build this system, we design a new Msg type as follows: + +```protobuf +service Msg { + rpc ChangePubKey(MsgChangePubKey) returns (MsgChangePubKeyResponse); +} + +message MsgChangePubKey { + string address = 1; + google.protobuf.Any pub_key = 2; +} + +message MsgChangePubKeyResponse {} +``` + +The MsgChangePubKey transaction needs to be signed by the existing pubkey in state. + +Once, approved, the handler for this message type, which takes in the AccountKeeper, will update the in-state pubkey for the account and replace it with the pubkey from the Msg. + +An account that has had its pubkey changed cannot be automatically pruned from state. This is because if pruned, the original pubkey of the account would be needed to recreate the same address, but the owner of the address may not have the original pubkey anymore. Currently, we do not automatically prune any accounts anyways, but we would like to keep this option open the road (this is the purpose of account numbers). To resolve this, we charge an additional gas fee for this operation to compensate for this this externality (this bound gas amount is configured as parameter `PubKeyChangeCost`). The bonus gas is charged inside the handler, using the `ConsumeGas` function. Furthermore, in the future, we can allow accounts that have rekeyed manually prune themselves using a new Msg type such as `MsgDeleteAccount`. Manually pruning accounts can give a gas refund as an incentive for performing the action. + +```go + amount := ak.GetParams(ctx).PubKeyChangeCost + ctx.GasMeter().ConsumeGas(amount, "pubkey change fee") +``` + +Everytime a key for an address is changed, we will store a log of this change in the state of the chain, thus creating a stack of all previous keys for an address and the time intervals for which they were active. This allows dapps and clients to easily query past keys for an account which may be useful for features such as verifying timestamped off-chain signed messages. + +## Consequences + +### Positive + +* Will allow users and validator operators to employ better operational security practices with key rotation. +* Will allow organizations or groups to easily change and add/remove multisig signers. + +### Negative + +Breaks the current assumed relationship between address and pubkeys as H(pubkey) = address. This has a couple of consequences. + +* This makes wallets that support this feature more complicated. For example, if an address on chain was updated, the corresponding key in the CLI wallet also needs to be updated. +* Cannot automatically prune accounts with 0 balance that have had their pubkey changed. + +### Neutral + +* While the purpose of this is intended to allow the owner of an account to update to a new pubkey they own, this could technically also be used to transfer ownership of an account to a new owner. For example, this could be use used to sell a staked position without unbonding or an account that has vesting tokens. However, the friction of this is very high as this would essentially have to be done as a very specific OTC trade. Furthermore, additional constraints could be added to prevent accouns with Vesting tokens to use this feature. +* Will require that PubKeys for an account are included in the genesis exports. + +## References + +* https://www.algorand.com/resources/blog/announcing-rekeying diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-035-rosetta-api-support.md b/versioned_docs/version-0.47/integrate/architecture/adr-035-rosetta-api-support.md new file mode 100644 index 000000000..01a81048b --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-035-rosetta-api-support.md @@ -0,0 +1,211 @@ +# ADR 035: Rosetta API Support + +## Authors + +* Jonathan Gimeno (@jgimeno) +* David Grierson (@senormonito) +* Alessio Treglia (@alessio) +* Frojdy Dymylja (@fdymylja) + +## Changelog + +* 2021-05-12: the external library [cosmos-rosetta-gateway](https://github.com/tendermint/cosmos-rosetta-gateway) has been moved within the Cosmos SDK. + +## Context + +[Rosetta API](https://www.rosetta-api.org/) is an open-source specification and set of tools developed by Coinbase to +standardise blockchain interactions. + +Through the use of a standard API for integrating blockchain applications it will + +* Be easier for a user to interact with a given blockchain +* Allow exchanges to integrate new blockchains quickly and easily +* Enable application developers to build cross-blockchain applications such as block explorers, wallets and dApps at + considerably lower cost and effort. + +## Decision + +It is clear that adding Rosetta API support to the Cosmos SDK will bring value to all the developers and +Cosmos SDK based chains in the ecosystem. How it is implemented is key. + +The driving principles of the proposed design are: + +1. **Extensibility:** it must be as riskless and painless as possible for application developers to set-up network + configurations to expose Rosetta API-compliant services. +2. **Long term support:** This proposal aims to provide support for all the supported Cosmos SDK release series. +3. **Cost-efficiency:** Backporting changes to Rosetta API specifications from `master` to the various stable + branches of Cosmos SDK is a cost that needs to be reduced. + +We will achieve these delivering on these principles by the following: + +1. There will be a package `rosetta/lib` + for the implementation of the core Rosetta API features, particularly: + a. The types and interfaces (`Client`, `OfflineClient`...), this separates design from implementation detail. + b. The `Server` functionality as this is independent of the Cosmos SDK version. + c. The `Online/OfflineNetwork`, which is not exported, and implements the rosetta API using the `Client` interface to query the node, build tx and so on. + d. The `errors` package to extend rosetta errors. +2. Due to differences between the Cosmos release series, each series will have its own specific implementation of `Client` interface. +3. There will be two options for starting an API service in applications: + a. API shares the application process + b. API-specific process. + +## Architecture + +### The External Repo + +As section will describe the proposed external library, including the service implementation, plus the defined types and interfaces. + +#### Server + +`Server` is a simple `struct` that is started and listens to the port specified in the settings. This is meant to be used across all the Cosmos SDK versions that are actively supported. + +The constructor follows: + +`func NewServer(settings Settings) (Server, error)` + +`Settings`, which are used to construct a new server, are the following: + +```go +// Settings define the rosetta server settings +type Settings struct { + // Network contains the information regarding the network + Network *types.NetworkIdentifier + // Client is the online API handler + Client crgtypes.Client + // Listen is the address the handler will listen at + Listen string + // Offline defines if the rosetta service should be exposed in offline mode + Offline bool + // Retries is the number of readiness checks that will be attempted when instantiating the handler + // valid only for online API + Retries int + // RetryWait is the time that will be waited between retries + RetryWait time.Duration +} +``` + +#### Types + +Package types uses a mixture of rosetta types and custom defined type wrappers, that the client must parse and return while executing operations. + +##### Interfaces + +Every SDK version uses a different format to connect (rpc, gRPC, etc), query and build transactions, we have abstracted this in what is the `Client` interface. +The client uses rosetta types, whilst the `Online/OfflineNetwork` takes care of returning correctly parsed rosetta responses and errors. + +Each Cosmos SDK release series will have their own `Client` implementations. +Developers can implement their own custom `Client`s as required. + +```go +// Client defines the API the client implementation should provide. +type Client interface { + // Needed if the client needs to perform some action before connecting. + Bootstrap() error + // Ready checks if the servicer constraints for queries are satisfied + // for example the node might still not be ready, it's useful in process + // when the rosetta instance might come up before the node itself + // the servicer must return nil if the node is ready + Ready() error + + // Data API + + // Balances fetches the balance of the given address + // if height is not nil, then the balance will be displayed + // at the provided height, otherwise last block balance will be returned + Balances(ctx context.Context, addr string, height *int64) ([]*types.Amount, error) + // BlockByHashAlt gets a block and its transaction at the provided height + BlockByHash(ctx context.Context, hash string) (BlockResponse, error) + // BlockByHeightAlt gets a block given its height, if height is nil then last block is returned + BlockByHeight(ctx context.Context, height *int64) (BlockResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHash(ctx context.Context, hash string) (BlockTransactionsResponse, error) + // BlockTransactionsByHash gets the block, parent block and transactions + // given the block hash. + BlockTransactionsByHeight(ctx context.Context, height *int64) (BlockTransactionsResponse, error) + // GetTx gets a transaction given its hash + GetTx(ctx context.Context, hash string) (*types.Transaction, error) + // GetUnconfirmedTx gets an unconfirmed Tx given its hash + // NOTE(fdymylja): NOT IMPLEMENTED YET! + GetUnconfirmedTx(ctx context.Context, hash string) (*types.Transaction, error) + // Mempool returns the list of the current non confirmed transactions + Mempool(ctx context.Context) ([]*types.TransactionIdentifier, error) + // Peers gets the peers currently connected to the node + Peers(ctx context.Context) ([]*types.Peer, error) + // Status returns the node status, such as sync data, version etc + Status(ctx context.Context) (*types.SyncStatus, error) + + // Construction API + + // PostTx posts txBytes to the node and returns the transaction identifier plus metadata related + // to the transaction itself. + PostTx(txBytes []byte) (res *types.TransactionIdentifier, meta map[string]interface{}, err error) + // ConstructionMetadataFromOptions + ConstructionMetadataFromOptions(ctx context.Context, options map[string]interface{}) (meta map[string]interface{}, err error) + OfflineClient +} + +// OfflineClient defines the functionalities supported without having access to the node +type OfflineClient interface { + NetworkInformationProvider + // SignedTx returns the signed transaction given the tx bytes (msgs) plus the signatures + SignedTx(ctx context.Context, txBytes []byte, sigs []*types.Signature) (signedTxBytes []byte, err error) + // TxOperationsAndSignersAccountIdentifiers returns the operations related to a transaction and the account + // identifiers if the transaction is signed + TxOperationsAndSignersAccountIdentifiers(signed bool, hexBytes []byte) (ops []*types.Operation, signers []*types.AccountIdentifier, err error) + // ConstructionPayload returns the construction payload given the request + ConstructionPayload(ctx context.Context, req *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) + // PreprocessOperationsToOptions returns the options given the preprocess operations + PreprocessOperationsToOptions(ctx context.Context, req *types.ConstructionPreprocessRequest) (options map[string]interface{}, err error) + // AccountIdentifierFromPublicKey returns the account identifier given the public key + AccountIdentifierFromPublicKey(pubKey *types.PublicKey) (*types.AccountIdentifier, error) +} +``` + +### 2. Cosmos SDK Implementation + +The Cosmos SDK implementation, based on version, takes care of satisfying the `Client` interface. +In Stargate, Launchpad and 0.37, we have introduced the concept of rosetta.Msg, this message is not in the shared repository as the sdk.Msg type differs between Cosmos SDK versions. + +The rosetta.Msg interface follows: + +```go +// Msg represents a cosmos-sdk message that can be converted from and to a rosetta operation. +type Msg interface { + sdk.Msg + ToOperations(withStatus, hasError bool) []*types.Operation + FromOperations(ops []*types.Operation) (sdk.Msg, error) +} +``` + +Hence developers who want to extend the rosetta set of supported operations just need to extend their module's sdk.Msgs with the `ToOperations` and `FromOperations` methods. + +### 3. API service invocation + +As stated at the start, application developers will have two methods for invocation of the Rosetta API service: + +1. Shared process for both application and API +2. Standalone API service + +#### Shared Process (Only Stargate) + +Rosetta API service could run within the same execution process as the application. This would be enabled via app.toml settings, and if gRPC is not enabled the rosetta instance would be spinned in offline mode (tx building capabilities only). + +#### Separate API service + +Client application developers can write a new command to launch a Rosetta API server as a separate process too, using the rosetta command contained in the `/server/rosetta` package. Construction of the command depends on Cosmos SDK version. Examples can be found inside `simd` for stargate, and `contrib/rosetta/simapp` for other release series. + +## Status + +Proposed + +## Consequences + +### Positive + +* Out-of-the-box Rosetta API support within Cosmos SDK. +* Blockchain interface standardisation + +## References + +* https://www.rosetta-api.org/ diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-036-arbitrary-signature.md b/versioned_docs/version-0.47/integrate/architecture/adr-036-arbitrary-signature.md new file mode 100644 index 000000000..fe9dada54 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-036-arbitrary-signature.md @@ -0,0 +1,132 @@ +# ADR 036: Arbitrary Message Signature Specification + +## Changelog + +* 28/10/2020 - Initial draft + +## Authors + +* Antoine Herzog (@antoineherzog) +* Zaki Manian (@zmanian) +* Aleksandr Bezobchuk (alexanderbez) [1] +* Frojdi Dymylja (@fdymylja) + +## Status + +Draft + +## Abstract + +Currently, in the Cosmos SDK, there is no convention to sign arbitrary message like on Ethereum. We propose with this specification, for Cosmos SDK ecosystem, a way to sign and validate off-chain arbitrary messages. + +This specification serves the purpose of covering every use case, this means that cosmos-sdk applications developers decide how to serialize and represent `Data` to users. + +## Context + +Having the ability to sign messages off-chain has proven to be a fundamental aspect of nearly any blockchain. The notion of signing messages off-chain has many added benefits such as saving on computational costs and reducing transaction throughput and overhead. Within the context of the Cosmos, some of the major applications of signing such data includes, but is not limited to, providing a cryptographic secure and verifiable means of proving validator identity and possibly associating it with some other framework or organization. In addition, having the ability to sign Cosmos messages with a Ledger or similar HSM device. + +Further context and use cases can be found in the references links. + +## Decision + +The aim is being able to sign arbitrary messages, even using Ledger or similar HSM devices. + +As a result signed messages should look roughly like Cosmos SDK messages but **must not** be a valid on-chain transaction. `chain-id`, `account_number` and `sequence` can all be assigned invalid values. + +Cosmos SDK 0.40 also introduces a concept of “auth_info” this can specify SIGN_MODES. + +A spec should include an `auth_info` that supports SIGN_MODE_DIRECT and SIGN_MODE_LEGACY_AMINO. + +Create the `offchain` proto definitions, we extend the auth module with `offchain` package to offer functionalities to verify and sign offline messages. + +An offchain transaction follows these rules: + +* the memo must be empty +* nonce, sequence number must be equal to 0 +* chain-id must be equal to “” +* fee gas must be equal to 0 +* fee amount must be an empty array + +Verification of an offchain transaction follows the same rules as an onchain one, except for the spec differences highlighted above. + +The first message added to the `offchain` package is `MsgSignData`. + +`MsgSignData` allows developers to sign arbitrary bytes valid offchain only. Where `Signer` is the account address of the signer. `Data` is arbitrary bytes which can represent `text`, `files`, `object`s. It's applications developers decision how `Data` should be deserialized, serialized and the object it can represent in their context. + +It's applications developers decision how `Data` should be treated, by treated we mean the serialization and deserialization process and the Object `Data` should represent. + +Proto definition: + +```protobuf +// MsgSignData defines an arbitrary, general-purpose, off-chain message +message MsgSignData { + // Signer is the sdk.AccAddress of the message signer + bytes Signer = 1 [(gogoproto.jsontag) = "signer", (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"]; + // Data represents the raw bytes of the content that is signed (text, json, etc) + bytes Data = 2 [(gogoproto.jsontag) = "data"]; +} +``` + +Signed MsgSignData json example: + +```json +{ + "type": "cosmos-sdk/StdTx", + "value": { + "msg": [ + { + "type": "sign/MsgSignData", + "value": { + "signer": "cosmos1hftz5ugqmpg9243xeegsqqav62f8hnywsjr4xr", + "data": "cmFuZG9t" + } + } + ], + "fee": { + "amount": [], + "gas": "0" + }, + "signatures": [ + { + "pub_key": { + "type": "tendermint/PubKeySecp256k1", + "value": "AqnDSiRoFmTPfq97xxEb2VkQ/Hm28cPsqsZm9jEVsYK9" + }, + "signature": "8y8i34qJakkjse9pOD2De+dnlc4KvFgh0wQpes4eydN66D9kv7cmCEouRrkka9tlW9cAkIL52ErB+6ye7X5aEg==" + } + ], + "memo": "" + } +} +``` + +## Consequences + +There is a specification on how messages, that are not meant to be broadcast to a live chain, should be formed. + +### Backwards Compatibility + +Backwards compatibility is maintained as this is a new message spec definition. + +### Positive + +* A common format that can be used by multiple applications to sign and verify off-chain messages. +* The specification is primitive which means it can cover every use case without limiting what is possible to fit inside it. +* It gives room for other off-chain messages specifications that aim to target more specific and common use cases such as off-chain-based authN/authZ layers [2]. + +### Negative + +* Current proposal requires a fixed relationship between an account address and a public key. +* Doesn't work with multisig accounts. + +## Further discussion + +* Regarding security in `MsgSignData`, the developer using `MsgSignData` is in charge of making the content laying in `Data` non-replayable when, and if, needed. +* the offchain package will be further extended with extra messages that target specific use cases such as, but not limited to, authentication in applications, payment channels, L2 solutions in general. + +## References + +1. https://github.com/cosmos/ics/pull/33 +2. https://github.com/cosmos/cosmos-sdk/pull/7727#discussion_r515668204 +3. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-722478477 +4. https://github.com/cosmos/cosmos-sdk/pull/7727#issuecomment-721062923 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-037-gov-split-vote.md b/versioned_docs/version-0.47/integrate/architecture/adr-037-gov-split-vote.md new file mode 100644 index 000000000..0a3b9bc43 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-037-gov-split-vote.md @@ -0,0 +1,111 @@ +# ADR 037: Governance split votes + +## Changelog + +* 2020/10/28: Intial draft + +## Status + +Accepted + +## Abstract + +This ADR defines a modification to the governance module that would allow a staker to split their votes into several voting options. For example, it could use 70% of its voting power to vote Yes and 30% of its voting power to vote No. + +## Context + +Currently, an address can cast a vote with only one options (Yes/No/Abstain/NoWithVeto) and use their full voting power behind that choice. + +However, often times the entity owning that address might not be a single individual. For example, a company might have different stakeholders who want to vote differently, and so it makes sense to allow them to split their voting power. Another example use case is exchanges. Many centralized exchanges often stake a portion of their users' tokens in their custody. Currently, it is not possible for them to do "passthrough voting" and giving their users voting rights over their tokens. However, with this system, exchanges can poll their users for voting preferences, and then vote on-chain proportionally to the results of the poll. + +## Decision + +We modify the vote structs to be + +```go +type WeightedVoteOption struct { + Option string + Weight sdk.Dec +} + +type Vote struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +And for backwards compatibility, we introduce `MsgVoteWeighted` while keeping `MsgVote`. + +```go +type MsgVote struct { + ProposalID int64 + Voter sdk.Address + Option Option +} + +type MsgVoteWeighted struct { + ProposalID int64 + Voter sdk.Address + Options []WeightedVoteOption +} +``` + +The `ValidateBasic` of a `MsgVoteWeighted` struct would require that + +1. The sum of all the Rates is equal to 1.0 +2. No Option is repeated + +The governance tally function will iterate over all the options in a vote and add to the tally the result of the voter's voting power * the rate for that option. + +```go +tally() { + results := map[types.VoteOption]sdk.Dec + + for _, vote := range votes { + for i, weightedOption := range vote.Options { + results[weightedOption.Option] += getVotingPower(vote.voter) * weightedOption.Weight + } + } +} +``` + +The CLI command for creating a multi-option vote would be as such: + +```shell +simd tx gov vote 1 "yes=0.6,no=0.3,abstain=0.05,no_with_veto=0.05" --from mykey +``` + +To create a single-option vote a user can do either + +```shell +simd tx gov vote 1 "yes=1" --from mykey +``` + +or + +```shell +simd tx gov vote 1 yes --from mykey +``` + +to maintain backwards compatibility. + +## Consequences + +### Backwards Compatibility + +* Previous VoteMsg types will remain the same and so clients will not have to update their procedure unless they want to support the WeightedVoteMsg feature. +* When querying a Vote struct from state, its structure will be different, and so clients wanting to display all voters and their respective votes will have to handle the new format and the fact that a single voter can have split votes. +* The result of querying the tally function should have the same API for clients. + +### Positive + +* Can make the voting process more accurate for addresses representing multiple stakeholders, often some of the largest addresses. + +### Negative + +* Is more complex than simple voting, and so may be harder to explain to users. However, this is mostly mitigated because the feature is opt-in. + +### Neutral + +* Relatively minor change to governance tally function. diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-038-state-listening.md b/versioned_docs/version-0.47/integrate/architecture/adr-038-state-listening.md new file mode 100644 index 000000000..74f92d2f6 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-038-state-listening.md @@ -0,0 +1,569 @@ +# ADR 038: KVStore state listening + +## Changelog + +* 11/23/2020: Initial draft +* 10/14/2022: + * Add `ListenCommit`, flatten the state writes in a block to a single batch. + * Remove listeners from cache stores, should only listen to `rootmulti.Store`. + * Remove `HaltAppOnDeliveryError()`, the errors are propogated by default, the implementations should return nil if don't want to propogate errors. + + +## Status + +Proposed + +## Abstract + +This ADR defines a set of changes to enable listening to state changes of individual KVStores and exposing these data to consumers. + +## Context + +Currently, KVStore data can be remotely accessed through [Queries](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/messages-and-queries.md#queries) +which proceed either through Tendermint and the ABCI, or through the gRPC server. +In addition to these request/response queries, it would be beneficial to have a means of listening to state changes as they occur in real time. + +## Decision + +We will modify the `CommitMultiStore` interface and its concrete (`rootmulti`) implementations and introduce a new `listenkv.Store` to allow listening to state changes in underlying KVStores. We don't need to listen to cache stores, because we can't be sure that the writes will be committed eventually, and the writes are duplicated in `rootmulti.Store` eventually, so we should only listen to `rootmulti.Store`. +We will introduce a plugin system for configuring and running streaming services that write these state changes and their surrounding ABCI message context to different destinations. + +### Listening interface + +In a new file, `store/types/listening.go`, we will create a `WriteListener` interface for streaming out state changes from a KVStore. + +```go +// WriteListener interface for streaming data out from a listenkv.Store +type WriteListener interface { + // if value is nil then it was deleted + // storeKey indicates the source KVStore, to facilitate using the same WriteListener across separate KVStores + // delete bool indicates if it was a delete; true: delete, false: set + OnWrite(storeKey StoreKey, key []byte, value []byte, delete bool) error +} +``` + +### Listener type + +We will create two concrete implementations of the `WriteListener` interface in `store/types/listening.go`, that writes out protobuf +encoded KV pairs to an underlying `io.Writer`, and simply accumulate them in memory. + +This will include defining a simple protobuf type for the KV pairs. In addition to the key and value fields this message +will include the StoreKey for the originating KVStore so that we can write out from separate KVStores to the same stream/file +and determine the source of each KV pair. + +```protobuf +message StoreKVPair { + optional string store_key = 1; // the store key for the KVStore this pair originates from + required bool set = 2; // true indicates a set operation, false indicates a delete operation + required bytes key = 3; + required bytes value = 4; +} +``` + +```go +// StoreKVPairWriteListener is used to configure listening to a KVStore by writing out length-prefixed +// protobuf encoded StoreKVPairs to an underlying io.Writer +type StoreKVPairWriteListener struct { + writer io.Writer + marshaller codec.BinaryCodec +} + +// NewStoreKVPairWriteListener wraps creates a StoreKVPairWriteListener with a provdied io.Writer and codec.BinaryCodec +func NewStoreKVPairWriteListener(w io.Writer, m codec.BinaryCodec) *StoreKVPairWriteListener { + return &StoreKVPairWriteListener{ + writer: w, + marshaller: m, + } +} + +// OnWrite satisfies the WriteListener interface by writing length-prefixed protobuf encoded StoreKVPairs +func (wl *StoreKVPairWriteListener) OnWrite(storeKey types.StoreKey, key []byte, value []byte, delete bool) error error { + kvPair := new(types.StoreKVPair) + kvPair.StoreKey = storeKey.Name() + kvPair.Delete = Delete + kvPair.Key = key + kvPair.Value = value + by, err := wl.marshaller.MarshalBinaryLengthPrefixed(kvPair) + if err != nil { + return err + } + if _, err := wl.writer.Write(by); err != nil { + return err + } + return nil +} +``` + +```golang +// MemoryListener listens to the state writes and accumulate the records in memory. +type MemoryListener struct { + key StoreKey + stateCache []StoreKVPair +} + +// NewMemoryListener creates a listener that accumulate the state writes in memory. +func NewMemoryListener(key StoreKey) *MemoryListener { + return &MemoryListener{key: key} +} + +// OnWrite implements WriteListener interface +func (fl *MemoryListener) OnWrite(storeKey StoreKey, key []byte, value []byte, delete bool) error { + fl.stateCache = append(fl.stateCache, StoreKVPair{ + StoreKey: storeKey.Name(), + Delete: delete, + Key: key, + Value: value, + }) + return nil +} + +// PopStateCache returns the current state caches and set to nil +func (fl *MemoryListener) PopStateCache() []StoreKVPair { + res := fl.stateCache + fl.stateCache = nil + return res +} + +// StoreKey returns the storeKey it listens to +func (fl *MemoryListener) StoreKey() StoreKey { + return fl.key +} +``` + +### ListenKVStore + +We will create a new `Store` type `listenkv.Store` that the `MultiStore` wraps around a `KVStore` to enable state listening. +We can configure the `Store` with a set of `WriteListener`s which stream the output to specific destinations. + +```go +// Store implements the KVStore interface with listening enabled. +// Operations are traced on each core KVStore call and written to any of the +// underlying listeners with the proper key and operation permissions +type Store struct { + parent types.KVStore + listeners []types.WriteListener + parentStoreKey types.StoreKey +} + +// NewStore returns a reference to a new traceKVStore given a parent +// KVStore implementation and a buffered writer. +func NewStore(parent types.KVStore, psk types.StoreKey, listeners []types.WriteListener) *Store { + return &Store{parent: parent, listeners: listeners, parentStoreKey: psk} +} + +// Set implements the KVStore interface. It traces a write operation and +// delegates the Set call to the parent KVStore. +func (s *Store) Set(key []byte, value []byte) { + types.AssertValidKey(key) + s.parent.Set(key, value) + s.onWrite(false, key, value) +} + +// Delete implements the KVStore interface. It traces a write operation and +// delegates the Delete call to the parent KVStore. +func (s *Store) Delete(key []byte) { + s.parent.Delete(key) + s.onWrite(true, key, nil) +} + +// onWrite writes a KVStore operation to all the WriteListeners +func (s *Store) onWrite(delete bool, key, value []byte) { + for _, l := range s.listeners { + if err := l.OnWrite(s.parentStoreKey, key, value, delete); err != nil { + // log error + } + } +} +``` + +### MultiStore interface updates + +We will update the `CommitMultiStore` interface to allow us to wrap a set of listeners around a specific `KVStore`. + +```go +type CommitMultiStore interface { + ... + + // ListeningEnabled returns if listening is enabled for the KVStore belonging the provided StoreKey + ListeningEnabled(key StoreKey) bool + + // AddListeners adds WriteListeners for the KVStore belonging to the provided StoreKey + // It appends the listeners to a current set, if one already exists + AddListeners(key StoreKey, listeners []WriteListener) +} +``` + +### MultiStore implementation updates + +We will modify all of the `CommitMultiStore` implementations to satisfy these new interfaces, and adjust the `rootmulti` `GetKVStore` method +to wrap the returned `KVStore` with a `listenkv.Store` if listening is turned on for that `Store`. + +```go +func (rs *Store) GetKVStore(key types.StoreKey) types.KVStore { + store := rs.stores[key].(types.KVStore) + + if rs.TracingEnabled() { + store = tracekv.NewStore(store, rs.traceWriter, rs.traceContext) + } + if rs.ListeningEnabled(key) { + store = listenkv.NewStore(key, store, rs.listeners[key]) + } + + return store +} +``` + +We will also adjust the `rootmulti` `CacheMultiStore` method to wrap the stores with `listenkv.Store` to enable listening when the cache layer writes. + +```go +func (rs *Store) CacheMultiStore() types.CacheMultiStore { + stores := make(map[types.StoreKey]types.CacheWrapper) + for k, v := range rs.stores { + store := v.(types.KVStore) + // Wire the listenkv.Store to allow listeners to observe the writes from the cache store, + // set same listeners on cache store will observe duplicated writes. + if rs.ListeningEnabled(k) { + store = listenkv.NewStore(store, k, rs.listeners[k]) + } + stores[k] = store + } + return cachemulti.NewStore(rs.db, stores, rs.keysByName, rs.traceWriter, rs.getTracingContext()) +} +``` + +### Exposing the data + +#### Streaming service + +We will introduce a new `StreamingService` interface for exposing `WriteListener` data streams to external consumers. +In addition to streaming state changes as `StoreKVPair`s, the interface satisfies an `ABCIListener` interface that plugs +into the BaseApp and relays ABCI requests and responses so that the service can observe those block metadatas as well. + +The `WriteListener`s of `StreamingService` listens to the `rootmulti.Store`, which is only written into at commit event by the cache store of `deliverState`. + +```go +// ABCIListener interface used to hook into the ABCI message processing of the BaseApp +type ABCIListener interface { + // ListenBeginBlock updates the streaming service with the latest BeginBlock messages + ListenBeginBlock(ctx types.Context, req abci.RequestBeginBlock, res abci.ResponseBeginBlock) error + // ListenEndBlock updates the steaming service with the latest EndBlock messages + ListenEndBlock(ctx types.Context, req abci.RequestEndBlock, res abci.ResponseEndBlock) error + // ListenDeliverTx updates the steaming service with the latest DeliverTx messages + ListenDeliverTx(ctx types.Context, req abci.RequestDeliverTx, res abci.ResponseDeliverTx) error + // ListenCommit updates the steaming service with the latest Commit message, + // All the state writes of current block should have notified before this message. + ListenCommit(ctx types.Context, res abci.ResponseCommit) error +} + +// StreamingService interface for registering WriteListeners with the BaseApp and updating the service with the ABCI messages using the hooks +type StreamingService interface { + // Stream is the streaming service loop, awaits kv pairs and writes them to a destination stream or file + Stream(wg *sync.WaitGroup) error + // Listeners returns the streaming service's listeners for the BaseApp to register + Listeners() map[types.StoreKey][]store.WriteListener + // ABCIListener interface for hooking into the ABCI messages from inside the BaseApp + ABCIListener + // Closer interface + io.Closer +} +``` + +#### BaseApp registration + +We will add a new method to the `BaseApp` to enable the registration of `StreamingService`s: + +```go +// SetStreamingService is used to set a streaming service into the BaseApp hooks and load the listeners into the multistore +func (app *BaseApp) SetStreamingService(s StreamingService) { + // add the listeners for each StoreKey + for key, lis := range s.Listeners() { + app.cms.AddListeners(key, lis) + } + // register the StreamingService within the BaseApp + // BaseApp will pass BeginBlock, DeliverTx, and EndBlock requests and responses to the streaming services to update their ABCI context + app.abciListeners = append(app.abciListeners, s) +} +``` + +We will also modify the `BeginBlock`, `EndBlock`, and `DeliverTx` methods to pass ABCI requests and responses to any streaming service hooks registered +with the `BaseApp`. + +```go +func (app *BaseApp) BeginBlock(req abci.RequestBeginBlock) (res abci.ResponseBeginBlock) { + + ... + + defer func() { + // call the hooks with the BeginBlock messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenBeginBlock(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrapf(err, "BeginBlock listening hook failed, height: %d", req.Header.Height)) + } + } + }() + + return res +} +``` + +```go +func (app *BaseApp) EndBlock(req abci.RequestEndBlock) (res abci.ResponseEndBlock) { + + ... + + defer func() { + // Call the streaming service hooks with the EndBlock messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenEndBlock(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrapf(err, "EndBlock listening hook failed, height: %d", req.Height)) + } + } + }() + + return res +} +``` + +```go +func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) (res abci.ResponseDeliverTx) { + + defer func() { + // call the hooks with the DeliverTx messages + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenDeliverTx(app.deliverState.ctx, req, res); err != nil { + panic(sdkerrors.Wrap(err, "DeliverTx listening hook failed")) + } + } + }() + + ... + + return res +} +``` + +```golang +func (app *BaseApp) Commit() abci.ResponseCommit { + header := app.deliverState.ctx.BlockHeader() + retainHeight := app.GetBlockRetentionHeight(header.Height) + + // Write the DeliverTx state into branched storage and commit the MultiStore. + // The write to the DeliverTx state writes all state transitions to the root + // MultiStore (app.cms) so when Commit() is called is persists those values. + app.deliverState.ms.Write() + commitID := app.cms.Commit() + + res := abci.ResponseCommit{ + Data: commitID.Hash, + RetainHeight: retainHeight, + } + + // call the hooks with the Commit message + for _, streamingListener := range app.abciListeners { + if err := streamingListener.ListenCommit(app.deliverState.ctx, res); err != nil { + panic(sdkerrors.Wrapf(err, "Commit listening hook failed, height: %d", header.Height)) + } + } + + app.logger.Info("commit synced", "commit", fmt.Sprintf("%X", commitID)) + ... +} +``` + +#### Error Handling And Async Consumers + +`ABCIListener`s are called synchronously inside the consensus state machine, the returned error causes panic which in turn halt the consensus state machine. The implementer should be careful not to break consensus unexpectedly or slow down it too much. + +For some async use cases, one can spawn a go-routine internanlly to avoid slow down consensus state machine, and handle the errors internally and always returns `nil` to avoid halting consensus state machine on error. + +Furthermore, for most of the cases, we only need to use the builtin file streamer to listen to state changes directly inside cosmos-sdk, the other consumers should subscribe to the file streamer output externally. + +#### File Streamer + +We provide a minimal filesystem based implementation inside cosmos-sdk, and provides options to write output files reliably, the output files can be further consumed by external consumers, so most of the state listeners actually don't need to live inside the sdk and node, which improves the node robustness and simplify sdk internals. + +The file streamer can be wired in app like this: +```golang +exposeStoreKeys := ... // decide the key list to listen +service, err := file.NewStreamingService(streamingDir, "", exposeStoreKeys, appCodec, logger) +bApp.SetStreamingService(service) +``` + +#### Plugin system + +We propose a plugin architecture to load and run `StreamingService` implementations. We will introduce a plugin +loading/preloading system that is used to load, initialize, inject, run, and stop Cosmos-SDK plugins. Each plugin +must implement the following interface: + +```go +// Plugin is the base interface for all kinds of cosmos-sdk plugins +// It will be included in interfaces of different Plugins +type Plugin interface { + // Name should return unique name of the plugin + Name() string + + // Version returns current version of the plugin + Version() string + + // Init is called once when the Plugin is being loaded + // The plugin is passed the AppOptions for configuration + // A plugin will not necessarily have a functional Init + Init(env serverTypes.AppOptions) error + + // Closer interface for shutting down the plugin process + io.Closer +} +``` + +The `Name` method returns a plugin's name. +The `Version` method returns a plugin's version. +The `Init` method initializes a plugin with the provided `AppOptions`. +The io.Closer is used to shut down the plugin service. + +For the purposes of this ADR we introduce a single kind of plugin- a state streaming plugin. +We will define a `StateStreamingPlugin` interface which extends the above `Plugin` interface to support a state streaming service. + +```go +// StateStreamingPlugin interface for plugins that load a baseapp.StreamingService onto a baseapp.BaseApp +type StateStreamingPlugin interface { + // Register configures and registers the plugin streaming service with the BaseApp + Register(bApp *baseapp.BaseApp, marshaller codec.BinaryCodec, keys map[string]*types.KVStoreKey) error + + // Start starts the background streaming process of the plugin streaming service + Start(wg *sync.WaitGroup) error + + // Plugin is the base Plugin interface + Plugin +} +``` + +The `Register` method is used during App construction to register the plugin's streaming service with an App's BaseApp using the BaseApp's `SetStreamingService` method. +The `Start` method is used during App construction to start the registered plugin streaming services and maintain synchronization with them. + +e.g. in `NewSimApp`: + +```go +func NewSimApp( + logger log.Logger, + db dbm.DB, + traceStore io.Writer, + loadLatest bool, + appOpts servertypes.AppOptions, + baseAppOptions ...func(*baseapp.BaseApp), +) *SimApp { + + ... + + keys := sdk.NewKVStoreKeys( + authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, + evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, + ) + + pluginsOnKey := fmt.Sprintf("%s.%s", plugin.PLUGINS_TOML_KEY, plugin.PLUGINS_ON_TOML_KEY) + if cast.ToBool(appOpts.Get(pluginsOnKey)) { + // this loads the preloaded and any plugins found in `plugins.dir` + pluginLoader, err := loader.NewPluginLoader(appOpts, logger) + if err != nil { + // handle error + } + + // initialize the loaded plugins + if err := pluginLoader.Initialize(); err != nil { + // handle error + } + + // register the plugin(s) with the BaseApp + if err := pluginLoader.Inject(bApp, appCodec, keys); err != nil { + // handle error + } + + // start the plugin services, optionally use wg to synchronize shutdown using io.Closer + wg := new(sync.WaitGroup) + if err := pluginLoader.Start(wg); err != nil { + // handler error + } + } + + ... + + return app +} +``` + + +#### Configuration + +The plugin system will be configured within an app's app.toml file. + +```toml +[plugins] + on = false # turn the plugin system, as a whole, on or off + enabled = ["list", "of", "plugin", "names", "to", "enable"] + dir = "the directory to load non-preloaded plugins from; defaults to cosmos-sdk/plugin/plugins" +``` + +There will be three parameters for configuring the plugin system: `plugins.on`, `plugins.enabled` and `plugins.dir`. +`plugins.on` is a bool that turns on or off the plugin system at large, `plugins.dir` directs the system to a directory +to load plugins from, and `plugins.enabled` provides `opt-in` semantics to plugin names to enable (including preloaded plugins). + +Configuration of a given plugin is ultimately specific to the plugin, but we will introduce some standards here: + +Plugin TOML configuration should be split into separate sub-tables for each kind of plugin (e.g. `plugins.streaming`). + +Within these sub-tables, the parameters for a specific plugin of that kind are included in another sub-table (e.g. `plugins.streaming.file`). +It is generally expected, but not required, that a streaming service plugin can be configured with a set of store keys +(e.g. `plugins.streaming.file.keys`) for the stores it listens to and a flag (e.g. `plugins.streaming.file.halt_app_on_delivery_error`) +that signifies whether the service operates in a fire-and-forget capacity, or stop the BaseApp when an error occurs in +any of `ListenBeginBlock`, `ListenEndBlock` and `ListenDeliverTx`. + +e.g. + +```toml +[plugins] + on = false # turn the plugin system, as a whole, on or off + enabled = ["list", "of", "plugin", "names", "to", "enable"] + dir = "the directory to load non-preloaded plugins from; defaults to " + [plugins.streaming] # a mapping of plugin-specific streaming service parameters, mapped to their plugin name + [plugins.streaming.file] # the specific parameters for the file streaming service plugin + keys = ["list", "of", "store", "keys", "we", "want", "to", "expose", "for", "this", "streaming", "service"] + write_dir = "path to the write directory" + prefix = "optional prefix to prepend to the generated file names" + halt_app_on_delivery_error = "false" # false == fire-and-forget; true == stop the application + [plugins.streaming.kafka] + keys = [] + topic_prefix = "block" # Optional prefix for topic names where data will be stored. + flush_timeout_ms = 5000 # Flush and wait for outstanding messages and requests to complete delivery when calling `StreamingService.Close(). (milliseconds) + halt_app_on_delivery_error = true # Whether or not to halt the application when plugin fails to deliver message(s). + ... +``` + +#### Encoding and decoding streams + +ADR-038 introduces the interfaces and types for streaming state changes out from KVStores, associating this +data with their related ABCI requests and responses, and registering a service for consuming this data and streaming it to some destination in a final format. +Instead of prescribing a final data format in this ADR, it is left to a specific plugin implementation to define and document this format. +We take this approach because flexibility in the final format is necessary to support a wide range of streaming service plugins. For example, +the data format for a streaming service that writes the data out to a set of files will differ from the data format that is written to a Kafka topic. + +## Consequences + +These changes will provide a means of subscribing to KVStore state changes in real time. + +### Backwards Compatibility + +* This ADR changes the `CommitMultiStore` interface, implementations supporting the previous version of these interfaces will not support the new ones + +### Positive + +* Ability to listen to KVStore state changes in real time and expose these events to external consumers + +### Negative + +* Changes `CommitMultiStore`interface + +### Neutral + +* Introduces additional- but optional- complexity to configuring and running a cosmos application +* If an application developer opts to use these features to expose data, they need to be aware of the ramifications/risks of that data exposure as it pertains to the specifics of their application diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-039-epoched-staking.md b/versioned_docs/version-0.47/integrate/architecture/adr-039-epoched-staking.md new file mode 100644 index 000000000..29418fc89 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-039-epoched-staking.md @@ -0,0 +1,122 @@ +# ADR 039: Epoched Staking + +## Changelog + +* 10-Feb-2021: Initial Draft + +## Authors + +* Dev Ojha (@valardragon) +* Sunny Aggarwal (@sunnya97) + +## Status + +Proposed + +## Abstract + +This ADR updates the proof of stake module to buffer the staking weight updates for a number of blocks before updating the consensus' staking weights. The length of the buffer is dubbed an epoch. The prior functionality of the staking module is then a special case of the abstracted module, with the epoch being set to 1 block. + +## Context + +The current proof of stake module takes the design decision to apply staking weight changes to the consensus engine immediately. This means that delegations and unbonds get applied immediately to the validator set. This decision was primarily done as it was implementationally simplest, and because we at the time believed that this would lead to better UX for clients. + +An alternative design choice is to allow buffering staking updates (delegations, unbonds, validators joining) for a number of blocks. This 'epoch'd proof of stake consensus provides the guarantee that the consensus weights for validators will not change mid-epoch, except in the event of a slash condition. + +Additionally, the UX hurdle may not be as significant as was previously thought. This is because it is possible to provide users immediate acknowledgement that their bond was recorded and will be executed. + +Furthermore, it has become clearer over time that immediate execution of staking events comes with limitations, such as: + +* Threshold based cryptography. One of the main limitations is that because the validator set can change so regularly, it makes the running of multiparty computation by a fixed validator set difficult. Many threshold-based cryptographic features for blockchains such as randomness beacons and threshold decryption require a computationally-expensive DKG process (will take much longer than 1 block to create). To productively use these, we need to guarantee that the result of the DKG will be used for a reasonably long time. It wouldn't be feasible to rerun the DKG every block. By epoching staking, it guarantees we'll only need to run a new DKG once every epoch. + +* Light client efficiency. This would lessen the overhead for IBC when there is high churn in the validator set. In the Tendermint light client bisection algorithm, the number of headers you need to verify is related to bounding the difference in validator sets between a trusted header and the latest header. If the difference is too great, you verify more header in between the two. By limiting the frequency of validator set changes, we can reduce the worst case size of IBC lite client proofs, which occurs when a validator set has high churn. + +* Fairness of deterministic leader election. Currently we have no ways of reasoning of fairness of deterministic leader election in the presence of staking changes without epochs (tendermint/spec#217). Breaking fairness of leader election is profitable for validators, as they earn additional rewards from being the proposer. Adding epochs at least makes it easier for our deterministic leader election to match something we can prove secure. (Albeit, we still haven’t proven if our current algorithm is fair with > 2 validators in the presence of stake changes) + +* Staking derivative design. Currently, reward distribution is done lazily using the F1 fee distribution. While saving computational complexity, lazy accounting requires a more stateful staking implementation. Right now, each delegation entry has to track the time of last withdrawal. Handling this can be a challenge for some staking derivatives designs that seek to provide fungibility for all tokens staked to a single validator. Force-withdrawing rewards to users can help solve this, however it is infeasible to force-withdraw rewards to users on a per block basis. With epochs, a chain could more easily alter the design to have rewards be forcefully withdrawn (iterating over delegator accounts only once per-epoch), and can thus remove delegation timing from state. This may be useful for certain staking derivative designs. + +## Design considerations + +### Slashing + +There is a design consideration for whether to apply a slash immediately or at the end of an epoch. A slash event should apply to only members who are actually staked during the time of the infraction, namely during the epoch the slash event occured. + +Applying it immediately can be viewed as offering greater consensus layer security, at potential costs to the aforementioned usecases. The benefits of immediate slashing for consensus layer security can be all be obtained by executing the validator jailing immediately (thus removing it from the validator set), and delaying the actual slash change to the validator's weight until the epoch boundary. For the use cases mentioned above, workarounds can be integrated to avoid problems, as follows: + +* For threshold based cryptography, this setting will have the threshold cryptography use the original epoch weights, while consensus has an update that lets it more rapidly benefit from additional security. If the threshold based cryptography blocks liveness of the chain, then we have effectively raised the liveness threshold of the remaining validators for the rest of the epoch. (Alternatively, jailed nodes could still contribute shares) This plan will fail in the extreme case that more than 1/3rd of the validators have been jailed within a single epoch. For such an extreme scenario, the chain already have its own custom incident response plan, and defining how to handle the threshold cryptography should be a part of that. +* For light client efficiency, there can be a bit included in the header indicating an intra-epoch slash (ala https://github.com/tendermint/spec/issues/199). +* For fairness of deterministic leader election, applying a slash or jailing within an epoch would break the guarantee we were seeking to provide. This then re-introduces a new (but significantly simpler) problem for trying to provide fairness guarantees. Namely, that validators can adversarially elect to remove themself from the set of proposers. From a security perspective, this could potentially be handled by two different mechanisms (or prove to still be too difficult to achieve). One is making a security statement acknowledging the ability for an adversary to force an ahead-of-time fixed threshold of users to drop out of the proposer set within an epoch. The second method would be to parameterize such that the cost of a slash within the epoch far outweights benefits due to being a proposer. However, this latter criterion is quite dubious, since being a proposer can have many advantageous side-effects in chains with complex state machines. (Namely, DeFi games such as Fomo3D) +* For staking derivative design, there is no issue introduced. This does not increase the state size of staking records, since whether a slash has occured is fully queryable given the validator address. + +### Token lockup + +When someone makes a transaction to delegate, even though they are not immediately staked, their tokens should be moved into a pool managed by the staking module which will then be used at the end of an epoch. This prevents concerns where they stake, and then spend those tokens not realizing they were already allocated for staking, and thus having their staking tx fail. + +### Pipelining the epochs + +For threshold based cryptography in particular, we need a pipeline for epoch changes. This is because when we are in epoch N, we want the epoch N+1 weights to be fixed so that the validator set can do the DKG accordingly. So if we are currently in epoch N, the stake weights for epoch N+1 should already be fixed, and new stake changes should be getting applied to epoch N + 2. + +This can be handled by making a parameter for the epoch pipeline length. This parameter should not be alterable except during hard forks, to mitigate implementation complexity of switching the pipeline length. + +With pipeline length 1, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+1. +With pipeline length 2, if I redelegate during epoch N, then my redelegation is applied prior to the beginning of epoch N+2. + +### Rewards + +Even though all staking updates are applied at epoch boundaries, rewards can still be distributed immediately when they are claimed. This is because they do not affect the current stake weights, as we do not implement auto-bonding of rewards. If such a feature were to be implemented, it would have to be setup so that rewards are auto-bonded at the epoch boundary. + +### Parameterizing the epoch length + +When choosing the epoch length, there is a trade-off queued state/computation buildup, and countering the previously discussed limitations of immediate execution if they apply to a given chain. + +Until an ABCI mechanism for variable block times is introduced, it is ill-advised to be using high epoch lengths due to the computation buildup. This is because when a block's execution time is greater than the expected block time from Tendermint, rounds may increment. + +## Decision + +**Step-1**: Implement buffering of all staking and slashing messages. + +First we create a pool for storing tokens that are being bonded, but should be applied at the epoch boundary called the `EpochDelegationPool`. Then, we have two separate queues, one for staking, one for slashing. We describe what happens on each message being delivered below: + +### Staking messages + +* **MsgCreateValidator**: Move user's self-bond to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the self-bond, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +* **MsgEditValidator**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **MsgDelegate**: Move user's funds to `EpochDelegationPool` immediately. Queue a message for the epoch boundary to handle the delegation, taking the funds from the `EpochDelegationPool`. If Epoch execution fail, return back funds from `EpochDelegationPool` to user's account. +* **MsgBeginRedelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **MsgUndelegate**: Validate message and if valid queue the message for execution at the end of the Epoch. + +### Slashing messages + +* **MsgUnjail**: Validate message and if valid queue the message for execution at the end of the Epoch. +* **Slash Event**: Whenever a slash event is created, it gets queued in the slashing module to apply at the end of the epoch. The queues should be setup such that this slash applies immediately. + +### Evidence Messages + +* **MsgSubmitEvidence**: This gets executed immediately, and the validator gets jailed immediately. However in slashing, the actual slash event gets queued. + +Then we add methods to the end blockers, to ensure that at the epoch boundary the queues are cleared and delegation updates are applied. + +**Step-2**: Implement querying of queued staking txs. + +When querying the staking activity of a given address, the status should return not only the amount of tokens staked, but also if there are any queued stake events for that address. This will require more work to be done in the querying logic, to trace the queued upcoming staking events. + +As an initial implementation, this can be implemented as a linear search over all queued staking events. However, for chains that need long epochs, they should eventually build additional support for nodes that support querying to be able to produce results in constant time. (This is do-able by maintaining an auxilliary hashmap for indexing upcoming staking events by address) + +**Step-3**: Adjust gas + +Currently gas represents the cost of executing a transaction when its done immediately. (Merging together costs of p2p overhead, state access overhead, and computational overhead) However, now a transaction can cause computation in a future block, namely at the epoch boundary. + +To handle this, we should initially include parameters for estimating the amount of future computation (denominated in gas), and add that as a flat charge needed for the message. +We leave it as out of scope for how to weight future computation versus current computation in gas pricing, and have it set such that the are weighted equally for now. + +## Consequences + +### Positive + +* Abstracts the proof of stake module that allows retaining the existing functionality +* Enables new features such as validator-set based threshold cryptography + +### Negative + +* Increases complexity of integrating more complex gas pricing mechanisms, as they now have to consider future execution costs as well. +* When epoch > 1, validators can no longer leave the network immediately, and must wait until an epoch boundary. diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-040-storage-and-smt-state-commitments.md b/versioned_docs/version-0.47/integrate/architecture/adr-040-storage-and-smt-state-commitments.md new file mode 100644 index 000000000..f60e3adcf --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-040-storage-and-smt-state-commitments.md @@ -0,0 +1,289 @@ +# ADR 040: Storage and SMT State Commitments + +## Changelog + +* 2020-01-15: Draft + +## Status + +DRAFT Not Implemented + +## Abstract + +Sparse Merkle Tree ([SMT](https://osf.io/8mcnh/)) is a version of a Merkle Tree with various storage and performance optimizations. This ADR defines a separation of state commitments from data storage and the Cosmos SDK transition from IAVL to SMT. + +## Context + +Currently, Cosmos SDK uses IAVL for both state [commitments](https://cryptography.fandom.com/wiki/Commitment_scheme) and data storage. + +IAVL has effectively become an orphaned project within the Cosmos ecosystem and it's proven to be an inefficient state commitment data structure. +In the current design, IAVL is used for both data storage and as a Merkle Tree for state commitments. IAVL is meant to be a standalone Merkelized key/value database, however it's using a KV DB engine to store all tree nodes. So, each node is stored in a separate record in the KV DB. This causes many inefficiencies and problems: + +* Each object query requires a tree traversal from the root. Subsequent queries for the same object are cached on the Cosmos SDK level. +* Each edge traversal requires a DB query. +* Creating snapshots is [expensive](https://github.com/cosmos/cosmos-sdk/issues/7215#issuecomment-684804950). It takes about 30 seconds to export less than 100 MB of state (as of March 2020). +* Updates in IAVL may trigger tree reorganization and possible O(log(n)) hashes re-computation, which can become a CPU bottleneck. +* The node structure is pretty expensive - it contains a standard tree node elements (key, value, left and right element) and additional metadata such as height, version (which is not required by the Cosmos SDK). The entire node is hashed, and that hash is used as the key in the underlying database, [ref](https://github.com/cosmos/iavl/blob/master/docs/node/node.md +). + +Moreover, the IAVL project lacks support and a maintainer and we already see better and well-established alternatives. Instead of optimizing the IAVL, we are looking into other solutions for both storage and state commitments. + +## Decision + +We propose to separate the concerns of state commitment (**SC**), needed for consensus, and state storage (**SS**), needed for state machine. Finally we replace IAVL with [Celestia's SMT](https://github.com/lazyledger/smt). Celestia SMT is based on Diem (called jellyfish) design [*] - it uses a compute-optimised SMT by replacing subtrees with only default values with a single node (same approach is used by Ethereum2) and implements compact proofs. + +The storage model presented here doesn't deal with data structure nor serialization. It's a Key-Value database, where both key and value are binaries. The storage user is responsible for data serialization. + +### Decouple state commitment from storage + +Separation of storage and commitment (by the SMT) will allow the optimization of different components according to their usage and access patterns. + +`SC` (SMT) is used to commit to a data and compute Merkle proofs. `SS` is used to directly access data. To avoid collisions, both `SS` and `SC` will use a separate storage namespace (they could use the same database underneath). `SS` will store each record directly (mapping `(key, value)` as `key → value`). + +SMT is a merkle tree structure: we don't store keys directly. For every `(key, value)` pair, `hash(key)` is used as leaf path (we hash a key to uniformly distribute leaves in the tree) and `hash(value)` as the leaf contents. The tree structure is specified in more depth [below](#smt-for-state-commitment). + +For data access we propose 2 additional KV buckets (implemented as namespaces for the key-value pairs, sometimes called [column family](https://github.com/facebook/rocksdb/wiki/Terminology)): + +1. B1: `key → value`: the principal object storage, used by a state machine, behind the Cosmos SDK `KVStore` interface: provides direct access by key and allows prefix iteration (KV DB backend must support it). +2. B2: `hash(key) → key`: a reverse index to get a key from an SMT path. Internally the SMT will store `(key, value)` as `prefix || hash(key) || hash(value)`. So, we can get an object value by composing `hash(key) → B2 → B1`. +3. We could use more buckets to optimize the app usage if needed. + +We propose to use a KV database for both `SS` and `SC`. The store interface will allow to use the same physical DB backend for both `SS` and `SC` as well two separate DBs. The latter option allows for the separation of `SS` and `SC` into different hardware units, providing support for more complex setup scenarios and improving overall performance: one can use different backends (eg RocksDB and Badger) as well as independently tuning the underlying DB configuration. + +### Requirements + +State Storage requirements: + +* range queries +* quick (key, value) access +* creating a snapshot +* historical versioning +* pruning (garbage collection) + +State Commitment requirements: + +* fast updates +* tree path should be short +* query historical commitment proofs using ICS-23 standard +* pruning (garbage collection) + +### SMT for State Commitment + +A Sparse Merkle tree is based on the idea of a complete Merkle tree of an intractable size. The assumption here is that as the size of the tree is intractable, there would only be a few leaf nodes with valid data blocks relative to the tree size, rendering a sparse tree. + +The full specification can be found at [Celestia](https://github.com/celestiaorg/celestia-specs/blob/ec98170398dfc6394423ee79b00b71038879e211/src/specs/data_structures.md#sparse-merkle-tree). In summary: + +* The SMT consists of a binary Merkle tree, constructed in the same fashion as described in [Certificate Transparency (RFC-6962)](https://tools.ietf.org/html/rfc6962), but using as the hashing function SHA-2-256 as defined in [FIPS 180-4](https://doi.org/10.6028/NIST.FIPS.180-4). +* Leaves and internal nodes are hashed differently: the one-byte `0x00` is prepended for leaf nodes while `0x01` is prepended for internal nodes. +* Default values are given to leaf nodes with empty leaves. +* While the above rule is sufficient to pre-compute the values of intermediate nodes that are roots of empty subtrees, a further simplification is to extend this default value to all nodes that are roots of empty subtrees. The 32-byte zero is used as the default value. This rule takes precedence over the above one. +* An internal node that is the root of a subtree that contains exactly one non-empty leaf is replaced by that leaf's leaf node. + +### Snapshots for storage sync and state versioning + +Below, with simple _snapshot_ we refer to a database snapshot mechanism, not to a _ABCI snapshot sync_. The latter will be referred as _snapshot sync_ (which will directly use DB snapshot as described below). + +Database snapshot is a view of DB state at a certain time or transaction. It's not a full copy of a database (it would be too big). Usually a snapshot mechanism is based on a _copy on write_ and it allows DB state to be efficiently delivered at a certain stage. +Some DB engines support snapshotting. Hence, we propose to reuse that functionality for the state sync and versioning (described below). We limit the supported DB engines to ones which efficiently implement snapshots. In a final section we discuss the evaluated DBs. + +One of the Stargate core features is a _snapshot sync_ delivered in the `/snapshot` package. It provides a way to trustlessly sync a blockchain without repeating all transactions from the genesis. This feature is implemented in Cosmos SDK and requires storage support. Currently IAVL is the only supported backend. It works by streaming to a client a snapshot of a `SS` at a certain version together with a header chain. + +A new database snapshot will be created in every `EndBlocker` and identified by a block height. The `root` store keeps track of the available snapshots to offer `SS` at a certain version. The `root` store implements the `RootStore` interface described below. In essence, `RootStore` encapsulates a `Committer` interface. `Committer` has a `Commit`, `SetPruning`, `GetPruning` functions which will be used for creating and removing snapshots. The `rootStore.Commit` function creates a new snapshot and increments the version on each call, and checks if it needs to remove old versions. We will need to update the SMT interface to implement the `Committer` interface. +NOTE: `Commit` must be called exactly once per block. Otherwise we risk going out of sync for the version number and block height. +NOTE: For the Cosmos SDK storage, we may consider splitting that interface into `Committer` and `PruningCommitter` - only the multiroot should implement `PruningCommitter` (cache and prefix store don't need pruning). + +Number of historical versions for `abci.RequestQuery` and state sync snapshots is part of a node configuration, not a chain configuration (configuration implied by the blockchain consensus). A configuration should allow to specify number of past blocks and number of past blocks modulo some number (eg: 100 past blocks and one snapshot every 100 blocks for past 2000 blocks). Archival nodes can keep all past versions. + +Pruning old snapshots is effectively done by a database. Whenever we update a record in `SC`, SMT won't update nodes - instead it creates new nodes on the update path, without removing the old one. Since we are snapshotting each block, we need to change that mechanism to immediately remove orphaned nodes from the database. This is a safe operation - snapshots will keep track of the records and make it available when accessing past versions. + +To manage the active snapshots we will either use a DB _max number of snapshots_ option (if available), or we will remove DB snapshots in the `EndBlocker`. The latter option can be done efficiently by identifying snapshots with block height and calling a store function to remove past versions. + +#### Accessing old state versions + +One of the functional requirements is to access old state. This is done through `abci.RequestQuery` structure. The version is specified by a block height (so we query for an object by a key `K` at block height `H`). The number of old versions supported for `abci.RequestQuery` is configurable. Accessing an old state is done by using available snapshots. +`abci.RequestQuery` doesn't need old state of `SC` unless the `prove=true` parameter is set. The SMT merkle proof must be included in the `abci.ResponseQuery` only if both `SC` and `SS` have a snapshot for requested version. + +Moreover, Cosmos SDK could provide a way to directly access a historical state. However, a state machine shouldn't do that - since the number of snapshots is configurable, it would lead to nondeterministic execution. + +We positively [validated](https://github.com/cosmos/cosmos-sdk/discussions/8297) a versioning and snapshot mechanism for querying old state with regards to the database we evaluated. + +### State Proofs + +For any object stored in State Store (SS), we have corresponding object in `SC`. A proof for object `V` identified by a key `K` is a branch of `SC`, where the path corresponds to the key `hash(K)`, and the leaf is `hash(K, V)`. + +### Rollbacks + +We need to be able to process transactions and roll-back state updates if a transaction fails. This can be done in the following way: during transaction processing, we keep all state change requests (writes) in a `CacheWrapper` abstraction (as it's done today). Once we finish the block processing, in the `Endblocker`, we commit a root store - at that time, all changes are written to the SMT and to the `SS` and a snapshot is created. + +### Committing to an object without saving it + +We identified use-cases, where modules will need to save an object commitment without storing an object itself. Sometimes clients are receiving complex objects, and they have no way to prove a correctness of that object without knowing the storage layout. For those use cases it would be easier to commit to the object without storing it directly. + +### Refactor MultiStore + +The Stargate `/store` implementation (store/v1) adds an additional layer in the SDK store construction - the `MultiStore` structure. The multistore exists to support the modularity of the Cosmos SDK - each module is using its own instance of IAVL, but in the current implementation, all instances share the same database. The latter indicates, however, that the implementation doesn't provide true modularity. Instead it causes problems related to race condition and atomic DB commits (see: [\#6370](https://github.com/cosmos/cosmos-sdk/issues/6370) and [discussion](https://github.com/cosmos/cosmos-sdk/discussions/8297#discussioncomment-757043)). + +We propose to reduce the multistore concept from the SDK, and to use a single instance of `SC` and `SS` in a `RootStore` object. To avoid confusion, we should rename the `MultiStore` interface to `RootStore`. The `RootStore` will have the following interface; the methods for configuring tracing and listeners are omitted for brevity. + +```go +// Used where read-only access to versions is needed. +type BasicRootStore interface { + Store + GetKVStore(StoreKey) KVStore + CacheRootStore() CacheRootStore +} + +// Used as the main app state, replacing CommitMultiStore. +type CommitRootStore interface { + BasicRootStore + Committer + Snapshotter + + GetVersion(uint64) (BasicRootStore, error) + SetInitialVersion(uint64) error + + ... // Trace and Listen methods +} + +// Replaces CacheMultiStore for branched state. +type CacheRootStore interface { + BasicRootStore + Write() + + ... // Trace and Listen methods +} + +// Example of constructor parameters for the concrete type. +type RootStoreConfig struct { + Upgrades *StoreUpgrades + InitialVersion uint64 + + ReservePrefix(StoreKey, StoreType) +} +``` + + + + +In contrast to `MultiStore`, `RootStore` doesn't allow to dynamically mount sub-stores or provide an arbitrary backing DB for individual sub-stores. + +NOTE: modules will be able to use a special commitment and their own DBs. For example: a module which will use ZK proofs for state can store and commit this proof in the `RootStore` (usually as a single record) and manage the specialized store privately or using the `SC` low level interface. + +#### Compatibility support + +To ease the transition to this new interface for users, we can create a shim which wraps a `CommitMultiStore` but provides a `CommitRootStore` interface, and expose functions to safely create and access the underlying `CommitMultiStore`. + +The new `RootStore` and supporting types can be implemented in a `store/v2alpha1` package to avoid breaking existing code. + +#### Merkle Proofs and IBC + +Currently, an IBC (v1.0) Merkle proof path consists of two elements (`["", ""]`), with each key corresponding to a separate proof. These are each verified according to individual [ICS-23 specs](https://github.com/cosmos/ibc-go/blob/f7051429e1cf833a6f65d51e6c3df1609290a549/modules/core/23-commitment/types/merkle.go#L17), and the result hash of each step is used as the committed value of the next step, until a root commitment hash is obtained. +The root hash of the proof for `""` is hashed with the `""` to validate against the App Hash. + +This is not compatible with the `RootStore`, which stores all records in a single Merkle tree structure, and won't produce separate proofs for the store- and record-key. Ideally, the store-key component of the proof could just be omitted, and updated to use a "no-op" spec, so only the record-key is used. However, because the IBC verification code hardcodes the `"ibc"` prefix and applies it to the SDK proof as a separate element of the proof path, this isn't possible without a breaking change. Breaking this behavior would severely impact the Cosmos ecosystem which already widely adopts the IBC module. Requesting an update of the IBC module across the chains is a time consuming effort and not easily feasible. + +As a workaround, the `RootStore` will have to use two separate SMTs (they could use the same underlying DB): one for IBC state and one for everything else. A simple Merkle map that reference these SMTs will act as a Merkle Tree to create a final App hash. The Merkle map is not stored in a DBs - it's constructed in the runtime. The IBC substore key must be `"ibc"`. + +The workaround can still guarantee atomic syncs: the [proposed DB backends](#evaluated-kv-databases) support atomic transactions and efficient rollbacks, which will be used in the commit phase. + +The presented workaround can be used until the IBC module is fully upgraded to supports single-element commitment proofs. + +### Optimization: compress module key prefixes + +We consider a compression of prefix keys by creating a mapping from module key to an integer, and serializing the integer using varint coding. Varint coding assures that different values don't have common byte prefix. For Merkle Proofs we can't use prefix compression - so it should only apply for the `SS` keys. Moreover, the prefix compression should be only applied for the module namespace. More precisely: + +* each module has it's own namespace; +* when accessing a module namespace we create a KVStore with embedded prefix; +* that prefix will be compressed only when accessing and managing `SS`. + +We need to assure that the codes won't change. We can fix the mapping in a static variable (provided by an app) or SS state under a special key. + +TODO: need to make decision about the key compression. + +## Optimization: SS key compression + +Some objects may be saved with key, which contains a Protobuf message type. Such keys are long. We could save a lot of space if we can map Protobuf message types in varints. + +TODO: finalize this or move to another ADR. + +## Migration + +Using the new store will require a migration. 2 Migrations are proposed: + +1. Genesis export -- it will reset the blockchain history. +2. In place migration: we can reuse `UpgradeKeeper.SetUpgradeHandler` to provide the migration logic: + +```go +app.UpgradeKeeper.SetUpgradeHandler("adr-40", func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + + storev2.Migrate(iavlstore, v2.store) + + // RunMigrations returns the VersionMap + // with the updated module ConsensusVersions + return app.mm.RunMigrations(ctx, vm) +}) +``` + +The `Migrate` function will read all entries from a store/v1 DB and save them to the AD-40 combined KV store. +Cache layer should not be used and the operation must finish with a single Commit call. + +Inserting records to the `SC` (SMT) component is the bottleneck. Unfortunately SMT doesn't support batch transactions. +Adding batch transactions to `SC` layer is considered as a feature after the main release. + +## Consequences + +### Backwards Compatibility + +This ADR doesn't introduce any Cosmos SDK level API changes. + +We change the storage layout of the state machine, a storage hard fork and network upgrade is required to incorporate these changes. SMT provides a merkle proof functionality, however it is not compatible with ICS23. Updating the proofs for ICS23 compatibility is required. + +### Positive + +* Decoupling state from state commitment introduce better engineering opportunities for further optimizations and better storage patterns. +* Performance improvements. +* Joining SMT based camp which has wider and proven adoption than IAVL. Example projects which decided on SMT: Ethereum2, Diem (Libra), Trillan, Tezos, Celestia. +* Multistore removal fixes a longstanding issue with the current MultiStore design. +* Simplifies merkle proofs - all modules, except IBC, have only one pass for merkle proof. + +### Negative + +* Storage migration +* LL SMT doesn't support pruning - we will need to add and test that functionality. +* `SS` keys will have an overhead of a key prefix. This doesn't impact `SC` because all keys in `SC` have same size (they are hashed). + +### Neutral + +* Deprecating IAVL, which is one of the core proposals of Cosmos Whitepaper. + +## Alternative designs + +Most of the alternative designs were evaluated in [state commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h). + +Ethereum research published [Verkle Trie](https://dankradfeist.de/ethereum/2021/06/18/verkle-trie-for-eth1.html) - an idea of combining polynomial commitments with merkle tree in order to reduce the tree height. This concept has a very good potential, but we think it's too early to implement it. The current, SMT based design could be easily updated to the Verkle Trie once other research implement all necessary libraries. The main advantage of the design described in this ADR is the separation of state commitments from the data storage and designing a more powerful interface. + +## Further Discussions + +### Evaluated KV Databases + +We verified existing databases KV databases for evaluating snapshot support. The following databases provide efficient snapshot mechanism: Badger, RocksDB, [Pebble](https://github.com/cockroachdb/pebble). Databases which don't provide such support or are not production ready: boltdb, leveldb, goleveldb, membdb, lmdb. + +### RDBMS + +Use of RDBMS instead of simple KV store for state. Use of RDBMS will require a Cosmos SDK API breaking change (`KVStore` interface) and will allow better data extraction and indexing solutions. Instead of saving an object as a single blob of bytes, we could save it as record in a table in the state storage layer, and as a `hash(key, protobuf(object))` in the SMT as outlined above. To verify that an object registered in RDBMS is same as the one committed to SMT, one will need to load it from RDBMS, marshal using protobuf, hash and do SMT search. + +### Off Chain Store + +We were discussing use case where modules can use a support database, which is not automatically committed. Module will responsible for having a sound storage model and can optionally use the feature discussed in __Committing to an object without saving it_ section. + +## References + +* [IAVL What's Next?](https://github.com/cosmos/cosmos-sdk/issues/7100) +* [IAVL overview](https://docs.google.com/document/d/16Z_hW2rSAmoyMENO-RlAhQjAG3mSNKsQueMnKpmcBv0/edit#heading=h.yd2th7x3o1iv) of it's state v0.15 +* [State commitments and storage report](https://paper.dropbox.com/published/State-commitments-and-storage-review--BDvA1MLwRtOx55KRihJ5xxLbBw-KeEB7eOd11pNrZvVtqUgL3h) +* [Celestia (LazyLedger) SMT](https://github.com/lazyledger/smt) +* Facebook Diem (Libra) SMT [design](https://developers.diem.com/papers/jellyfish-merkle-tree/2021-01-14.pdf) +* [Trillian Revocation Transparency](https://github.com/google/trillian/blob/master/docs/papers/RevocationTransparency.pdf), [Trillian Verifiable Data Structures](https://github.com/google/trillian/blob/master/docs/papers/VerifiableDataStructures.pdf). +* Design and implementation [discussion](https://github.com/cosmos/cosmos-sdk/discussions/8297). +* [How to Upgrade IBC Chains and their Clients](https://github.com/cosmos/ibc-go/blob/main/docs/ibc/upgrades/quick-guide.md) +* [ADR-40 Effect on IBC](https://github.com/cosmos/ibc-go/discussions/256) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-041-in-place-store-migrations.md b/versioned_docs/version-0.47/integrate/architecture/adr-041-in-place-store-migrations.md new file mode 100644 index 000000000..2237b610d --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-041-in-place-store-migrations.md @@ -0,0 +1,167 @@ +# ADR 041: In-Place Store Migrations + +## Changelog + +* 17.02.2021: Initial Draft + +## Status + +Accepted + +## Abstract + +This ADR introduces a mechanism to perform in-place state store migrations during chain software upgrades. + +## Context + +When a chain upgrade introduces state-breaking changes inside modules, the current procedure consists of exporting the whole state into a JSON file (via the `simd export` command), running migration scripts on the JSON file (`simd genesis migrate` command), clearing the stores (`simd unsafe-reset-all` command), and starting a new chain with the migrated JSON file as new genesis (optionally with a custom initial block height). An example of such a procedure can be seen [in the Cosmos Hub 3->4 migration guide](https://github.com/cosmos/gaia/blob/v4.0.3/docs/migration/cosmoshub-3.md#upgrade-procedure). + +This procedure is cumbersome for multiple reasons: + +* The procedure takes time. It can take hours to run the `export` command, plus some additional hours to run `InitChain` on the fresh chain using the migrated JSON. +* The exported JSON file can be heavy (~100MB-1GB), making it difficult to view, edit and transfer, which in turn introduces additional work to solve these problems (such as [streaming genesis](https://github.com/cosmos/cosmos-sdk/issues/6936)). + +## Decision + +We propose a migration procedure based on modifying the KV store in-place without involving the JSON export-process-import flow described above. + +### Module `ConsensusVersion` + +We introduce a new method on the `AppModule` interface: + +```go +type AppModule interface { + // --snip-- + ConsensusVersion() uint64 +} +``` + +This methods returns an `uint64` which serves as state-breaking version of the module. It MUST be incremented on each consensus-breaking change introduced by the module. To avoid potential errors with default values, the initial version of a module MUST be set to 1. In the Cosmos SDK, version 1 corresponds to the modules in the v0.41 series. + +### Module-Specific Migration Functions + +For each consensus-breaking change introduced by the module, a migration script from ConsensusVersion `N` to version `N+1` MUST be registered in the `Configurator` using its newly-added `RegisterMigration` method. All modules receive a reference to the configurator in their `RegisterServices` method on `AppModule`, and this is where the migration functions should be registered. The migration functions should be registered in increasing order. + +```go +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) + // etc. +} +``` + +For example, if the new ConsensusVersion of a module is `N` , then `N-1` migration functions MUST be registered in the configurator. + +In the Cosmos SDK, the migration functions are handled by each module's keeper, because the keeper holds the `sdk.StoreKey` used to perform in-place store migrations. To not overload the keeper, a `Migrator` wrapper is used by each module to handle the migration functions: + +```go +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + BaseKeeper +} +``` + +Migration functions should live inside the `migrations/` folder of each module, and be called by the Migrator's methods. We propose the format `Migrate{M}to{N}` for method names. + +```go +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2bank.MigrateStore(ctx, m.keeper.storeKey) // v043bank is package `x/bank/migrations/v2`. +} +``` + +Each module's migration functions are specific to the module's store evolutions, and are not described in this ADR. An example of x/bank store key migrations after the introduction of ADR-028 length-prefixed addresses can be seen in this [store.go code](https://github.com/cosmos/cosmos-sdk/blob/36f68eb9e041e20a5bb47e216ac5eb8b91f95471/x/bank/legacy/v043/store.go#L41-L62). + +### Tracking Module Versions in `x/upgrade` + +We introduce a new prefix store in `x/upgrade`'s store. This store will track each module's current version, it can be modelized as a `map[string]uint64` of module name to module ConsensusVersion, and will be used when running the migrations (see next section for details). The key prefix used is `0x1`, and the key/value format is: + +```text +0x2 | {bytes(module_name)} => BigEndian(module_consensus_version) +``` + +The initial state of the store is set from `app.go`'s `InitChainer` method. + +The UpgradeHandler signature needs to be updated to take a `VersionMap`, as well as return an upgraded `VersionMap` and an error: + +```diff +- type UpgradeHandler func(ctx sdk.Context, plan Plan) ++ type UpgradeHandler func(ctx sdk.Context, plan Plan, versionMap VersionMap) (VersionMap, error) +``` + +To apply an upgrade, we query the `VersionMap` from the `x/upgrade` store and pass it into the handler. The handler runs the actual migration functions (see next section), and if successful, returns an updated `VersionMap` to be stored in state. + +```diff +func (k UpgradeKeeper) ApplyUpgrade(ctx sdk.Context, plan types.Plan) { + // --snip-- +- handler(ctx, plan) ++ updatedVM, err := handler(ctx, plan, k.GetModuleVersionMap(ctx)) // k.GetModuleVersionMap() fetches the VersionMap stored in state. ++ if err != nil { ++ return err ++ } ++ ++ // Set the updated consensus versions to state ++ k.SetModuleVersionMap(ctx, updatedVM) +} +``` + +A gRPC query endpoint to query the `VersionMap` stored in `x/upgrade`'s state will also be added, so that app developers can double-check the `VersionMap` before the upgrade handler runs. + +### Running Migrations + +Once all the migration handlers are registered inside the configurator (which happens at startup), running migrations can happen by calling the `RunMigrations` method on `module.Manager`. This function will loop through all modules, and for each module: + +* Get the old ConsensusVersion of the module from its `VersionMap` argument (let's call it `M`). +* Fetch the new ConsensusVersion of the module from the `ConsensusVersion()` method on `AppModule` (call it `N`). +* If `N>M`, run all registered migrations for the module sequentially `M -> M+1 -> M+2...` until `N`. + * There is a special case where there is no ConsensusVersion for the module, as this means that the module has been newly added during the upgrade. In this case, no migration function is run, and the module's current ConsensusVersion is saved to `x/upgrade`'s store. + +If a required migration is missing (e.g. if it has not been registered in the `Configurator`), then the `RunMigrations` function will error. + +In practice, the `RunMigrations` method should be called from inside an `UpgradeHandler`. + +```go +app.UpgradeKeeper.SetUpgradeHandler("my-plan", func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + return app.mm.RunMigrations(ctx, vm) +}) +``` + +Assuming a chain upgrades at block `n`, the procedure should run as follows: + +* the old binary will halt in `BeginBlock` when starting block `N`. In its store, the ConsensusVersions of the old binary's modules are stored. +* the new binary will start at block `N`. The UpgradeHandler is set in the new binary, so will run at `BeginBlock` of the new binary. Inside `x/upgrade`'s `ApplyUpgrade`, the `VersionMap` will be retrieved from the (old binary's) store, and passed into the `RunMigrations` functon, migrating all module stores in-place before the modules' own `BeginBlock`s. + +## Consequences + +### Backwards Compatibility + +This ADR introduces a new method `ConsensusVersion()` on `AppModule`, which all modules need to implement. It also alters the UpgradeHandler function signature. As such, it is not backwards-compatible. + +While modules MUST register their migration functions when bumping ConsensusVersions, running those scripts using an upgrade handler is optional. An application may perfectly well decide to not call the `RunMigrations` inside its upgrade handler, and continue using the legacy JSON migration path. + +### Positive + +* Perform chain upgrades without manipulating JSON files. +* While no benchmark has been made yet, it is probable that in-place store migrations will take less time than JSON migrations. The main reason supporting this claim is that both the `simd export` command on the old binary and the `InitChain` function on the new binary will be skipped. + +### Negative + +* Module developers MUST correctly track consensus-breaking changes in their modules. If a consensus-breaking change is introduced in a module without its corresponding `ConsensusVersion()` bump, then the `RunMigrations` function won't detect the migration, and the chain upgrade might be unsuccessful. Documentation should clearly reflect this. + +### Neutral + +* The Cosmos SDK will continue to support JSON migrations via the existing `simd export` and `simd genesis migrate` commands. +* The current ADR does not allow creating, renaming or deleting stores, only modifying existing store keys and values. The Cosmos SDK already has the `StoreLoader` for those operations. + +## Further Discussions + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/discussions/8429 +* Implementation of `ConsensusVersion` and `RunMigrations`: https://github.com/cosmos/cosmos-sdk/pull/8485 +* Issue discussing `x/upgrade` design: https://github.com/cosmos/cosmos-sdk/issues/8514 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-042-group-module.md b/versioned_docs/version-0.47/integrate/architecture/adr-042-group-module.md new file mode 100644 index 000000000..52e94327d --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-042-group-module.md @@ -0,0 +1,279 @@ +# ADR 042: Group Module + +## Changelog + +* 2020/04/09: Initial Draft + +## Status + +Draft + +## Abstract + +This ADR defines the `x/group` module which allows the creation and management of on-chain multi-signature accounts and enables voting for message execution based on configurable decision policies. + +## Context + +The legacy amino multi-signature mechanism of the Cosmos SDK has certain limitations: + +* Key rotation is not possible, although this can be solved with [account rekeying](adr-034-account-rekeying.md). +* Thresholds can't be changed. +* UX is cumbersome for non-technical users ([#5661](https://github.com/cosmos/cosmos-sdk/issues/5661)). +* It requires `legacy_amino` sign mode ([#8141](https://github.com/cosmos/cosmos-sdk/issues/8141)). + +While the group module is not meant to be a total replacement for the current multi-signature accounts, it provides a solution to the limitations described above, with a more flexible key management system where keys can be added, updated or removed, as well as configurable thresholds. +It's meant to be used with other access control modules such as [`x/feegrant`](./adr-029-fee-grant-module.md) ans [`x/authz`](adr-030-authz-module.md) to simplify key management for individuals and organizations. + +The proof of concept of the group module can be found in https://github.com/regen-network/regen-ledger/tree/master/proto/regen/group/v1alpha1 and https://github.com/regen-network/regen-ledger/tree/master/x/group. + +## Decision + +We propose merging the `x/group` module with its supporting [ORM/Table Store package](https://github.com/regen-network/regen-ledger/tree/master/orm) ([#7098](https://github.com/cosmos/cosmos-sdk/issues/7098)) into the Cosmos SDK and continuing development here. There will be a dedicated ADR for the ORM package. + +### Group + +A group is a composition of accounts with associated weights. It is not +an account and doesn't have a balance. It doesn't in and of itself have any +sort of voting or decision weight. +Group members can create proposals and vote on them through group accounts using different decision policies. + +It has an `admin` account which can manage members in the group, update the group +metadata and set a new admin. + +```protobuf +message GroupInfo { + + // group_id is the unique ID of this group. + uint64 group_id = 1; + + // admin is the account address of the group's admin. + string admin = 2; + + // metadata is any arbitrary metadata to attached to the group. + bytes metadata = 3; + + // version is used to track changes to a group's membership structure that + // would break existing proposals. Whenever a member weight has changed, + // or any member is added or removed, the version is incremented and will + // invalidate all proposals from older versions. + uint64 version = 4; + + // total_weight is the sum of the group members' weights. + string total_weight = 5; +} +``` + +```protobuf +message GroupMember { + + // group_id is the unique ID of the group. + uint64 group_id = 1; + + // member is the member data. + Member member = 2; +} + +// Member represents a group member with an account address, +// non-zero weight and metadata. +message Member { + + // address is the member's account address. + string address = 1; + + // weight is the member's voting weight that should be greater than 0. + string weight = 2; + + // metadata is any arbitrary metadata to attached to the member. + bytes metadata = 3; +} +``` + +### Group Account + +A group account is an account associated with a group and a decision policy. +A group account does have a balance. + +Group accounts are abstracted from groups because a single group may have +multiple decision policies for different types of actions. Managing group +membership separately from decision policies results in the least overhead +and keeps membership consistent across different policies. The pattern that +is recommended is to have a single master group account for a given group, +and then to create separate group accounts with different decision policies +and delegate the desired permissions from the master account to +those "sub-accounts" using the [`x/authz` module](adr-030-authz-module.md). + +```protobuf +message GroupAccountInfo { + + // address is the group account address. + string address = 1; + + // group_id is the ID of the Group the GroupAccount belongs to. + uint64 group_id = 2; + + // admin is the account address of the group admin. + string admin = 3; + + // metadata is any arbitrary metadata of this group account. + bytes metadata = 4; + + // version is used to track changes to a group's GroupAccountInfo structure that + // invalidates active proposal from old versions. + uint64 version = 5; + + // decision_policy specifies the group account's decision policy. + google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "cosmos.group.v1.DecisionPolicy"]; +} +``` + +Similarly to a group admin, a group account admin can update its metadata, decision policy or set a new group account admin. + +A group account can also be an admin or a member of a group. +For instance, a group admin could be another group account which could "elects" the members or it could be the same group that elects itself. + +### Decision Policy + +A decision policy is the mechanism by which members of a group can vote on +proposals. + +All decision policies should have a minimum and maximum voting window. +The minimum voting window is the minimum duration that must pass in order +for a proposal to potentially pass, and it may be set to 0. The maximum voting +window is the maximum time that a proposal may be voted on and executed if +it reached enough support before it is closed. +Both of these values must be less than a chain-wide max voting window parameter. + +We define the `DecisionPolicy` interface that all decision policies must implement: + +```go +type DecisionPolicy interface { + codec.ProtoMarshaler + + ValidateBasic() error + GetTimeout() types.Duration + Allow(tally Tally, totalPower string, votingDuration time.Duration) (DecisionPolicyResult, error) + Validate(g GroupInfo) error +} + +type DecisionPolicyResult struct { + Allow bool + Final bool +} +``` + +#### Threshold decision policy + +A threshold decision policy defines a minimum support votes (_yes_), based on a tally +of voter weights, for a proposal to pass. For +this decision policy, abstain and veto are treated as no support (_no_). + +```protobuf +message ThresholdDecisionPolicy { + + // threshold is the minimum weighted sum of support votes for a proposal to succeed. + string threshold = 1; + + // voting_period is the duration from submission of a proposal to the end of voting period + // Within this period, votes and exec messages can be submitted. + google.protobuf.Duration voting_period = 2 [(gogoproto.nullable) = false]; +} +``` + +### Proposal + +Any member of a group can submit a proposal for a group account to decide upon. +A proposal consists of a set of `sdk.Msg`s that will be executed if the proposal +passes as well as any metadata associated with the proposal. These `sdk.Msg`s get validated as part of the `Msg/CreateProposal` request validation. They should also have their signer set as the group account. + +Internally, a proposal also tracks: + +* its current `Status`: submitted, closed or aborted +* its `Result`: unfinalized, accepted or rejected +* its `VoteState` in the form of a `Tally`, which is calculated on new votes and when executing the proposal. + +```protobuf +// Tally represents the sum of weighted votes. +message Tally { + option (gogoproto.goproto_getters) = false; + + // yes_count is the weighted sum of yes votes. + string yes_count = 1; + + // no_count is the weighted sum of no votes. + string no_count = 2; + + // abstain_count is the weighted sum of abstainers. + string abstain_count = 3; + + // veto_count is the weighted sum of vetoes. + string veto_count = 4; +} +``` + +### Voting + +Members of a group can vote on proposals. There are four choices to choose while voting - yes, no, abstain and veto. Not +all decision policies will support them. Votes can contain some optional metadata. +In the current implementation, the voting window begins as soon as a proposal +is submitted. + +Voting internally updates the proposal `VoteState` as well as `Status` and `Result` if needed. + +### Executing Proposals + +Proposals will not be automatically executed by the chain in this current design, +but rather a user must submit a `Msg/Exec` transaction to attempt to execute the +proposal based on the current votes and decision policy. A future upgrade could +automate this and have the group account (or a fee granter) pay. + +#### Changing Group Membership + +In the current implementation, updating a group or a group account after submitting a proposal will make it invalid. It will simply fail if someone calls `Msg/Exec` and will eventually be garbage collected. + +### Notes on current implementation + +This section outlines the current implementation used in the proof of concept of the group module but this could be subject to changes and iterated on. + +#### ORM + +The [ORM package](https://github.com/cosmos/cosmos-sdk/discussions/9156) defines tables, sequences and secondary indexes which are used in the group module. + +Groups are stored in state as part of a `groupTable`, the `group_id` being an auto-increment integer. Group members are stored in a `groupMemberTable`. + +Group accounts are stored in a `groupAccountTable`. The group account address is generated based on an auto-increment integer which is used to derive the group module `RootModuleKey` into a `DerivedModuleKey`, as stated in [ADR-033](adr-033-protobuf-inter-module-comm.md#modulekeys-and-moduleids). The group account is added as a new `ModuleAccount` through `x/auth`. + +Proposals are stored as part of the `proposalTable` using the `Proposal` type. The `proposal_id` is an auto-increment integer. + +Votes are stored in the `voteTable`. The primary key is based on the vote's `proposal_id` and `voter` account address. + +#### ADR-033 to route proposal messages + +Inter-module communication introduced by [ADR-033](adr-033-protobuf-inter-module-comm.md) can be used to route a proposal's messages using the `DerivedModuleKey` corresponding to the proposal's group account. + +## Consequences + +### Positive + +* Improved UX for multi-signature accounts allowing key rotation and custom decision policies. + +### Negative + +### Neutral + +* It uses ADR 033 so it will need to be implemented within the Cosmos SDK, but this doesn't imply necessarily any large refactoring of existing Cosmos SDK modules. +* The current implementation of the group module uses the ORM package. + +## Further Discussions + +* Convergence of `/group` and `x/gov` as both support proposals and voting: https://github.com/cosmos/cosmos-sdk/discussions/9066 +* `x/group` possible future improvements: + * Execute proposals on submission (https://github.com/regen-network/regen-ledger/issues/288) + * Withdraw a proposal (https://github.com/regen-network/cosmos-modules/issues/41) + * Make `Tally` more flexible and support non-binary choices + +## References + +* Initial specification: + * https://gist.github.com/aaronc/b60628017352df5983791cad30babe56#group-module + * [#5236](https://github.com/cosmos/cosmos-sdk/pull/5236) +* Proposal to add `x/group` into the Cosmos SDK: [#7633](https://github.com/cosmos/cosmos-sdk/issues/7633) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-043-nft-module.md b/versioned_docs/version-0.47/integrate/architecture/adr-043-nft-module.md new file mode 100644 index 000000000..87b4dbb5e --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-043-nft-module.md @@ -0,0 +1,349 @@ +# ADR 43: NFT Module + +## Changelog + +* 2021-05-01: Initial Draft +* 2021-07-02: Review updates +* 2022-06-15: Add batch operation +* 2022-11-11: Remove strict validation of classID and tokenID + +## Status + +PROPOSED + +## Abstract + +This ADR defines the `x/nft` module which is a generic implementation of NFTs, roughly "compatible" with ERC721. **Applications using the `x/nft` module must implement the following functions**: + +* `MsgNewClass` - Receive the user's request to create a class, and call the `NewClass` of the `x/nft` module. +* `MsgUpdateClass` - Receive the user's request to update a class, and call the `UpdateClass` of the `x/nft` module. +* `MsgMintNFT` - Receive the user's request to mint a nft, and call the `MintNFT` of the `x/nft` module. +* `BurnNFT` - Receive the user's request to burn a nft, and call the `BurnNFT` of the `x/nft` module. +* `UpdateNFT` - Receive the user's request to update a nft, and call the `UpdateNFT` of the `x/nft` module. + +## Context + +NFTs are more than just crypto art, which is very helpful for accruing value to the Cosmos ecosystem. As a result, Cosmos Hub should implement NFT functions and enable a unified mechanism for storing and sending the ownership representative of NFTs as discussed in https://github.com/cosmos/cosmos-sdk/discussions/9065. + +As discussed in [#9065](https://github.com/cosmos/cosmos-sdk/discussions/9065), several potential solutions can be considered: + +* irismod/nft and modules/incubator/nft +* CW721 +* DID NFTs +* interNFT + +Since functions/use cases of NFTs are tightly connected with their logic, it is almost impossible to support all the NFTs' use cases in one Cosmos SDK module by defining and implementing different transaction types. + +Considering generic usage and compatibility of interchain protocols including IBC and Gravity Bridge, it is preferred to have a generic NFT module design which handles the generic NFTs logic. +This design idea can enable composability that application-specific functions should be managed by other modules on Cosmos Hub or on other Zones by importing the NFT module. + +The current design is based on the work done by [IRISnet team](https://github.com/irisnet/irismod/tree/master/modules/nft) and an older implementation in the [Cosmos repository](https://github.com/cosmos/modules/tree/master/incubator/nft). + +## Decision + +We create a `x/nft` module, which contains the following functionality: + +* Store NFTs and track their ownership. +* Expose `Keeper` interface for composing modules to transfer, mint and burn NFTs. +* Expose external `Message` interface for users to transfer ownership of their NFTs. +* Query NFTs and their supply information. + +The proposed module is a base module for NFT app logic. It's goal it to provide a common layer for storage, basic transfer functionality and IBC. The module should not be used as a standalone. +Instead an app should create a specialized module to handle app specific logic (eg: NFT ID construction, royalty), user level minting and burning. Moreover an app specialized module should handle auxiliary data to support the app logic (eg indexes, ORM, business data). + +All data carried over IBC must be part of the `NFT` or `Class` type described below. The app specific NFT data should be encoded in `NFT.data` for cross-chain integrity. Other objects related to NFT, which are not important for integrity can be part of the app specific module. + +### Types + +We propose two main types: + +* `Class` -- describes NFT class. We can think about it as a smart contract address. +* `NFT` -- object representing unique, non fungible asset. Each NFT is associated with a Class. + +#### Class + +NFT **Class** is comparable to an ERC-721 smart contract (provides description of a smart contract), under which a collection of NFTs can be created and managed. + +```protobuf +message Class { + string id = 1; + string name = 2; + string symbol = 3; + string description = 4; + string uri = 5; + string uri_hash = 6; + google.protobuf.Any data = 7; +} +``` + +* `id` is used as the primary index for storing the class; _required_ +* `name` is a descriptive name of the NFT class; _optional_ +* `symbol` is the symbol usually shown on exchanges for the NFT class; _optional_ +* `description` is a detailed description of the NFT class; _optional_ +* `uri` is a URI for the class metadata stored off chain. It should be a JSON file that contains metadata about the NFT class and NFT data schema ([OpenSea example](https://docs.opensea.io/docs/contract-level-metadata)); _optional_ +* `uri_hash` is a hash of the document pointed by uri; _optional_ +* `data` is app specific metadata of the class; _optional_ + +#### NFT + +We define a general model for `NFT` as follows. + +```protobuf +message NFT { + string class_id = 1; + string id = 2; + string uri = 3; + string uri_hash = 4; + google.protobuf.Any data = 10; +} +``` + +* `class_id` is the identifier of the NFT class where the NFT belongs; _required_ +* `id` is an identifier of the NFT, unique within the scope of its class. It is specified by the creator of the NFT and may be expanded to use DID in the future. `class_id` combined with `id` uniquely identifies an NFT and is used as the primary index for storing the NFT; _required_ + + ```text + {class_id}/{id} --> NFT (bytes) + ``` + +* `uri` is a URI for the NFT metadata stored off chain. Should point to a JSON file that contains metadata about this NFT (Ref: [ERC721 standard and OpenSea extension](https://docs.opensea.io/docs/metadata-standards)); _required_ +* `uri_hash` is a hash of the document pointed by uri; _optional_ +* `data` is an app specific data of the NFT. CAN be used by composing modules to specify additional properties of the NFT; _optional_ + +This ADR doesn't specify values that `data` can take; however, best practices recommend upper-level NFT modules clearly specify their contents. Although the value of this field doesn't provide the additional context required to manage NFT records, which means that the field can technically be removed from the specification, the field's existence allows basic informational/UI functionality. + +### `Keeper` Interface + +```go +type Keeper interface { + NewClass(ctx sdk.Context,class Class) + UpdateClass(ctx sdk.Context,class Class) + + Mint(ctx sdk.Context,nft NFT,receiver sdk.AccAddress) // updates totalSupply + BatchMint(ctx sdk.Context, tokens []NFT,receiver sdk.AccAddress) error + + Burn(ctx sdk.Context, classId string, nftId string) // updates totalSupply + BatchBurn(ctx sdk.Context, classID string, nftIDs []string) error + + Update(ctx sdk.Context, nft NFT) + BatchUpdate(ctx sdk.Context, tokens []NFT) error + + Transfer(ctx sdk.Context, classId string, nftId string, receiver sdk.AccAddress) + BatchTransfer(ctx sdk.Context, classID string, nftIDs []string, receiver sdk.AccAddress) error + + GetClass(ctx sdk.Context, classId string) Class + GetClasses(ctx sdk.Context) []Class + + GetNFT(ctx sdk.Context, classId string, nftId string) NFT + GetNFTsOfClassByOwner(ctx sdk.Context, classId string, owner sdk.AccAddress) []NFT + GetNFTsOfClass(ctx sdk.Context, classId string) []NFT + + GetOwner(ctx sdk.Context, classId string, nftId string) sdk.AccAddress + GetBalance(ctx sdk.Context, classId string, owner sdk.AccAddress) uint64 + GetTotalSupply(ctx sdk.Context, classId string) uint64 +} +``` + +Other business logic implementations should be defined in composing modules that import `x/nft` and use its `Keeper`. + +### `Msg` Service + +```protobuf +service Msg { + rpc Send(MsgSend) returns (MsgSendResponse); +} + +message MsgSend { + string class_id = 1; + string id = 2; + string sender = 3; + string reveiver = 4; +} +message MsgSendResponse {} +``` + +`MsgSend` can be used to transfer the ownership of an NFT to another address. + +The implementation outline of the server is as follows: + +```go +type msgServer struct{ + k Keeper +} + +func (m msgServer) Send(ctx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { + // check current ownership + assertEqual(msg.Sender, m.k.GetOwner(msg.ClassId, msg.Id)) + + // transfer ownership + m.k.Transfer(msg.ClassId, msg.Id, msg.Receiver) + + return &types.MsgSendResponse{}, nil +} +``` + +The query service methods for the `x/nft` module are: + +```protobuf +service Query { + // Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721 + rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/balance/{owner}/{class_id}"; + } + + // Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721 + rpc Owner(QueryOwnerRequest) returns (QueryOwnerResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/owner/{class_id}/{id}"; + } + + // Supply queries the number of NFTs from the given class, same as totalSupply of ERC721. + rpc Supply(QuerySupplyRequest) returns (QuerySupplyResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/supply/{class_id}"; + } + + // NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in ERC721Enumerable + rpc NFTs(QueryNFTsRequest) returns (QueryNFTsResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts"; + } + + // NFT queries an NFT based on its class and id. + rpc NFT(QueryNFTRequest) returns (QueryNFTResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts/{class_id}/{id}"; + } + + // Class queries an NFT class based on its id + rpc Class(QueryClassRequest) returns (QueryClassResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes/{class_id}"; + } + + // Classes queries all NFT classes + rpc Classes(QueryClassesRequest) returns (QueryClassesResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes"; + } +} + +// QueryBalanceRequest is the request type for the Query/Balance RPC method +message QueryBalanceRequest { + string class_id = 1; + string owner = 2; +} + +// QueryBalanceResponse is the response type for the Query/Balance RPC method +message QueryBalanceResponse { + uint64 amount = 1; +} + +// QueryOwnerRequest is the request type for the Query/Owner RPC method +message QueryOwnerRequest { + string class_id = 1; + string id = 2; +} + +// QueryOwnerResponse is the response type for the Query/Owner RPC method +message QueryOwnerResponse { + string owner = 1; +} + +// QuerySupplyRequest is the request type for the Query/Supply RPC method +message QuerySupplyRequest { + string class_id = 1; +} + +// QuerySupplyResponse is the response type for the Query/Supply RPC method +message QuerySupplyResponse { + uint64 amount = 1; +} + +// QueryNFTstRequest is the request type for the Query/NFTs RPC method +message QueryNFTsRequest { + string class_id = 1; + string owner = 2; + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +// QueryNFTsResponse is the response type for the Query/NFTs RPC methods +message QueryNFTsResponse { + repeated cosmos.nft.v1beta1.NFT nfts = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryNFTRequest is the request type for the Query/NFT RPC method +message QueryNFTRequest { + string class_id = 1; + string id = 2; +} + +// QueryNFTResponse is the response type for the Query/NFT RPC method +message QueryNFTResponse { + cosmos.nft.v1beta1.NFT nft = 1; +} + +// QueryClassRequest is the request type for the Query/Class RPC method +message QueryClassRequest { + string class_id = 1; +} + +// QueryClassResponse is the response type for the Query/Class RPC method +message QueryClassResponse { + cosmos.nft.v1beta1.Class class = 1; +} + +// QueryClassesRequest is the request type for the Query/Classes RPC method +message QueryClassesRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryClassesResponse is the response type for the Query/Classes RPC method +message QueryClassesResponse { + repeated cosmos.nft.v1beta1.Class classes = 1; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} +``` + +### Interoperability + +Interoperability is all about reusing assets between modules and chains. The former one is achieved by ADR-33: Protobuf client - server communication. At the time of writing ADR-33 is not finalized. The latter is achieved by IBC. Here we will focus on the IBC side. +IBC is implemented per module. Here, we aligned that NFTs will be recorded and managed in the x/nft. This requires creation of a new IBC standard and implementation of it. + +For IBC interoperability, NFT custom modules MUST use the NFT object type understood by the IBC client. So, for x/nft interoperability, custom NFT implementations (example: x/cryptokitty) should use the canonical x/nft module and proxy all NFT balance keeping functionality to x/nft or else re-implement all functionality using the NFT object type understood by the IBC client. In other words: x/nft becomes the standard NFT registry for all Cosmos NFTs (example: x/cryptokitty will register a kitty NFT in x/nft and use x/nft for book keeping). This was [discussed](https://github.com/cosmos/cosmos-sdk/discussions/9065#discussioncomment-873206) in the context of using x/bank as a general asset balance book. Not using x/nft will require implementing another module for IBC. + +## Consequences + +### Backward Compatibility + +No backward incompatibilities. + +### Forward Compatibility + +This specification conforms to the ERC-721 smart contract specification for NFT identifiers. Note that ERC-721 defines uniqueness based on (contract address, uint256 tokenId), and we conform to this implicitly because a single module is currently aimed to track NFT identifiers. Note: use of the (mutable) data field to determine uniqueness is not safe.s + +### Positive + +* NFT identifiers available on Cosmos Hub. +* Ability to build different NFT modules for the Cosmos Hub, e.g., ERC-721. +* NFT module which supports interoperability with IBC and other cross-chain infrastructures like Gravity Bridge + +### Negative + +* New IBC app is required for x/nft +* CW721 adapter is required + +### Neutral + +* Other functions need more modules. For example, a custody module is needed for NFT trading function, a collectible module is needed for defining NFT properties. + +## Further Discussions + +For other kinds of applications on the Hub, more app-specific modules can be developed in the future: + +* `x/nft/custody`: custody of NFTs to support trading functionality. +* `x/nft/marketplace`: selling and buying NFTs using sdk.Coins. +* `x/fractional`: a module to split an ownership of an asset (NFT or other assets) for multiple stakeholder. `x/group` should work for most of the cases. + +Other networks in the Cosmos ecosystem could design and implement their own NFT modules for specific NFT applications and use cases. + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/discussions/9065 +* x/nft: initialize module: https://github.com/cosmos/cosmos-sdk/pull/9174 +* [ADR 033](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-033-protobuf-inter-module-comm.md) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-044-protobuf-updates-guidelines.md b/versioned_docs/version-0.47/integrate/architecture/adr-044-protobuf-updates-guidelines.md new file mode 100644 index 000000000..a5ea31316 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-044-protobuf-updates-guidelines.md @@ -0,0 +1,129 @@ +# ADR 044: Guidelines for Updating Protobuf Definitions + +## Changelog + +* 28.06.2021: Initial Draft +* 02.12.2021: Add `Since:` comment for new fields +* 21.07.2022: Remove the rule of no new `Msg` in the same proto version. + +## Status + +Draft + +## Abstract + +This ADR provides guidelines and recommended practices when updating Protobuf definitions. These guidelines are targeting module developers. + +## Context + +The Cosmos SDK maintains a set of [Protobuf definitions](https://github.com/cosmos/cosmos-sdk/tree/main/proto/cosmos). It is important to correctly design Protobuf definitions to avoid any breaking changes within the same version. The reasons are to not break tooling (including indexers and explorers), wallets and other third-party integrations. + +When making changes to these Protobuf definitions, the Cosmos SDK currently only follows [Buf's](https://docs.buf.build/) recommendations. We noticed however that Buf's recommendations might still result in breaking changes in the SDK in some cases. For example: + +* Adding fields to `Msg`s. Adding fields is a not a Protobuf spec-breaking operation. However, when adding new fields to `Msg`s, the unknown field rejection will throw an error when sending the new `Msg` to an older node. +* Marking fields as `reserved`. Protobuf proposes the `reserved` keyword for removing fields without the need to bump the package version. However, by doing so, client backwards compatibility is broken as Protobuf doesn't generate anything for `reserved` fields. See [#9446](https://github.com/cosmos/cosmos-sdk/issues/9446) for more details on this issue. + +Moreover, module developers often face other questions around Protobuf definitions such as "Can I rename a field?" or "Can I deprecate a field?" This ADR aims to answer all these questions by providing clear guidelines about allowed updates for Protobuf definitions. + +## Decision + +We decide to keep [Buf's](https://docs.buf.build/) recommendations with the following exceptions: + +* `UNARY_RPC`: the Cosmos SDK currently does not support streaming RPCs. +* `COMMENT_FIELD`: the Cosmos SDK allows fields with no comments. +* `SERVICE_SUFFIX`: we use the `Query` and `Msg` service naming convention, which doesn't use the `-Service` suffix. +* `PACKAGE_VERSION_SUFFIX`: some packages, such as `cosmos.crypto.ed25519`, don't use a version suffix. +* `RPC_REQUEST_STANDARD_NAME`: Requests for the `Msg` service don't have the `-Request` suffix to keep backwards compatibility. + +On top of Buf's recommendations we add the following guidelines that are specific to the Cosmos SDK. + +### Updating Protobuf Definition Without Bumping Version + +#### 1. Module developers MAY add new Protobuf definitions + +Module developers MAY add new `message`s, new `Service`s, new `rpc` endpoints, and new fields to existing messages. This recommendation follows the Protobuf specification, but is added in this document for clarity, as the SDK requires one additional change. + +The SDK requires the Protobuf comment of the new addition to contain one line with the following format: + +```protobuf +// Since: cosmos-sdk {, ...} +``` + +Where each `version` denotes a minor ("0.45") or patch ("0.44.5") version from which the field is available. This will greatly help client libraries, who can optionally use reflection or custom code generation to show/hide these fields depending on the targetted node version. + +As examples, the following comments are valid: + +```protobuf +// Since: cosmos-sdk 0.44 + +// Since: cosmos-sdk 0.42.11, 0.44.5 +``` + +and the following ones are NOT valid: + +```protobuf +// Since cosmos-sdk v0.44 + +// since: cosmos-sdk 0.44 + +// Since: cosmos-sdk 0.42.11 0.44.5 + +// Since: Cosmos SDK 0.42.11, 0.44.5 +``` + +#### 2. Fields MAY be marked as `deprecated`, and nodes MAY implement a protocol-breaking change for handling these fields + +Protobuf supports the [`deprecated` field option](https://developers.google.com/protocol-buffers/docs/proto#options), and this option MAY be used on any field, including `Msg` fields. If a node handles a Protobuf message with a non-empty deprecated field, the node MAY change its behavior upon processing it, even in a protocol-breaking way. When possible, the node MUST handle backwards compatibility without breaking the consensus (unless we increment the proto version). + +As an example, the Cosmos SDK v0.42 to v0.43 update contained two Protobuf-breaking changes, listed below. Instead of bumping the package versions from `v1beta1` to `v1`, the SDK team decided to follow this guideline, by reverting the breaking changes, marking those changes as deprecated, and modifying the node implementation when processing messages with deprecated fields. More specifically: + +* The Cosmos SDK recently removed support for [time-based software upgrades](https://github.com/cosmos/cosmos-sdk/pull/8849). As such, the `time` field has been marked as deprecated in `cosmos.upgrade.v1beta1.Plan`. Moreover, the node will reject any proposal containing an upgrade Plan whose `time` field is non-empty. +* The Cosmos SDK now supports [governance split votes](./adr-037-gov-split-vote.md). When querying for votes, the returned `cosmos.gov.v1beta1.Vote` message has its `option` field (used for 1 vote option) deprecated in favor of its `options` field (allowing multiple vote options). Whenever possible, the SDK still populates the deprecated `option` field, that is, if and only if the `len(options) == 1` and `options[0].Weight == 1.0`. + +#### 3. Fields MUST NOT be renamed + +Whereas the official Protobuf recommendations do not prohibit renaming fields, as it does not break the Protobuf binary representation, the SDK explicitly forbids renaming fields in Protobuf structs. The main reason for this choice is to avoid introducing breaking changes for clients, which often rely on hard-coded fields from generated types. Moreover, renaming fields will lead to client-breaking JSON representations of Protobuf definitions, used in REST endpoints and in the CLI. + +### Incrementing Protobuf Package Version + +TODO, needs architecture review. Some topics: + +* Bumping versions frequency +* When bumping versions, should the Cosmos SDK support both versions? + * i.e. v1beta1 -> v1, should we have two folders in the Cosmos SDK, and handlers for both versions? +* mention ADR-023 Protobuf naming + +## Consequences + +> This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ADR must explain how the author proposes to deal with these incompatibilities. ADR submissions without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +* less pain to tool developers +* more compatibility in the ecosystem +* ... + +### Negative + +{negative consequences} + +### Neutral + +* more rigor in Protobuf review + +## Further Discussions + +This ADR is still in the DRAFT stage, and the "Incrementing Protobuf Package Version" will be filled in once we make a decision on how to correctly do it. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +* [#9445](https://github.com/cosmos/cosmos-sdk/issues/9445) Release proto definitions v1 +* [#9446](https://github.com/cosmos/cosmos-sdk/issues/9446) Address v1beta1 proto breaking changes diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-045-check-delivertx-middlewares.md b/versioned_docs/version-0.47/integrate/architecture/adr-045-check-delivertx-middlewares.md new file mode 100644 index 000000000..60172977c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-045-check-delivertx-middlewares.md @@ -0,0 +1,312 @@ +# ADR 045: BaseApp `{Check,Deliver}Tx` as Middlewares + +## Changelog + +* 20.08.2021: Initial draft. +* 07.12.2021: Update `tx.Handler` interface ([\#10693](https://github.com/cosmos/cosmos-sdk/pull/10693)). +* 17.05.2022: ADR is abandoned, as middlewares are deemed too hard to reason about. + +## Status + +ABANDONED. Replacement is being discussed in [#11955](https://github.com/cosmos/cosmos-sdk/issues/11955). + +## Abstract + +This ADR replaces the current BaseApp `runTx` and antehandlers design with a middleware-based design. + +## Context + +BaseApp's implementation of ABCI `{Check,Deliver}Tx()` and its own `Simulate()` method call the `runTx` method under the hood, which first runs antehandlers, then executes `Msg`s. However, the [transaction Tips](https://github.com/cosmos/cosmos-sdk/issues/9406) and [refunding unused gas](https://github.com/cosmos/cosmos-sdk/issues/2150) use cases require custom logic to be run after the `Msg`s execution. There is currently no way to achieve this. + +An naive solution would be to add post-`Msg` hooks to BaseApp. However, the Cosmos SDK team thinks in parallel about the bigger picture of making app wiring simpler ([#9181](https://github.com/cosmos/cosmos-sdk/discussions/9182)), which includes making BaseApp more lightweight and modular. + +## Decision + +We decide to transform Baseapp's implementation of ABCI `{Check,Deliver}Tx` and its own `Simulate` methods to use a middleware-based design. + +The two following interfaces are the base of the middleware design, and are defined in `types/tx`: + +```go +type Handler interface { + CheckTx(ctx context.Context, req Request, checkReq RequestCheckTx) (Response, ResponseCheckTx, error) + DeliverTx(ctx context.Context, req Request) (Response, error) + SimulateTx(ctx context.Context, req Request (Response, error) +} + +type Middleware func(Handler) Handler +``` + +where we define the following arguments and return types: + +```go +type Request struct { + Tx sdk.Tx + TxBytes []byte +} + +type Response struct { + GasWanted uint64 + GasUsed uint64 + // MsgResponses is an array containing each Msg service handler's response + // type, packed in an Any. This will get proto-serialized into the `Data` field + // in the ABCI Check/DeliverTx responses. + MsgResponses []*codectypes.Any + Log string + Events []abci.Event +} + +type RequestCheckTx struct { + Type abci.CheckTxType +} + +type ResponseCheckTx struct { + Priority int64 +} +``` + +Please note that because CheckTx handles separate logic related to mempool priotization, its signature is different than DeliverTx and SimulateTx. + +BaseApp holds a reference to a `tx.Handler`: + +```go +type BaseApp struct { + // other fields + txHandler tx.Handler +} +``` + +Baseapp's ABCI `{Check,Deliver}Tx()` and `Simulate()` methods simply call `app.txHandler.{Check,Deliver,Simulate}Tx()` with the relevant arguments. For example, for `DeliverTx`: + +```go +func (app *BaseApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { + var abciRes abci.ResponseDeliverTx + ctx := app.getContextForTx(runTxModeDeliver, req.Tx) + res, err := app.txHandler.DeliverTx(ctx, tx.Request{TxBytes: req.Tx}) + if err != nil { + abciRes = sdkerrors.ResponseDeliverTx(err, uint64(res.GasUsed), uint64(res.GasWanted), app.trace) + return abciRes + } + + abciRes, err = convertTxResponseToDeliverTx(res) + if err != nil { + return sdkerrors.ResponseDeliverTx(err, uint64(res.GasUsed), uint64(res.GasWanted), app.trace) + } + + return abciRes +} + +// convertTxResponseToDeliverTx converts a tx.Response into a abci.ResponseDeliverTx. +func convertTxResponseToDeliverTx(txRes tx.Response) (abci.ResponseDeliverTx, error) { + data, err := makeABCIData(txRes) + if err != nil { + return abci.ResponseDeliverTx{}, nil + } + + return abci.ResponseDeliverTx{ + Data: data, + Log: txRes.Log, + Events: txRes.Events, + }, nil +} + +// makeABCIData generates the Data field to be sent to ABCI Check/DeliverTx. +func makeABCIData(txRes tx.Response) ([]byte, error) { + return proto.Marshal(&sdk.TxMsgData{MsgResponses: txRes.MsgResponses}) +} +``` + +The implementations are similar for `BaseApp.CheckTx` and `BaseApp.Simulate`. + +`baseapp.txHandler`'s three methods' implementations can obviously be monolithic functions, but for modularity we propose a middleware composition design, where a middleware is simply a function that takes a `tx.Handler`, and returns another `tx.Handler` wrapped around the previous one. + +### Implementing a Middleware + +In practice, middlewares are created by Go function that takes as arguments some parameters needed for the middleware, and returns a `tx.Middleware`. + +For example, for creating an arbitrary `MyMiddleware`, we can implement: + +```go +// myTxHandler is the tx.Handler of this middleware. Note that it holds a +// reference to the next tx.Handler in the stack. +type myTxHandler struct { + // next is the next tx.Handler in the middleware stack. + next tx.Handler + // some other fields that are relevant to the middleware can be added here +} + +// NewMyMiddleware returns a middleware that does this and that. +func NewMyMiddleware(arg1, arg2) tx.Middleware { + return func (txh tx.Handler) tx.Handler { + return myTxHandler{ + next: txh, + // optionally, set arg1, arg2... if they are needed in the middleware + } + } +} + +// Assert myTxHandler is a tx.Handler. +var _ tx.Handler = myTxHandler{} + +func (h myTxHandler) CheckTx(ctx context.Context, req Request, checkReq RequestcheckTx) (Response, ResponseCheckTx, error) { + // CheckTx specific pre-processing logic + + // run the next middleware + res, checkRes, err := txh.next.CheckTx(ctx, req, checkReq) + + // CheckTx specific post-processing logic + + return res, checkRes, err +} + +func (h myTxHandler) DeliverTx(ctx context.Context, req Request) (Response, error) { + // DeliverTx specific pre-processing logic + + // run the next middleware + res, err := txh.next.DeliverTx(ctx, tx, req) + + // DeliverTx specific post-processing logic + + return res, err +} + +func (h myTxHandler) SimulateTx(ctx context.Context, req Request) (Response, error) { + // SimulateTx specific pre-processing logic + + // run the next middleware + res, err := txh.next.SimulateTx(ctx, tx, req) + + // SimulateTx specific post-processing logic + + return res, err +} +``` + +### Composing Middlewares + +While BaseApp simply holds a reference to a `tx.Handler`, this `tx.Handler` itself is defined using a middleware stack. The Cosmos SDK exposes a base (i.e. innermost) `tx.Handler` called `RunMsgsTxHandler`, which executes messages. + +Then, the app developer can compose multiple middlewares on top on the base `tx.Handler`. Each middleware can run pre-and-post-processing logic around its next middleware, as described in the section above. Conceptually, as an example, given the middlewares `A`, `B`, and `C` and the base `tx.Handler` `H` the stack looks like: + +```text +A.pre + B.pre + C.pre + H # The base tx.handler, for example `RunMsgsTxHandler` + C.post + B.post +A.post +``` + +We define a `ComposeMiddlewares` function for composing middlewares. It takes the base handler as first argument, and middlewares in the "outer to inner" order. For the above stack, the final `tx.Handler` is: + +```go +txHandler := middleware.ComposeMiddlewares(H, A, B, C) +``` + +The middleware is set in BaseApp via its `SetTxHandler` setter: + +```go +// simapp/app.go + +txHandler := middleware.ComposeMiddlewares(...) +app.SetTxHandler(txHandler) +``` + +The app developer can define their own middlewares, or use the Cosmos SDK's pre-defined middlewares from `middleware.NewDefaultTxHandler()`. + +### Middlewares Maintained by the Cosmos SDK + +While the app developer can define and compose the middlewares of their choice, the Cosmos SDK provides a set of middlewares that caters for the ecosystem's most common use cases. These middlewares are: + +| Middleware | Description | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RunMsgsTxHandler | This is the base `tx.Handler`. It replaces the old baseapp's `runMsgs`, and executes a transaction's `Msg`s. | +| TxDecoderMiddleware | This middleware takes in transaction raw bytes, and decodes them into a `sdk.Tx`. It replaces the `baseapp.txDecoder` field, so that BaseApp stays as thin as possible. Since most middlewares read the contents of the `sdk.Tx`, the TxDecoderMiddleware should be run first in the middleware stack. | +| {Antehandlers} | Each antehandler is converted to its own middleware. These middlewares perform signature verification, fee deductions and other validations on the incoming transaction. | +| IndexEventsTxMiddleware | This is a simple middleware that chooses which events to index in Tendermint. Replaces `baseapp.indexEvents` (which unfortunately still exists in baseapp too, because it's used to index Begin/EndBlock events) | +| RecoveryTxMiddleware | This index recovers from panics. It replaces baseapp.runTx's panic recovery described in [ADR-022](./adr-022-custom-panic-handling.md). | +| GasTxMiddleware | This replaces the [`Setup`](https://github.com/cosmos/cosmos-sdk/blob/v0.43.0/x/auth/ante/setup.go) Antehandler. It sets a GasMeter on sdk.Context. Note that before, GasMeter was set on sdk.Context inside the antehandlers, and there was some mess around the fact that antehandlers had their own panic recovery system so that the GasMeter could be read by baseapp's recovery system. Now, this mess is all removed: one middleware sets GasMeter, another one handles recovery. | + +### Similarities and Differences between Antehandlers and Middlewares + +The middleware-based design builds upon the existing antehandlers design described in [ADR-010](./adr-010-modular-antehandler.md). Even though the final decision of ADR-010 was to go with the "Simple Decorators" approach, the middleware design is actually very similar to the other [Decorator Pattern](./adr-010-modular-antehandler.md#decorator-pattern) proposal, also used in [weave](https://github.com/iov-one/weave). + +#### Similarities with Antehandlers + +* Designed as chaining/composing small modular pieces. +* Allow code reuse for `{Check,Deliver}Tx` and for `Simulate`. +* Set up in `app.go`, and easily customizable by app developers. +* Order is important. + +#### Differences with Antehandlers + +* The Antehandlers are run before `Msg` execution, whereas middlewares can run before and after. +* The middleware approach uses separate methods for `{Check,Deliver,Simulate}Tx`, whereas the antehandlers pass a `simulate bool` flag and uses the `sdkCtx.Is{Check,Recheck}Tx()` flags to determine in which transaction mode we are. +* The middleware design lets each middleware hold a reference to the next middleware, whereas the antehandlers pass a `next` argument in the `AnteHandle` method. +* The middleware design use Go's standard `context.Context`, whereas the antehandlers use `sdk.Context`. + +## Consequences + +### Backwards Compatibility + +Since this refactor removes some logic away from BaseApp and into middlewares, it introduces API-breaking changes for app developers. Most notably, instead of creating an antehandler chain in `app.go`, app developers need to create a middleware stack: + +```diff +- anteHandler, err := ante.NewAnteHandler( +- ante.HandlerOptions{ +- AccountKeeper: app.AccountKeeper, +- BankKeeper: app.BankKeeper, +- SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), +- FeegrantKeeper: app.FeeGrantKeeper, +- SigGasConsumer: ante.DefaultSigVerificationGasConsumer, +- }, +-) ++txHandler, err := authmiddleware.NewDefaultTxHandler(authmiddleware.TxHandlerOptions{ ++ Debug: app.Trace(), ++ IndexEvents: indexEvents, ++ LegacyRouter: app.legacyRouter, ++ MsgServiceRouter: app.msgSvcRouter, ++ LegacyAnteHandler: anteHandler, ++ TxDecoder: encodingConfig.TxConfig.TxDecoder, ++}) +if err != nil { + panic(err) +} +- app.SetAnteHandler(anteHandler) ++ app.SetTxHandler(txHandler) +``` + +Other more minor API breaking changes will also be provided in the CHANGELOG. As usual, the Cosmos SDK will provide a release migration document for app developers. + +This ADR does not introduce any state-machine-, client- or CLI-breaking changes. + +### Positive + +* Allow custom logic to be run before an after `Msg` execution. This enables the [tips](https://github.com/cosmos/cosmos-sdk/issues/9406) and [gas refund](https://github.com/cosmos/cosmos-sdk/issues/2150) uses cases, and possibly other ones. +* Make BaseApp more lightweight, and defer complex logic to small modular components. +* Separate paths for `{Check,Deliver,Simulate}Tx` with different returns types. This allows for improved readability (replace `if sdkCtx.IsRecheckTx() && !simulate {...}` with separate methods) and more flexibility (e.g. returning a `priority` in `ResponseCheckTx`). + +### Negative + +* It is hard to understand at first glance the state updates that would occur after a middleware runs given the `sdk.Context` and `tx`. A middleware can have an arbitrary number of nested middleware being called within its function body, each possibly doing some pre- and post-processing before calling the next middleware on the chain. Thus to understand what a middleware is doing, one must also understand what every other middleware further along the chain is also doing, and the order of middlewares matters. This can get quite complicated to understand. +* API-breaking changes for app developers. + +### Neutral + +No neutral consequences. + +## Further Discussions + +* [#9934](https://github.com/cosmos/cosmos-sdk/discussions/9934) Decomposing BaseApp's other ABCI methods into middlewares. +* Replace `sdk.Tx` interface with the concrete protobuf Tx type in the `tx.Handler` methods signature. + +## Test Cases + +We update the existing baseapp and antehandlers tests to use the new middleware API, but keep the same test cases and logic, to avoid introducing regressions. Existing CLI tests will also be left untouched. + +For new middlewares, we introduce unit tests. Since middlewares are purposefully small, unit tests suit well. + +## References + +* Initial discussion: https://github.com/cosmos/cosmos-sdk/issues/9585 +* Implementation: [#9920 BaseApp refactor](https://github.com/cosmos/cosmos-sdk/pull/9920) and [#10028 Antehandlers migration](https://github.com/cosmos/cosmos-sdk/pull/10028) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-046-module-params.md b/versioned_docs/version-0.47/integrate/architecture/adr-046-module-params.md new file mode 100644 index 000000000..369cd043d --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-046-module-params.md @@ -0,0 +1,184 @@ +# ADR 046: Module Params + +## Changelog + +* Sep 22, 2021: Initial Draft + +## Status + +Proposed + +## Abstract + +This ADR describes an alternative approach to how Cosmos SDK modules use, interact, +and store their respective parameters. + +## Context + +Currently, in the Cosmos SDK, modules that require the use of parameters use the +`x/params` module. The `x/params` works by having modules define parameters, +typically via a simple `Params` structure, and registering that structure in +the `x/params` module via a unique `Subspace` that belongs to the respective +registering module. The registering module then has unique access to its respective +`Subspace`. Through this `Subspace`, the module can get and set its `Params` +structure. + +In addition, the Cosmos SDK's `x/gov` module has direct support for changing +parameters on-chain via a `ParamChangeProposal` governance proposal type, where +stakeholders can vote on suggested parameter changes. + +There are various tradeoffs to using the `x/params` module to manage individual +module parameters. Namely, managing parameters essentially comes for "free" in +that developers only need to define the `Params` struct, the `Subspace`, and the +various auxiliary functions, e.g. `ParamSetPairs`, on the `Params` type. However, +there are some notable drawbacks. These drawbacks include the fact that parameters +are serialized in state via JSON which is extremely slow. In addition, parameter +changes via `ParamChangeProposal` governance proposals have no way of reading from +or writing to state. In other words, it is currently not possible to have any +state transitions in the application during an attempt to change param(s). + +## Decision + +We will build off of the alignment of `x/gov` and `x/authz` work per +[#9810](https://github.com/cosmos/cosmos-sdk/pull/9810). Namely, module developers +will create one or more unique parameter data structures that must be serialized +to state. The Param data structures must implement `sdk.Msg` interface with respective +Protobuf Msg service method which will validate and update the parameters with all +necessary changes. The `x/gov` module via the work done in +[#9810](https://github.com/cosmos/cosmos-sdk/pull/9810), will dispatch Param +messages, which will be handled by Protobuf Msg services. + +Note, it is up to developers to decide how to structure their parameters and +the respective `sdk.Msg` messages. Consider the parameters currently defined in +`x/auth` using the `x/params` module for parameter management: + +```protobuf +message Params { + uint64 max_memo_characters = 1; + uint64 tx_sig_limit = 2; + uint64 tx_size_cost_per_byte = 3; + uint64 sig_verify_cost_ed25519 = 4; + uint64 sig_verify_cost_secp256k1 = 5; +} +``` + +Developers can choose to either create a unique data structure for every field in +`Params` or they can create a single `Params` structure as outlined above in the +case of `x/auth`. + +In the former, `x/params`, approach, a `sdk.Msg` would need to be created for every single +field along with a handler. This can become burdensome if there are a lot of +parameter fields. In the latter case, there is only a single data structure and +thus only a single message handler, however, the message handler might have to be +more sophisticated in that it might need to understand what parameters are being +changed vs what parameters are untouched. + +Params change proposals are made using the `x/gov` module. Execution is done through +`x/authz` authorization to the root `x/gov` module's account. + +Continuing to use `x/auth`, we demonstrate a more complete example: + +```go +type Params struct { + MaxMemoCharacters uint64 + TxSigLimit uint64 + TxSizeCostPerByte uint64 + SigVerifyCostED25519 uint64 + SigVerifyCostSecp256k1 uint64 +} + +type MsgUpdateParams struct { + MaxMemoCharacters uint64 + TxSigLimit uint64 + TxSizeCostPerByte uint64 + SigVerifyCostED25519 uint64 + SigVerifyCostSecp256k1 uint64 +} + +type MsgUpdateParamsResponse struct {} + +func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // verification logic... + + // persist params + params := ParamsFromMsg(msg) + ms.SaveParams(ctx, params) + + return &types.MsgUpdateParamsResponse{}, nil +} + +func ParamsFromMsg(msg *types.MsgUpdateParams) Params { + // ... +} +``` + +A gRPC `Service` query should also be provided, for example: + +```protobuf +service Query { + // ... + + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos//v1beta1/params"; + } +} + +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false]; +} +``` + +## Consequences + +As a result of implementing the module parameter methodology, we gain the ability +for module parameter changes to be stateful and extensible to fit nearly every +application's use case. We will be able to emit events (and trigger hooks registered +to that events using the work proposed in [event hooks](https://github.com/cosmos/cosmos-sdk/discussions/9656)), +call other Msg service methods or perform migration. +In addition, there will be significant gains in performance when it comes to reading +and writing parameters from and to state, especially if a specific set of parameters +are read on a consistent basis. + +However, this methodology will require developers to implement more types and +Msg service metohds which can become burdensome if many parameters exist. In addition, +developers are required to implement persistance logics of module parameters. +However, this should be trivial. + +### Backwards Compatibility + +The new method for working with module parameters is naturally not backwards +compatible with the existing `x/params` module. However, the `x/params` will +remain in the Cosmos SDK and will be marked as deprecated with no additional +functionality being added apart from potential bug fixes. Note, the `x/params` +module may be removed entirely in a future release. + +### Positive + +* Module parameters are serialized more efficiently +* Modules are able to react on parameters changes and perform additional actions. +* Special events can be emitted, allowing hooks to be triggered. + +### Negative + +* Module parameters becomes slightly more burdensome for module developers: + * Modules are now responsible for persisting and retrieving parameter state + * Modules are now required to have unique message handlers to handle parameter + changes per unique parameter data structure. + +### Neutral + +* Requires [#9810](https://github.com/cosmos/cosmos-sdk/pull/9810) to be reviewed + and merged. + + + +## References + +* https://github.com/cosmos/cosmos-sdk/pull/9810 +* https://github.com/cosmos/cosmos-sdk/issues/9438 +* https://github.com/cosmos/cosmos-sdk/discussions/9913 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-047-extend-upgrade-plan.md b/versioned_docs/version-0.47/integrate/architecture/adr-047-extend-upgrade-plan.md new file mode 100644 index 000000000..0df030062 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-047-extend-upgrade-plan.md @@ -0,0 +1,245 @@ +# ADR 047: Extend Upgrade Plan + +## Changelog + +- Nov, 23, 2021: Initial Draft + +## Status + +PROPOSED Not Implemented + +## Abstract + +This ADR expands the existing x/upgrade `Plan` proto message to include new fields for defining pre-run and post-run processes within upgrade tooling. +It also defines a structure for providing downloadable artifacts involved in an upgrade. + +## Context + +The `upgrade` module in conjunction with Cosmovisor are designed to facilitate and automate a blockchain's transition from one version to another. + +Users submit a software upgrade governance proposal containing an upgrade `Plan`. +The [Plan](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/proto/cosmos/upgrade/v1beta1/upgrade.proto#L12) currently contains the following fields: +- `name`: A short string identifying the new version. +- `height`: The chain height at which the upgrade is to be performed. +- `info`: A string containing information about the upgrade. + +The `info` string can be anything. +However, Cosmovisor will try to use the `info` field to automatically download a new version of the blockchain executable. +For the auto-download to work, Cosmovisor expects it to be either a stringified JSON object (with a specific structure defined through documentation), or a URL that will return such JSON. +The JSON object identifies URLs used to download the new blockchain executable for different platforms (OS and Architecture, e.g. "linux/amd64"). +Such a URL can either return the executable file directly or can return an archive containing the executable and possibly other assets. + +If the URL returns an archive, it is decompressed into `{DAEMON_HOME}/cosmovisor/{upgrade name}`. +Then, if `{DAEMON_HOME}/cosmovisor/{upgrade name}/bin/{DAEMON_NAME}` does not exist, but `{DAEMON_HOME}/cosmovisor/{upgrade name}/{DAEMON_NAME}` does, the latter is copied to the former. +If the URL returns something other than an archive, it is downloaded to `{DAEMON_HOME}/cosmovisor/{upgrade name}/bin/{DAEMON_NAME}`. + +If an upgrade height is reached and the new version of the executable version isn't available, Cosmovisor will stop running. + +Both `DAEMON_HOME` and `DAEMON_NAME` are [environment variables used to configure Cosmovisor](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.0.0/cosmovisor/README.md#command-line-arguments-and-environment-variables). + +Currently, there is no mechanism that makes Cosmovisor run a command after the upgraded chain has been restarted. + +The current upgrade process has this timeline: +1. An upgrade governance proposal is submitted and approved. +1. The upgrade height is reached. +1. The `x/upgrade` module writes the `upgrade_info.json` file. +1. The chain halts. +1. Cosmovisor backs up the data directory (if set up to do so). +1. Cosmovisor downloads the new executable (if not already in place). +1. Cosmovisor executes the `${DAEMON_NAME} pre-upgrade`. +1. Cosmovisor restarts the app using the new version and same args originally provided. + +## Decision + +### Protobuf Updates + +We will update the `x/upgrade.Plan` message for providing upgrade instructions. +The upgrade instructions will contain a list of artifacts available for each platform. +It allows for the definition of a pre-run and post-run commands. +These commands are not consensus guaranteed; they will be executed by Cosmosvisor (or other) during its upgrade handling. + +```protobuf +message Plan { + // ... (existing fields) + + UpgradeInstructions instructions = 6; +} +``` + +The new `UpgradeInstructions instructions` field MUST be optional. + +```protobuf +message UpgradeInstructions { + string pre_run = 1; + string post_run = 2; + repeated Artifact artifacts = 3; + string description = 4; +} +``` + +All fields in the `UpgradeInstructions` are optional. +- `pre_run` is a command to run prior to the upgraded chain restarting. + If defined, it will be executed after halting and downloading the new artifact but before restarting the upgraded chain. + The working directory this command runs from MUST be `{DAEMON_HOME}/cosmovisor/{upgrade name}`. + This command MUST behave the same as the current [pre-upgrade](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/docs/migrations/pre-upgrade.md) command. + It does not take in any command-line arguments and is expected to terminate with the following exit codes: + + | Exit status code | How it is handled in Cosmosvisor | + |------------------|---------------------------------------------------------------------------------------------------------------------| + | `0` | Assumes `pre-upgrade` command executed successfully and continues the upgrade. | + | `1` | Default exit code when `pre-upgrade` command has not been implemented. | + | `30` | `pre-upgrade` command was executed but failed. This fails the entire upgrade. | + | `31` | `pre-upgrade` command was executed but failed. But the command is retried until exit code `1` or `30` are returned. | + If defined, then the app supervisors (e.g. Cosmovisor) MUST NOT run `app pre-run`. +- `post_run` is a command to run after the upgraded chain has been started. If defined, this command MUST be only executed at most once by an upgrading node. + The output and exit code SHOULD be logged but SHOULD NOT affect the running of the upgraded chain. + The working directory this command runs from MUST be `{DAEMON_HOME}/cosmovisor/{upgrade name}`. +- `artifacts` define items to be downloaded. + It SHOULD have only one entry per platform. +- `description` contains human-readable information about the upgrade and might contain references to external resources. + It SHOULD NOT be used for structured processing information. + +```protobuf +message Artifact { + string platform = 1; + string url = 2; + string checksum = 3; + string checksum_algo = 4; +} +``` + +- `platform` is a required string that SHOULD be in the format `{OS}/{CPU}`, e.g. `"linux/amd64"`. + The string `"any"` SHOULD also be allowed. + An `Artifact` with a `platform` of `"any"` SHOULD be used as a fallback when a specific `{OS}/{CPU}` entry is not found. + That is, if an `Artifact` exists with a `platform` that matches the system's OS and CPU, that should be used; + otherwise, if an `Artifact` exists with a `platform` of `any`, that should be used; + otherwise no artifact should be downloaded. +- `url` is a required URL string that MUST conform to [RFC 1738: Uniform Resource Locators](https://www.ietf.org/rfc/rfc1738.txt). + A request to this `url` MUST return either an executable file or an archive containing either `bin/{DAEMON_NAME}` or `{DAEMON_NAME}`. + The URL should not contain checksum - it should be specified by the `checksum` attribute. +- `checksum` is a checksum of the expected result of a request to the `url`. + It is not required, but is recommended. + If provided, it MUST be a hex encoded checksum string. + Tools utilizing these `UpgradeInstructions` MUST fail if a `checksum` is provided but is different from the checksum of the result returned by the `url`. +- `checksum_algo` is a string identify the algorithm used to generate the `checksum`. + Recommended algorithms: `sha256`, `sha512`. + Algorithms also supported (but not recommended): `sha1`, `md5`. + If a `checksum` is provided, a `checksum_algo` MUST also be provided. + +A `url` is not required to contain a `checksum` query parameter. +If the `url` does contain a `checksum` query parameter, the `checksum` and `checksum_algo` fields MUST also be populated, and their values MUST match the value of the query parameter. +For example, if the `url` is `"https://example.com?checksum=md5:d41d8cd98f00b204e9800998ecf8427e"`, then the `checksum` field must be `"d41d8cd98f00b204e9800998ecf8427e"` and the `checksum_algo` field must be `"md5"`. + +### Upgrade Module Updates + +If an upgrade `Plan` does not use the new `UpgradeInstructions` field, existing functionality will be maintained. +The parsing of the `info` field as either a URL or `binaries` JSON will be deprecated. +During validation, if the `info` field is used as such, a warning will be issued, but not an error. + +We will update the creation of the `upgrade-info.json` file to include the `UpgradeInstructions`. + +We will update the optional validation available via CLI to account for the new `Plan` structure. +We will add the following validation: +1. If `UpgradeInstructions` are provided: + 1. There MUST be at least one entry in `artifacts`. + 1. All of the `artifacts` MUST have a unique `platform`. + 1. For each `Artifact`, if the `url` contains a `checksum` query parameter: + 1. The `checksum` query parameter value MUST be in the format of `{checksum_algo}:{checksum}`. + 1. The `{checksum}` from the query parameter MUST equal the `checksum` provided in the `Artifact`. + 1. The `{checksum_algo}` from the query parameter MUST equal the `checksum_algo` provided in the `Artifact`. +1. The following validation is currently done using the `info` field. We will apply similar validation to the `UpgradeInstructions`. + For each `Artifact`: + 1. The `platform` MUST have the format `{OS}/{CPU}` or be `"any"`. + 1. The `url` field MUST NOT be empty. + 1. The `url` field MUST be a proper URL. + 1. A `checksum` MUST be provided either in the `checksum` field or as a query parameter in the `url`. + 1. If the `checksum` field has a value and the `url` also has a `checksum` query parameter, the two values MUST be equal. + 1. The `url` MUST return either a file or an archive containing either `bin/{DAEMON_NAME}` or `{DAEMON_NAME}`. + 1. If a `checksum` is provided (in the field or as a query param), the checksum of the result of the `url` MUST equal the provided checksum. + +Downloading of an `Artifact` will happen the same way that URLs from `info` are currently downloaded. + +### Cosmovisor Updates + +If the `upgrade-info.json` file does not contain any `UpgradeInstructions`, existing functionality will be maintained. + +We will update Cosmovisor to look for and handle the new `UpgradeInstructions` in `upgrade-info.json`. +If the `UpgradeInstructions` are provided, we will do the following: +1. The `info` field will be ignored. +1. The `artifacts` field will be used to identify the artifact to download based on the `platform` that Cosmovisor is running in. +1. If a `checksum` is provided (either in the field or as a query param in the `url`), and the downloaded artifact has a different checksum, the upgrade process will be interrupted and Cosmovisor will exit with an error. +1. If a `pre_run` command is defined, it will be executed at the same point in the process where the `app pre-upgrade` command would have been executed. + It will be executed using the same environment as other commands run by Cosmovisor. +1. If a `post_run` command is defined, it will be executed after executing the command that restarts the chain. + It will be executed in a background process using the same environment as the other commands. + Any output generated by the command will be logged. + Once complete, the exit code will be logged. + +We will deprecate the use of the `info` field for anything other than human readable information. +A warning will be logged if the `info` field is used to define the assets (either by URL or JSON). + +The new upgrade timeline is very similar to the current one. Changes are in bold: +1. An upgrade governance proposal is submitted and approved. +1. The upgrade height is reached. +1. The `x/upgrade` module writes the `upgrade_info.json` file **(now possibly with `UpgradeInstructions`)**. +1. The chain halts. +1. Cosmovisor backs up the data directory (if set up to do so). +1. Cosmovisor downloads the new executable (if not already in place). +1. Cosmovisor executes **the `pre_run` command if provided**, or else the `${DAEMON_NAME} pre-upgrade` command. +1. Cosmovisor restarts the app using the new version and same args originally provided. +1. **Cosmovisor immediately runs the `post_run` command in a detached process.** + +## Consequences + +### Backwards Compatibility + +Since the only change to existing definitions is the addition of the `instructions` field to the `Plan` message, and that field is optional, there are no backwards incompatibilities with respects to the proto messages. +Additionally, current behavior will be maintained when no `UpgradeInstructions` are provided, so there are no backwards incompatibilities with respects to either the upgrade module or Cosmovisor. + +### Forwards Compatibility + +In order to utilize the `UpgradeInstructions` as part of a software upgrade, both of the following must be true: +1. The chain must already be using a sufficiently advanced version of the Cosmos SDK. +1. The chain's nodes must be using a sufficiently advanced version of Cosmovisor. + +### Positive + +1. The structure for defining artifacts is clearer since it is now defined in the proto instead of in documentation. +1. Availability of a pre-run command becomes more obvious. +1. A post-run command becomes possible. + +### Negative + +1. The `Plan` message becomes larger. This is negligible because A) the `x/upgrades` module only stores at most one upgrade plan, and B) upgrades are rare enough that the increased gas cost isn't a concern. +1. There is no option for providing a URL that will return the `UpgradeInstructions`. +1. The only way to provide multiple assets (executables and other files) for a platform is to use an archive as the platform's artifact. + +### Neutral + +1. Existing functionality of the `info` field is maintained when the `UpgradeInstructions` aren't provided. + +## Further Discussions + +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r698708349): + Consider different names for `UpgradeInstructions instructions` (either the message type or field name). +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r754655072): + 1. Consider putting the `string platform` field inside `UpgradeInstructions` and make `UpgradeInstructions` a repeated field in `Plan`. + 1. Consider using a `oneof` field in the `Plan` which could either be `UpgradeInstructions` or else a URL that should return the `UpgradeInstructions`. + 1. Consider allowing `info` to either be a JSON serialized version of `UpgradeInstructions` or else a URL that returns that. +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r755462876): + Consider not including the `UpgradeInstructions.description` field, using the `info` field for that purpose instead. +1. [Draft PR #10032 Comment](https://github.com/cosmos/cosmos-sdk/pull/10032/files?authenticity_token=pLtzpnXJJB%2Fif2UWiTp9Td3MvRrBF04DvjSuEjf1azoWdLF%2BSNymVYw9Ic7VkqHgNLhNj6iq9bHQYnVLzMXd4g%3D%3D&file-filters%5B%5D=.go&file-filters%5B%5D=.proto#r754643691): + Consider allowing multiple artifacts to be downloaded for any given `platform` by adding a `name` field to the `Artifact` message. +1. [PR #10502 Comment](https://github.com/cosmos/cosmos-sdk/pull/10602#discussion_r781438288) + Allow the new `UpgradeInstructions` to be provided via URL. +1. [PR #10502 Comment](https://github.com/cosmos/cosmos-sdk/pull/10602#discussion_r781438288) + Allow definition of a `signer` for assets (as an alternative to using a `checksum`). + +## References + +- [Current upgrade.proto](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/proto/cosmos/upgrade/v1beta1/upgrade.proto) +- [Upgrade Module README](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/x/upgrade/spec/README.md) +- [Cosmovisor README](https://github.com/cosmos/cosmos-sdk/blob/cosmovisor/v1.0.0/cosmovisor/README.md) +- [Pre-upgrade README](https://github.com/cosmos/cosmos-sdk/blob/v0.44.5/docs/migrations/pre-upgrade.md) +- [Draft/POC PR #10032](https://github.com/cosmos/cosmos-sdk/pull/10032) +- [RFC 1738: Uniform Resource Locators](https://www.ietf.org/rfc/rfc1738.txt) diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-048-consensus-fees.md b/versioned_docs/version-0.47/integrate/architecture/adr-048-consensus-fees.md new file mode 100644 index 000000000..f1c6065cd --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-048-consensus-fees.md @@ -0,0 +1,204 @@ +# ADR 048: Multi Tire Gas Price System + +## Changelog + +* Dec 1, 2021: Initial Draft + +## Status + +Rejected + +## Abstract + +This ADR describes a flexible mechanism to maintain a consensus level gas prices, in which one can choose a multi-tier gas price system or EIP-1559 like one through configuration. + +## Context + +Currently, each validator configures it's own `minimal-gas-prices` in `app.yaml`. But setting a proper minimal gas price is critical to protect network from dos attack, and it's hard for all the validators to pick a sensible value, so we propose to maintain a gas price in consensus level. + +Since tendermint 0.34.20 has supported mempool prioritization, we can take advantage of that to implement more sophisticated gas fee system. + +## Multi-Tier Price System + +We propose a multi-tier price system on consensus to provide maximum flexibility: + +* Tier 1: a constant gas price, which could only be modified occasionally through governance proposal. +* Tier 2: a dynamic gas price which is adjusted according to previous block load. +* Tier 3: a dynamic gas price which is adjusted according to previous block load at a higher speed. + +The gas price of higher tier should bigger than the lower tier. + +The transaction fees are charged with the exact gas price calculated on consensus. + +The parameter schema is like this: + +```protobuf +message TierParams { + uint32 priority = 1 // priority in tendermint mempool + Coin initial_gas_price = 2 // + uint32 parent_gas_target = 3 // the target saturation of block + uint32 change_denominator = 4 // decides the change speed + Coin min_gas_price = 5 // optional lower bound of the price adjustment + Coin max_gas_price = 6 // optional upper bound of the price adjustment +} + +message Params { + repeated TierParams tiers = 1; +} +``` + +### Extension Options + +We need to allow user to specify the tier of service for the transaction, to support it in an extensible way, we add an extension option in `AuthInfo`: + +```protobuf +message ExtensionOptionsTieredTx { + uint32 fee_tier = 1 +} +``` + +The value of `fee_tier` is just the index to the `tiers` parameter list. + +We also change the semantic of existing `fee` field of `Tx`, instead of charging user the exact `fee` amount, we treat it as a fee cap, while the actual amount of fee charged is decided dynamically. If the `fee` is smaller than dynamic one, the transaction won't be included in current block and ideally should stay in the mempool until the consensus gas price drop. The mempool can eventually prune old transactions. + +### Tx Prioritization + +Transactions are prioritized based on the tier, the higher the tier, the higher the priority. + +Within the same tier, follow the default Tendermint order (currently FIFO). Be aware of that the mempool tx ordering logic is not part of consensus and can be modified by malicious validator. + +This mechanism can be easily composed with prioritization mechanisms: + +* we can add extra tiers out of a user control: + * Example 1: user can set tier 0, 10 or 20, but the protocol will create tiers 0, 1, 2 ... 29. For example IBC transactions will go to tier `user_tier + 5`: if user selected tier 1, then the transaction will go to tier 15. + * Example 2: we can reserve tier 4, 5, ... only for special transaction types. For example, tier 5 is reserved for evidence tx. So if submits a bank.Send transaction and set tier 5, it will be delegated to tier 3 (the max tier level available for any transaction). + * Example 3: we can enforce that all transactions of a sepecific type will go to specific tier. For example, tier 100 will be reserved for evidence transactions and all evidence transactions will always go to that tier. + +### `min-gas-prices` + +Deprecate the current per-validator `min-gas-prices` configuration, since it would confusing for it to work together with the consensus gas price. + +### Adjust For Block Load + +For tier 2 and tier 3 transactions, the gas price is adjusted according to previous block load, the logic could be similar to EIP-1559: + +```python +def adjust_gas_price(gas_price, parent_gas_used, tier): + if parent_gas_used == tier.parent_gas_target: + return gas_price + elif parent_gas_used > tier.parent_gas_target: + gas_used_delta = parent_gas_used - tier.parent_gas_target + gas_price_delta = max(gas_price * gas_used_delta // tier.parent_gas_target // tier.change_speed, 1) + return gas_price + gas_price_delta + else: + gas_used_delta = parent_gas_target - parent_gas_used + gas_price_delta = gas_price * gas_used_delta // parent_gas_target // tier.change_speed + return gas_price - gas_price_delta +``` + +### Block Segment Reservation + +Ideally we should reserve block segments for each tier, so the lower tiered transactions won't be completely squeezed out by higher tier transactions, which will force user to use higher tier, and the system degraded to a single tier. + +We need help from tendermint to implement this. + +## Implementation + +We can make each tier's gas price strategy fully configurable in protocol parameters, while providing a sensible default one. + +Pseudocode in python-like syntax: + +```python +interface TieredTx: + def tier(self) -> int: + pass + +def tx_tier(tx): + if isinstance(tx, TieredTx): + return tx.tier() + else: + # default tier for custom transactions + return 0 + # NOTE: we can add more rules here per "Tx Prioritization" section + +class TierParams: + 'gas price strategy parameters of one tier' + priority: int # priority in tendermint mempool + initial_gas_price: Coin + parent_gas_target: int + change_speed: Decimal # 0 means don't adjust for block load. + +class Params: + 'protocol parameters' + tiers: List[TierParams] + +class State: + 'consensus state' + # total gas used in last block, None when it's the first block + parent_gas_used: Optional[int] + # gas prices of last block for all tiers + gas_prices: List[Coin] + +def begin_block(): + 'Adjust gas prices' + for i, tier in enumerate(Params.tiers): + if State.parent_gas_used is None: + # initialized gas price for the first block + State.gas_prices[i] = tier.initial_gas_price + else: + # adjust gas price according to gas used in previous block + State.gas_prices[i] = adjust_gas_price(State.gas_prices[i], State.parent_gas_used, tier) + +def mempoolFeeTxHandler_checkTx(ctx, tx): + # the minimal-gas-price configured by validator, zero in deliver_tx context + validator_price = ctx.MinGasPrice() + consensus_price = State.gas_prices[tx_tier(tx)] + min_price = max(validator_price, consensus_price) + + # zero means infinity for gas price cap + if tx.gas_price() > 0 and tx.gas_price() < min_price: + return 'insufficient fees' + return next_CheckTx(ctx, tx) + +def txPriorityHandler_checkTx(ctx, tx): + res, err := next_CheckTx(ctx, tx) + # pass priority to tendermint + res.Priority = Params.tiers[tx_tier(tx)].priority + return res, err + +def end_block(): + 'Update block gas used' + State.parent_gas_used = block_gas_meter.consumed() +``` + +### Dos attack protection + +To fully saturate the blocks and prevent other transactions from executing, attacker need to use transactions of highest tier, the cost would be significantly higher than the default tier. + +If attacker spam with lower tier transactions, user can mitigate by sending higher tier transactions. + +## Consequences + +### Backwards Compatibility + +* New protocol parameters. +* New consensus states. +* New/changed fields in transaction body. + +### Positive + +* The default tier keeps the same predictable gas price experience for client. +* The higher tier's gas price can adapt to block load. +* No priority conflict with custom priority based on transaction types, since this proposal only occupy three priority levels. +* Possibility to compose different priority rules with tiers + +### Negative + +* Wallets & tools need to update to support the new `tier` parameter, and semantic of `fee` field is changed. + +### Neutral + +## References + +* https://eips.ethereum.org/EIPS/eip-1559 +* https://iohk.io/en/blog/posts/2021/11/26/network-traffic-and-tiered-pricing/ diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-049-state-sync-hooks.md b/versioned_docs/version-0.47/integrate/architecture/adr-049-state-sync-hooks.md new file mode 100644 index 000000000..f1df759e2 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-049-state-sync-hooks.md @@ -0,0 +1,174 @@ +# ADR 049: State Sync Hooks + +## Changelog + +- Jan 19, 2022: Initial Draft +- Apr 29, 2022: Safer extension snapshotter interface + +## Status + +Implemented + +## Abstract + +This ADR outlines a hooks-based mechanism for application modules to provide additional state (outside of the IAVL tree) to be used +during state sync. + +## Context + +New clients use state-sync to download snapshots of module state from peers. Currently, the snapshot consists of a +stream of `SnapshotStoreItem` and `SnapshotIAVLItem`, which means that application modules that define their state outside of the IAVL +tree cannot include their state as part of the state-sync process. + +Note, Even though the module state data is outside of the tree, for determinism we require that the hash of the external data should +be posted in the IAVL tree. + +## Decision + +A simple proposal based on our existing implementation is that, we can add two new message types: `SnapshotExtensionMeta` +and `SnapshotExtensionPayload`, and they are appended to the existing multi-store stream with `SnapshotExtensionMeta` +acting as a delimiter between extensions. As the chunk hashes should be able to ensure data integrity, we don't need +a delimiter to mark the end of the snapshot stream. + +Besides, we provide `Snapshotter` and `ExtensionSnapshotter` interface for modules to implement snapshotters, which will handle both taking +snapshot and the restoration. Each module could have mutiple snapshotters, and for modules with additional state, they should +implement `ExtensionSnapshotter` as extension snapshotters. When setting up the application, the snapshot `Manager` should call +`RegisterExtensions([]ExtensionSnapshotter…)` to register all the extension snapshotters. + +```protobuf +// SnapshotItem is an item contained in a rootmulti.Store snapshot. +// On top of the exsiting SnapshotStoreItem and SnapshotIAVLItem, we add two new options for the item. +message SnapshotItem { + // item is the specific type of snapshot item. + oneof item { + SnapshotStoreItem store = 1; + SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; + SnapshotExtensionMeta extension = 3; + SnapshotExtensionPayload extension_payload = 4; + } +} + +// SnapshotExtensionMeta contains metadata about an external snapshotter. +// One module may need multiple snapshotters, so each module may have multiple SnapshotExtensionMeta. +message SnapshotExtensionMeta { + // the name of the ExtensionSnapshotter, and it is registered to snapshotter manager when setting up the application + // name should be unique for each ExtensionSnapshotter as we need to alphabetically order their snapshots to get + // deterministic snapshot stream. + string name = 1; + // this is used by each ExtensionSnapshotter to decide the format of payloads included in SnapshotExtensionPayload message + // it is used within the snapshotter/namespace, not global one for all modules + uint32 format = 2; +} + +// SnapshotExtensionPayload contains payloads of an external snapshotter. +message SnapshotExtensionPayload { + bytes payload = 1; +} +``` + +When we create a snapshot stream, the `multistore` snapshot is always placed at the beginning of the binary stream, and other extension snapshots are alphabetically ordered by the name of the corresponding `ExtensionSnapshotter`. + +The snapshot stream would look like as follows: + +```go +// multi-store snapshot +{SnapshotStoreItem | SnapshotIAVLItem, ...} +// extension1 snapshot +SnapshotExtensionMeta +{SnapshotExtensionPayload, ...} +// extension2 snapshot +SnapshotExtensionMeta +{SnapshotExtensionPayload, ...} +``` + +We add an `extensions` field to snapshot `Manager` for extension snapshotters. The `multistore` snapshotter is a special one and it doesn't need a name because it is always placed at the beginning of the binary stream. + +```go +type Manager struct { + store *Store + multistore types.Snapshotter + extensions map[string]types.ExtensionSnapshotter + mtx sync.Mutex + operation operation + chRestore chan<- io.ReadCloser + chRestoreDone <-chan restoreDone + restoreChunkHashes [][]byte + restoreChunkIndex uint32 +} +``` + +For extension snapshotters that implement the `ExtensionSnapshotter` interface, their names should be registered to the snapshot `Manager` by +calling `RegisterExtensions` when setting up the application. The snapshotters will handle both taking snapshot and restoration. + +```go +// RegisterExtensions register extension snapshotters to manager +func (m *Manager) RegisterExtensions(extensions ...types.ExtensionSnapshotter) error +``` + +On top of the existing `Snapshotter` interface for the `multistore`, we add `ExtensionSnapshotter` interface for the extension snapshotters. Three more function signatures: `SnapshotFormat()`, `SupportedFormats()` and `SnapshotName()` are added to `ExtensionSnapshotter`. + +```go +// ExtensionPayloadReader read extension payloads, +// it returns io.EOF when reached either end of stream or the extension boundaries. +type ExtensionPayloadReader = func() ([]byte, error) + +// ExtensionPayloadWriter is a helper to write extension payloads to underlying stream. +type ExtensionPayloadWriter = func([]byte) error + +// ExtensionSnapshotter is an extension Snapshotter that is appended to the snapshot stream. +// ExtensionSnapshotter has an unique name and manages it's own internal formats. +type ExtensionSnapshotter interface { + // SnapshotName returns the name of snapshotter, it should be unique in the manager. + SnapshotName() string + + // SnapshotFormat returns the default format used to take a snapshot. + SnapshotFormat() uint32 + + // SupportedFormats returns a list of formats it can restore from. + SupportedFormats() []uint32 + + // SnapshotExtension writes extension payloads into the underlying protobuf stream. + SnapshotExtension(height uint64, payloadWriter ExtensionPayloadWriter) error + + // RestoreExtension restores an extension state snapshot, + // the payload reader returns `io.EOF` when reached the extension boundaries. + RestoreExtension(height uint64, format uint32, payloadReader ExtensionPayloadReader) error + +} +``` + +## Consequences + +As a result of this implementation, we are able to create snapshots of binary chunk stream for the state that we maintain outside of the IAVL Tree, CosmWasm blobs for example. And new clients are able to fetch sanpshots of state for all modules that have implemented the corresponding interface from peer nodes. + + +### Backwards Compatibility + +This ADR introduces new proto message types, add an `extensions` field in snapshot `Manager`, and add new `ExtensionSnapshotter` interface, so this is not backwards compatible if we have extensions. + +But for applications that does not have the state data outside of the IAVL tree for any module, the snapshot stream is backwards-compatible. + +### Positive + +- State maintained outside of IAVL tree like CosmWasm blobs can create snapshots by implementing extension snapshotters, and being fetched by new clients via state-sync. + +### Negative + +### Neutral + +- All modules that maintain state outside of IAVL tree need to implement `ExtensionSnapshotter` and the snapshot `Manager` need to call `RegisterExtensions` when setting up the application. + +## Further Discussions + +While an ADR is in the DRAFT or PROPOSED stage, this section should contain a summary of issues to be solved in future iterations (usually referencing comments from a pull-request discussion). +Later, this section can optionally list ideas or improvements the author or reviewers found during the analysis of this ADR. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +- https://github.com/cosmos/cosmos-sdk/pull/10961 +- https://github.com/cosmos/cosmos-sdk/issues/7340 +- https://hackmd.io/gJoyev6DSmqqkO667WQlGw diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex1.md b/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex1.md new file mode 100644 index 000000000..db2d3d67c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex1.md @@ -0,0 +1,322 @@ +# ADR 050: SIGN_MODE_TEXTUAL: Annex 1 Value Renderers + +## Changelog + +- Dec 06, 2021: Initial Draft +- Feb 07, 2022: Draft read and concept-ACKed by the Ledger team. + +## Status + +Accepted. Implementation started. Small value renderers details still need to be polished. + +## Abstract + +This Annex describes value renderers, which are used for displaying Protobuf values in a human-friendly way using a string array. + +## Value Renderers + +Value Renderers describe how values of different Protobuf types should be encoded as a string array. Value renderers can be formalized as a set of bijective functions `func renderT(value T) []string`, where `T` is one of the below Protobuf types for which this spec is defined. + +### Protobuf `number` + +- Applies to: + - protobuf numeric integer types (`int{32,64}`, `uint{32,64}`, `sint{32,64}`, `fixed{32,64}`, `sfixed{32,64}`) + - strings whose `customtype` is `github.com/cosmos/cosmos-sdk/types.Int` or `github.com/cosmos/cosmos-sdk/types.Dec` + - bytes whose `customtype` is `github.com/cosmos/cosmos-sdk/types.Int` or `github.com/cosmos/cosmos-sdk/types.Dec` +- Trailing decimal zeroes are always removed +- Formatting with `'`s for every three integral digits. +- Usage of `.` to denote the decimal delimiter. + +#### Examples + +- `1000` (uint64) -> `1'000` +- `"1000000.00"` (string representing a Dec) -> `1'000'000` +- `"1000000.10"` (string representing a Dec) -> `1'000'000.1` + +### `coin` + +- Applies to `cosmos.base.v1beta1.Coin`. +- Denoms are converted to `display` denoms using `Metadata` (if available). **This requires a state query**. The definition of `Metadata` can be found in the [bank Protobuf definition](https://github.com/cosmos/cosmos-sdk/blob/v0.46.0/proto/cosmos/bank/v1beta1/bank.proto#L79-L108). If the `display` field is empty or nil, then we do not perform any denom conversion. +- Amounts are converted to `display` denom amounts and rendered as `number`s above + - We do not change the capitalization of the denom. In practice, `display` denoms are stored in lowercase in state (e.g. `10 atom`), however they are often showed in UPPERCASE in everyday life (e.g. `10 ATOM`). Value renderers keep the case used in state, but we may recommend chains changing the denom metadata to be uppercase for better user display. +- One space between the denom and amount (e.g. `10 atom`). +- In the future, IBC denoms could maybe be converted to DID/IIDs, if we can find a robust way for doing this (ex. `cosmos:cosmos:hub:bank:denom:atom`) + +#### Examples + +- `1000000000uatom` -> `["1'000 atom"]`, because atom is the metadata's display denom. + +### `coins` + +- an array of `coin` is display as the concatenation of each `coin` encoded as the specification above, the joined together with the delimiter `", "` (a comma and a space, no quotes around). +- the list of coins is ordered by unicode code point of the display denom: `A-Z` < `a-z`. For example, the string `aAbBcC` would be sorted `ABCabc`. + +### Example + +- `["3cosm", "2000000uatom"]` -> `2 atom, 3 COSM` (assuming the display denoms are `atom` and `COSM`) +- `["10atom", "20Acoin"]` -> `20 Acoin, 10 atom` (assuming the display denoms are `atom` and `Acoin`) + +### `repeated` + +- Applies to all `repeated` fields, except `cosmos.tx.v1beta1.TxBody#Messages`, which has a particular encoding (see [ADR-050](./adr-050-sign-mode-textual.md)). +- A repeated type has the following template: + +``` + has + (/): + + (/): + +End of . +``` + +where: + +- `message_name` is the name of the Protobuf message which holds the `repeated` field, +- `int` is the length of the array, +- `field_name` is the Protobuf field name of the repeated field, + - add an optional `s` at the end if ` > 1` and the `field_name` doesn't already end with `s`. + +#### Examples + +Given the proto definition: + +```protobuf +message AllowedMsgAllowance { + repeated string allowed_messages = 1; +} +``` + +and initializing with: + +```go +x := []AllowedMsgAllowance{"cosmos.bank.v1beta1.MsgSend", "cosmos.gov.v1.MsgVote"} +``` + +we have the following value-rendered encoding: + +``` +Allowed messages: 2 strings +Allowed messages (1/2): cosmos.bank.v1beta1.MsgSend +Allowed messages (2/2): cosmos.gov.v1.MsgVote +End of Allowed messages +``` + +### `message` + +- Applies to Protobuf messages whose name does not start with `Msg` + - For `sdk.Msg`s, please see [ADR-050](./adr-050-sign-mode-textual.md) + - alternatively, we can decide to add a protobuf option to denote messages that are `sdk.Msg`s. +- Field names follow [sentence case](https://en.wiktionary.org/wiki/sentence_case) + - replace `_` with a spaces + - capitalize first letter of the setence +- Field names are ordered by their Protobuf field number +- Nesting: + - if a field contains a nested message, we value-render the underlying message using the template: + ``` + : <1st line of value-rendered message> + > // Notice the `>` prefix. + ``` + - `>` character is used to denote nesting. For each additional level of nesting, add `>`. + +#### Examples + +Given the following Protobuf messages: + +```protobuf +enum VoteOption { + VOTE_OPTION_UNSPECIFIED = 0; + VOTE_OPTION_YES = 1; + VOTE_OPTION_ABSTAIN = 2; + VOTE_OPTION_NO = 3; + VOTE_OPTION_NO_WITH_VETO = 4; +} + +message WeightedVoteOption { + VoteOption option = 1; + string weight = 2 [(cosmos_proto.scalar) = "cosmos.Dec"]; +} + +message Vote { + uint64 proposal_id = 1; + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + reserved 3; + repeated WeightedVoteOption options = 4; +} +``` + +we get the following encoding for the `Vote` message: + +``` +Vote object +> Proposal id: 4 +> Vote: cosmos1abc...def +> Options: 2 WeightedVoteOptions +> Options (1/2): WeightedVoteOption object +>> Option: Yes +>> Weight: 0.7 +> Options (2/2): WeightedVoteOption object +>> Option: No +>> Weight: 0.3 +> End of Options +``` + +### Enums + +- String case convention: snake case to sentence case +- Allow optional annotation for textual name (TBD) +- Algorithm: + - convert enum name (`VoteOption`) to snake_case (`VOTE_OPTION`) + - truncate that prefix + `_` from the enum name if it exists (`VOTE_OPTION_` gets stripped from `VOTE_OPTION_YES` -> `YES`) + - convert rest to sentence case: `YES` -> `Yes` + - in summary: `VOTE_OPTION_YES` -> `Yes` + +#### Examples + +See example above with `message Vote{}`. + +### `google.protobuf.Any` + +- Applies to `google.protobuf.Any` +- Rendered as: + +``` +Object: +> +``` + +#### Examples + +``` +Object: /cosmos.gov.v1.Vote +> Proposal id: 4 +> Vote: cosmos1abc...def +> Options: 2 WeightedVoteOptions +> Options (1/2): WeightedVoteOption object +>> Option: Yes +>> Weight: 0.7 +> Options (2/2): WeightedVoteOption object +>> Option: No +>> Weight: 0.3 +> End of Options +``` + +### `google.protobuf.Timestamp` + +Rendered using [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) (a +simplification of ISO 8601), which is the current recommendation for portable +time values. The rendering always uses "Z" (UTC) as the timezone. It uses only +the necessary fractional digits of a second, omitting the fractional part +entirely if the timestamp has no fractional seconds. (The resulting timestamps +are not automatically sortable by standard lexicographic order, but we favor +the legibility of the shorter string.) + +#### Examples + +The timestamp with 1136214245 seconds and 700000000 nanoseconds is rendered +as `2006-01-02T15:04:05.7Z`. +The timestamp with 1136214245 seconds and zero nanoseconds is rendered +as `2006-01-02T15:04:05Z`. + +### `google.protobuf.Duration` + +The duration proto expresses a raw number of seconds and nanoseconds. +This will be rendered as longer time units of days, hours, and minutes, +plus any remaining seconds, in that order. +Leading and trailing zero-quantity units will be omitted, but all +units in between nonzero units will be shown, e.g. ` 3 days, 0 hours, 0 minutes, 5 seconds`. + +Even longer time units such as months or years are imprecise. +Weeks are precise, but not commonly used - `91 days` is more immediately +legible than `13 weeks`. Although `days` can be problematic, +e.g. noon to noon on subsequent days can be 23 or 25 hours depending on +daylight savings transitions, there is significant advantage in using +strict 24-hour days over using only hours (e.g. `91 days` vs `2184 hours`). + +When nanoseconds are nonzero, they will be shown as fractional seconds, +with only the minimum number of digits, e.g `0.5 seconds`. + +A duration of exactly zero is shown as `0 seconds`. + +Units will be given as singular (no trailing `s`) when the quantity is exactly one, +and will be shown in plural otherwise. + +Negative durations will be indicated with a leading minus sign (`-`). + +Examples: + +- `1 day` +- `30 days` +- `-1 day, 12 hours` +- `3 hours, 0 minutes, 53.025 seconds` + +### bytes + +- Bytes are rendered in hexadecimal, all capital letters, without the `0x` prefix. + +### address bytes + +We currently use `string` types in protobuf for addresses so this may not be needed, but if any address bytes are used in sign mode textual they should be rendered with bech32 formatting + +### strings + +Strings are rendered as-is. + +### Default Values + +- Default Protobuf values for each field are skipped. + +#### Example + +```protobuf +message TestData { + string signer = 1; + string metadata = 2; +} +``` + +```go +myTestData := TestData{ + Signer: "cosmos1abc" +} +``` + +We get the following encoding for the `TestData` message: + +``` +TestData object +> Signer: cosmos1abc +``` + +### [ABANDONED] Custom `msg_title` instead of Msg `type_url` + +_This paragraph is in the Annex for informational purposes only, and will be removed in a next update of the ADR._ + +
+ Click to see abandoned idea. + +- all protobuf messages to be used with `SIGN_MODE_TEXTUAL` CAN have a short title associated with them that can be used in format strings whenever the type URL is explicitly referenced via the `cosmos.msg.v1.textual.msg_title` Protobuf message option. +- if this option is not specified for a Msg, then the Protobuf fully qualified name will be used. + +```protobuf +message MsgSend { + option (cosmos.msg.v1.textual.msg_title) = "bank send coins"; +} +``` + +- they MUST be unique per message, per chain + +#### Examples + +- `cosmos.gov.v1.MsgVote` -> `governance v1 vote` + +#### Best Pratices + +We recommend to use this option only for `Msg`s whose Protobuf fully qualified name can be hard to understand. As such, the two examples above (`MsgSend` and `MsgVote`) are not good examples to be used with `msg_title`. We still allow `msg_title` for chains who might have `Msg`s with complex or non-obvious names. + +In those cases, we recommend to drop the version (e.g. `v1`) in the string if there's only one version of the module on chain. This way, the bijective mapping can figure out which message each string corresponds to. If multiple Protobuf versions of the same module exist on the same chain, we recommend keeping the first `msg_title` with version, and the second `msg_title` with version (e.g. `v2`): + +- `mychain.mymodule.v1.MsgDo` -> `mymodule do something` +- `mychain.mymodule.v2.MsgDo` -> `mymodule v2 do something` + +
diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex2.md b/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex2.md new file mode 100644 index 000000000..d4037a50e --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual-annex2.md @@ -0,0 +1,122 @@ +# ADR 050: SIGN_MODE_TEXTUAL: Annex 2 XXX + +## Changelog + +- Oct 3, 2022: Initial Draft + +## Status + +DRAFT + +## Abstract + +This annex provides normative guidance on how devices should render a +`SIGN_MODE_TEXTUAL` document. + +## Context + +`SIGN_MODE_TEXTUAL` allows a legible version of a transaction to be signed +on a hardware security device, such as a Ledger. Early versions of the +design rendered transactions directly to lines of ASCII text, but this +proved awkward from its in-band signaling, and for the need to display +Unicode text within the transaction. + +## Decision + +`SIGN_MODE_TEXTUAL` renders to an abstract representation, leaving it +up to device-specific software how to present this representation given the +capabilities, limitations, and conventions of the deivce. + +We offer the following normative guidance: + +1. The presentation should be as legible as possible to the user, given +the capabilities of the device. If legibility could be sacrificed for other +properties, we would recommend just using some other signing mode. +Legibility should focus on the common case - it is okay for unusual cases +to be less legible. + +2. The presentation should be invertible if possible without substantial +sacrifice of legibility. Any change to the rendered data should result +in a visible change to the presentation. This extends the integrity of the +signing to user-visible presentation. + +3. The presentation should follow normal conventions of the device, +without sacrificing legibility or invertibility. + +As an illustration of these principles, here is an example algorithm +for presentation on a device which can display a single 80-character +line of printable ASCII characters: + +- The presentation is broken into lines, and each line is presented in +sequence, with user controls for going forward or backward a line. + +- Expert mode screens are only presented if the device is in expert mode. + +- Each line of the screen starts with a number of `>` characters equal +to the screen's indentation level, followed by a `+` character if this +isn't the first line of the screen, followed by a space if either a +`>` or a `+` has been emitted, +or if this header is followed by a `>`, `+`, or space. + +- If the line ends with whitespace or an `@` character, an additional `@` +character is appended to the line. + +- The following ASCII control characters or backslash (`\`) are converted +to a backslash followed by a letter code, in the manner of string literals +in many languages: + + - a: U+0007 alert or bell + - b: U+0008 backspace + - f: U+000C form feed + - n: U+000A line feed + - r: U+000D carriage return + - t: U+0009 horizontal tab + - v: U+000B vertical tab + - `\`: U+005C backslash + +- All other ASCII control characters, plus non-ASCII Unicode code points, +are shown as either: + + - `\u` followed by 4 uppercase hex chacters for code points + in the basic multilingual plane (BMP). + + - `\U` followed by 8 uppercase hex characters for other code points. + +- The screen will be broken into multiple lines to fit the 80-character +limit, considering the above transformations in a way that attempts to +minimize the number of lines generated. Expanded control or Unicode characters +are never split across lines. + +Example output: + +``` +An introductory line. +key1: 123456 +key2: a string that ends in whitespace @ +key3: a string that ends in a single ampersand - @@ + >tricky key4<: note the leading space in the presentation +introducing an aggregate +> key5: false +> key6: a very long line of text, please co\u00F6perate and break into +>+ multiple lines. +> Can we do further nesting? +>> You bet we can! +``` + +The inverse mapping gives us the only input which could have +generated this output (JSON notation for string data): + +``` +Indent Text +------ ---- +0 "An introductory line." +0 "key1: 123456" +0 "key2: a string that ends in whitespace " +0 "key3: a string that ends in a single ampersand - @" +0 ">tricky key4<: note the leading space in the presentation" +0 "introducing an aggregate" +1 "key5: false" +1 "key6: a very long line of text, please coöperate and break into multiple lines." +1 "Can we do further nesting?" +2 "You bet we can!" +``` diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual.md b/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual.md new file mode 100644 index 000000000..4fa83852e --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-050-sign-mode-textual.md @@ -0,0 +1,592 @@ +# ADR 050: SIGN_MODE_TEXTUAL + +## Changelog + +- Dec 06, 2021: Initial Draft. +- Feb 07, 2022: Draft read and concept-ACKed by the Ledger team. +- May 16, 2022: Change status to Accepted. +- Aug 11, 2022: Require signing over tx raw bytes. +- Sep 07, 2022: Add custom `Msg`-renderers. +- Sep 18, 2022: Structured format instead of lines of text + +## Status + +Accepted. Implementation started. Small value renderers details still need to be polished. + +## Abstract + +This ADR specifies SIGN_MODE_TEXTUAL, a new string-based sign mode that is targetted at signing with hardware devices. + +## Context + +Protobuf-based SIGN_MODE_DIRECT was introduced in [ADR-020](./adr-020-protobuf-transaction-encoding.md) and is intended to replace SIGN_MODE_LEGACY_AMINO_JSON in most situations, such as mobile wallets and CLI keyrings. However, the [Ledger](https://www.ledger.com/) hardware wallet is still using SIGN_MODE_LEGACY_AMINO_JSON for displaying the sign bytes to the user. Hardware wallets cannot transition to SIGN_MODE_DIRECT as: + +- SIGN_MODE_DIRECT is binary-based and thus not suitable for display to end-users. Technically, hardware wallets could simply display the sign bytes to the user. But this would be considered as blind signing, and is a security concern. +- hardware cannot decode the protobuf sign bytes due to memory constraints, as the Protobuf definitions would need to be embedded on the hardware device. + +In an effort to remove Amino from the SDK, a new sign mode needs to be created for hardware devices. [Initial discussions](https://github.com/cosmos/cosmos-sdk/issues/6513) propose a text-based sign mode, which this ADR formally specifies. + +## Decision + +In SIGN_MODE_TEXTUAL, a transaction is rendered into a textual representation, +which is then sent to a secure device or subsystem for the user to review and sign. +Unlike `SIGN_MODE_DIRECT`, the transmitted data can be simply decoded into legible text +even on devices with limited processing and display. + +The textual representation is a sequence of _screens_. +Each screen is meant to be displayed in its entirety (if possible) even on a small device like a Ledger. +A screen is roughly equivalent to a short line of text. +Large screens can be displayed in several pieces, +much as long lines of text are wrapped, +so no hard guidance is given, though 40 characters is a good target. +A screen is used to display a single key/value pair for scalar values +(or composite values with a compact notation, such as `Coins`) +or to introduce or conclude a larger grouping. + +The text can contain the full range of Unicode code points, including control characters and nul. +The device is responsible for deciding how to display characters it cannot render natively. +See [annex 2](./adr-050-sign-mode-textual-annex2.md) for guidance. + +Screens have a non-negative indentation level to signal composite or nested structures. +Indentation level zero is the top level. +Indentation is displayed via some device-specific mechanism. +Message quotation notation is an appropriate model, such as +leading `>` characters or vertical bars on more capable displays. + +Some screens are marked as _expert_ screens, +meant to be displayed only if the viewer chooses to opt in for the extra detail. +Expert screens are meant for information that is rarely useful, +or needs to be present only for signature integrity (see below). + +### Invertible Rendering + +We require that the rendering of the transaction be invertible: +there must be a parsing function such that for every transaction, +when rendered to the textual representation, +parsing that representation yeilds a proto message equivalent +to the original under proto equality. + +Note that this inverse function does not need to perform correct +parsing or error signaling for the whole domain of textual data. +Merely that the range of valid transactions be invertible under +the composition of rendering and parsing. + +Note that the existence of an inverse function ensures that the +rendered text contains the full information of the original transaction, +not a hash or subset. + +### Chain State + +The rendering function (and parsing function) may depend on the current chain state. +This is useful for reading parameters, such as coin display metadata, +or for reading user-specific preferences such as language or address aliases. +Note that if the observed state changes between signature generation +and the transaction's inclusion in a block, the delivery-time rendering +might differ. If so, the signature will be invalid and the transaction +will be rejected. + +### Signature and Security + +For security, transaction signatures should have three properties: + +1. Given the transaction, signatures, and chain state, it must be possible to validate that the signatures matches the transaction, +to verify that the signers must have known their respective secret keys. + +2. It must be computationally infeasible to find a substantially different transaction for which the given signatures are valid, given the same chain state. + +3. The user should be able to give informed consent to the signed data via a simple, secure device with limited display capabilities. + +The correctness and security of `SIGN_MODE_TEXTUAL` is guaranteed by demonstrating an inverse function from the rendering to transaction protos. +This means that it is impossible for a different protocol buffer message to render to the same text. + +### Transaction Hash Malleability + +When client software forms a transaction, the "raw" transaction (`TxRaw`) is serialized as a proto +and a hash of the resulting byte sequence is computed. +This is the `TxHash`, and is used by various services to track the submitted transaction through its lifecycle. +Various misbehavior is possible if one can generate a modified transaction with a different TxHash +but for which the signature still checks out. + +SIGN_MODE_TEXTUAL prevents this transaction malleability by including the TxHash as an expert screen +in the rendering. + +### SignDoc + +The SignDoc for `SIGN_MODE_TEXTUAL` is formed from a data structure like: + +``` +type Screen struct { + Text string text // possibly size limited to, e.g. 255 characters + Indent uint8 // size limited to something small like 16 or 32 + Expert bool +} + +type SignDocTextual = []Screen +``` + +We do not plan to use protobuf serialization to form the sequence of bytes +that will be tranmitted and signed, in order to keep the decoder simple. +We will use [CBOR](https://cbor.io) ([RFC 8949](https://www.rfc-editor.org/rfc/rfc8949.html)) instead. + +TODO: specify the details of the CBOR encoding. + +## Details + +In the examples that follow, screens will be shown as lines of text, +indentation is indicated with a leading '>', +and expert screens are marked with a leading `*`. + +### Encoding of the Transaction Envelope + +We define "transaction envelope" as all data in a transaction that is not in the `TxBody.Messages` field. Transaction envelope includes fee, signer infos and memo, but don't include `Msg`s. `//` denotes comments and are not shown on the Ledger device. + +``` +Chain ID: +Account number: +*Public Key: +Sequence: + // See #8. +Fee: // See value renderers for coins encoding. +*Fee payer: // Skipped if no fee_payer set +*Fee granter: // Skipped if no fee_granter set +Memo: // Skipped if no memo set +*Gas Limit: +*Timeout Height: // Skipped if no timeout_height set +Tipper: // If there's a tip +Tip: +*This transaction has body extension: // Skipped if no body extension options +* +*This transaction has body non-critical extensions: // Skipped if no body non-critical extension options +* // See value renderers for Any and array encoding. +*This transaction has body auth info extensions: // Skipped if no auth info extension options +* +*This transaction has other signers: // Skipped if there is only one signer +*Signer (/): +*Public Key: +*Sequence: +*End of other signers +*Hash of raw bytes: // Hex encoding of bytes defined in #10, to prevent tx hash malleability. +``` + +### Encoding of the Transaction Body + +Transaction Body is the `Tx.TxBody.Messages` field, which is an array of `Any`s, where each `Any` packs a `sdk.Msg`. Since `sdk.Msg`s are widely used, they have a slightly different encoding than usual array of `Any`s (Protobuf: `repeated google.protobuf.Any`) described in Annex 1. + +``` +This transaction has message: // Optional 's' for "message" if there's is >1 sdk.Msgs. +// For each Msg, print the following 2 lines: +Msg (/): // E.g. Msg (1/2): bank v1beta1 send coins + +End of transaction messages +``` + +#### Example + +Given the following Protobuf message: + +```protobuf +message Grant { + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; +} + +message MsgGrant { + option (cosmos.msg.v1.signer) = "granter"; + option (cosmos.msg.v1.textual.type_url) = "authz v1beta1 grant"; + + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} +``` + +and a transaction containing 1 such `sdk.Msg`, we get the following encoding: + +``` +This transaction has 1 message: +Msg (1/1): authz v1beta1 grant +Granter: cosmos1abc...def +Grantee: cosmos1ghi...jkl +End of transaction messages +``` + +### Custom `Msg` Renderers + +Application developers may choose to not follow default renderer value output for their own `Msg`s. In this case, they can implement their own custom `Msg` renderer. This is similar to [EIP4430](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4430.md), where the smart contract developer chooses the description string to be shown to the end user. + +This is done by setting the `cosmos.msg.v1.textual.expert_custom_renderer` Protobuf option to a non-empty string. This option CAN ONLY be set on a Protobuf message representing transaction message object (implementing `sdk.Msg` interface). + +```protobuf +message MsgFooBar { + // Optional comments to describe in human-readable language the formatting + // rules of the custom renderer. + option (cosmos.msg.v1.textual.expert_custom_renderer) = ""; + + // proto fields +} +``` + +When this option is set on a `Msg`, a registered function will transform the `Msg` into an array of one or more strings, which MAY use the key/value format (described in point #3) with the expert field prefix (described in point #5) and arbitrary indentation (point #6). These strings MAY be rendered from a `Msg` field using a default value renderer, or they may be generated from several fields using custom logic. + +The `` is a string convention chosen by the application developer and is used to identify the custom `Msg` renderer. For example, the documentation or specification of this custom algorithm can reference this identifier. This identifier CAN have a versioned suffix (e.g. `_v1`) to adapt for future changes (which would be consensus-breaking). We also recommend adding Protobuf comments to describe in human language the custom logic used. + +Moreover, the renderer must provide 2 functions: one for formatting from Protobuf to string, and one for parsing string to Protobuf. These 2 functions are provided by the application developer. To satisfy point #1, the parse function MUST be the inverse of the formatting function. This property will not be checked by the SDK at runtime. However, we strongly recommend the application developer to include a comprehensive suite in their app repo to test invertibility, as to not introduce security bugs. + +### Require signing over the `TxBody` and `AuthInfo` raw bytes + +Recall that the transaction bytes merklelized on chain are the Protobuf binary serialization of [TxRaw](hhttps://buf.build/cosmos/cosmos-sdk/docs/main:cosmos.tx.v1beta1#cosmos.tx.v1beta1.TxRaw), which contains the `body_bytes` and `auth_info_bytes`. Moreover, the transaction hash is defined as the SHA256 hash of the `TxRaw` bytes. We require that the user signs over these bytes in SIGN_MODE_TEXTUAL, more specifically over the following string: + +``` +*Hash of raw bytes: +``` + +where: +- `++` denotes concatenation, +- `HEX` is the hexadecimal representation of the bytes, all in capital letters, no `0x` prefix, +- and `len()` is encoded as a Big-Endian uint64. + +This is to prevent transaction hash malleability. The point #1 about invertiblity assures that transaction `body` and `auth_info` values are not malleable, but the transaction hash still might be malleable with point #1 only, because the SIGN_MODE_TEXTUAL strings don't follow the byte ordering defined in `body_bytes` and `auth_info_bytes`. Without this hash, a malicious validator or exchange could intercept a transaction, modify its transaction hash _after_ the user signed it using SIGN_MODE_TEXTUAL (by tweaking the byte ordering inside `body_bytes` or `auth_info_bytes`), and then submit it to Tendermint. + +By including this hash in the SIGN_MODE_TEXTUAL signing payload, we keep the same level of guarantees as [SIGN_MODE_DIRECT](./adr-020-protobuf-transaction-encoding.md). + +These bytes are only shown in expert mode, hence the leading `*`. + +## Additional Formatting by the Hardware Device + +See [annex 2](./adr-050-sign-mode-textual-annex2.md). + +## Examples + +#### Example 1: Simple `MsgSend` + +JSON: + +```json +{ + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from": "cosmos1...abc", + "to": "cosmos1...def", + "amount": [ + { + "denom": "uatom", + "amount": 10000000 + } + ] + } + ] + }, + "auth_info": { + "signer_infos": [ + { + "public_key": "iQ...==", + "mode_info": { "single": { "mode": "SIGN_MODE_TEXTUAL" } }, + "sequence": 2 + } + ], + "fee": { + "amount": [ + { + "denom": "atom", + "amount": 0.002 + } + ], + "gas_limit": 100000 + } + }, + // Additional SignerData. + "chain_id": "simapp-1", + "account_number": 10 +} +``` + +SIGN_MODE_TEXTUAL: + +``` +Chain ID: simapp-1 +Account number: 10 +*Public Key: iQ...== // Hex pubkey +Sequence: 2 +This transaction has 1 message: +Message (1/1): bank v1beta1 send coins +From: cosmos1...abc +To: cosmos1...def +Amount: 10 atom // Conversion from uatom to atom using value renderers +End of transaction messages +Fee: 0.002 atom +*Gas: 100'000 +*Hash of raw bytes: +``` + +#### Example 2: Multi-Msg Transaction with 3 signers + +#### Example 3: Legacy Multisig + +#### Example 4: Fee Payer with Tips + +```json +{ + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from": "cosmos1...tipper", + "to": "cosmos1...abc", + "amount": [ + { + "denom": "uatom", + "amount": 10000000 + } + ] + } + ] + }, + "auth_info": { + "signer_infos": [ + { + "public_key": "iQ...==", + "mode_info": { "single": { "mode": "SIGN_MODE_DIRECT_AUX" } }, + "sequence": 42 + }, + { + "public_key": "iR...==", + "mode_info": { "single": { "mode": "SIGN_MODE_TEXTUAL" } }, + "sequence": 2 + } + ], + "fee": { + "amount": [ + { + "denom": "atom", + "amount": 0.002 + } + ], + "gas_limit": 100000, + "payer": "cosmos1...feepayer" + }, + "tip": { + "amount": [ + { + "denom": "ibc/CDC4587874B85BEA4FCEC3CEA5A1195139799A1FEE711A07D972537E18FDA39D", + "amount": 200 + } + ], + "tipper": "cosmos1...tipper" + } + }, + // Additional SignerData. + "chain_id": "simapp-1", + "account_number": 10 +} +``` + +SIGN_MODE_TEXTUAL for the feepayer: + +``` +Chain ID: simapp-1 +Account number: 10 +*Public Key: iR...== +Sequence: 2 +This transaction has 1 message: +Message (1/1): bank v1beta1 send coins +From: cosmos1...abc +To: cosmos1...def +Amount: 10 atom +End of transaction messages +Fee: 0.002 atom +Fee Payer: cosmos1...feepayer +Tipper: cosmos1...tipper +Tip: 200 ibc/CDC4587874B85BEA4FCEC3CEA5A1195139799A1FEE711A07D972537E18FDA39D +*Gas: 100'000 +*This transaction has 1 other signer: +*Signer (1/2): +*Public Key: iQ...== +*Sign mode: Direct Aux +*Sequence: 42 +*End of other signers +*Hash of raw bytes: +``` + +#### Example 5: Complex Transaction with Nested Messages + +JSON: + +```json +{ + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from": "cosmos1...abc", + "to": "cosmos1...def", + "amount": [ + { + "denom": "uatom", + "amount": 10000000 + } + ] + }, + { + "@type": "/cosmos.gov.v1.MsgSubmitProposal", + "proposer": "cosmos1...ghi", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from": "cosmos1...jkl", + "to": "cosmos1...mno", + "amount": [ + { + "denom": "uatom", + "amount": 20000000 + } + ] + }, + { + "@type": "/cosmos.authz.v1beta1.MsgExec", + "grantee": "cosmos1...pqr", + "msgs": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from": "cosmos1...stu", + "to": "cosmos1...vwx", + "amount": [ + { + "denom": "uatom", + "amount": 30000000 + } + ] + }, + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from": "cosmos1...abc", + "to": "cosmos1...def", + "amount": [ + { + "denom": "uatom", + "amount": 40000000 + } + ] + } + ] + } + ], + "initial_deposit": [ + { + "denom": "atom", + "amount": 100.01 + } + ] + } + ] + }, + "auth_info": { + "signer_infos": [ + { + "public_key": "iQ...==", + "mode_info": { "single": { "mode": "SIGN_MODE_TEXTUAL" } }, + "sequence": 2 + }, + { + "public_key": "iR...==", + "mode_info": { "single": { "mode": "SIGN_MODE_DIRECT" } }, + "sequence": 42 + } + ], + "fee": { + "amount": [ + { + "denom": "atom", + "amount": 0.002 + } + ], + "gas_limit": 100000 + } + }, + // Additional SignerData. + "chain_id": "simapp-1", + "account_number": 10 +} +} +``` + +SIGN_MODE_TEXTUAL for 1st signer `cosmos1...abc`: + +``` +Chain ID: simapp-1 +Account number: 10 +*Public Key: iQ...== +Sequence: 2 +This transaction has 2 messages: +Message (1/2): bank v1beta1 send coins +From: cosmos1...abc +To: cosmos1...def +Amount: 10 atom +Message (2/2): gov v1 submit proposal +Messages: 2 Messages +> Message (1/2): bank v1beta1 send coins +> From: cosmos1...jkl +> To: cosmos1...mno +> Amount: 20 atom +> Message (2/2): authz v1beta exec +> Grantee: cosmos1...pqr +> Msgs: 2 Msgs +>> Msg (1/2): bank v1beta1 send coins +>> From: cosmos1...stu +>> To: cosmos1...vwx +>> Amount: 30 atom +>> Msg (2/2): bank v1beta1 send coins +>> From: cosmos1...abc +>> To: cosmos1...def +>> Amount: 40 atom +> End of Msgs +End of transaction messages +Proposer: cosmos1...ghi +Initial Deposit: 100.01 atom +End of transaction messages +Fee: 0.002 atom +*Gas: 100'000 +*This transaction has 1 other signer: +*Signer (2/2): +*Public Key: iR...== +*Sign mode: Direct +*Sequence: 42 +*End of other signers +*Hash of raw bytes: +``` + +## Consequences + +### Backwards Compatibility + +SIGN_MODE_TEXTUAL is purely additive, and doesn't break any backwards compatibility with other sign modes. + +### Positive + +- Human-friendly way of signing in hardware devices. +- Once SIGN_MODE_TEXTUAL is shipped, SIGN_MODE_LEGACY_AMINO_JSON can be deprecated and removed. On the longer term, once the ecosystem has totally migrated, Amino can be totally removed. + +### Negative + +- Some fields are still encoded in non-human-readable ways, such as public keys in hexadecimal. +- New ledger app needs to be released, still unclear + +### Neutral + +- If the transaction is complex, the string array can be arbitrarily long, and some users might just skip some screens and blind sign. + +## Further Discussions + +- Some details on value renderers need to be polished, see [Annex 1](./adr-050-sign-mode-textual-annex1.md). +- Are ledger apps able to support both SIGN_MODE_LEGACY_AMINO_JSON and SIGN_MODE_TEXTUAL at the same time? +- Open question: should we add a Protobuf field option to allow app developers to overwrite the textual representation of certain Protobuf fields and message? This would be similar to Ethereum's [EIP4430](https://github.com/ethereum/EIPs/pull/4430), where the contract developer decides on the textual representation. +- Internationalization. + +## References + +- [Annex 1](./adr-050-sign-mode-textual-annex1.md) + +- Initial discussion: https://github.com/cosmos/cosmos-sdk/issues/6513 +- Living document used in the working group: https://hackmd.io/fsZAO-TfT0CKmLDtfMcKeA?both +- Working group meeting notes: https://hackmd.io/7RkGfv_rQAaZzEigUYhcXw +- Ethereum's "Described Transactions" https://github.com/ethereum/EIPs/pull/4430 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-053-go-module-refactoring.md b/versioned_docs/version-0.47/integrate/architecture/adr-053-go-module-refactoring.md new file mode 100644 index 000000000..9093ae9d9 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-053-go-module-refactoring.md @@ -0,0 +1,109 @@ +# ADR 053: Go Module Refactoring + +## Changelog + +* 2022-04-27: First Draft + +## Status + +PROPOSED + +## Abstract + +The current SDK is built as a single monolithic go module. This ADR describes +how we refactor the SDK into smaller independently versioned go modules +for ease of maintenance. + +## Context + +Go modules impose certain requirements on software projects with respect to +stable version numbers (anything above 0.x) in that [any API breaking changes +necessitate a major version](https://go.dev/doc/modules/release-workflow#breaking) +increase which technically creates a new go module +(with a v2, v3, etc. suffix). + +[Keeping modules API compatible](https://go.dev/blog/module-compatibility) in +this way requires a fair amount of fair thought and discipline. + +The Cosmos SDK is a fairly large project which originated before go modules +came into existence and has always been under a v0.x release even though +it has been used in production for years now, not because it isn't production +quality software, but rather because the API compatibility guarantees required +by go modules are fairly complex to adhere to with such a large project. +Up to now, it has generally been deemed more important to be able to break the +API if needed rather than require all users update all package import paths +to accommodate breaking changes causing v2, v3, etc. releases. This is in +addition to the other complexities related to protobuf generated code that will +be addressed in a separate ADR. + +Nevertheless, the desire for semantic versioning has been [strong in the +community](https://github.com/cosmos/cosmos-sdk/discussions/10162) and the +single go module release process has made it very hard to +release small changes to isolated features in a timely manner. Release cycles +often exceed six months which means small improvements done in a day or +two get bottle-necked by everything else in the monolithic release cycle. + +## Decision + +To improve the current situation, the SDK is being refactored into multiple +go modules within the current repository. There has been a [fair amount of +debate](https://github.com/cosmos/cosmos-sdk/discussions/10582#discussioncomment-1813377) +as to how to do this, with some developers arguing for larger vs smaller +module scopes. There are pros and cons to both approaches (which will be +discussed below in the [Consequences](#consequences) section), but the +approach being adopted is the following: +* a go module should generally be scoped to a specific coherent set of +functionality (such as math, errors, store, etc.) +* when code is removed from the core SDK and moved to a new module path, every +effort should be made to avoid API breaking changes in the existing code using +aliases and wrapper types (as done in https://github.com/cosmos/cosmos-sdk/pull/10779 +and https://github.com/cosmos/cosmos-sdk/pull/11788) +* new go modules should be moved to a standalone domain (`cosmossdk.io`) before +being tagged as `v1.0.0` to accommodate the possibility that they may be +better served by a standalone repository in the future +* all go modules should follow the guidelines in https://go.dev/blog/module-compatibility +before `v1.0.0` is tagged and should make use of `internal` packages to limit +the exposed API surface +* the new go module's API may deviate from the existing code where there are +clear improvements to be made or to remove legacy dependencies (for instance on +amino or gogo proto), as long the old package attempts +to avoid API breakage with aliases and wrappers +* care should be taken when simply trying to turn an existing package into a +new go module: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository. +In general, it seems safer to just create a new module path (appending v2, v3, etc. +if necessary), rather than trying to make an old package a new module. + +## Consequences + +### Backwards Compatibility + +If the above guidelines are followed to use aliases or wrapper types pointing +in existing APIs that point back to the new go modules, there should be no or +very limited breaking changes to existing APIs. + +### Positive + +* standalone pieces of software will reach `v1.0.0` sooner +* new features to specific functionality will be released sooner + +### Negative + +* there will be more go module versions to update in the SDK itself and +per-project, although most of these will hopefully be indirect + +### Neutral + +## Further Discussions + +Further discussions are occurring in primarily in +https://github.com/cosmos/cosmos-sdk/discussions/10582 and within +the Cosmos SDK Framework Working Group. + +## References + +* https://go.dev/doc/modules/release-workflow +* https://go.dev/blog/module-compatibility +* https://github.com/cosmos/cosmos-sdk/discussions/10162 +* https://github.com/cosmos/cosmos-sdk/discussions/10582 +* https://github.com/cosmos/cosmos-sdk/pull/10779 +* https://github.com/cosmos/cosmos-sdk/pull/11788 \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-055-orm.md b/versioned_docs/version-0.47/integrate/architecture/adr-055-orm.md new file mode 100644 index 000000000..71a759526 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-055-orm.md @@ -0,0 +1,111 @@ +# ADR 055: ORM + +## Changelog + +* 2022-04-27: First draft + +## Status + +ACCEPTED Implemented + +## Abstract + +In order to make it easier for developers to build Cosmos SDK modules and for clients to query, index and verify proofs +against state data, we have implemented an ORM (object-relational mapping) layer for the Cosmos SDK. + +## Context + +Historically modules in the Cosmos SDK have always used the key-value store directly and created various handwritten +functions for managing key format as well as constructing secondary indexes. This consumes a significant amount of +time when building a module and is error-prone. Because key formats are non-standard, sometimes poorly documented, +and subject to change, it is hard for clients to generically index, query and verify merkle proofs against state data. + +The known first instance of an "ORM" in the Cosmos ecosystem was in [weave](https://github.com/iov-one/weave/tree/master/orm). +A later version was built for [regen-ledger](https://github.com/regen-network/regen-ledger/tree/157181f955823149e1825263a317ad8e16096da4/orm) for +use in the group module and later [ported to the SDK](https://github.com/cosmos/cosmos-sdk/tree/35d3312c3be306591fcba39892223f1244c8d108/x/group/internal/orm) +just for that purpose. + +While these earlier designs made it significantly easier to write state machines, they still required a lot of manual +configuration, didn't expose state format directly to clients, and were limited in their support of different types +of index keys, composite keys, and range queries. + +Discussions about the design continued in https://github.com/cosmos/cosmos-sdk/discussions/9156 and more +sophisticated proofs of concept were created in https://github.com/allinbits/cosmos-sdk-poc/tree/master/runtime/orm +and https://github.com/cosmos/cosmos-sdk/pull/10454. + +## Decision + +These prior efforts culminated in the creation of the Cosmos SDK `orm` go module which uses protobuf annotations +for specifying ORM table definitions. This ORM is based on the new `google.golang.org/protobuf/reflect/protoreflect` +API and supports: +* sorted indexes for all simple protobuf types (except `bytes`, `enum`, `float`, `double`) as well as `Timestamp` and `Duration` +* unsorted `bytes` and `enum` indexes +* composite primary and secondary keys +* unique indexes +* auto-incrementing `uint64` primary keys +* complex prefix and range queries +* paginated queries +* complete logical decoding of KV-store data + +Almost all the information needed to decode state directly is specified in .proto files. Each table definition specifies +an ID which is unique per .proto file and each index within a table is unique within that table. Clients then only need +to know the name of a module and the prefix ORM data for a specific .proto file within that module in order to decode +state data directly. This additional information will be exposed directly through app configs which will be explained +in a future ADR related to app wiring. + +The ORM makes optimizations around storage space by not repeating values in the primary key in the key value +when storing primary key records. For example, if the object `{"a":0,"b":1}` has the primary key `a`, it will +be stored in the key value store as `Key: '0', Value: {"b":1}` (with more efficient protobuf binary encoding). +Also, the generated code from https://github.com/cosmos/cosmos-proto does optimizations around the +`google.golang.org/protobuf/reflect/protoreflect` API to improve performance. + +A code generator is included with the ORM which creates type safe wrappers around the ORM's dynamic `Table` +implementation and is the recommended way for modules to use the ORM. + +The ORM tests provide a simplified bank module demonstration which illustrates: +- [ORM proto options](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/internal/testpb/bank.proto) +- [Generated Code](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/internal/testpb/bank.cosmos_orm.go) +- [Example Usage in a Module Keeper](https://github.com/cosmos/cosmos-sdk/blob/0d846ae2f0424b2eb640f6679a703b52d407813d/orm/model/ormdb/module_test.go) + +## Consequences + +### Backwards Compatibility + +State machine code that adopts the ORM will need migrations as the state layout is generally backwards incompatible. +These state machines will also need to migrate to https://github.com/cosmos/cosmos-proto at least for state data. + +### Positive + +* easier to build modules +* easier to add secondary indexes to state +* possible to write a generic indexer for ORM state +* easier to write clients that do state proofs +* possible to automatically write query layers rather than needing to manually implement gRPC queries + +### Negative + +* worse performance than handwritten keys (for now). See [Further Discussions](#further-discussions) +for potential improvements + +### Neutral + +## Further Discussions + +Further discussions will happen within the Cosmos SDK Framework Working Group. Current planned and ongoing work includes: +* automatically generate client-facing query layer +* client-side query libraries that transparently verify light client proofs +* index ORM data to SQL databases +* improve performance by: + * optimizing existing reflection based code to avoid unnecessary gets when doing deletes & updates of simple tables + * more sophisticated code generation such as making fast path reflection even faster (avoiding `switch` statements), + or even fully generating code that equals handwritten performance + + +## References + +* https://github.com/iov-one/weave/tree/master/orm). +* https://github.com/regen-network/regen-ledger/tree/157181f955823149e1825263a317ad8e16096da4/orm +* https://github.com/cosmos/cosmos-sdk/tree/35d3312c3be306591fcba39892223f1244c8d108/x/group/internal/orm +* https://github.com/cosmos/cosmos-sdk/discussions/9156 +* https://github.com/allinbits/cosmos-sdk-poc/tree/master/runtime/orm +* https://github.com/cosmos/cosmos-sdk/pull/10454 \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-057-app-wiring.md b/versioned_docs/version-0.47/integrate/architecture/adr-057-app-wiring.md new file mode 100644 index 000000000..341aec9f0 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-057-app-wiring.md @@ -0,0 +1,331 @@ +# ADR 057: App Wiring + +## Changelog + +* 2022-05-04: Initial Draft +* 2022-08-19: Updates + +## Status + +PROPOSED Implemented + +## Abstract + +In order to make it easier to build Cosmos SDK modules and apps, we propose a new app wiring system based on +dependency injection and declarative app configurations to replace the current `app.go` code. + +## Context + +A number of factors have made the SDK and SDK apps in their current state hard to maintain. A symptom of the current +state of complexity is [`simapp/app.go`](https://github.com/cosmos/cosmos-sdk/blob/c3edbb22cab8678c35e21fe0253919996b780c01/simapp/app.go) +which contains almost 100 lines of imports and is otherwise over 600 lines of mostly boilerplate code that is +generally copied to each new project. (Not to mention the additional boilerplate which gets copied in `simapp/simd`.) + +The large amount of boilerplate needed to bootstrap an app has made it hard to release independently versioned go +modules for Cosmos SDK modules as described in [ADR 053: Go Module Refactoring](./adr-053-go-module-refactoring.md). + +In addition to being very verbose and repetitive, `app.go` also exposes a large surface area for breaking changes +as most modules instantiate themselves with positional parameters which forces breaking changes anytime a new parameter +(even an optional one) is needed. + +Several attempts were made to improve the current situation including [ADR 033: Internal-Module Communication](./adr-033-protobuf-inter-module-comm.md) +and [a proof-of-concept of a new SDK](https://github.com/allinbits/cosmos-sdk-poc). The discussions around these +designs led to the current solution described here. + +## Decision + +In order to improve the current situation, a new "app wiring" paradigm has been designed to replace `app.go` which +involves: + +* declaration configuration of the modules in an app which can be serialized to JSON or YAML +* a dependency-injection (DI) framework for instantiating apps from the that configuration + +### Dependency Injection + +When examining the code in `app.go` most of the code simply instantiates modules with dependencies provided either +by the framework (such as store keys) or by other modules (such as keepers). It is generally pretty obvious given +the context what the correct dependencies actually should be, so dependency-injection is an obvious solution. Rather +than making developers manually resolve dependencies, a module will tell the DI container what dependency it needs +and the container will figure out how to provide it. + +We explored several existing DI solutions in golang and felt that the reflection-based approach in [uber/dig](https://github.com/uber-go/dig) +was closest to what we needed but not quite there. Assessing what we needed for the SDK, we designed and built +the Cosmos SDK [depinject module](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/depinject), which has the following +features: + +* dependency resolution and provision through functional constructors, ex: `func(need SomeDep) (AnotherDep, error)` +* dependency injection `In` and `Out` structs which support `optional` dependencies +* grouped-dependencies (many-per-container) through the `ManyPerContainerType` tag interface +* module-scoped dependencies via `ModuleKey`s (where each module gets a unique dependency) +* one-per-module dependencies through the `OnePerModuleType` tag interface +* sophisticated debugging information and container visualization via GraphViz + +Here are some examples of how these would be used in an SDK module: + +* `StoreKey` could be a module-scoped dependency which is unique per module +* a module's `AppModule` instance (or the equivalent) could be a `OnePerModuleType` +* CLI commands could be provided with `ManyPerContainerType`s + +Note that even though dependency resolution is dynamic and based on reflection, which could be considered a pitfall +of this approach, the entire dependency graph should be resolved immediately on app startup and only gets resolved +once (except in the case of dynamic config reloading which is a separate topic). This means that if there are any +errors in the dependency graph, they will get reported immediately on startup so this approach is only slightly worse +than fully static resolution in terms of error reporting and much better in terms of code complexity. + +### Declarative App Config + +In order to compose modules into an app, a declarative app configuration will be used. This configuration is based off +of protobuf and its basic structure is very simple: + +```protobuf +package cosmos.app.v1; + +message Config { + repeated ModuleConfig modules = 1; +} + +message ModuleConfig { + string name = 1; + google.protobuf.Any config = 2; +} +``` + +(See also https://github.com/cosmos/cosmos-sdk/blob/6e18f582bf69e3926a1e22a6de3c35ea327aadce/proto/cosmos/app/v1alpha1/config.proto) + +The configuration for every module is itself a protobuf message and modules will be identified and loaded based +on the protobuf type URL of their config object (ex. `cosmos.bank.module.v1.Module`). Modules are given a unique short `name` +to share resources across different versions of the same module which might have a different protobuf package +versions (ex. `cosmos.bank.module.v2.Module`). All module config objects should define the `cosmos.app.v1alpha1.module` +descriptor option which will provide additional useful metadata for the framework and which can also be indexed +in module registries. + +An example app config in YAML might look like this: + +```yaml +modules: + - name: baseapp + config: + "@type": cosmos.baseapp.module.v1.Module + begin_blockers: [staking, auth, bank] + end_blockers: [bank, auth, staking] + init_genesis: [bank, auth, staking] + - name: auth + config: + "@type": cosmos.auth.module.v1.Module + bech32_prefix: "foo" + - name: bank + config: + "@type": cosmos.bank.module.v1.Module + - name: staking + config: + "@type": cosmos.staking.module.v1.Module +``` + +In the above example, there is a hypothetical `baseapp` module which contains the information around ordering of +begin blockers, end blockers, and init genesis. Rather than lifting these concerns up to the module config layer, +they are themselves handled by a module which could allow a convenient way of swapping out different versions of +baseapp (for instance to target different versions of tendermint), without needing to change the rest of the config. +The `baseapp` module would then provide to the server framework (which sort of sits outside the ABCI app) an instance +of `abci.Application`. + +In this model, an app is *modules all the way down* and the dependency injection/app config layer is very much +protocol-agnostic and can adapt to even major breaking changes at the protocol layer. + +### Module & Protobuf Registration + +In order for the two components of dependency injection and declarative configuration to work together as described, +we need a way for modules to actually register themselves and provide dependencies to the container. + +One additional complexity that needs to be handled at this layer is protobuf registry initialization. Recall that +in both the current SDK `codec` and the proposed [ADR 054: Protobuf Semver Compatible Codegen](https://github.com/cosmos/cosmos-sdk/pull/11802), +protobuf types need to be explicitly registered. Given that the app config itself is based on protobuf and +uses protobuf `Any` types, protobuf registration needs to happen before the app config itself can be decoded. Because +we don't know which protobuf `Any` types will be needed a priori and modules themselves define those types, we need +to decode the app config in separate phases: + +1. parse app config JSON/YAML as raw JSON and collect required module type URLs (without doing proto JSON decoding) +2. build a [protobuf type registry](https://pkg.go.dev/google.golang.org/protobuf@v1.28.0/reflect/protoregistry) based + on file descriptors and types provided by each required module +3. decode the app config as proto JSON using the protobuf type registry + +Because in [ADR 054: Protobuf Semver Compatible Codegen](https://github.com/cosmos/cosmos-sdk/pull/11802), each module +should use `internal` generated code which is not registered with the global protobuf registry, this code should provide +an alternate way to register protobuf types with a type registry. In the same way that `.pb.go` files currently have a +`var File_foo_proto protoreflect.FileDescriptor` for the file `foo.proto`, generated code should have a new member +`var Types_foo_proto TypeInfo` where `TypeInfo` is an interface or struct with all the necessary info to register both +the protobuf generated types and file descriptor. + +So a module must provide dependency injection providers and protobuf types, and takes as input its module +config object which uniquely identifies the module based on its type URL. + +With this in mind, we define a global module register which allows module implementations to register themselves +with the following API: + +```go +// Register registers a module with the provided type name (ex. cosmos.bank.module.v1.Module) +// and the provided options. +func Register(configTypeName protoreflect.FullName, option ...Option) { ... } + +type Option { /* private methods */ } + +// Provide registers dependency injection provider functions which work with the +// cosmos-sdk container module. These functions can also accept an additional +// parameter for the module's config object. +func Provide(providers ...interface{}) Option { ... } + +// Types registers protobuf TypeInfo's with the protobuf registry. +func Types(types ...TypeInfo) Option { ... } +``` + +Ex: + +```go +func init() { + appmodule.Register("cosmos.bank.module.v1.Module", + appmodule.Types( + types.Types_tx_proto, + types.Types_query_proto, + types.Types_types_proto, + ), + appmodule.Provide( + provideBankModule, + ) + ) +} + +type Inputs struct { + container.In + + AuthKeeper auth.Keeper + DB ormdb.ModuleDB +} + +type Outputs struct { + Keeper bank.Keeper + AppModule appmodule.AppModule +} + +func ProvideBankModule(config *bankmodulev1.Module, Inputs) (Outputs, error) { ... } +``` + +Note that in this module, a module configuration object *cannot* register different dependency providers at runtime +based on the configuration. This is intentional because it allows us to know globally which modules provide which +dependencies, and it will also allow us to do code generation of the whole app initialization. This +can help us figure out issues with missing dependencies in an app config if the needed modules are loaded at runtime. +In cases where required modules are not loaded at runtime, it may be possible to guide users to the correct module if +through a global Cosmos SDK module registry. + +### New `app.go` + +With this setup, `app.go` might now look something like this: + +```go +package main + +import ( + // Each go package which registers a module must be imported just for side-effects + // so that module implementations are registered. + _ "github.com/cosmos/cosmos-sdk/x/auth/module" + _ "github.com/cosmos/cosmos-sdk/x/bank/module" + _ "github.com/cosmos/cosmos-sdk/x/staking/module" + "github.com/cosmos/cosmos-sdk/core/app" +) + +// go:embed app.yaml +var appConfigYAML []byte + +func main() { + app.Run(app.LoadYAML(appConfigYAML)) +} +``` + +### Application to existing SDK modules + +So far we have described a system which is largely agnostic to the specifics of the SDK such as store keys, `AppModule`, +`BaseApp`, etc. A second app wiring ADR will be created which outlines the details of how this app wiring system will +be applied to the existing SDK in a way that: + +### Registration of Inter-Module Hooks + +Some modules define a hooks interface (ex. `StakingHooks`) which allows one module to call back into another module +when certain events happen. + +With the app wiring framework, these hooks interfaces can be defined as a `OnePerModuleType`s and then the module +which consumes these hooks can collect these hooks as a map of module name to hook type (ex. `map[string]FooHooks`). Ex: +```go +func init() { + appmodule.Register( + &foomodulev1.Module{}, + appmodule.Invoke(InvokeSetFooHooks), + ... + ) +} +func InvokeSetFooHooks( + keeper *keeper.Keeper, + fooHooks map[string]FooHooks, +) error { + for k in sort.Strings(maps.Keys(fooHooks)) { + keeper.AddFooHooks(fooHooks[k]) + } +} +``` + +Optionally, the module consuming hooks can allow app's to define an order for calling these hooks based on module name +in its config object. + +An alternative way for registering hooks via reflection was considered where all keeper types are inspected to see if +they implement the hook interface by the modules exposing hooks. This has the downsides of: +* needing to expose all the keepers of all modules to the module providing hooks, +* not allowing for encapsulating hooks on a different type which doesn't expose all keeper methods, +* harder to know statically which module expose hooks or are checking for them. + +With the approach proposed here, hooks registration will be obviously observable in `app.go` if `depinject` codegen +(described below) is used. + +### Code Generation + +The `depinject` framework will optionally allow the app configuration and dependency injection wiring to be code +generated. This will allow: +* dependency injection wiring to be inspected as regular go code just like the existing `app.go`, +* dependency injection to be opt-in with manual wiring 100% still possible. + +Code generation requires that all providers and invokers and their parameters are exported and in non-internal packages. + +## Consequences + +### Backwards Compatibility + +Modules which work with the new app wiring system do not need to drop their existing `AppModule` and `NewKeeper` +registration paradigms. These two methods can live side-by-side for as long as is needed. + +### Positive + +* wiring up new apps will be simpler, more succinct and less error-prone +* it will be easier to develop and test standalone SDK modules without needing to replicate all of simapp +* it may be possible to dynamically load modules and upgrade chains without needing to do a coordinated stop and binary + upgrade using this mechanism +* easier plugin integration +* dependency injection framework provides more automated reasoning about dependencies in the project, with a graph visualization. + +### Negative + +* it may be confusing when a dependency is missing although error messages, the GraphViz visualization, and global + module registration may help with that + +### Neutral + +* it will require work and education + +## Further Discussions + +The protobuf type registration system described in this ADR has not been implemented and may need to be reconsidered in +light of code generation. It may be better to do this type registration with a DI provider. + +## References + +* https://github.com/cosmos/cosmos-sdk/blob/c3edbb22cab8678c35e21fe0253919996b780c01/simapp/app.go +* https://github.com/allinbits/cosmos-sdk-poc +* https://github.com/uber-go/dig +* https://github.com/google/wire +* https://pkg.go.dev/github.com/cosmos/cosmos-sdk/container +* https://github.com/cosmos/cosmos-sdk/pull/11802 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-058-auto-generated-cli.md b/versioned_docs/version-0.47/integrate/architecture/adr-058-auto-generated-cli.md new file mode 100644 index 000000000..1301466e1 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-058-auto-generated-cli.md @@ -0,0 +1,95 @@ +# ADR 058: Auto-Generated CLI + +## Changelog + +* 2022-05-04: Initial Draft + +## Status + +ACCEPTED Partially Implemented + +## Abstract + +In order to make it easier for developers to write Cosmos SDK modules, we provide infrastructure which automatically +generates CLI commands based on protobuf definitions. + +## Context + +Current Cosmos SDK modules generally implement a CLI command for every transaction and every query supported by the +module. These are handwritten for each command and essentially amount to providing some CLI flags or positional +arguments for specific fields in protobuf messages. + +In order to make sure CLI commands are correctly implemented as well as to make sure that the application works +in end-to-end scenarios, we do integration tests using CLI commands. While these tests are valuable on some-level, +they can be hard to write and maintain, and run slowly. [Some teams have contemplated](https://github.com/regen-network/regen-ledger/issues/1041) +moving away from CLI-style integration tests (which are really end-to-end tests) towards narrower integration tests +which exercise `MsgClient` and `QueryClient` directly. This might involve replacing the current end-to-end CLI +tests with unit tests as there still needs to be some way to test these CLI commands for full quality assurance. + +## Decision + +To make module development simpler, we provide infrastructure - in the new [`client/v2`](https://github.com/cosmos/cosmos-sdk/tree/main/client/v2) +go module - for automatically generating CLI commands based on protobuf definitions to either replace or complement +handwritten CLI commands. This will mean that when developing a module, it will be possible to skip both writing and +testing CLI commands as that can all be taken care of by the framework. + +The basic design for automatically generating CLI commands is to: + +* create one CLI command for each `rpc` method in a protobuf `Query` or `Msg` service +* create a CLI flag for each field in the `rpc` request type +* for `query` commands call gRPC and print the response as protobuf JSON or YAML (via the `-o`/`--output` flag) +* for `tx` commands, create a transaction and apply common transaction flags + +In order to make the auto-generated CLI as easy to use (or easier) than handwritten CLI, we need to do custom handling +of specific protobuf field types so that the input format is easy for humans: +* `Coin`, `Coins`, `DecCoin`, and `DecCoins` should be input using the existing format (i.e. `1000uatom`) +* it should be possible to specify an address using either the bech32 address string or a named key in the keyring +* `Timestamp` and `Duration` should accept strings like `2001-01-01T00:00:00Z` and `1h3m` respectively +* pagination should be handled with flags like `--page-limit`, `--page-offset`, etc. +* it should be possible to customize any other protobuf type either via its message name or a `cosmos_proto.scalar` annotation + +At a basic level it should be possible to generate a command for a single `rpc` method as well as all the commands for +a whole protobuf `service` definition. It should be possible to mix and match auto-generated and handwritten commands. + +## Consequences + +### Backwards Compatibility + +Existing modules can mix and match auto-generated and handwritten CLI commands so it is up to them as to whether they +make breaking changes by replacing handwritten commands with slightly different auto-generated ones. + +For now the SDK will maintain the existing set of CLI commands for backwards compatibility but new commands will use +this functionality. + +### Positive + +* module developers will not need to write CLI commands +* module developers will not need to test CLI commands +* [lens](https://github.com/strangelove-ventures/lens) may benefit from this + +### Negative + +### Neutral + +## Further Discussions + +We would like to be able to customize: +* short and long usage strings for commands +* aliases for flags (ex. `-a` for `--amount`) +* which fields are positional parameters rather than flags + +It is an [open discussion](https://github.com/cosmos/cosmos-sdk/pull/11725#issuecomment-1108676129) +as to whether these customizations options should line in: +* the .proto files themselves, +* separate config files (ex. YAML), or +* directly in code + +Providing the options in .proto files would allow a dynamic client to automatically generate +CLI commands on the fly. However, that may pollute the .proto files themselves with information that is only relevant +for a small subset of users. + +## References + +* https://github.com/regen-network/regen-ledger/issues/1041 +* https://github.com/cosmos/cosmos-sdk/tree/main/client/v2 +* https://github.com/cosmos/cosmos-sdk/pull/11725#issuecomment-1108676129 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-059-test-scopes.md b/versioned_docs/version-0.47/integrate/architecture/adr-059-test-scopes.md new file mode 100644 index 000000000..51f06621c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-059-test-scopes.md @@ -0,0 +1,253 @@ +# ADR 059: Test Scopes + +## Changelog + +* 2022-08-02: Initial Draft + +## Status + +PROPOSED Partially Implemented + +## Abstract + +Recent work in the SDK aimed at breaking apart the monolithic root go module has highlighted +shortcomings and inconsistencies in our testing paradigm. This ADR clarifies a common +language for talking about test scopes and proposes an ideal state of tests at each scope. + +## Context + +[ADR-053: Go Module Refactoring](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-053-go-module-refactoring.md) expresses our desire for an SDK composed of many +independently versioned Go modules, and [ADR-057: App Wiring](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-057-app-wiring.md) offers a methodology +for breaking apart inter-module dependencies through the use of dependency injection. As +described in [EPIC: Separate all SDK modules into standalone go modules](https://github.com/cosmos/cosmos-sdk/issues/11899), module +dependencies are particularly complected in the test phase, where simapp is used as +the key test fixture in setting up and running tests. It is clear that the successful +completion of Phases 3 and 4 in that EPIC require the resolution of this dependency problem. + +In [EPIC: Unit Testing of Modules via Mocks](https://github.com/cosmos/cosmos-sdk/issues/12398) it was thought this Gordian knot could be +unwound by mocking all dependencies in the test phase for each module, but seeing how these +refactors were complete rewrites of test suites discussions began around the fate of the +existing integration tests. One perspective is that they ought to be thrown out, another is +that integration tests have some utility of their own and a place in the SDK's testing story. + +Another point of confusion has been the current state of CLI test suites, [x/auth](https://github.com/cosmos/cosmos-sdk/blob/0f7e56c6f9102cda0ca9aba5b6f091dbca976b5a/x/auth/client/testutil/suite.go#L44-L49) for +example. In code these are called integration tests, but in reality function as end to end +tests by starting up a tendermint node and full application. [EPIC: Rewrite and simplify +CLI tests](https://github.com/cosmos/cosmos-sdk/issues/12696) identifies the ideal state of CLI tests using mocks, but does not address the +place end to end tests may have in the SDK. + +From here we identify three scopes of testing, **unit**, **integration**, **e2e** (end to +end), seek to define the boundaries of each, their shortcomings (real and imposed), and their +ideal state in the SDK. + +### Unit tests + +Unit tests exercise the code contained in a single module (e.g. `/x/bank`) or package +(e.g. `/client`) in isolation from the rest of the code base. Within this we identify two +levels of unit tests, *illustrative* and *journey*. The definitions below lean heavily on +[The BDD Books - Formulation](https://leanpub.com/bddbooks-formulation) section 1.3. + +*Illustrative* tests exercise an atomic part of a module in isolation - in this case we +might do fixture setup/mocking of other parts of the module. + +Tests which exercise a whole module's function with dependencies mocked, are *journeys*. +These are almost like integration tests in that they exercise many things together but still +use mocks. + +Example 1 journey vs illustrative tests - [depinject's BDD style tests](https://github.com/cosmos/cosmos-sdk/blob/main/depinject/features/bindings.feature), show how we can +rapidly build up many illustrative cases demonstrating behavioral rules without [very much +code](https://github.com/cosmos/cosmos-sdk/blob/main/depinject/binding_test.go) while maintaining high level readability. + +Example 2 [depinject table driven tests](https://github.com/cosmos/cosmos-sdk/blob/main/depinject/provider_desc_test.go) + +Example 3 [Bank keeper tests](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/bank/keeper/keeper_test.go#L94-L105) - A mock implementation of `AccountKeeper` is +supplied to the keeper constructor. + +#### Limitations + +Certain modules are tightly coupled beyond the test phase. A recent dependency report for +`bank -> auth` found 274 total usages of `auth` in `bank`, 50 of which are in +production code and 224 in test. This tight coupling may suggest that either the modules +should be merged, or refactoring is required to abstract references to the core types tying +the modules together. It could also indicate that these modules should be tested together +in integration tests beyond mocked unit tests. + +In some cases setting up a test case for a module with many mocked dependencies can be quite +cumbersome and the resulting test may only show that the mocking framework works as expected +rather than working as a functional test of interdependent module behavior. + +### Integration tests + +Integration tests define and exercise relationships between an arbitrary number of modules +and/or application subsystems. + +Wiring for integration tests is provided by `depinject` and some [helper code](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/testutil/sims/app_helpers.go#L95) starts up +a running application. A section of the running application may then be tested. Certain +inputs during different phases of the application life cycle are expected to produce +invariant outputs without too much concern for component internals. This type of black box +testing has a larger scope than unit testing. + +Example 1 [client/grpc_query_test/TestGRPCQuery](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/client/grpc_query_test.go#L111-L129) - This test is misplaced in `/client`, +but tests the life cycle of (at least) `runtime` and `bank` as they progress through +startup, genesis and query time. It also exercises the fitness of the client and query +server without putting bytes on the wire through the use of [QueryServiceTestHelper](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/baseapp/grpcrouter_helpers.go#L31). + +Example 2 `x/evidence` Keeper integration tests - Starts up an application composed of [8 +modules](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/evidence/testutil/app.yaml#L1) with [5 keepers](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/evidence/keeper/keeper_test.go#L101-L106) used in the integration test suite. One test in the suite +exercises [HandleEquivocationEvidence](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/x/evidence/keeper/infraction_test.go#L42) which contains many interactions with the staking +keeper. + +Example 3 - Integration suite app configurations may also be specified via golang (not +YAML as above) [statically](https://github.com/cosmos/cosmos-sdk/blob/main/x/nft/testutil/app_config.go) or [dynamically](https://github.com/cosmos/cosmos-sdk/blob/8c23f6f957d1c0bedd314806d1ac65bea59b084c/tests/integration/bank/keeper/keeper_test.go#L129-L134). + +#### Limitations + +Setting up a particular input state may be more challenging since the application is +starting from a zero state. Some of this may be addressed by good test fixture +abstractions with testing of their own. Tests may also be more brittle, and larger +refactors could impact application initialization in unexpected ways with harder to +understand errors. This could also be seen as a benefit, and indeed the SDK's current +integration tests were helpful in tracking down logic errors during earlier stages +of app-wiring refactors. + +### Simulations + +Simulations (also called generative testing) are a special case of integration tests where +deterministically random module operations are executed against a running simapp, building +blocks on the chain until a specified height is reached. No *specific* assertions are +made for the state transitions resulting from module operations but any error will halt and +fail the simulation. Since `crisis` is included in simapp and the simulation runs +EndBlockers at the end of each block any module invariant violations will also fail +the simulation. + +Modules must implement [AppModuleSimulation.WeightedOperations](https://github.com/cosmos/cosmos-sdk/blob/2bec9d2021918650d3938c3ab242f84289daef80/types/module/simulation.go#L31) to define their +simulation operations. Note that not all modules implement this which may indicate a +gap in current simulation test coverage. + +Modules not returning simulation operations: + +* `auth` +* `capability` +* `evidence` +* `mint` +* `params` + +A separate binary, [runsim](https://github.com/cosmos/tools/tree/master/cmd/runsim), is responsible for kicking off some of these tests and +managing their life cycle. + +#### Limitations + +* [A success](https://github.com/cosmos/cosmos-sdk/runs/7606931983?check_suite_focus=true) may take a long time to run, 7-10 minutes per simulation in CI. +* [Timeouts](https://github.com/cosmos/cosmos-sdk/runs/7606932295?check_suite_focus=true) sometimes occur on apparent successes without any indication why. +* Useful error messages not provided on [failure](https://github.com/cosmos/cosmos-sdk/runs/7606932548?check_suite_focus=true) from CI, requiring a developer to run + the simulation locally to reproduce. + +### E2E tests + +End to end tests exercise the entire system as we understand it in as close an approximation +to a production environment as is practical. Presently these tests are located at +[tests/e2e](https://github.com/cosmos/cosmos-sdk/tree/main/tests/e2e) and rely on [testutil/network](https://github.com/cosmos/cosmos-sdk/tree/main/testutil/network) to start up an in-process Tendermint node. + +#### Limitations + +In general the limitations of end to end tests are orchestration and compute cost. +Scaffolding is required to start up and run a prod-like environment and the this +process takes much longer to start and run than unit or integration tests. + +Global locks present in Tendermint code cause stateful starting/stopping to sometimes hang +or fail intermittently when run in a CI environment. + +The scope of e2e tests has been complected with command line interface testing. + +## Decision + +We accept these test scopes and identify the following decisions points for each. + +| Scope | App Fixture | Mocks? | +| ----------- | ----------- | ------ | +| Unit | None | Yes | +| Integration | depinject | Some | +| Simulation | depinject | No | +| E2E | simapp | No | + +### Unit Tests + +All modules must have mocked unit test coverage. + +Illustrative tests should outnumber journeys in unit tests. + +~BDD feature tests are recommended when building up illustrative and journey scenarios.~ + +Unit tests should outnumber integration tests. + +Unit tests must not introduce additional dependencies beyond those already present in +production code. + +When module unit test introduction as per [EPIC: Unit testing of modules via mocks](https://github.com/cosmos/cosmos-sdk/issues/12398) +results in a near complete rewrite of an integration test suite the test suite should be +retained and moved to `/tests/integration`. We accept the resulting test logic +duplication but recommend improving the unit test suite through the addition of +illustrative tests. + +### Integration Tests + +All integration tests shall be located in `/tests/integration`, even those which do not +introduce extra module dependencies. + +To help limit scope and complexity, it is recommended to use the smallest possible number of +modules in application startup, i.e. don't depend on simapp. + +Integration tests should outnumber e2e tests. + +### Simulations + +Simulations shall use `depinject`. They are located under `/x/{moduleName}/simulation`. + +### E2E Tests + +Existing e2e tests shall be migrated to integration tests by removing the dependency on the +test network and in-process Tendermint node to ensure we do not lose test coverage. + +The e2e rest runner shall transition from in process Tendermint to a runner powered by +Docker via [dockertest](https://github.com/ory/dockertest). + +E2E tests exercising a full network upgrade shall be written. + +The CLI testing aspect of existing e2e tests shall be rewritten using the network mocking +demonstrated in [PR#12706](https://github.com/cosmos/cosmos-sdk/pull/12706). + +## Consequences + +### Positive + +* test coverage is increased +* test organization is improved +* reduced dependency graph size in modules +* simapp removed as a dependency from modules +* inter-module dependencies introduced in test code are removed +* reduced CI run time after transitioning away from in process Tendermint + +### Negative + +* some test logic duplication between unit and integration tests during transition +* test written using dockertest DX may be a bit worse + +### Neutral + +* learning curve for BDD style tests +* some discovery required for e2e transition to dockertest + +## Further Discussions + +It may be useful if test suites could be run in integration mode (with mocked tendermint) or +with e2e fixtures (with real tendermint and many nodes). Integration fixtures could be used +for quicker runs, e2e fixures could be used for more battle hardening. + +A PoC `x/gov` was completed in PR [#12847](https://github.com/cosmos/cosmos-sdk/pull/12847) +is in progress for unit tests demonstrating BDD [Rejected]. +Observing that a strength of BDD specifications is their readability, and a con is the +cognitive load while writing and maintaining, current consensus is to reserve BDD use +for places in the SDK where complex rules and module interactions are demonstrated. +More straightforward or low level test cases will continue to rely on go table tests. + +Levels are network mocking in integration and e2e tests are still being worked on and formalized. diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-060-abci-1.0.md b/versioned_docs/version-0.47/integrate/architecture/adr-060-abci-1.0.md new file mode 100644 index 000000000..d988f7d50 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-060-abci-1.0.md @@ -0,0 +1,249 @@ +# ADR 60: ABCI 1.0 Integration + +## Changelog + +* 2022-08-10: Initial Draft (@alexanderbez, @tac0turtle) + +## Status + +PROPOSED + +## Abstract + +This ADR describes the initial adoption of [ABCI 1.0](https://github.com/tendermint/tendermint/blob/master/spec/abci%2B%2B/README.md), +the next evolution of ABCI, within the Cosmos SDK. ABCI 1.0 aims to provide +application developers with more flexibility and control over application and +consensus semantics, e.g. in-application mempools, in-process oracles, and +order-book style matching engines. + +## Context + +Tendermint will release ABCI 1.0. Notably, at the time of this writing, +Tendermint is releasing v0.37.0 which will include `PrepareProposal` and `ProcessProposal`. + +The `PrepareProposal` ABCI method is concerned with a block proposer requesting +the application to evaluate a series of transactions to be included in the next +block, defined as a slice of `TxRecord` objects. The application can either +accept, reject, or completely ignore some or all of these transactions. This is +an important consideration to make as the application can essentially define and +control its own mempool allowing it to define sophisticated transaction priority +and filtering mechanisms, by completely ignoring the `TxRecords` Tendermint +sends it, favoring its own transactions. This essentially means that the Tendermint +mempool acts more like a gossip data structure. + +The second ABCI method, `ProcessProposal`, is used to process the block proposer's +proposal as defined by `PrepareProposal`. This ABCI method requests that the +application evaluate the entire proposed block for validity. + +It is important to note that in ABCI 1.0 integration, the application +is NOT responsible for locking semantics -- Tendermint will still be responsible +for that. In the future, however, the application will be responsible for locking, +which allows for parallel execution possibilities. + +## Decision + +We will integrate ABCI 1.0, which will be introduced in Tendermint +v0.37.0, in the next major release of the Cosmos SDK. We will integrate ABCI 1.0 +methods on the `BaseApp` type. We describe the implementations +of the two methods individually below. + +Prior to describing the implementation of the two new methods, it is important to +note that the existing ABCI methods, `CheckTx`, `DeliverTx`, etc, still exist and +serve the same functions as they do now. + +### `PrepareProposal` + +Prior to evaluating the decision for how to implement `PrepareProposal`, it is +important to note that `CheckTx` will still be executed and will be responsible +for evaluating transaction validity as it does now, with one very important +_additive_ distinction. + +When executing transactions in `CheckTx`, the application will now add valid +transactions, i.e. passing the AnteHandler, to its own mempool data structure. +In order to provide a flexible approach to meet the varying needs of application +developers, we will define both a mempool interface and a data structure utilizing +Golang generics, allowing developers to focus only on transaction +ordering. Developers requiring absolute full control can implement their own +custom mempool implementation. + +We define the general mempool interface as follows (subject to change): + +```go +// MempoolTx we define an app-side mempool transaction interface that is as +// minimal as possible, only requiring applications to define the size of the +// transaction to be used when reaping and getting the transaction itself. +// Interface type casting can be used in the actual app-side mempool implementation. +type MempoolTx interface { + // Size returns the size of the transaction in bytes. + Size(codec.Codec) int + Tx() sdk.Tx +} + +// PrepareTxRecord defines a wrapper around a MempoolTx that is returned from +// PrepareProposal which includes an Action to inform Tendermint what to do with +// the transaction. +type PrepareTxRecord[T MempoolTx] struct { + Tx T + Action abci.TxAction +} + +type Mempool[T MempoolTx] interface { + // Insert attempts to insert a MempoolTx into the app-side mempool returning + // an error upon failure. + Insert(sdk.Context, T) error + // ReapMaxBytes returns the next set of available transactions from the app-side + // mempool, up to maxBytes or until the mempool is empty. The application can + // decide to return transactions from its own mempool or from the incoming + // TxRecords or some combination of both. The notion of 'available' or 'next' + // is defined by the application's mempool implementation. + ReapMaxBytes(ctx sdk.Context, txRecords abci.TxRecords, maxBytes int) ([]PrepareTxRecord[T], error) + // NumTxs returns the number of transactions currently in the mempool. + NumTxs() int + // Remove attempts to remove a transaction from the mempool, returning an error + // upon failure. + Remove(sdk.Context, T) error +} +``` + +We will define an implementation of `Mempool[T MempoolTx]` that will cover a +majority of application use cases. Namely, it will prioritize transactions by +priority and transaction sender, allowing for multiple prioritized transactions +from the same sender. The app-side mempool will be defined as a wrapper around a +simple priority queue using a max binary heap, along with additional indexes/metadata +to store senders and their nonces, allowing for simple multi-dimensional +prioritization (2-ary). + +Transaction reaping will essentially happen via a two-phase approach: + +1. Reap one or more transactions from the priority queue and collect them into + one of two buffers -- _valid_ and _invalid_. +2. For transactions that DO NOT violate the nonce validation, they are included + in the _valid_ buffer. +3. For transactions that DO violate the nonce validation, they are included in + the _invalid_ buffer. +4. Continue this process until the desired number of valid transactions are + reaped or until the mempool is empty. +5. Provide Tendermint the list of all transactions from the _valid_ buffer. +6. Re-insert all transactions, from both buffers, back into app-side mempool. + This is to ensure we do not discard transactions from the app-side mempool in + case `ProcessProposal` fails or in case that the proposal, while passing + `ProcessProposal` is not the one decided for that height, i.e. the height took + more than one round. + +```go +type PriorityMempool[T MempoolTx] struct { + queue *PriorityQueue[MempoolTx] + + // senders will contain a mapping from tx sender account addresses to all + // sequence numbers (nonces) or txs that they have in the app-side mempool. + senders map[string][]int64 + + // ... +} +``` + +> The `PriorityMempool[T MempoolTx]` implementation will support Options such as +> limiting the mempool size by a fixed number of bytes. + +Previous discussions1 have come to the agreement that Tendermint will +perform a request to the application, via `RequestPrepareProposal`, with a certain +amount of transactions reaped from Tendermint's local mempool. The exact amount +of transactions reaped will be determined by a local operator configuration. +This is referred to as the "one-shot approach" seen in discussions. + +When Tendermint reaps transactions from the local mempool and sends them to the +application via `RequestPrepareProposal`, the application will have to evaluate +the transactions. Specifically, it will need to inform Tendermint if it should +reject and or include each transaction. Note, the application can even _replace_ +transactions entirely with other transactions. + +When evaluating transactions from `RequestPrepareProposal`, the application will +ignore _all_ transactions sent to it in the request and instead reap up to +`RequestPrepareProposal.max_tx_bytes` from it's own mempool. There is no need to +execute the transactions for validity as they have already passed CheckTx. + +### `ProcessProposal` + +The `ProcessProposal` ABCI method is relatively straightforward. It is responsible +for ensuring validity of the proposed block containing transactions that were +selected from the `PrepareProposal` step. However, how an application determines +validity of a proposed block depends on the application and its varying use cases. +For most applications, simply calling the `AnteHandler` chain would suffice, but +there could easily be other applications that need more control over the validation +process of the proposed block, such as ensuring txs are in a certain order or +that certain transactions are included. While this theoretically could be achieved +with a custom `AnteHandler` implementation, it's not the cleanest UX or the most +efficient solution. + +Instead, we will define an additional ABCI interface method on the existing +`Application` interface, similar to the existing ABCI methods such as `BeginBlock` +or `EndBlock`. This new interface method will be defined as follows: + +```go +ProcessProposal(sdk.Context, abci.RequestProcessProposal) error {} +``` + +Note, we must call `ProcessProposal` with a new internal branched state on the +`Context` argument as we cannot simply just use the existing `checkState` because +`BaseApp` already has a modified `checkState` at this point. So when executing +`ProcessProposal`, we create a similar branched state, `processProposalState`, +off of `deliverState`. Note, the `processProposalState` is never committed and +is completely discarded after `ProcessProposal` finishes execution. + +We will only populate the `Status` field of the `ResponseProcessProposal` with +`ACCEPT` if ALL the transactions were accepted as valid, otherwise we will +populate with `REJECT`. + +### `DeliverTx` + +Since transactions are not truly removed from the app-side mempool during +`PrepareProposal`, since `ProcessProposal` can fail or take multiple rounds and +we do not want to lose transactions, we need to finally remove the transaction +from the app-side mempool during `DeliverTx` since during this phase, the +transactions are being included in the proposed block. + +Alternatively, we can keep the transactions as truly being removed during the +reaping phase in `PrepareProposal` and add them back to the app-side mempool in +case `ProcessProposal` fails. + +## Consequences + +### Backwards Compatibility + +ABCI 1.0 is naturally not backwards compatible with prior versions of the Cosmos SDK +and Tendermint. For example, an application that requests `RequestPrepareProposal` +to the same application that does not speak ABCI 1.0 will naturally fail. + +However, in the first phase of the integration, the existing ABCI methods as we +know them today will still exist and function as they currently do. + +### Positive + +* Applications now have full control over transaction ordering and priority. +* Lays the groundwork for the full integration of ABCI 1.0, which will unlock more + app-side use cases around block construction and integration with the Tendermint + consensus engine. + +### Negative + +* Requires that the "mempool", as a general data structure that collects and stores + uncommitted transactions will be duplicated between both Tendermint and the + Cosmos SDK. +* Additional requests between Tendermint and the Cosmos SDK in the context of + block execution. Albeit, the overhead should be negligible. +* Not backwards compatible with previous versions of Tendermint and the Cosmos SDK. + +## Further Discussions + +It is possible to design the app-side implementation of the `Mempool[T MempoolTx]` +in many different ways using different data structures and implementations. All +of which have different tradeoffs. The proposed solution keeps things simple +and covers cases that would be required for most basic applications. There are +tradeoffs that can be made to improve performance of reaping and inserting into +the provided mempool implementation. + +## References + +* https://github.com/tendermint/tendermint/blob/master/spec/abci%2B%2B/README.md +* [1] https://github.com/tendermint/tendermint/issues/7750#issuecomment-1076806155 +* [2] https://github.com/tendermint/tendermint/issues/7750#issuecomment-1075717151 diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-061-liquid-staking.md b/versioned_docs/version-0.47/integrate/architecture/adr-061-liquid-staking.md new file mode 100644 index 000000000..56e3f9b0c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-061-liquid-staking.md @@ -0,0 +1,82 @@ +# ADR ADR-061: Liquid Staking + +## Changelog + +* 2022-09-10: Initial Draft (@zmanian) + +## Status + +PROPOSED + +## Abstract + +Add a semi-fungible liquid staking primitive to the default Cosmos SDK staking module. This upgrades proof of stake to enable safe designs with lower overall monetary issuance and integration with numerous liquid staking protocols like Stride, Persistence, Quicksilver, Lido etc. + +## Context + +The original release of the Cosmos Hub featured the implementation of a ground breaking proof of stake mechanism featuring delegation, slashing, in protocol reward distribution and adaptive issuance. This design was state of the art for 2016 and has been deployed without major changes by many L1 blockchains. + +As both Proof of Stake and blockchain use cases have matured, this design has aged poorly and should no longer be considered a good baseline Proof of Stake issuance. In the world of application specific blockchains, there cannot be a one size fits all blockchain but the Cosmos SDK does endeavour to provide a good baseline implementation and one that is suitable for the Cosmos Hub. + +The most important deficiency of the legacy staking design is that it composes poorly with on chain protocols for trading, lending, derivatives that are referred to collectively as DeFi. The legacy staking implementation starves these applications of liquidity by increasing the risk free rate adaptively. It basically makes DeFi and staking security somewhat incompatible. + +The Osmosis team has adopted the idea of Superfluid and Interfluid staking where assets that are participating in DeFi appliactions can also be used in proof of stake. This requires tight integration with an enshrined set of DeFi applications and thus is unsuitable for the Cosmos SDK. + +It's also important to note that Interchain Accounts are available in the default IBC implementation and can be used to [rehypothecate](https://www.investopedia.com/terms/h/hypothecation.asp#toc-what-is-rehypothecation) delegations. Thus liquid staking is already possible and these changes merely improve the UX of liquid staking. Centralized exchanges also rehypothecate staked assets, posing challenges for decentralization. This ADR takes the position that adoption of in-protocol liquid staking is the preferable outcome and provides new levers to incentivize decentralization of stake. + +These changes to the staking module have been in development for more than a year and have seen substantial industry adoption who plan to build staking UX. The internal economics at Informal team has also done a review of the impacts of these changes and this review led to the development of the exempt delegation system. This system provides governance with a tuneable parameter for modulating the risks of principal agent problem called the exemption factor. + +## Decision + +We implement the semi-fungible liquid staking system and exemption factor system within the cosmos sdk. Though registered as fungible assets, these tokenized shares have extremely limited fungibility, only among the specific delegation record that was created when shares were tokenized. These assets can be used for OTC trades but composability with DeFi is limited. The primary expected use case is improving the user experience of liquid staking providers. + +A new governance parameter is introduced that defines the ratio of exempt to issued tokenized shares. This is called the exemption factor. A larger exemption factor allows more tokenized shares to be issued for a smaller amount of exempt delegations. If governance is comfortable with how the liquid staking market is evolving, it makes sense to increase this value. + +Min self delegation is removed from the staking system with the expectation that it will be replaced by the exempt delegations system. The exempt delegation system allows multiple accounts to demonstrate economic alignment with the validator operator as team members, partners etc. without co-mingling funds. Delegation exemption will likely be required to grow the validators' business under widespread adoption of liquid staking once governance has adjusted the exemption factor. + +When shares are tokenized, the underlying shares are transfered to a module account and rewards go to the module account for the TokenizedShareRecord. + +There is no longer a mechanism to override the validators vote for TokenizedShares. + + +### `MsgTokenizeShares` + +The MsgTokenizeShares message is used to create tokenize delegated tokens. This message can be executed by any delegator who has positive amount of delegation and after execution the specific amount of delegation disappear from the account and share tokens are provided. Share tokens are denominated in the validator and record id of the underlying delegation. + +A user may tokenize some or all of their delegation. + +They will receive shares with the denom of `cosmosvaloper1xxxx/5` where 5 is the record id for the validator operator. + +MsgTokenizeShares fails if the account is a VestingAccount. Users will have to move vested tokens to a new account and endure the unbonding period. We view this as an acceptable tradeoff vs. the complex book keeping required to track vested tokens. + +The total amount of outstanding tokenized shares for the validator is checked against the sum of exempt delegations multiplied by the exemption factor. If the tokenized shares exceeds this limit, execution fails. + +MsgTokenizeSharesResponse provides the number of tokens generated and their denom. + + +### `MsgRedeemTokensforShares` + +The MsgRedeemTokensforShares message is used to redeem the delegation from share tokens. This message can be executed by any user who owns share tokens. After execution delegations will appear to the user. + +### `MsgTransferTokenizeShareRecord` + +The MsgTransferTokenizeShareRecord message is used to transfer the ownership of rewards generated from the tokenized amount of delegation. The tokenize share record is created when a user tokenize his/her delegation and deleted when the full amount of share tokens are redeemed. + +This is designed to work with liquid staking designs that do not redeem the tokenized shares and may instead want to keep the shares tokenized. + + +### `MsgExemptDelegation` + +The MsgExemptDelegation message is used to exempt a delegation to a validator. If the exemption factor is greater than 0, this will allow more delegation shares to be issued from the validator. + +This design allows the chain to force an amount of self-delegation by validators participating in liquid staking schemes. + +## Consequences + +### Backwards Compatibility + +By setting the exemption factor to zero, this module works like legacy staking. The only substantial change is the removal of min-self-bond and without any tokenized shares, there is no incentive to exempt delegation. + +### Positive + +This approach should enable integration with liquid staking providers and improved user experience. It provides a pathway to security under non-exponential issuance policies in the baseline staking module. \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/architecture/adr-template.md b/versioned_docs/version-0.47/integrate/architecture/adr-template.md new file mode 100644 index 000000000..dae4dfd44 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/architecture/adr-template.md @@ -0,0 +1,60 @@ +# ADR {ADR-NUMBER}: {TITLE} + +## Changelog + +* {date}: {changelog} + +## Status + +{DRAFT | PROPOSED} Not Implemented + +> Please have a look at the [PROCESS](./PROCESS.md#adr-status) page. +> Use DRAFT if the ADR is in a draft stage (draft PR) or PROPOSED if it's in review. + +## Abstract + +> "If you can't explain it simply, you don't understand it well enough." Provide a simplified and layman-accessible explanation of the ADR. +> A short (~200 word) description of the issue being addressed. + +## Context + +> This section describes the forces at play, including technological, political, social, and project local. These forces are probably in tension, and should be called out as such. The language in this section is value-neutral. It is simply describing facts. It should clearly explain the problem and motivation that the proposal aims to resolve. +> {context body} + +## Decision + +> This section describes our response to these forces. It is stated in full sentences, with active voice. "We will ..." +> {decision body} + +## Consequences + +> This section describes the resulting context, after applying the decision. All consequences should be listed here, not just the "positive" ones. A particular decision may have positive, negative, and neutral consequences, but all of them affect the team and project in the future. + +### Backwards Compatibility + +> All ADRs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The ADR must explain how the author proposes to deal with these incompatibilities. ADR submissions without a sufficient backwards compatibility treatise may be rejected outright. + +### Positive + +{positive consequences} + +### Negative + +{negative consequences} + +### Neutral + +{neutral consequences} + +## Further Discussions + +While an ADR is in the DRAFT or PROPOSED stage, this section should contain a summary of issues to be solved in future iterations (usually referencing comments from a pull-request discussion). +Later, this section can optionally list ideas or improvements the author or reviewers found during the analysis of this ADR. + +## Test Cases [optional] + +Test cases for an implementation are mandatory for ADRs that are affecting consensus changes. Other ADRs can choose to include links to test cases if applicable. + +## References + +* {reference link} diff --git a/versioned_docs/version-0.47/integrate/building-apps/00-app-go.md b/versioned_docs/version-0.47/integrate/building-apps/00-app-go.md new file mode 100644 index 000000000..f4af6dcfc --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-apps/00-app-go.md @@ -0,0 +1,14 @@ +--- +sidebar_position: 1 +--- + +# Overview of `app.go` + +This section is intended to provide an overview of the `SimApp` `app.go` file and is still a work in progress. +For now please instead read the [tutorials](https://tutorials.cosmos.network) for a deep dive on how to build a chain. + +## Complete `app.go` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L107-L738 +``` diff --git a/versioned_docs/version-0.47/integrate/building-apps/01-app-go-v2.md b/versioned_docs/version-0.47/integrate/building-apps/01-app-go-v2.md new file mode 100644 index 000000000..926d86dbb --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-apps/01-app-go-v2.md @@ -0,0 +1,130 @@ +--- +sidebar_position: 1 +--- + +# Overview of `app_v2.go` + +:::note Synopsis + +The Cosmos SDK allows much easier wiring of an `app.go` thanks to App Wiring and [`depinject`](../tooling/02-depinject.md). +Learn more about the rationale of App Wiring in [ADR-057](../architecture/adr-057-app-wiring.md). + +::: + +:::note + +### Pre-requisite Readings + +* [ADR 057: App Wiring](../architecture/adr-057-app-wiring.md) +* [Depinject Documentation](../tooling/02-depinject.md) + +::: + +This section is intended to provide an overview of the `SimApp` `app_v2.go` file with App Wiring. + +## `app_config.go` + +The `app_config.go` file is the single place to configure all modules parameters. + +1. Create the `AppConfig` variable: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L91-L93 + ``` + +2. Configure the `runtime` module: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L94-L158 + ``` + +3. Configure the modules defined in the `BeginBlocker` and `EndBlocker` and the `tx` module: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L159-L177 + ``` + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L192-L194 + ``` + +### Complete `app_config.go` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L52-L254 +``` + +### Alternative formats + +:::tip +The example above shows how to create an `AppConfig` using Go. However, it is also possible to create an `AppConfig` using YAML, or JSON. +The configuration can then be embed with `go:embed` and read with [`appconfig.LoadYAML`](https://pkg.go.dev/cosmossdk.io/core/appconfig#LoadYAML), or [`appconfig.LoadJSON`](https://pkg.go.dev/cosmossdk.io/core/appconfig#LoadJSON), in `app_v2.go`. + +```go +//go:embed app_config.yaml +var ( + appConfigYaml []byte + appConfig = appconfig.LoadYAML(appConfigYaml) +) +``` + +::: + +```yaml +modules: + - name: runtime + config: + "@type": cosmos.app.runtime.v1alpha1.Module + app_name: SimApp + begin_blockers: [staking, auth, bank] + end_blockers: [bank, auth, staking] + init_genesis: [bank, auth, staking] + - name: auth + config: + "@type": cosmos.auth.module.v1.Module + bech32_prefix: cosmos + - name: bank + config: + "@type": cosmos.bank.module.v1.Module + - name: staking + config: + "@type": cosmos.staking.module.v1.Module + - name: tx + config: + "@type": cosmos.tx.module.v1.Module +``` + +A more complete example of `app.yaml` can be found [here](https://github.com/cosmos/cosmos-sdk/blob/91b1d83f1339e235a1dfa929ecc00084101a19e3/simapp/app.yaml). + +## `app_v2.go` + +`app_v2.go` is the place where `SimApp` is constructed. `depinject.Inject` facilitates that by automatically wiring the app modules and keepers, provided an application configuration `AppConfig` is provided. `SimApp` is constructed, when calling the injected `*runtime.AppBuilder`, with `appBuilder.Build(...)`. +In short `depinject` and the [`runtime` package](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/runtime) abstract the wiring of the app, and the `AppBuilder` is the place where the app is constructed. [`runtime`](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/runtime) takes care of registering the codecs, KV store, subspaces and instantiating `baseapp`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L158-L291 +``` + +:::warning +When using `depinject.Inject`, the injected types must be pointers. +::: + +### Advanced Configuration + +In advanced cases, it is possible to inject extra (module) configuration in a way that is not (yet) supported by `AppConfig`. +In this case, use `depinject.Configs` for combining the extra configuration and `AppConfig`, and `depinject.Supply` to providing that extra configuration. +More information on how work `depinject.Configs` and `depinject.Supply` can be found in the [`depinject` documentation](https://pkg.go.dev/cosmossdk.io/depinject). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L186-L216 +``` + +### Complete `app_v2.go` + +:::tip +Note that in the complete `SimApp` `app_v2.go` file, testing utilities are also defined, but they could as well be defined in a separate file. +::: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_v2.go#L75-L395 +``` diff --git a/versioned_docs/version-0.47/integrate/building-apps/02-app-mempool.md b/versioned_docs/version-0.47/integrate/building-apps/02-app-mempool.md new file mode 100644 index 000000000..b32b96547 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-apps/02-app-mempool.md @@ -0,0 +1,168 @@ +--- +sidebar_position: 1 +--- + +# Application mempool + +:::note Synopsis +This sections describes how the app-side mempool can be used and replaced. +::: + +Since `v0.47` the application has its own mempool to allow much more granular +block building than previous versions. This change was enabled by +[ABCI 1.0](https://github.com/cometbft/cometbft/blob/v0.37.0/spec/abci). +Notably it introduces the `PrepareProposal` and `ProcessProposal` steps of ABCI++. + +:::note + +### Pre-requisite Readings + +* [BaseApp](../core/00-baseapp.md) + +::: + +## Prepare Proposal + +`PrepareProposal` handles construction of the block, meaning that when a proposer +is preparing to propose a block, it requests the application to evaluate a +`RequestPrepareProposal`, which contains a series of transactions from CometBFT's +mempool. At this point, the application has complete control over the proposal. +It can modify, delete, and inject transactions from it's own app-side mempool into +the proposal or even ignore all the transactions altogether. What the application +does with the transactions provided to it by `RequestPrepareProposal` have no +effect on CometBFT's mempool. + +Note, that the application defines the semantics of the `PrepareProposal` and it +MAY be non-deterministic and is only executed by the current block proposer. + +Now, reading mempool twice in the previous sentence is confusing, lets break it down. +CometBFT has a mempool that handles gossiping transactions to other nodes +in the network. How these transactions are ordered is determined by CometBFT's +mempool, typically FIFO. However, since the application is able to fully inspect +all transactions, it can provide greater control over transaction ordering. +Allowing the application to handle ordering enables the application to define how +it would like the block constructed. + +The Cosmos SDK defines the `DefaultProposalHandler` type, which provides applications with +`PrepareProposal` and `ProcessProposal` handlers. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L868-L916 +``` + +This default implementation can be overridden by the application developer in +favor of a custom implementation in [`app.go`](./01-app-go-v2.md): + +```go +prepareOpt := func(app *baseapp.BaseApp) { + abciPropHandler := baseapp.NewDefaultProposalHandler(mempool, app) + app.SetPrepareProposal(abciPropHandler.PrepareProposalHandler()) +} + +baseAppOptions = append(baseAppOptions, prepareOpt) +``` + +## Process Proposal + +`ProcessProposal` handles the validation of a proposal from `PrepareProposal`, +which also includes a block header. Meaning, that after a block has been proposed +the other validators have the right to vote on a block. The validator in the +default implementation of `PrepareProposal` runs basic validity checks on each +transaction. + +Note, `ProcessProposal` MAY NOT be non-deterministic, i.e. it must be deterministic. +This means if `ProcessProposal` panics or fails and we reject, all honest validator +processes will prevote nil and the CometBFT round will proceed again until a valid +proposal is proposed. + +Here is the implementation of the default implementation: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/baseapp.go#L927-L942 +``` + +Like `PrepareProposal` this implementation is the default and can be modified by the application developer in [`app.go`](./01-app-go-v2.md): + +```go +processOpt := func(app *baseapp.BaseApp) { + abciPropHandler := baseapp.NewDefaultProposalHandler(mempool, app) + app.SetProcessProposal(abciPropHandler.ProcessProposalHandler()) +} + +baseAppOptions = append(baseAppOptions, processOpt) +``` + +## Mempool + +Now that we have walked through the `PrepareProposal` & `ProcessProposal`, we can move on to walking through the mempool. + +There are countless designs that an application developer can write for a mempool, the SDK opted to provide only simple mempool implementations. +Namely, the SDK provides the following mempools: + +* [No-op Mempool](#no-op-mempool) +* [Sender Nonce Mempool](#sender-nonce-mempool) +* [Priority Nonce Mempool](#priority-nonce-mempool) + +The default SDK is a [No-op Mempool](#no-op-mempool), but it can be replaced by the application developer in [`app.go`](./01-app-go-v2.md): + +```go +nonceMempool := mempool.NewSenderNonceMempool() +mempoolOpt := baseapp.SetMempool(nonceMempool) +baseAppOptions = append(baseAppOptions, mempoolOpt) +``` + +### No-op Mempool + +A no-op mempool is a mempool where transactions are completely discarded and ignored when BaseApp interacts with the mempool. +When this mempool is used, it assumed that an application will rely on CometBFT's transaction ordering defined in `RequestPrepareProposal`, +which is FIFO-ordered by default. + +> Note: If a NoOp mempool is used, PrepareProposal and ProcessProposal both should be aware of this as +> PrepareProposal could include transactions that could fail verification in ProcessProposal. + +### Sender Nonce Mempool + +The nonce mempool is a mempool that keeps transactions from an sorted by nonce in order to avoid the issues with nonces. +It works by storing the transaction in a list sorted by the transaction nonce. When the proposer asks for transactions to be included in a block it randomly selects a sender and gets the first transaction in the list. It repeats this until the mempool is empty or the block is full. + +It is configurable with the following parameters: + +#### MaxTxs + +It is an integer value that sets the mempool in one of three modes, *bounded*, *unbounded*, or *disabled*. + +* **negative**: Disabled, mempool does not insert new transaction and return early. +* **zero**: Unbounded mempool has no transaction limit and will never fail with `ErrMempoolTxMaxCapacity`. +* **positive**: Bounded, it fails with `ErrMempoolTxMaxCapacity` when `maxTx` value is the same as `CountTx()` + +#### Seed + +Set the seed for the random number generator used to select transactions from the mempool. + +### Priority Nonce Mempool + +The [priority nonce mempool](https://github.com/cosmos/cosmos-sdk/blob/main/types/mempool/priority_nonce_spec.md) is a mempool implementation that stores txs in a partially ordered set by 2 dimensions: + +* priority +* sender-nonce (sequence number) + +Internally it uses one priority ordered [skip list](https://pkg.go.dev/github.com/huandu/skiplist) and one skip list per sender ordered by sender-nonce (sequence number). When there are multiple txs from the same sender, they are not always comparable by priority to other sender txs and must be partially ordered by both sender-nonce and priority. + +It is configurable with the following parameters: + +#### MaxTxs + +It is an integer value that sets the mempool in one of three modes, *bounded*, *unbounded*, or *disabled*. + +* **negative**: Disabled, mempool does not insert new transaction and return early. +* **zero**: Unbounded mempool has no transaction limit and will never fail with `ErrMempoolTxMaxCapacity`. +* **positive**: Bounded, it fails with `ErrMempoolTxMaxCapacity` when `maxTx` value is the same as `CountTx()` + +#### Callback + +The priority nonce mempool provides mempool options allowing the application sets callback(s). + +* **OnRead**: Set a callback to be called when a transaction is read from the mempool. +* **TxReplacement**: Sets a callback to be called when duplicated transaction nonce detected during mempool insert. Application can define a transaction replacement rule based on tx priority or certain transaction fields. + +More information on the SDK mempool implementation can be found in the [godocs](https://pkg.go.dev/github.com/cosmos/cosmos-sdk/types/mempool). diff --git a/versioned_docs/version-0.47/integrate/building-apps/03-app-upgrade.md b/versioned_docs/version-0.47/integrate/building-apps/03-app-upgrade.md new file mode 100644 index 000000000..d60e78117 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-apps/03-app-upgrade.md @@ -0,0 +1,69 @@ +--- +sidebar_position: 1 +--- + +# Application upgrade + +:::note +This document describes how to upgrade your application. If you are looking specifically for the changes to perform between SDK versions, see the [SDK migrations documentation](https://docs.cosmos.network/main/migrations/intro). +::: + +:::warning +This section is currently incomplete. Track the progress of this document [here](https://github.com/cosmos/cosmos-sdk/issues/11504). +::: + +## Pre-Upgrade Handling + +Cosmovisor supports custom pre-upgrade handling. Use pre-upgrade handling when you need to implement application config changes that are required in the newer version before you perform the upgrade. + +Using Cosmovisor pre-upgrade handling is optional. If pre-upgrade handling is not implemented, the upgrade continues. + +For example, make the required new-version changes to `app.toml` settings during the pre-upgrade handling. The pre-upgrade handling process means that the file does not have to be manually updated after the upgrade. + +Before the application binary is upgraded, Cosmovisor calls a `pre-upgrade` command that can be implemented by the application. + +The `pre-upgrade` command does not take in any command-line arguments and is expected to terminate with the following exit codes: + +| Exit status code | How it is handled in Cosmosvisor | +|------------------|---------------------------------------------------------------------------------------------------------------------| +| `0` | Assumes `pre-upgrade` command executed successfully and continues the upgrade. | +| `1` | Default exit code when `pre-upgrade` command has not been implemented. | +| `30` | `pre-upgrade` command was executed but failed. This fails the entire upgrade. | +| `31` | `pre-upgrade` command was executed but failed. But the command is retried until exit code `1` or `30` are returned. | + +## Sample + +Here is a sample structure of the `pre-upgrade` command: + +```go +func preUpgradeCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "pre-upgrade", + Short: "Pre-upgrade command", + Long: "Pre-upgrade command to implement custom pre-upgrade handling", + Run: func(cmd *cobra.Command, args []string) { + + err := HandlePreUpgrade() + + if err != nil { + os.Exit(30) + } + + os.Exit(0) + + }, + } + + return cmd +} +``` + +Ensure that the pre-upgrade command has been registered in the application: + +```go +rootCmd.AddCommand( + // .. + preUpgradeCommand(), + // .. + ) +``` diff --git a/versioned_docs/version-0.47/integrate/building-apps/_category_.json b/versioned_docs/version-0.47/integrate/building-apps/_category_.json new file mode 100644 index 000000000..de6617ddc --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-apps/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Building Apps", + "position": 4, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/building-modules/01-intro.md b/versioned_docs/version-0.47/integrate/building-modules/01-intro.md new file mode 100644 index 000000000..bb45d5d13 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/01-intro.md @@ -0,0 +1,94 @@ +--- +sidebar_position: 1 +--- + +# Introduction to Cosmos SDK Modules + +:::note Synopsis +Modules define most of the logic of Cosmos SDK applications. Developers compose modules together using the Cosmos SDK to build their custom application-specific blockchains. This document outlines the basic concepts behind SDK modules and how to approach module management. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK application](../basics/00-app-anatomy.md) +* [Lifecycle of a Cosmos SDK transaction](../basics/01-tx-lifecycle.md) + +::: + +## Role of Modules in a Cosmos SDK Application + +The Cosmos SDK can be thought of as the Ruby-on-Rails of blockchain development. It comes with a core that provides the basic functionalities every blockchain application needs, like a [boilerplate implementation of the ABCI](../core/00-baseapp.md) to communicate with the underlying consensus engine, a [`multistore`](../core/04-store.md#multistore) to persist state, a [server](../core/03-node.md) to form a full-node and [interfaces](./09-module-interfaces.md) to handle queries. + +On top of this core, the Cosmos SDK enables developers to build modules that implement the business logic of their application. In other words, SDK modules implement the bulk of the logic of applications, while the core does the wiring and enables modules to be composed together. The end goal is to build a robust ecosystem of open-source Cosmos SDK modules, making it increasingly easier to build complex blockchain applications. + +Cosmos SDK modules can be seen as little state-machines within the state-machine. They generally define a subset of the state using one or more `KVStore`s in the [main multistore](../core/04-store.md), as well as a subset of [message types](./02-messages-and-queries.md#messages). These messages are routed by one of the main components of Cosmos SDK core, [`BaseApp`](../core/00-baseapp.md), to a module Protobuf [`Msg` service](./03-msg-services.md) that defines them. + +```text + + + | + | Transaction relayed from the full-node's consensus engine + | to the node's application via DeliverTx + | + | + | + +---------------------v--------------------------+ + | APPLICATION | + | | + | Using baseapp's methods: Decode the Tx, | + | extract and route the message(s) | + | | + +---------------------+--------------------------+ + | + | + | + +---------------------------+ + | + | + | + | Message routed to the correct + | module to be processed + | + | ++----------------+ +---------------+ +----------------+ +------v----------+ +| | | | | | | | +| AUTH MODULE | | BANK MODULE | | STAKING MODULE | | GOV MODULE | +| | | | | | | | +| | | | | | | Handles message,| +| | | | | | | Updates state | +| | | | | | | | ++----------------+ +---------------+ +----------------+ +------+----------+ + | + | + | + | + +--------------------------+ + | + | Return result to the underlying consensus engine (e.g. CometBFT) + | (0=Ok, 1=Err) + v +``` + +As a result of this architecture, building a Cosmos SDK application usually revolves around writing modules to implement the specialized logic of the application and composing them with existing modules to complete the application. Developers will generally work on modules that implement logic needed for their specific use case that do not exist yet, and will use existing modules for more generic functionalities like staking, accounts, or token management. + +## How to Approach Building Modules as a Developer + +While there are no definitive guidelines for writing modules, here are some important design principles developers should keep in mind when building them: + +* **Composability**: Cosmos SDK applications are almost always composed of multiple modules. This means developers need to carefully consider the integration of their module not only with the core of the Cosmos SDK, but also with other modules. The former is achieved by following standard design patterns outlined [here](#main-components-of-sdk-modules), while the latter is achieved by properly exposing the store(s) of the module via the [`keeper`](./06-keeper.md). +* **Specialization**: A direct consequence of the **composability** feature is that modules should be **specialized**. Developers should carefully establish the scope of their module and not batch multiple functionalities into the same module. This separation of concerns enables modules to be re-used in other projects and improves the upgradability of the application. **Specialization** also plays an important role in the [object-capabilities model](../core/10-ocap.md) of the Cosmos SDK. +* **Capabilities**: Most modules need to read and/or write to the store(s) of other modules. However, in an open-source environment, it is possible for some modules to be malicious. That is why module developers need to carefully think not only about how their module interacts with other modules, but also about how to give access to the module's store(s). The Cosmos SDK takes a capabilities-oriented approach to inter-module security. This means that each store defined by a module is accessed by a `key`, which is held by the module's [`keeper`](./06-keeper.md). This `keeper` defines how to access the store(s) and under what conditions. Access to the module's store(s) is done by passing a reference to the module's `keeper`. + +## Main Components of Cosmos SDK Modules + +Modules are by convention defined in the `./x/` subfolder (e.g. the `bank` module will be defined in the `./x/bank` folder). They generally share the same core components: + +* A [`keeper`](./06-keeper.md), used to access the module's store(s) and update the state. +* A [`Msg` service](./02-messages-and-queries.md#messages), used to process messages when they are routed to the module by [`BaseApp`](../core/00-baseapp.md#message-routing) and trigger state-transitions. +* A [query service](./04-query-services.md), used to process user queries when they are routed to the module by [`BaseApp`](../core/00-baseapp.md#query-routing). +* Interfaces, for end users to query the subset of the state defined by the module and create `message`s of the custom types defined in the module. + +In addition to these components, modules implement the `AppModule` interface in order to be managed by the [`module manager`](./01-module-manager.md). + +Please refer to the [structure document](./11-structure.md) to learn about the recommended structure of a module's directory. diff --git a/versioned_docs/version-0.47/integrate/building-modules/01-module-manager.md b/versioned_docs/version-0.47/integrate/building-modules/01-module-manager.md new file mode 100644 index 000000000..8003e37dd --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/01-module-manager.md @@ -0,0 +1,255 @@ +--- +sidebar_position: 1 +--- + +# Module Manager + +:::note Synopsis +Cosmos SDK modules need to implement the [`AppModule` interfaces](#application-module-interfaces), in order to be managed by the application's [module manager](#module-manager). The module manager plays an important role in [`message` and `query` routing](../core/00-baseapp.md#routing), and allows application developers to set the order of execution of a variety of functions like [`BeginBlocker` and `EndBlocker`](../basics/00-app-anatomy.md#begingblocker-and-endblocker). +::: + +:::note + +### Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](./01-intro.md) + +::: + +## Application Module Interfaces + +Application module interfaces exist to facilitate the composition of modules together to form a functional Cosmos SDK application. +There are 4 main application module interfaces: + +* [`AppModuleBasic`](#appmodulebasic) for independent module functionalities. +* [`AppModule`](#appmodule) for inter-dependent module functionalities (except genesis-related functionalities). +* [`AppModuleGenesis`](#appmodulegenesis) for inter-dependent genesis-related module functionalities. +* `GenesisOnlyAppModule`: Defines an `AppModule` that only has import/export functionality + +The above interfaces are mostly embedding smaller interfaces (extension interfaces), that defines specific functionalities: + +* `HasName`: Allows the module to provide its own name for legacy purposes. +* [`HasGenesisBasics`](#hasgenesisbasics): The legacy interface for stateless genesis methods. +* [`HasGenesis`](#hasgenesis): The extension interface for stateful genesis methods. +* [`HasInvariants`](#hasinvariants): The extension interface for registering invariants. +* [`HasServices`](#hasservices): The extension interface for modules to register services. +* [`HasConsensusVersion`](#hasconsensusversion): The extension interface for declaring a module consensus version. +* [`BeginBlockAppModule`](#beginblockappmodule): The extension interface that contains information about the `AppModule` and `BeginBlock`. +* [`EndBlockAppModule`](#endblockappmodule): The extension interface that contains information about the `AppModule` and `EndBlock`. + +The `AppModuleBasic` interface exists to define independent methods of the module, i.e. those that do not depend on other modules in the application. This allows for the construction of the basic application structure early in the application definition, generally in the `init()` function of the [main application file](../basics/00-app-anatomy.md#core-application-file). + +The `AppModule` interface exists to define inter-dependent module methods. Many modules need to interact with other modules, typically through [`keeper`s](./06-keeper.md), which means there is a need for an interface where modules list their `keeper`s and other methods that require a reference to another module's object. `AppModule` interface extension, such as `BeginBlockAppModule` and `EndBlockAppModule`, also enables the module manager to set the order of execution between module's methods like `BeginBlock` and `EndBlock`, which is important in cases where the order of execution between modules matters in the context of the application. + +The usage of extension interfaces allows modules to define only the functionalities they need. For example, a module that does not need an `EndBlock` does not need to define the `EndBlockAppModule` interface and thus the `EndBlock` method. `AppModule` and `AppModuleGenesis` are voluntarily small interfaces, that can take advantage of the `Module` patterns without having to define many placeholder functions. + +### `AppModuleBasic` + +The `AppModuleBasic` interface defines the independent methods modules need to implement. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L49-L59 +``` + +Let us go through the methods: + +* `RegisterLegacyAminoCodec(*codec.LegacyAmino)`: 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`. +* `RegisterInterfaces(codectypes.InterfaceRegistry)`: Registers a module's interface types and their concrete implementations as `proto.Message`. +* `RegisterGRPCGatewayRoutes(client.Context, *runtime.ServeMux)`: Registers gRPC routes for the module. +* `GetTxCmd()`: Returns the root [`Tx` command](./09-module-interfaces.md#tx) for the module. The subcommands of this root command are used by end-users to generate new transactions containing [`message`s](./02-messages-and-queries.md#queries) defined in the module. +* `GetQueryCmd()`: Return the root [`query` command](./09-module-interfaces.md#query) for the module. The subcommands of this root command are used by end-users to generate new queries to the subset of the state defined by the module. + +All the `AppModuleBasic` of an application are managed by the [`BasicManager`](#basicmanager). + +### `HasName` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L61-L66 +``` + +* `HasName` is an interface that has a method `Name()`. This method returns the name of the module as a `string`. + +### `HasGenesisBasics` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L68-L72 +``` + +Let us go through the methods: + +* `DefaultGenesis(codec.JSONCodec)`: Returns a default [`GenesisState`](./08-genesis.md#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. +* `ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`: Used to validate the `GenesisState` defined by a module, given in its `json.RawMessage` form. It will usually unmarshall the `json` before running a custom [`ValidateGenesis`](./08-genesis.md#validategenesis) function defined by the module developer. + +### `AppModuleGenesis` + +The `AppModuleGenesis` interface is a simple embedding of the `AppModuleBasic` and `HasGenesis` interfaces. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L156-L160 +``` + +It does not have its own manager, and exists separately from [`AppModule`](#appmodule) only for modules that exist only to implement genesis functionalities, so that they can be managed without having to implement all of `AppModule`'s methods. + +### `HasGenesis` + +The `HasGenesis` interface is an extension interface of `HasGenesisBasics`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L162-L167 +``` + +Let us go through the two added methods: + +* `InitGenesis(sdk.Context, codec.JSONCodec, json.RawMessage)`: Initializes the subset of the state managed by the module. It is called at genesis (i.e. when the chain is first started). +* `ExportGenesis(sdk.Context, codec.JSONCodec)`: Exports the latest subset of the state managed by the module to be used in a new genesis file. `ExportGenesis` is called for each module when a new chain is started from the state of an existing chain. + +### `AppModule` + +The `AppModule` interface defines a module. Modules can declare their functionalities by implementing extensions interfaces. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L169-L173 +``` + +`AppModule`s are managed by the [module manager](#manager), which checks which extension interfaces are implemented by the module. + +:::note +Previously the `AppModule` interface was containing all the methods that are defined in the extensions interfaces. This was leading to much boilerplate for modules that did not need all the functionalities. +::: + +### `HasInvariants` + +This interface defines one method. It allows to checks if a module can register invariants. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L175-L179 +``` + +* `RegisterInvariants(sdk.InvariantRegistry)`: Registers the [`invariants`](./07-invariants.md) of the module. If an invariant deviates from its predicted value, the [`InvariantRegistry`](./07-invariants.md#registry) triggers appropriate logic (most often the chain will be halted). + +### `HasServices` + +This interface defines one method. It allows to checks if a module can register invariants. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L181-L185 +``` + +* `RegisterServices(Configurator)`: Allows a module to register services. + +### `HasConsensusVersion` + +This interface defines one method for checking a module consensus version. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L187-L194 +``` + +* `ConsensusVersion() uint64`: Returns the consensus version of the module. + +### `BeginBlockAppModule` + +The `BeginBlockAppModule` is an extension interface from `AppModule`. All modules that have an `BeginBlock` method implement this interface. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L196-L200 +``` + +* `BeginBlock(sdk.Context, abci.RequestBeginBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the beginning of each block. Implement empty if no logic needs to be triggered at the beginning of each block for this module. + +### `EndBlockAppModule` + +The `EndBlockAppModule` is an extension interface from `AppModule`. All modules that have an `EndBlock` method implement this interface. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L202-L206 +``` + +* `EndBlock(sdk.Context, abci.RequestEndBlock)`: This method gives module developers the option to implement logic that is automatically triggered at the end of each block. This is also where the module can inform the underlying consensus engine of validator set changes (e.g. the `staking` module). Implement empty if no logic needs to be triggered at the end of each block for this module. + +### Implementing the Application Module Interfaces + +Typically, the various application module interfaces are implemented in a file called `module.go`, located in the module's folder (e.g. `./x/module/module.go`). + +Almost every module needs to implement the `AppModuleBasic` and `AppModule` interfaces. If the module is only used for genesis, it will implement `AppModuleGenesis` instead of `AppModule`. The concrete type that implements the interface can add parameters that are required for the implementation of the various methods of the interface. For example, the `Route()` function often calls a `NewMsgServerImpl(k keeper)` function defined in `keeper/msg_server.go` and therefore needs to pass the module's [`keeper`](./06-keeper.md) as a parameter. + +```go +// example +type AppModule struct { + AppModuleBasic + keeper Keeper +} +``` + +In the example above, you can see that the `AppModule` concrete type references an `AppModuleBasic`, and not an `AppModuleGenesis`. That is because `AppModuleGenesis` only needs to be implemented in modules that focus on genesis-related functionalities. In most modules, the concrete `AppModule` type will have a reference to an `AppModuleBasic` and implement the two added methods of `AppModuleGenesis` directly in the `AppModule` type. + +If no parameter is required (which is often the case for `AppModuleBasic`), just declare an empty concrete type like so: + +```go +type AppModuleBasic struct{} +``` + +## Module Managers + +Module managers are used to manage collections of `AppModuleBasic` and `AppModule`. + +### `BasicManager` + +The `BasicManager` is a structure that lists all the `AppModuleBasic` of an application: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L74-L84 +``` + +It implements the following methods: + +* `NewBasicManager(modules ...AppModuleBasic)`: Constructor function. It takes a list of the application's `AppModuleBasic` and builds a new `BasicManager`. This function is generally called in the `init()` function of [`app.go`](../basics/00-app-anatomy.md#core-application-file) to quickly initialize the independent elements of the application's modules (click [here](https://github.com/cosmos/gaia/blob/main/app/app.go#L59-L74) to see an example). +* `RegisterLegacyAminoCodec(cdc *codec.LegacyAmino)`: Registers the [`codec.LegacyAmino`s](../core/05-encoding.md#amino) of each of the application's `AppModuleBasic`. This function is usually called early on in the [application's construction](../basics/00-app-anatomy.md#constructor). +* `RegisterInterfaces(registry codectypes.InterfaceRegistry)`: Registers interface types and implementations of each of the application's `AppModuleBasic`. +* `DefaultGenesis(cdc codec.JSONCodec)`: Provides default genesis information for modules in the application by calling the [`DefaultGenesis(cdc codec.JSONCodec)`](./08-genesis.md#defaultgenesis) function of each module. It only calls the modules that implements the `HasGenesisBasics` interfaces. +* `ValidateGenesis(cdc codec.JSONCodec, txEncCfg client.TxEncodingConfig, genesis map[string]json.RawMessage)`: Validates the genesis information modules by calling the [`ValidateGenesis(codec.JSONCodec, client.TxEncodingConfig, json.RawMessage)`](./08-genesis.md#validategenesis) function of modules implementing the `HasGenesisBasics` interface. +* `RegisterGRPCGatewayRoutes(clientCtx client.Context, rtr *runtime.ServeMux)`: Registers gRPC routes for modules. +* `AddTxCommands(rootTxCmd *cobra.Command)`: Adds modules' transaction commands to the application's [`rootTxCommand`](../core/07-cli.md#transaction-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../core/07-cli.md). +* `AddQueryCommands(rootQueryCmd *cobra.Command)`: Adds modules' query commands to the application's [`rootQueryCommand`](../core/07-cli.md#query-commands). This function is usually called function from the `main.go` function of the [application's command-line interface](../core/07-cli.md). + +### `Manager` + +The `Manager` is a structure that holds all the `AppModule` of an application, and defines the order of execution between several key components of these modules: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/module/module.go#L246-L273 +``` + +The module manager is used throughout the application whenever an action on a collection of modules is required. It implements the following methods: + +* `NewManager(modules ...AppModule)`: Constructor function. It takes a list of the application's `AppModule`s and builds a new `Manager`. It is generally called from the application's main [constructor function](../basics/00-app-anatomy.md#constructor-function). +* `SetOrderInitGenesis(moduleNames ...string)`: Sets the order in which the [`InitGenesis`](./08-genesis.md#initgenesis) function of each module will be called when the application is first started. This function is generally called from the application's main [constructor function](../basics/00-app-anatomy.md#constructor-function). + To initialize modules successfully, module dependencies should be considered. For example, the `genutil` module must occur after `staking` module so that the pools are properly initialized with tokens from genesis accounts, the `genutils` module must also occur after `auth` so that it can access the params from auth, `capability` module should be initialized before all other modules so that it can initialize any capabilities. +* `SetOrderExportGenesis(moduleNames ...string)`: Sets the order in which the [`ExportGenesis`](./08-genesis.md#exportgenesis) function of each module will be called in case of an export. This function is generally called from the application's main [constructor function](../basics/00-app-anatomy.md#constructor-function). +* `SetOrderBeginBlockers(moduleNames ...string)`: Sets the order in which the `BeginBlock()` function of each module will be called at the beginning of each block. This function is generally called from the application's main [constructor function](../basics/00-app-anatomy.md#constructor-function). +* `SetOrderEndBlockers(moduleNames ...string)`: Sets the order in which the `EndBlock()` function of each module will be called at the end of each block. This function is generally called from the application's main [constructor function](../basics/00-app-anatomy.md#constructor-function). +* `SetOrderMigrations(moduleNames ...string)`: Sets the order of migrations to be run. If not set then migrations will be run with an order defined in `DefaultMigrationsOrder`. +* `RegisterInvariants(ir sdk.InvariantRegistry)`: Registers the [invariants](./07-invariants.md) of module implementing the `HasInvariants` interface. +* `RegisterRoutes(router sdk.Router, queryRouter sdk.QueryRouter, legacyQuerierCdc *codec.LegacyAmino)`: Registers legacy [`Msg`](./02-messages-and-queries.md#messages) and [`querier`](./04-query-services.md#legacy-queriers) routes. +* `RegisterServices(cfg Configurator)`: Registers the services of modules implementing the `HasServices` interface. +* `InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, genesisData map[string]json.RawMessage)`: Calls the [`InitGenesis`](./08-genesis.md#initgenesis) function of each module when the application is first started, in the order defined in `OrderInitGenesis`. Returns an `abci.ResponseInitChain` to the underlying consensus engine, which can contain validator updates. +* `ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec)`: Calls the [`ExportGenesis`](./08-genesis.md#exportgenesis) function of each module, in the order defined in `OrderExportGenesis`. The export constructs a genesis file from a previously existing state, and is mainly used when a hard-fork upgrade of the chain is required. +* `ExportGenesisForModules(ctx sdk.Context, cdc codec.JSONCodec, modulesToExport []string)`: Behaves the same as `ExportGenesis`, except takes a list of modules to export. +* `BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock)`: At the beginning of each block, this function is called from [`BaseApp`](../core/00-baseapp.md#beginblock) and, in turn, calls the [`BeginBlock`](./05-beginblock-endblock.md) function of each modules implementing the `BeginBlockAppModule` interface, in the order defined in `OrderBeginBlockers`. It creates a child [context](../core/02-context.md) with an event manager to aggregate [events](../core/08-events.md) emitted from all modules. The function returns an `abci.ResponseBeginBlock` which contains the aforementioned events. +* `EndBlock(ctx sdk.Context, req abci.RequestEndBlock)`: At the end of each block, this function is called from [`BaseApp`](../core/00-baseapp.md#endblock) and, in turn, calls the [`EndBlock`](./05-beginblock-endblock.md) function of each modules implementing the `EndBlockAppModule` interface, in the order defined in `OrderEndBlockers`. It creates a child [context](../core/02-context.md) with an event manager to aggregate [events](../core/08-events.md) emitted from all modules. The function returns an `abci.ResponseEndBlock` which contains the aforementioned events, as well as validator set updates (if any). + +Here's an example of a concrete integration within an `simapp`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app.go#L386-L432 +``` + +This is the same example from `runtime` (the package that powers app v2): + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/runtime/module.go#L77 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/runtime/module.go#L87 +``` diff --git a/versioned_docs/version-0.47/integrate/building-modules/02-messages-and-queries.md b/versioned_docs/version-0.47/integrate/building-modules/02-messages-and-queries.md new file mode 100644 index 000000000..2021c7e96 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/02-messages-and-queries.md @@ -0,0 +1,129 @@ +--- +sidebar_position: 1 +--- + +# Messages and Queries + +:::note Synopsis +`Msg`s and `Queries` are the two primary objects handled by modules. Most of the core components defined in a module, like `Msg` services, `keeper`s and `Query` services, exist to process `message`s and `queries`. +::: + +:::note + +### Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](./01-intro.md) + +::: + +## Messages + +`Msg`s are objects whose end-goal is to trigger state-transitions. They are wrapped in [transactions](../core/01-transactions.md), which may contain one or more of them. + +When a transaction is relayed from the underlying consensus engine to the Cosmos SDK application, it is first decoded by [`BaseApp`](../core/00-baseapp.md). Then, each message contained in the transaction is extracted and routed to the appropriate module via `BaseApp`'s `MsgServiceRouter` so that it can be processed by the module's [`Msg` service](./03-msg-services.md). For a more detailed explanation of the lifecycle of a transaction, click [here](../basics/01-tx-lifecycle.md). + +### `Msg` Services + +Defining Protobuf `Msg` services is the recommended way to handle messages. A Protobuf `Msg` service should be created for each module, typically in `tx.proto` (see more info about [conventions and naming](../core/05-encoding.md#faq)). It must have an RPC service method defined for each message in the module. + +See an example of a `Msg` service definition from `x/bank` module: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/bank/v1beta1/tx.proto#L13-L36 +``` + +Each `Msg` service method must have exactly one argument, which must implement the `sdk.Msg` interface, and a Protobuf response. The naming convention is to call the RPC argument `Msg` and the RPC response `MsgResponse`. For example: + +```protobuf + rpc Send(MsgSend) returns (MsgSendResponse); +``` + +`sdk.Msg` interface is a simplified version of the Amino `LegacyMsg` interface described [below](#legacy-amino-msgs) with only `ValidateBasic()` and `GetSigners()` methods. For backwards compatibility with [Amino `LegacyMsg`s](#legacy-amino-msgs), existing `LegacyMsg` types should be used as the request parameter for `service` RPC definitions. Newer `sdk.Msg` types, which only support `service` definitions, should use canonical `Msg...` name. + +The Cosmos SDK uses Protobuf definitions to generate client and server code: + +* `MsgServer` interface defines the server API for the `Msg` service and its implementation is described as part of the [`Msg` services](./03-msg-services.md) documentation. +* Structures are generated for all RPC request and response types. + +A `RegisterMsgServer` method is also generated and should be used to register the module's `MsgServer` implementation in `RegisterServices` method from the [`AppModule` interface](./01-module-manager.md#appmodule). + +In order for clients (CLI and grpc-gateway) to have these URLs registered, the Cosmos SDK provides the function `RegisterMsgServiceDesc(registry codectypes.InterfaceRegistry, sd *grpc.ServiceDesc)` that should be called inside module's [`RegisterInterfaces`](01-module-manager.md#appmodulebasic) method, using the proto-generated `&_Msg_serviceDesc` as `*grpc.ServiceDesc` argument. + +### Legacy Amino `LegacyMsg`s + +The following way of defining messages is deprecated and using [`Msg` services](#msg-services) is preferred. + +Amino `LegacyMsg`s can be defined as protobuf messages. The messages definition usually includes a list of parameters needed to process the message that will be provided by end-users when they want to create a new transaction containing said message. + +A `LegacyMsg` is typically accompanied by a standard constructor function, that is called from one of the [module's interface](./09-module-interfaces.md). `message`s also need to implement the `sdk.Msg` interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/tx_msg.go#L14-L26 +``` + +It extends `proto.Message` and contains the following methods: + +* `Route() string`: Name of the route for this message. Typically all `message`s in a module have the same route, which is most often the module's name. +* `Type() string`: Type of the message, used primarily in [events](../core/08-events.md). This should return a message-specific `string`, typically the denomination of the message itself. +* [`ValidateBasic() error`](../basics/01-tx-lifecycle.md#ValidateBasic). +* `GetSignBytes() []byte`: Return the canonical byte representation of the message. Used to generate a signature. +* `GetSigners() []AccAddress`: Return the list of signers. The Cosmos SDK will make sure that each `message` contained in a transaction is signed by all the signers listed in the list returned by this method. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/migrations/legacytx/stdsign.go#L20-L36 +``` + +See an example implementation of a `message` from the `gov` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/types/v1/msgs.go#L121-L153 +``` + +## Queries + +A `query` is a request for information made by end-users of applications through an interface and processed by a full-node. A `query` is received by a full-node through its consensus engine and relayed to the application via the ABCI. It is then routed to the appropriate module via `BaseApp`'s `QueryRouter` so that it can be processed by the module's query service (./04-query-services.md). For a deeper look at the lifecycle of a `query`, click [here](../basics/02-query-lifecycle.md). + +### gRPC Queries + +Queries should be defined using [Protobuf services](https://developers.google.com/protocol-buffers/docs/proto#services). A `Query` service should be created per module in `query.proto`. This service lists endpoints starting with `rpc`. + +Here's an example of such a `Query` service definition: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/auth/v1beta1/query.proto#L14-L89 +``` + +As `proto.Message`s, generated `Response` types implement by default `String()` method of [`fmt.Stringer`](https://pkg.go.dev/fmt#Stringer). + +A `RegisterQueryServer` method is also generated and should be used to register the module's query server in the `RegisterServices` method from the [`AppModule` interface](./01-module-manager.md#appmodule). + +### Legacy Queries + +Before the introduction of Protobuf and gRPC in the Cosmos SDK, there was usually no specific `query` object defined by module developers, contrary to `message`s. Instead, the Cosmos SDK took the simpler approach of using a simple `path` to define each `query`. The `path` contains the `query` type and all the arguments needed to process it. For most module queries, the `path` should look like the following: + +```text +queryCategory/queryRoute/queryType/arg1/arg2/... +``` + +where: + +* `queryCategory` is the category of the `query`, typically `custom` for module queries. It is used to differentiate between different kinds of queries within `BaseApp`'s [`Query` method](../core/00-baseapp.md#query). +* `queryRoute` is used by `BaseApp`'s [`queryRouter`](../core/00-baseapp.md#query-routing) to map the `query` to its module. Usually, `queryRoute` should be the name of the module. +* `queryType` is used by the module's [`querier`](./04-query-services.md#legacy-queriers) to map the `query` to the appropriate `querier function` within the module. +* `args` are the actual arguments needed to process the `query`. They are filled out by the end-user. Note that for bigger queries, you might prefer passing arguments in the `Data` field of the request `req` instead of the `path`. + +The `path` for each `query` must be defined by the module developer in the module's [command-line interface file](./09-module-interfaces.md#query-commands).Overall, there are 3 mains components module developers need to implement in order to make the subset of the state defined by their module queryable: + +* A [`querier`](./04-query-services.md#legacy-queriers), to process the `query` once it has been [routed to the module](../core/00-baseapp.md#query-routing). +* [Query commands](./09-module-interfaces.md#query-commands) in the module's CLI file, where the `path` for each `query` is specified. +* `query` return types. Typically defined in a file `types/querier.go`, they specify the result type of each of the module's `queries`. These custom types must implement the `String()` method of [`fmt.Stringer`](https://pkg.go.dev/fmt#Stringer). + +### Store Queries + +Store queries query directly for store keys. They use `clientCtx.QueryABCI(req abci.RequestQuery)` to return the full `abci.ResponseQuery` with inclusion Merkle proofs. + +See following examples: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/abci.go#L881-L902 +``` diff --git a/versioned_docs/version-0.47/integrate/building-modules/03-msg-services.md b/versioned_docs/version-0.47/integrate/building-modules/03-msg-services.md new file mode 100644 index 000000000..b1e9a54d3 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/03-msg-services.md @@ -0,0 +1,114 @@ +--- +sidebar_position: 1 +--- + +# `Msg` Services + +:::note Synopsis +A Protobuf `Msg` service processes [messages](./02-messages-and-queries.md#messages). Protobuf `Msg` services are specific to the module in which they are defined, and only process messages defined within the said module. They are called from `BaseApp` during [`DeliverTx`](../core/00-baseapp.md#delivertx). +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](./01-module-manager.md) +* [Messages and Queries](./02-messages-and-queries.md) + +::: + +## Implementation of a module `Msg` service + +Each module should define a Protobuf `Msg` service, which will be responsible for processing requests (implementing `sdk.Msg`) and returning responses. + +As further described in [ADR 031](../architecture/adr-031-msg-service.md), this approach has the advantage of clearly specifying return types and generating server and client code. + +Protobuf generates a `MsgServer` interface based on a definition of `Msg` service. It is the role of the module developer to implement this interface, by implementing the state transition logic that should happen upon receival of each `sdk.Msg`. As an example, here is the generated `MsgServer` interface for `x/bank`, which exposes two `sdk.Msg`s: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/types/tx.pb.go#L550-L568 +``` + +When possible, the existing module's [`Keeper`](./06-keeper.md) should implement `MsgServer`, otherwise a `msgServer` struct that embeds the `Keeper` can be created, typically in `./keeper/msg_server.go`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/msg_server.go#L15-L17 +``` + +`msgServer` methods can retrieve the `sdk.Context` from the `context.Context` parameter method using the `sdk.UnwrapSDKContext`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/msg_server.go#L28 +``` + +`sdk.Msg` processing usually follows these 3 steps: + +### Validation + +Before a `msgServer` method is executed, the message's [`ValidateBasic()`](../basics/01-tx-lifecycle.md#ValidateBasic) method has already been called. Since `msg.ValidateBasic()` performs only the most basic checks, this stage must perform all other validation (both *stateful* and *stateless*) to make sure the `message` is valid. Checks performed in the `msgServer` method can be more expensive and the signer is charged gas for these operations. +For example, a `msgServer` method for a `transfer` message might check that the sending account has enough funds to actually perform the transfer. + +It is recommended to implement all validation checks in a separate function that passes state values as arguments. This implementation simplifies testing. As expected, expensive validation functions charge additional gas. Example: + +```go +ValidateMsgA(msg MsgA, now Time, gm GasMeter) error { + if now.Before(msg.Expire) { + return sdkerrrors.ErrInvalidRequest.Wrap("msg expired") + } + gm.ConsumeGas(1000, "signature verification") + return signatureVerificaton(msg.Prover, msg.Data) +} +``` + +### State Transition + +After the validation is successful, the `msgServer` method uses the [`keeper`](./06-keeper.md) functions to access the state and perform a state transition. + +### Events + +Before returning, `msgServer` methods generally emit one or more [events](../core/08-events.md) by using the `EventManager` held in the `ctx`. Use the new `EmitTypedEvent` function that uses protobuf-based event types: + +```go +ctx.EventManager().EmitTypedEvent( + &group.EventABC{Key1: Value1, Key2, Value2}) +``` + +or the older `EmitEvent` function: + +```go +ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, // e.g. sdk.EventTypeMessage for a message, types.CustomEventType for a custom event defined in the module + sdk.NewAttribute(key1, value1), + sdk.NewAttribute(key2, value2), + ), +) +``` + +These events are relayed back to the underlying consensus engine and can be used by service providers to implement services around the application. Click [here](../core/08-events.md) to learn more about events. + +The invoked `msgServer` method returns a `proto.Message` response and an `error`. These return values are then wrapped into an `*sdk.Result` or an `error` using `sdk.WrapServiceResult(ctx sdk.Context, res proto.Message, err error)`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/baseapp/msg_service_router.go#L131 +``` + +This method takes care of marshaling the `res` parameter to protobuf and attaching any events on the `ctx.EventManager()` to the `sdk.Result`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/base/abci/v1beta1/abci.proto#L88-L109 +``` + +This diagram shows a typical structure of a Protobuf `Msg` service, and how the message propagates through the module. + +![Transaction flow](https://raw.githubusercontent.com/cosmos/cosmos-sdk/release/v0.46.x/docs/uml/svg/transaction_flow.svg) + +## Telemetry + +New [telemetry metrics](../core/09-telemetry.md) can be created from `msgServer` methods when handling messages. + +This is an example from the `x/auth/vesting` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/vesting/msg_server.go#L68-L80 +``` diff --git a/versioned_docs/version-0.47/integrate/building-modules/04-query-services.md b/versioned_docs/version-0.47/integrate/building-modules/04-query-services.md new file mode 100644 index 000000000..cedeb0928 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/04-query-services.md @@ -0,0 +1,59 @@ +--- +sidebar_position: 1 +--- + +# Query Services + +:::note Synopsis +A Protobuf Query service processes [`queries`](./02-messages-and-queries.md#queries). Query services are specific to the module in which they are defined, and only process `queries` defined within said module. They are called from `BaseApp`'s [`Query` method](../core/00-baseapp.md#query). +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](./01-module-manager.md) +* [Messages and Queries](./02-messages-and-queries.md) + +::: + +## Implementation of a module query service + +### gRPC Service + +When defining a Protobuf `Query` service, a `QueryServer` interface is generated for each module with all the service methods: + +```go +type QueryServer interface { + QueryBalance(context.Context, *QueryBalanceParams) (*types.Coin, error) + QueryAllBalances(context.Context, *QueryAllBalancesParams) (*QueryAllBalancesResponse, error) +} +``` + +These custom queries methods should be implemented by a module's keeper, typically in `./keeper/grpc_query.go`. The first parameter of these methods is a generic `context.Context`. Therefore, the Cosmos SDK provides a function `sdk.UnwrapSDKContext` to retrieve the `sdk.Context` from the provided +`context.Context`. + +Here's an example implementation for the bank module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/grpc_query.go +``` + +### Calling queries from the State Machine + +The Cosmos SDK v0.47 introduces a new `cosmos.query.v1.module_query_safe` Protobuf annotation which is used to state that a query that is safe to be called from within the state machine, for example: + +* a Keeper's query function can be called from another module's Keeper, +* ADR-033 intermodule query calls, +* CosmWasm contracts can also directly interact with these queries. + +If the `module_query_safe` annotation set to `true`, it means: + +* The query is deterministic: given a block height it will return the same response upon multiple calls, and doesn't introduce any state-machine breaking changes across SDK patch versions. +* Gas consumption never fluctuates across calls and across patch versions. + +If you are a module developer and want to use `module_query_safe` annotation for your own query, you have to ensure the following things: + +* the query is deterministic and won't introduce state-machine-breaking changes without coordinated upgrades +* it has its gas tracked, to avoid the attack vector where no gas is accounted for + on potentially high-computation queries. diff --git a/versioned_docs/version-0.47/integrate/building-modules/05-beginblock-endblock.md b/versioned_docs/version-0.47/integrate/building-modules/05-beginblock-endblock.md new file mode 100644 index 000000000..4cfdda370 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/05-beginblock-endblock.md @@ -0,0 +1,45 @@ +--- +sidebar_position: 1 +--- + +# BeginBlocker and EndBlocker + +:::note Synopsis +`BeginBlocker` and `EndBlocker` are optional methods module developers can implement in their module. They will be triggered at the beginning and at the end of each block respectively, when the [`BeginBlock`](../core/00-baseapp.md#beginblock) and [`EndBlock`](../core/00-baseapp.md#endblock) ABCI messages are received from the underlying consensus engine. +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](./01-module-manager.md) + +::: + +## BeginBlocker and EndBlocker + +`BeginBlocker` and `EndBlocker` are a way for module developers to add automatic execution of logic to their module. This is a powerful tool that should be used carefully, as complex automatic functions can slow down or even halt the chain. + +When needed, `BeginBlocker` and `EndBlocker` are implemented as part of the [`BeginBlockAppModule` and `BeginBlockAppModule` interfaces](./01-module-manager.md#appmodule). This means either can be left-out if not required. The `BeginBlock` and `EndBlock` methods of the interface implemented in `module.go` generally defer to `BeginBlocker` and `EndBlocker` methods respectively, which are usually implemented in `abci.go`. + +The actual implementation of `BeginBlocker` and `EndBlocker` in `abci.go` are very similar to that of a [`Msg` service](./03-msg-services.md): + +* They generally use the [`keeper`](./06-keeper.md) and [`ctx`](../core/02-context.md) to retrieve information about the latest state. +* If needed, they use the `keeper` and `ctx` to trigger state-transitions. +* If needed, they can emit [`events`](../core/08-events.md) via the `ctx`'s `EventManager`. + +A specificity of the `EndBlocker` is that it can return validator updates to the underlying consensus engine in the form of an [`[]abci.ValidatorUpdates`](https://docs.cometbft.com/v0.37/spec/abci/abci++_methods#endblock). This is the preferred way to implement custom validator changes. + +It is possible for developers to define the order of execution between the `BeginBlocker`/`EndBlocker` functions of each of their application's modules via the module's manager `SetOrderBeginBlocker`/`SetOrderEndBlocker` methods. For more on the module manager, click [here](./01-module-manager.md#manager). + +See an example implementation of `BeginBlocker` from the `distribution` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/abci.go#L14-L38 +``` + +and an example implementation of `EndBlocker` from the `staking` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/abci.go#L22-L27 +``` diff --git a/versioned_docs/version-0.47/integrate/building-modules/06-keeper.md b/versioned_docs/version-0.47/integrate/building-modules/06-keeper.md new file mode 100644 index 000000000..946eff6ff --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/06-keeper.md @@ -0,0 +1,93 @@ +--- +sidebar_position: 1 +--- + +# Keepers + +:::note Synopsis +`Keeper`s refer to a Cosmos SDK abstraction whose role is to manage access to the subset of the state defined by various modules. `Keeper`s are module-specific, i.e. the subset of state defined by a module can only be accessed by a `keeper` defined in said module. If a module needs to access the subset of state defined by another module, a reference to the second module's internal `keeper` needs to be passed to the first one. This is done in `app.go` during the instantiation of module keepers. +::: + +:::note + +### Pre-requisite Readings + +* [Introduction to Cosmos SDK Modules](./01-intro.md) + +::: + +## Motivation + +The Cosmos SDK is a framework that makes it easy for developers to build complex decentralized applications from scratch, mainly by composing modules together. As the ecosystem of open-source modules for the Cosmos SDK expands, it will become increasingly likely that some of these modules contain vulnerabilities, as a result of the negligence or malice of their developer. + +The Cosmos SDK adopts an [object-capabilities-based approach](../core/10-ocap.md) to help developers better protect their application from unwanted inter-module interactions, and `keeper`s are at the core of this approach. A `keeper` can be considered quite literally to be the gatekeeper of a module's store(s). Each store (typically an [`IAVL` Store](../core/04-store.md#iavl-store)) defined within a module comes with a `storeKey`, which grants unlimited access to it. The module's `keeper` holds this `storeKey` (which should otherwise remain unexposed), and defines [methods](#implementing-methods) for reading and writing to the store(s). + +The core idea behind the object-capabilities approach is to only reveal what is necessary to get the work done. In practice, this means that instead of handling permissions of modules through access-control lists, module `keeper`s are passed a reference to the specific instance of the other modules' `keeper`s that they need to access (this is done in the [application's constructor function](../basics/00-app-anatomy.md#constructor-function)). As a consequence, a module can only interact with the subset of state defined in another module via the methods exposed by the instance of the other module's `keeper`. This is a great way for developers to control the interactions that their own module can have with modules developed by external developers. + +## Type Definition + +`keeper`s are generally implemented in a `/keeper/keeper.go` file located in the module's folder. By convention, the type `keeper` of a module is simply named `Keeper` and usually follows the following structure: + +```go +type Keeper struct { + // External keepers, if any + + // Store key(s) + + // codec + + // authority +} +``` + +For example, here is the type definition of the `keeper` from the `staking` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/keeper.go#L23-L31 +``` + +Let us go through the different parameters: + +* An expected `keeper` is a `keeper` external to a module that is required by the internal `keeper` of said module. External `keeper`s are listed in the internal `keeper`'s type definition as interfaces. These interfaces are themselves defined in an `expected_keepers.go` file in the root of the module's folder. In this context, interfaces are used to reduce the number of dependencies, as well as to facilitate the maintenance of the module itself. +* `storeKey`s grant access to the store(s) of the [multistore](../core/04-store.md) managed by the module. They should always remain unexposed to external modules. +* `cdc` is the [codec](../core/05-encoding.md) used to marshall and unmarshall structs to/from `[]byte`. The `cdc` can be any of `codec.BinaryCodec`, `codec.JSONCodec` or `codec.Codec` based on your requirements. It can be either a proto or amino codec as long as they implement these interfaces. The authority listed is a module account or user account that has the right to change module level parameters. Previously this was handled by the param module, which has been deprecated. + +Of course, it is possible to define different types of internal `keeper`s for the same module (e.g. a read-only `keeper`). Each type of `keeper` comes with its own constructor function, which is called from the [application's constructor function](../basics/00-app-anatomy.md). This is where `keeper`s are instantiated, and where developers make sure to pass correct instances of modules' `keeper`s to other modules that require them. + +## Implementing Methods + +`Keeper`s primarily expose getter and setter methods for the store(s) managed by their module. These methods should remain as simple as possible and strictly be limited to getting or setting the requested value, as validity checks should have already been performed via the `ValidateBasic()` method of the [`message`](./02-messages-and-queries.md#messages) and the [`Msg` server](./03-msg-services.md) when `keeper`s' methods are called. + +Typically, a *getter* method will have the following signature + +```go +func (k Keeper) Get(ctx sdk.Context, key string) returnType +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. Then it's preferred to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. If it exists, get the `[]byte` value stored at location `[]byte(key)` using the `Get(key []byte)` method of the store. +3. Unmarshall the retrieved value from `[]byte` to `returnType` using the codec `cdc`. Return the value. + +Similarly, a *setter* method will have the following signature + +```go +func (k Keeper) Set(ctx sdk.Context, key string, value valueType) +``` + +and the method will go through the following steps: + +1. Retrieve the appropriate store from the `ctx` using the `storeKey`. This is done through the `KVStore(storeKey sdk.StoreKey)` method of the `ctx`. It's preferred to use the `prefix.Store` to access only the desired limited subset of the store for convenience and safety. +2. Marshal `value` to `[]byte` using the codec `cdc`. +3. Set the encoded value in the store at location `key` using the `Set(key []byte, value []byte)` method of the store. + +For more, see an example of `keeper`'s [methods implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/keeper.go). + +The [module `KVStore`](../core/04-store.md#kvstore-and-commitkvstore-interfaces) also provides an `Iterator()` method which returns an `Iterator` object to iterate over a domain of keys. + +This is an example from the `auth` module to iterate accounts: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/account.go#L94-L108 +``` diff --git a/versioned_docs/version-0.47/integrate/building-modules/07-invariants.md b/versioned_docs/version-0.47/integrate/building-modules/07-invariants.md new file mode 100644 index 000000000..4c53169d4 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/07-invariants.md @@ -0,0 +1,92 @@ +--- +sidebar_position: 1 +--- + +# Invariants + +:::note Synopsis +An invariant is a property of the application that should always be true. In the context of the Cosmos SDK, an `Invariant` is a function that checks for a particular invariant. These functions are useful to detect bugs early on and act upon them to limit their potential consequences (e.g. by halting the chain). They are also useful in the development process of the application to detect bugs via simulations. +::: + +:::note + +### Pre-requisite Readings + +* [Keepers](./06-keeper.md) + +::: + +## Implementing `Invariant`s + +An `Invariant` is a function that checks for a particular invariant within a module. Module `Invariant`s must follow the `Invariant` type: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/invariant.go#L9 +``` + +The `string` return value is the invariant message, which can be used when printing logs, and the `bool` return value is the actual result of the invariant check. + +In practice, each module implements `Invariant`s in a `keeper/invariants.go` file within the module's folder. The standard is to implement one `Invariant` function per logical grouping of invariants with the following model: + +```go +// Example for an Invariant that checks balance-related invariants + +func BalanceInvariants(k Keeper) sdk.Invariant { + return func(ctx sdk.Context) (string, bool) { + // Implement checks for balance-related invariants + } +} +``` + +Additionally, module developers should generally implement an `AllInvariants` function that runs all the `Invariant`s functions of the module: + +```go +// AllInvariants runs all invariants of the module. +// In this example, the module implements two Invariants: BalanceInvariants and DepositsInvariants + +func AllInvariants(k Keeper) sdk.Invariant { + + return func(ctx sdk.Context) (string, bool) { + res, stop := BalanceInvariants(k)(ctx) + if stop { + return res, stop + } + + return DepositsInvariant(k)(ctx) + } +} +``` + +Finally, module developers need to implement the `RegisterInvariants` method as part of the [`AppModule` interface](./01-module-manager.md#appmodule). Indeed, the `RegisterInvariants` method of the module, implemented in the `module/module.go` file, typically only defers the call to a `RegisterInvariants` method implemented in the `keeper/invariants.go` file. The `RegisterInvariants` method registers a route for each `Invariant` function in the [`InvariantRegistry`](#invariant-registry): + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/invariants.go#L12-L22 +``` + +For more, see an example of [`Invariant`s implementation from the `staking` module](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/keeper/invariants.go). + +## Invariant Registry + +The `InvariantRegistry` is a registry where the `Invariant`s of all the modules of an application are registered. There is only one `InvariantRegistry` per **application**, meaning module developers need not implement their own `InvariantRegistry` when building a module. **All module developers need to do is to register their modules' invariants in the `InvariantRegistry`, as explained in the section above**. The rest of this section gives more information on the `InvariantRegistry` itself, and does not contain anything directly relevant to module developers. + +At its core, the `InvariantRegistry` is defined in the Cosmos SDK as an interface: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/types/invariant.go#L14-L17 +``` + +Typically, this interface is implemented in the `keeper` of a specific module. The most used implementation of an `InvariantRegistry` can be found in the `crisis` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/crisis/keeper/keeper.go#L57-L61 +``` + +The `InvariantRegistry` is therefore typically instantiated by instantiating the `keeper` of the `crisis` module in the [application's constructor function](../basics/00-app-anatomy.md#constructor-function). + +`Invariant`s can be checked manually via [`message`s](./02-messages-and-queries.md), but most often they are checked automatically at the end of each block. Here is an example from the `crisis` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/crisis/abci.go#L12-L21 +``` + +In both cases, if one of the `Invariant`s returns false, the `InvariantRegistry` can trigger special logic (e.g. have the application panic and print the `Invariant`s message in the log). diff --git a/versioned_docs/version-0.47/integrate/building-modules/08-genesis.md b/versioned_docs/version-0.47/integrate/building-modules/08-genesis.md new file mode 100644 index 000000000..a63c8b119 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/08-genesis.md @@ -0,0 +1,72 @@ +--- +sidebar_position: 1 +--- + +# Module Genesis + +:::note Synopsis +Modules generally handle a subset of the state and, as such, they need to define the related subset of the genesis file as well as methods to initialize, verify and export it. +::: + +:::note + +### Pre-requisite Readings + +* [Module Manager](./01-module-manager.md) +* [Keepers](./06-keeper.md) + +::: + +## Type Definition + +The subset of the genesis state defined from a given module is generally defined in a `genesis.proto` file ([more info](../core/05-encoding.md#gogoproto) on how to define protobuf messages). The struct defining the module's subset of the genesis state is usually called `GenesisState` and contains all the module-related values that need to be initialized during the genesis process. + +See an example of `GenesisState` protobuf message definition from the `auth` module: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/auth/v1beta1/genesis.proto +``` + +Next we present the main genesis-related methods that need to be implemented by module developers in order for their module to be used in Cosmos SDK applications. + +### `DefaultGenesis` + +The `DefaultGenesis()` method is a simple method that calls the constructor function for `GenesisState` with the default value for each parameter. See an example from the `auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/module.go#L55-L59 +``` + +### `ValidateGenesis` + +The `ValidateGenesis(data GenesisState)` method is called to verify that the provided `genesisState` is correct. It should perform validity checks on each of the parameters listed in `GenesisState`. See an example from the `auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/types/genesis.go#L61-L74 +``` + +## Other Genesis Methods + +Other than the methods related directly to `GenesisState`, module developers are expected to implement two other methods as part of the [`AppModuleGenesis` interface](./01-module-manager.md#appmodulegenesis) (only if the module needs to initialize a subset of state in genesis). These methods are [`InitGenesis`](#initgenesis) and [`ExportGenesis`](#exportgenesis). + +### `InitGenesis` + +The `InitGenesis` method is executed during [`InitChain`](../core/00-baseapp.md#initchain) when the application is first started. Given a `GenesisState`, it initializes the subset of the state managed by the module by using the module's [`keeper`](./06-keeper.md) setter function on each parameter within the `GenesisState`. + +The [module manager](./01-module-manager.md#manager) of the application is responsible for calling the `InitGenesis` method of each of the application's modules in order. This order is set by the application developer via the manager's `SetOrderGenesisMethod`, which is called in the [application's constructor function](../basics/00-app-anatomy.md#constructor-function). + +See an example of `InitGenesis` from the `auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/genesis.go#L8-L35 +``` + +### `ExportGenesis` + +The `ExportGenesis` method is executed whenever an export of the state is made. It takes the latest known version of the subset of the state managed by the module and creates a new `GenesisState` out of it. This is mainly used when the chain needs to be upgraded via a hard fork. + +See an example of `ExportGenesis` from the `auth` module. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/keeper/genesis.go#L37-L49 +``` diff --git a/versioned_docs/version-0.47/integrate/building-modules/09-module-interfaces.md b/versioned_docs/version-0.47/integrate/building-modules/09-module-interfaces.md new file mode 100644 index 000000000..12f290183 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/09-module-interfaces.md @@ -0,0 +1,161 @@ +--- +sidebar_position: 1 +--- + +# Module Interfaces + +:::note Synopsis +This document details how to build CLI and REST interfaces for a module. Examples from various Cosmos SDK modules are included. +::: + +:::note + +### Pre-requisite Readings + +* [Building Modules Intro](./01-intro.md) + +::: + +## CLI + +One of the main interfaces for an application is the [command-line interface](../core/07-cli.md). This entrypoint adds commands from the application's modules enabling end-users to create [**messages**](./02-messages-and-queries.md#messages) wrapped in transactions and [**queries**](./02-messages-and-queries.md#queries). The CLI files are typically found in the module's `./client/cli` folder. + +### Transaction Commands + +In order to create messages that trigger state changes, end-users must create [transactions](../core/01-transactions.md) that wrap and deliver the messages. A transaction command creates a transaction that includes one or more messages. + +Transaction commands typically have their own `tx.go` file that lives within the module's `./client/cli` folder. The commands are specified in getter functions and the name of the function should include the name of the command. + +Here is an example from the `x/bank` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/client/cli/tx.go#L35-L71 +``` + +In the example, `NewSendTxCmd()` creates and returns the transaction command for a transaction that wraps and delivers `MsgSend`. `MsgSend` is the message used to send tokens from one account to another. + +In general, the getter function does the following: + +* **Constructs the command:** Read the [Cobra Documentation](https://pkg.go.dev/github.com/spf13/cobra) for more detailed information on how to create commands. + * **Use:** Specifies the format of the user input required to invoke the command. In the example above, `send` is the name of the transaction command and `[from_key_or_address]`, `[to_address]`, and `[amount]` are the arguments. + * **Args:** The number of arguments the user provides. In this case, there are exactly three: `[from_key_or_address]`, `[to_address]`, and `[amount]`. + * **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + * **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new transaction. + * The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientTxContext(cmd)`. The `clientCtx` contains information relevant to transaction handling, including information about the user. In this example, the `clientCtx` is used to retrieve the address of the sender by calling `clientCtx.GetFromAddress()`. + * If applicable, the command's arguments are parsed. In this example, the arguments `[to_address]` and `[amount]` are both parsed. + * A [message](./02-messages-and-queries.md) is created using the parsed arguments and information from the `clientCtx`. The constructor function of the message type is called directly. In this case, `types.NewMsgSend(fromAddr, toAddr, amount)`. Its good practice to call [`msg.ValidateBasic()`](../basics/01-tx-lifecycle.md#ValidateBasic) and other validation methods before broadcasting the message. + * Depending on what the user wants, the transaction is either generated offline or signed and broadcasted to the preconfigured node using `tx.GenerateOrBroadcastTxCLI(clientCtx, flags, msg)`. +* **Adds transaction flags:** All transaction commands must add a set of transaction [flags](#flags). The transaction flags are used to collect additional information from the user (e.g. the amount of fees the user is willing to pay). The transaction flags are added to the constructed command using `AddTxFlagsToCmd(cmd)`. +* **Returns the command:** Finally, the transaction command is returned. + +Each module must implement `NewTxCmd()`, which aggregates all of the transaction commands of the module. Here is an example from the `x/bank` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/client/cli/tx.go#L17-L33 +``` + +Each module must also implement the `GetTxCmd()` method for `AppModuleBasic` that simply returns `NewTxCmd()`. This allows the root command to easily aggregate all of the transaction commands for each module. Here is an example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/module.go#L79-L82 +``` + +### Query Commands + +[Queries](./02-messages-and-queries.md#queries) allow users to gather information about the application or network state; they are routed by the application and processed by the module in which they are defined. Query commands typically have their own `query.go` file in the module's `./client/cli` folder. Like transaction commands, they are specified in getter functions. Here is an example of a query command from the `x/auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/client/cli/query.go#L86-L128 +``` + +In the example, `GetAccountCmd()` creates and returns a query command that returns the state of an account based on the provided account address. + +In general, the getter function does the following: + +* **Constructs the command:** Read the [Cobra Documentation](https://pkg.go.dev/github.com/spf13/cobra) for more detailed information on how to create commands. + * **Use:** Specifies the format of the user input required to invoke the command. In the example above, `account` is the name of the query command and `[address]` is the argument. + * **Args:** The number of arguments the user provides. In this case, there is exactly one: `[address]`. + * **Short and Long:** Descriptions for the command. A `Short` description is expected. A `Long` description can be used to provide additional information that is displayed when a user adds the `--help` flag. + * **RunE:** Defines a function that can return an error. This is the function that is called when the command is executed. This function encapsulates all of the logic to create a new query. + * The function typically starts by getting the `clientCtx`, which can be done with `client.GetClientQueryContext(cmd)`. The `clientCtx` contains information relevant to query handling. + * If applicable, the command's arguments are parsed. In this example, the argument `[address]` is parsed. + * A new `queryClient` is initialized using `NewQueryClient(clientCtx)`. The `queryClient` is then used to call the appropriate [query](./02-messages-and-queries.md#grpc-queries). + * The `clientCtx.PrintProto` method is used to format the `proto.Message` object so that the results can be printed back to the user. +* **Adds query flags:** All query commands must add a set of query [flags](#flags). The query flags are added to the constructed command using `AddQueryFlagsToCmd(cmd)`. +* **Returns the command:** Finally, the query command is returned. + +Each module must implement `GetQueryCmd()`, which aggregates all of the query commands of the module. Here is an example from the `x/auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/client/cli/query.go#L33-L53 +``` + +Each module must also implement the `GetQueryCmd()` method for `AppModuleBasic` that returns the `GetQueryCmd()` function. This allows for the root command to easily aggregate all of the query commands for each module. Here is an example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/module.go#L84-L87 +``` + +### Flags + +[Flags](../core/07-cli.md#flags) allow users to customize commands. `--fees` and `--gas-prices` are examples of flags that allow users to set the [fees](../basics/04-gas-fees.md) and gas prices for their transactions. + +Flags that are specific to a module are typically created in a `flags.go` file in the module's `./client/cli` folder. When creating a flag, developers set the value type, the name of the flag, the default value, and a description about the flag. Developers also have the option to mark flags as _required_ so that an error is thrown if the user does not include a value for the flag. + +Here is an example that adds the `--from` flag to a command: + +```go +cmd.Flags().String(FlagFrom, "", "Name or address of private key with which to sign") +``` + +In this example, the value of the flag is a `String`, the name of the flag is `from` (the value of the `FlagFrom` constant), the default value of the flag is `""`, and there is a description that will be displayed when a user adds `--help` to the command. + +Here is an example that marks the `--from` flag as _required_: + +```go +cmd.MarkFlagRequired(FlagFrom) +``` + +For more detailed information on creating flags, visit the [Cobra Documentation](https://github.com/spf13/cobra). + +As mentioned in [transaction commands](#transaction-commands), there is a set of flags that all transaction commands must add. This is done with the `AddTxFlagsToCmd` method defined in the Cosmos SDK's `./client/flags` package. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/flags/flags.go#L108-L138 +``` + +Since `AddTxFlagsToCmd(cmd *cobra.Command)` includes all of the basic flags required for a transaction command, module developers may choose not to add any of their own (specifying arguments instead may often be more appropriate). + +Similarly, there is a `AddQueryFlagsToCmd(cmd *cobra.Command)` to add common flags to a module query command. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/flags/flags.go#L95-L106 +``` + +## gRPC + +[gRPC](https://grpc.io/) is a Remote Procedure Call (RPC) framework. RPC is the preferred way for external clients like wallets and exchanges to interact with a blockchain. + +In addition to providing an ABCI query pathway, the Cosmos SDK provides a gRPC proxy server that routes gRPC query requests to ABCI query requests. + +In order to do that, modules must implement `RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux)` on `AppModuleBasic` to wire the client gRPC requests to the correct handler inside the module. + +Here's an example from the `x/auth` module: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/auth/module.go#L71-L76 +``` + +## gRPC-gateway REST + +Applications need to support web services that use HTTP requests (e.g. a web wallet like [Keplr](https://keplr.app)). [grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway) translates REST calls into gRPC calls, which might be useful for clients that do not use gRPC. + +Modules that want to expose REST queries should add `google.api.http` annotations to their `rpc` methods, such as in the example below from the `x/auth` module: + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/auth/v1beta1/query.proto#L14-L89 +``` + +gRPC gateway is started in-process along with the application and CometBFT. It can be enabled or disabled by setting gRPC Configuration `enable` in [`app.toml`](../run-node/02-interact-node.md#configuring-the-node-using-apptoml). + +The Cosmos SDK provides a command for generating [Swagger](https://swagger.io/) documentation (`protoc-gen-swagger`). Setting `swagger` in [`app.toml`](../run-node/02-interact-node.md#configuring-the-node-using-apptoml) defines if swagger documentation should be automatically registered. diff --git a/versioned_docs/version-0.47/integrate/building-modules/10-autocli.md b/versioned_docs/version-0.47/integrate/building-modules/10-autocli.md new file mode 100644 index 000000000..1629e3d65 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/10-autocli.md @@ -0,0 +1,157 @@ +--- +sidebar_position: 1 +--- + + +# AutoCLI + +:::note Synopsis +This document details how to build CLI and REST interfaces for a module. Examples from various Cosmos SDK modules are included. +::: + +:::note + +## Pre-requisite Readings + +* [Building Modules Intro](./01-intro.md) + +::: + +The `autocli` package is a [Go library](https://pkg.go.dev/cosmossdk.io/client/v2/autocli) for generating CLI (command line interface) interfaces for Cosmos SDK-based applications. It provides a simple way to add CLI commands to your application by generating them automatically based on your gRPC service definitions. Autocli generates CLI commands and flags directly from your protobuf messages, including options, input parameters, and output parameters. This means that you can easily add a CLI interface to your application without having to manually create and manage commands. + +## Getting Started + +Here are the steps to use the `autocli` package: + +1. Define your app's modules that implement the `appmodule.AppModule` interface. +2. (optional) When willing to configure how behave `autocli` command generation, implement the `func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions` method on the module. Learn more [here](#advanced-usage). +3. Use the `autocli.AppOptions` struct to specifies the modules you defined. If you are using the `depinject` package to manage your app's dependencies, it can automatically create an instance of `autocli.AppOptions` based on your app's configuration. +4. Use the `EnhanceRootCommand()` method provided by `autocli` to add the CLI commands for the specified modules to your root command and can also be found in the `client/v2/autocli/app.go` file. Additionally, this method adds the `autocli` functionality to your app's root command. This method is additive only, meaning that it does not create commands if they are already registered for a module. Instead, it adds any missing commands to the root command. + +Here's an example of how to use `autocli`: + +``` go +// Define your app's modules +testModules := map[string]appmodule.AppModule{ + "testModule": &TestModule{}, +} + +// Define the autocli AppOptions +autoCliOpts := autocli.AppOptions{ + Modules: testModules, +} + +// Get the root command +rootCmd := &cobra.Command{ + Use: "app", +} + +// Enhance the root command with autocli +autocli.EnhanceRootCommand(rootCmd, autoCliOpts) + +// Run the root command +if err := rootCmd.Execute(); err != nil { + fmt.Println(err) +} +``` + +## Flags + +`autocli` generates flags for each field in a protobuf message. By default, the names of the flags are generated based on the names of the fields in the message. You can customise the flag names using the `namingOptions` parameter of the `Builder.AddMessageFlags()` method. + +To define flags for a message, you can use the `Builder.AddMessageFlags()` method. This method takes the `cobra.Command` instance and the message type as input, and generates flags for each field in the message. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/1ac260cb1c6f05666f47e67f8b2cfd6229a55c3b/client/v2/autocli/common.go#L44-L49 +``` + +The `binder` variable returned by the `AddMessageFlags()` method is used to bind the command-line arguments to the fields in the message. + +You can also customise the behavior of the flags using the `namingOptions` parameter of the `Builder.AddMessageFlags()` method. This parameter allows you to specify a custom prefix for the flags, and to specify whether to generate flags for repeated fields and whether to generate flags for fields with default values. + +## Commands and Queries + +The `autocli` package generates CLI commands and flags for each method defined in your gRPC service. By default, it generates commands for each RPC method that does not return a stream of messages. The commands are named based on the name of the service method. + +For example, given the following protobuf definition for a service: + +```protobuf +service MyService { + rpc MyMethod(MyRequest) returns (MyResponse) {} +} +``` + +`autocli` will generate a command named `my-method` for the `MyMethod` method. The command will have flags for each field in the `MyRequest` message. + +If you want to customise the behavior of a command, you can define a custom command by implementing the `autocli.Command` interface. You can then register the command with the `autocli.Builder` instance for your application. + +Similarly, you can define a custom query by implementing the `autocli.Query` interface. You can then register the query with the `autocli.Builder` instance for your application. + +To add a custom command or query, you can use the `Builder.AddCustomCommand` or `Builder.AddCustomQuery` methods, respectively. These methods take a `cobra.Command` or `cobra.Command` instance, respectively, which can be used to define the behavior of the command or query. + +## Advanced Usage + +### Specifying Subcommands + +By default, `autocli` generates a command for each method in your gRPC service. However, you can specify subcommands to group related commands together. To specify subcommands, you can use the `autocliv1.ServiceCommandDescriptor` struct. + +This example shows how to use the `autocliv1.ServiceCommandDescriptor` struct to group related commands together and specify subcommands in your gRPC service by defining an instance of `autocliv1.ModuleOptions` in your `autocli.go` file. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/bcdf81cbaf8d70c4e4fa763f51292d54aed689fd/x/gov/autocli.go#L9-L27 +``` + +The `AutoCLIOptions()` method in the autocli package allows you to specify the services and sub-commands to be mapped for your app. In the example code, an instance of the `autocliv1.ModuleOptions` struct is defined in the `appmodule.AppModule` implementation located in the `x/gov/autocli.go` file. This configuration groups related commands together and specifies subcommands for each service. + +### Positional Arguments + +Positional arguments are arguments that are passed to a command without being specified as a flag. They are typically used for providing additional context to a command, such as a filename or search query. + +To add positional arguments to a command, you can use the `autocliv1.PositionalArgDescriptor` struct, as seen in the example below. You need to specify the `ProtoField` parameter, which is the name of the protobuf field that should be used as the positional argument. In addition, if the parameter is a variable-length argument, you can specify the `Varargs` parameter as `true`. This can only be applied to the last positional parameter, and the `ProtoField` must be a repeated field. + +Here's an example of how to define a positional argument for the `Account` method of the `auth` service: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/bcdf81cbaf8d70c4e4fa763f51292d54aed689fd/x/auth/autocli.go#L8-L32 +``` + +Here are some example commands that use the positional arguments we defined above: + +To query an account by address: + +```bash + query auth account cosmos1abcd...xyz +``` + +To query an account address by account number: + +```bash + query auth address-by-acc-num 1 +``` + +In both of these commands, the `auth` service is being queried with the `query` subcommand, followed by the specific method being called (`account` or `address-by-acc-num`). The positional argument is included at the end of the command (`cosmos1abcd...xyz` or `1`) to specify the address or account number, respectively. + +### Customising Flag Names + +By default, `autocli` generates flag names based on the names of the fields in your protobuf message. However, you can customise the flag names by providing a `FlagOptions` parameter to the `Builder.AddMessageFlags()` method. This parameter allows you to specify custom names for flags based on the names of the message fields. For example, if you have a message with the fields `test` and `test1`, you can use the following naming options to customise the flags + +``` go +options := autocliv1.RpcCommandOptions{ + FlagOptions: map[string]*autocliv1.FlagOptions{ + "test": { Name: "custom_name", }, + "test1": { Name: "other_name", }, + }, +} + +builder.AddMessageFlags(message, options) +``` + +Note that `autocliv1.RpcCommandOptions` is a field of the `autocliv1.ServiceCommandDescriptor` struct, which is defined in the `autocliv1` package. To use this option, you can define an instance of `autocliv1.ModuleOptions` in your `appmodule.AppModule` implementation and specify the `FlagOptions` for the relevant service command descriptor. + +## Conclusion + +`autocli` is a powerful tool for adding CLI interfaces to your Cosmos SDK-based applications. It allows you to easily generate CLI commands and flags from your protobuf messages, and provides many options for customising the behavior of your CLI application. + +To further enhance your CLI experience with Cosmos SDK-based blockchains, you can use `Hubl`. `Hubl` is a tool that allows you to query any Cosmos SDK-based blockchain using the new AutoCLI feature of the Cosmos SDK. With hubl, you can easily configure a new chain and query modules with just a few simple commands. + +For more information on `Hubl`, including how to configure a new chain and query a module, see the [Hubl documentation](https://docs.cosmos.network/main/tooling/hubl). diff --git a/versioned_docs/version-0.47/integrate/building-modules/11-structure.md b/versioned_docs/version-0.47/integrate/building-modules/11-structure.md new file mode 100644 index 000000000..255893257 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/11-structure.md @@ -0,0 +1,95 @@ +--- +sidebar_position: 1 +--- + +# Recommended Folder Structure + +:::note Synopsis +This document outlines the recommended structure of Cosmos SDK modules. These ideas are meant to be applied as suggestions. Application developers are encouraged to improve upon and contribute to module structure and development design. +::: + +## Structure + +A typical Cosmos SDK module can be structured as follows: + +```shell +proto +└── {project_name} + └── {module_name} + └── {proto_version} + ├── {module_name}.proto + ├── event.proto + ├── genesis.proto + ├── query.proto + └── tx.proto +``` + +* `{module_name}.proto`: The module's common message type definitions. +* `event.proto`: The module's message type definitions related to events. +* `genesis.proto`: The module's message type definitions related to genesis state. +* `query.proto`: The module's Query service and related message type definitions. +* `tx.proto`: The module's Msg service and related message type definitions. + +```shell +x/{module_name} +├── client +│ ├── cli +│ │ ├── query.go +│ │ └── tx.go +│ └── testutil +│ ├── cli_test.go +│ └── suite.go +├── exported +│ └── exported.go +├── keeper +│ ├── genesis.go +│ ├── grpc_query.go +│ ├── hooks.go +│ ├── invariants.go +│ ├── keeper.go +│ ├── keys.go +│ ├── msg_server.go +│ └── querier.go +├── module +│ └── module.go +│ └── abci.go +├── simulation +│ ├── decoder.go +│ ├── genesis.go +│ ├── operations.go +│ └── params.go +├── {module_name}.pb.go +├── autocli.go +├── codec.go +├── errors.go +├── events.go +├── events.pb.go +├── expected_keepers.go +├── genesis.go +├── genesis.pb.go +├── keys.go +├── msgs.go +├── params.go +├── query.pb.go +├── tx.pb.go +└── README.md +``` + +* `client/`: The module's CLI client functionality implementation and the module's integration testing suite. +* `exported/`: The module's exported types - typically interface types. If a module relies on keepers from another module, it is expected to receive the keepers as interface contracts through the `expected_keepers.go` file (see below) in order to avoid a direct dependency on the module implementing the keepers. However, these interface contracts can define methods that operate on and/or return types that are specific to the module that is implementing the keepers and this is where `exported/` comes into play. The interface types that are defined in `exported/` use canonical types, allowing for the module to receive the keepers as interface contracts through the `expected_keepers.go` file. This pattern allows for code to remain DRY and also alleviates import cycle chaos. +* `keeper/`: The module's `Keeper` and `MsgServer` implementation. +* `module/`: The module's `AppModule` and `AppModuleBasic` implementation. + * `abci.go`: The module's `BeginBlocker` and `EndBlocker` implementations (this file is only required if `BeginBlocker` and/or `EndBlocker` need to be defined). +* `simulation/`: The module's [simulation](./14-simulator.md) package defines functions used by the blockchain simulator application (`simapp`). +* `REAMDE.md`: The module's specification documents outlining important concepts, state storage structure, and message and event type definitions. Learn more how to write module specs in the [spec guidelines](../spec/SPEC-SPEC.md). +* The root directory includes type definitions for messages, events, and genesis state, including the type definitions generated by Protocol Buffers. + * `autocli.go`: The module [autocli](./10-autocli.md) options. + * `codec.go`: The module's registry methods for interface types. + * `errors.go`: The module's sentinel errors. + * `events.go`: The module's event types and constructors. + * `expected_keepers.go`: The module's [expected keeper](./06-keeper.md#type-definition) interfaces. + * `genesis.go`: The module's genesis state methods and helper functions. + * `keys.go`: The module's store keys and associated helper functions. + * `msgs.go`: The module's message type definitions and associated methods. + * `params.go`: The module's parameter type definitions and associated methods. + * `*.pb.go`: The module's type definitions generated by Protocol Buffers (as defined in the respective `*.proto` files above). \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/building-modules/12-errors.md b/versioned_docs/version-0.47/integrate/building-modules/12-errors.md new file mode 100644 index 000000000..969ce6e75 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/12-errors.md @@ -0,0 +1,56 @@ +--- +sidebar_position: 1 +--- + +# Errors + +:::note Synopsis +This document outlines the recommended usage and APIs for error handling in Cosmos SDK modules. +::: + +Modules are encouraged to define and register their own errors to provide better +context on failed message or handler execution. Typically, these errors should be +common or general errors which can be further wrapped to provide additional specific +execution context. + +## Registration + +Modules should define and register their custom errors in `x/{module}/errors.go`. +Registration of errors is handled via the [`errors` package](https://github.com/cosmos/cosmos-sdk/blob/main/errors/errors.go). + +Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/types/errors.go#L1-L21 +``` + +Each custom module error must provide the codespace, which is typically the module name +(e.g. "distribution") and is unique per module, and a uint32 code. Together, the codespace and code +provide a globally unique Cosmos SDK error. Typically, the code is monotonically increasing but does not +necessarily have to be. The only restrictions on error codes are the following: + +* Must be greater than one, as a code value of one is reserved for internal errors. +* Must be unique within the module. + +Note, the Cosmos SDK provides a core set of *common* errors. These errors are defined in [`types/errors/errors.go`](https://github.com/cosmos/cosmos-sdk/blob/main/types/errors/errors.go). + +## Wrapping + +The custom module errors can be returned as their concrete type as they already fulfill the `error` +interface. However, module errors can be wrapped to provide further context and meaning to failed +execution. + +Example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/keeper.go#L141-L182 +``` + +Regardless if an error is wrapped or not, the Cosmos SDK's `errors` package provides a function to determine if +an error is of a particular kind via `Is`. + +## ABCI + +If a module error is registered, the Cosmos SDK `errors` package allows ABCI information to be extracted +through the `ABCIInfo` function. The package also provides `ResponseCheckTx` and `ResponseDeliverTx` as +auxiliary functions to automatically get `CheckTx` and `DeliverTx` responses from an error. diff --git a/versioned_docs/version-0.47/integrate/building-modules/13-upgrade.md b/versioned_docs/version-0.47/integrate/building-modules/13-upgrade.md new file mode 100644 index 000000000..18484c68c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/13-upgrade.md @@ -0,0 +1,65 @@ +--- +sidebar_position: 1 +--- + +# Upgrading Modules + +:::note Synopsis +[In-Place Store Migrations](../core/15-upgrade.md) allow your modules to upgrade to new versions that include breaking changes. This document outlines how to build modules to take advantage of this functionality. +::: + +:::note + +### Pre-requisite Readings + +* [In-Place Store Migration](../core/15-upgrade.md) + +::: + +## Consensus Version + +Successful upgrades of existing modules require each `AppModule` to implement the function `ConsensusVersion() uint64`. + +* The versions must be hard-coded by the module developer. +* The initial version **must** be set to 1. + +Consensus versions serve as state-breaking versions of app modules and must be incremented when the module introduces breaking changes. + +## Registering Migrations + +To register the functionality that takes place during a module upgrade, you must register which migrations you want to take place. + +Migration registration takes place in the `Configurator` using the `RegisterMigration` method. The `AppModule` reference to the configurator is in the `RegisterServices` method. + +You can register one or more migrations. If you register more than one migration script, list the migrations in increasing order and ensure there are enough migrations that lead to the desired consensus version. For example, to migrate to version 3 of a module, register separate migrations for version 1 and version 2 as shown in the following example: + +```go +func (am AppModule) RegisterServices(cfg module.Configurator) { + // --snip-- + cfg.RegisterMigration(types.ModuleName, 1, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 1 to 2. + }) + cfg.RegisterMigration(types.ModuleName, 2, func(ctx sdk.Context) error { + // Perform in-place store migrations from ConsensusVersion 2 to 3. + }) +} +``` + +Since these migrations are functions that need access to a Keeper's store, use a wrapper around the keepers called `Migrator` as shown in this example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/keeper/migrations.go#L11-L35 +``` + +## Writing Migration Scripts + +To define the functionality that takes place during an upgrade, write a migration script and place the functions in a `migrations/` directory. For example, to write migration scripts for the bank module, place the functions in `x/bank/migrations/`. Use the recommended naming convention for these functions. For example, `v2bank` is the script that migrates the package `x/bank/migrations/v2`: + +```go +// Migrating bank module from version 1 to 2 +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2bank.MigrateStore(ctx, m.keeper.storeKey) // v2bank is package `x/bank/migrations/v2`. +} +``` + +To see example code of changes that were implemented in a migration of balance keys, check out [migrateBalanceKeys](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/bank/migrations/v2/store.go#L52-L73). For context, this code introduced migrations of the bank store that updated addresses to be prefixed by their length in bytes as outlined in [ADR-028](../architecture/adr-028-public-key-addresses.md). diff --git a/versioned_docs/version-0.47/integrate/building-modules/14-simulator.md b/versioned_docs/version-0.47/integrate/building-modules/14-simulator.md new file mode 100644 index 000000000..d3483cec6 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/14-simulator.md @@ -0,0 +1,134 @@ +--- +sidebar_position: 1 +--- + +# Module Simulation + +:::note +### Pre-requisite Readings + +* [Cosmos Blockchain Simulator](../core/12-simulation.md) +::: + +## Synopsis + +This document details how to define each module simulation functions to be +integrated with the application `SimulationManager`. + +* [Simulation package](#simulation-package) + * [Store decoders](#store-decoders) + * [Randomized genesis](#randomized-genesis) + * [Randomized parameter changes](#randomized-parameter-changes) + * [Random weighted operations](#random-weighted-operations) + * [Random proposal contents](#random-proposal-contents) +* [Registering simulation functions](#registering-simulation-functions) +* [App Simulator manager](#app-simulator-manager) + +## Simulation package + +Every module that implements the Cosmos SDK simulator needs to have a `x//simulation` +package which contains the primary functions required by the fuzz tests: store +decoders, randomized genesis state and parameters, weighted operations and proposal +contents. + +### Store decoders + +Registering the store decoders is required for the `AppImportExport`. This allows +for the key-value pairs from the stores to be decoded (_i.e_ unmarshalled) +to their corresponding types. In particular, it matches the key to a concrete type +and then unmarshals the value from the `KVPair` to the type provided. + +You can use the example [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/simulation/decoder.go) from the distribution module to implement your store decoders. + +### Randomized genesis + +The simulator tests different scenarios and values for genesis parameters +in order to fully test the edge cases of specific modules. The `simulator` package from each module must expose a `RandomizedGenState` function to generate the initial random `GenesisState` from a given seed. + +Once the module genesis parameter are generated randomly (or with the key and +values defined in a `params` file), they are marshaled to JSON format and added +to the app genesis JSON to use it on the simulations. + +You can check an example on how to create the randomized genesis [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/simulation/genesis.go). + +### Randomized parameter changes + +The simulator is able to test parameter changes at random. The simulator package from each module must contain a `RandomizedParams` func that will simulate parameter changes of the module throughout the simulations lifespan. + +You can see how an example of what is needed to fully test parameter changes [here](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/simulation/params.go) + +### Random weighted operations + +Operations are one of the crucial parts of the Cosmos SDK simulation. They are the transactions +(`Msg`) that are simulated with random field values. The sender of the operation +is also assigned randomly. + +Operations on the simulation are simulated using the full [transaction cycle](../core/01-transactions.md) of a +`ABCI` application that exposes the `BaseApp`. + +Shown below is how weights are set: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/staking/simulation/operations.go#L19-L86 +``` + +As you can see, the weights are predefined in this case. Options exist to override this behavior with different weights. One option is to use `*rand.Rand` to define a random weight for the operation, or you can inject your own predefined weights. + +Here is how one can override the above package `simappparams`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/Makefile#L293-L299 +``` + +For the last test a tool called [runsim](https://github.com/cosmos/tools/tree/master/cmd/runsim) is used, this is used to parallelize go test instances, provide info to Github and slack integrations to provide information to your team on how the simulations are running. + +### Random proposal contents + +Randomized governance proposals are also supported on the Cosmos SDK simulator. Each +module must define the governance proposal `Content`s that they expose and register +them to be used on the parameters. + +## Registering simulation functions + +Now that all the required functions are defined, we need to integrate them into the module pattern within the `module.go`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/module.go#L180-L203 +``` + +## App Simulator manager + +The following step is setting up the `SimulatorManager` at the app level. This +is required for the simulation test files on the next step. + +```go +type CustomApp struct { + ... + sm *module.SimulationManager +} +``` + +Then at the instantiation of the application, we create the `SimulationManager` +instance in the same way we create the `ModuleManager` but this time we only pass +the modules that implement the simulation functions from the `AppModuleSimulation` +interface described above. + +```go +func NewCustomApp(...) { + // create the simulation manager and define the order of the modules for deterministic simulations + app.sm = module.NewSimulationManager( + auth.NewAppModule(app.accountKeeper), + bank.NewAppModule(app.bankKeeper, app.accountKeeper), + supply.NewAppModule(app.supplyKeeper, app.accountKeeper), + gov.NewAppModule(app.govKeeper, app.accountKeeper, app.supplyKeeper), + mint.NewAppModule(app.mintKeeper), + distr.NewAppModule(app.distrKeeper, app.accountKeeper, app.supplyKeeper, app.stakingKeeper), + staking.NewAppModule(app.stakingKeeper, app.accountKeeper, app.supplyKeeper), + slashing.NewAppModule(app.slashingKeeper, app.accountKeeper, app.stakingKeeper), + ) + + // register the store decoders for simulation tests + app.sm.RegisterStoreDecoders() + ... +} +``` diff --git a/versioned_docs/version-0.47/integrate/building-modules/15-depinject.md b/versioned_docs/version-0.47/integrate/building-modules/15-depinject.md new file mode 100644 index 000000000..96dd5dc39 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/15-depinject.md @@ -0,0 +1,126 @@ +--- +sidebar_position: 1 +--- + +# Dependency Injection + +:::note + +### Pre-requisite Readings + +* [Cosmos SDK Dependency Injection Framework](../tooling/02-depinject.md) + +::: + +[`depinject`](../tooling/02-depinject.md) is used to wire any module in `app.go`. +All core modules are already configured to support dependency injection. + +To work with `depinject` a module must define its configuration and requirements so that `depinject` can provide the right dependencies. + +In brief, as a module developer, the following steps are required: + +1. Define the module configuration using Protobuf +2. Define the module dependencies in `x/{moduleName}/module.go` + +A chain developer can then use the module by following these two steps: + +1. Configure the module in `app_config.go` or `app.yaml` +2. Inject the module in `app.go` + +## Module Configuration + +The module available configuration is defined in a Protobuf file, located at `{moduleName}/module/v1/module.proto`. + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/group/module/v1/module.proto +``` + +* `go_import` must point to the Go package of the custom module. +* Message fields define the module configuration. + That configuration can be set in the `app_config.go` / `app.yaml` file for a chain developer to configure the module. + Taking `group` as example, a chain developer is able to decide, thanks to `uint64 max_metadata_len`, what the maximum metatada length allowed for a group porposal is. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go#L226-L230 + ``` + +That message is generated using [`pulsar`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/protocgen-pulsar.sh) (by running `make proto-gen`). +In the case of the `group` module, this file is generated here: https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/api/cosmos/group/module/v1/module.pulsar.go. + +The part that is relevant for the module configuration is: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/api/cosmos/group/module/v1/module.pulsar.go#L515-L527 +``` + +:::note +Pulsar is optional. The official [`protoc-gen-go`](https://developers.google.com/protocol-buffers/docs/reference/go-generated) can be used as well. +::: + +## Dependency Definition + +Once the configuration proto is defined, the module's `module.go` must define what dependencies are required by the module. +The boilerplate is similar for all modules. + +:::warning +All methods, structs and their fields must be public for `depinject`. +::: + +1. Import the module configuration generated package: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L12-L14 + ``` + + Define an `init()` function for defining the `providers` of the module configuration: + This registers the module configuration message and the wiring of the module. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L199-L204 + ``` + +2. Ensure that the module implements the `appmodule.AppModule` interface: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0/x/group/module/module.go#L58-L64 + ``` + +3. Define a struct that inherits `depinject.In` and define the module inputs (i.e. module dependencies): + * `depinject` provides the right dependencies to the module. + * `depinject` also checks that all dependencies are provided. + + :::tip + For making a dependency optional, add the `optional:"true"` struct tag. + ::: + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L206-L216 + ``` + +4. Define the module outputs with a public struct that inherits `depinject.Out`: + The module outputs are the dependencies that the module provides to other modules. It is usually the module itself and its keeper. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L218-L223 + ``` + +5. Create a function named `ProvideModule` (as called in 1.) and use the inputs for instantiating the module outputs. + + ```go reference + https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L225-L235 + ``` + +The `ProvideModule` function should return an instance of `cosmossdk.io/core/appmodule.AppModule` which implements +one or more app module extension interfaces for initializing the module. + +Following is the complete app wiring configuration for `group`: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/group/module/module.go#L195-L235 +``` + +The module is now ready to be used with `depinject` by a chain developer. + +## App Wiring + +The App Wiring is done in `app_config.go` / `app.yaml` and `app_v2.go` and is explained in detail in the [overview of `app_v2.go`](../building-apps/01-app-go-v2.md). diff --git a/versioned_docs/version-0.47/integrate/building-modules/16-testing.md b/versioned_docs/version-0.47/integrate/building-modules/16-testing.md new file mode 100644 index 000000000..7de77ec89 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/16-testing.md @@ -0,0 +1,142 @@ +--- +sidebar_position: 1 +--- + +# Testing + +The Cosmos SDK contains different types of [tests](https://martinfowler.com/articles/practical-test-pyramid.html). +These tests have different goals and are used at different stages of the development cycle. +We advice, as a general rule, to use tests at all stages of the development cycle. +It is adviced, as a chain developer, to test your application and modules in a similar way than the SDK. + +The rationale behind testing can be found in [ADR-59](https://docs.cosmos.network/main/architecture/adr-059-test-scopes.html). + +## Unit Tests + +Unit tests are the lowest test category of the [test pyramid](https://martinfowler.com/articles/practical-test-pyramid.html). +All packages and modules should have unit test coverage. Modules should have their dependencies mocked: this means mocking keepers. + +The SDK uses `mockgen` to generate mocks for keepers: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/mockgen.sh#L3-L6 +``` + +You can read more about mockgen [here](https://github.com/golang/mock). + +### Example + +As an example, we will walkthrough the [keeper tests](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper_test.go) of the `x/gov` module. + +The `x/gov` module has a `Keeper` type requires a few external dependencies (ie. imports outside `x/gov` to work properly). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper.go#L61-L65 +``` + +In order to only test `x/gov`, we mock the [expected keepers](https://docs.cosmos.network/v0.46/building-modules/keeper.html#type-definition) and instantiate the `Keeper` with the mocked dependencies. Note that we may need to configure the mocked dependencies to return the expected values: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/common_test.go#L67-L81 +``` + +This allows us to test the `x/gov` module without having to import other modules. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper_test.go#L3-L35 +``` + +We can test then create unit tests using the newly created `Keeper` instance. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/keeper/keeper_test.go#L73-L91 +``` + +## Integration Tests + +Integration tests are at the second level of the [test pyramid](https://martinfowler.com/articles/practical-test-pyramid.html). +In the SDK, we locate our integration tests under [`/tests/integrations`](https://github.com/cosmos/cosmos-sdk/tree/main/tests/integration). + +The goal of these integration tests is to test a component with a minimal application (i.e. not `simapp`). The minimal application is defined with the help of [`depinject`](../tooling/02-depinject.md) – the SDK dependency injection framework, and includes all necessary modules to test the component. With the helps of the SDK testing package, we can easily create a minimal application and start the application with a set of genesis transactions: . + +### Example + +Here, we will walkthrough the integration tests of the `x/distribution` module. The `x/distribution` module has, in addition to keeper unit tests, integration tests that test the `x/distribution` module with a minimal application. This is expected as you may want to test the `x/distribution` module with actual application logic, instead of only mocked dependencies. + +For creating a minimal application, we use [`simtestutil.Setup`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/testutil/sims/app_helpers.go#L95-L99) and an [`AppConfig`](../tooling/02-depinject.md) of the `x/distribution` minimal dependencies. + +For instance, the `AppConfig` of `x/distribution` is defined as: + +* https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/distribution/testutil/app_config.go + +This is a stripped down version of the `simapp` `AppConfig`: + +* https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/simapp/app_config.go + +:::note +You can as well use the `AppConfig` `configurator` for creating an `AppConfig` [inline](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/slashing/app_test.go#L54-L62). There no difference between those two ways, use whichever you prefer. +::: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/tests/integration/distribution/keeper/keeper_test.go#L28-L33 +``` + +Now the types are injected and we can use them for our tests: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/tests/integration/distribution/keeper/keeper_test.go#L21-L53 +``` + +## Deterministic and Regression tests + +Tests are written for queries in the Cosmos SDK which have `module_query_safe` Protobuf annotation. + +Each query is tested using 2 methods: + +* Use property-based testing with the [`rapid`](https://pkg.go.dev/pgregory.net/rapid@v0.5.3) library. The property that is tested is that the query response and gas consumption are the same upon 1000 query calls. +* Regression tests are written with hardcoded responses and gas, and verify they don't change upon 1000 calls and between SDK patch versions. + +Here's an example of regression tests: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/tests/integration/bank/keeper/deterministic_test.go#L102-L115 +``` + +## Simulations + +Simulations uses as well a minimal application, built with [`depinject`](../tooling/02-depinject.md): + +Following is an example for `x/gov/` simulations: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/simulation/operations_test.go#L292-L310 +``` + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/x/gov/simulation/operations_test.go#L69-L111 +``` + +## End-to-end Tests + +End-to-end tests are at the top of the [test pyramid](https://martinfowler.com/articles/practical-test-pyramid.html). +They must test the whole application flow, from the user perspective (for instance, CLI tests). They are located under [`/tests/e2e`](https://github.com/cosmos/cosmos-sdk/tree/main/tests/e2e). + +For that, the SDK is using `simapp` but you should use your own application (`appd`). +Here are some examples: + +* SDK E2E tests: . +* Cosmos Hub E2E tests: . +* Osmosis E2E tests: . + +:::note warning +The SDK is in the process of creating its E2E tests, as defined in [ADR-59](https://docs.cosmos.network/main/architecture/adr-059-test-scopes.html). This page will eventually be updated with better examples. +::: + +## Summary + +| Scope | App Fixture | Mocks? | +| ----------- | ----------- | ------ | +| Unit | None | Yes | +| Integration | `depinject` | Some | +| Simulation | `depinject` | No | +| E2E | `appd` | No | diff --git a/versioned_docs/version-0.47/integrate/building-modules/_category_.json b/versioned_docs/version-0.47/integrate/building-modules/_category_.json new file mode 100644 index 000000000..8dc3f9a94 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/building-modules/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Building Modules", + "position": 3, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/migrations/01-intro.md b/versioned_docs/version-0.47/integrate/migrations/01-intro.md new file mode 100644 index 000000000..b27b294ea --- /dev/null +++ b/versioned_docs/version-0.47/integrate/migrations/01-intro.md @@ -0,0 +1,15 @@ +--- +sidebar_position: 1 +--- + +# SDK Migrations + +To smoothen the update to the latest stable release, the SDK includes a CLI command for hard-fork migrations (under the ` genesis migrate` subcommand). +Additionally, the SDK includes in-place migrations for its core modules. These in-place migrations are useful to migrate between major releases. + +* Hard-fork migrations are supported from the last major release to the current one. +* In-place module migrations are supported from the last two major releases to the current one. + +Migration from a version older than the last two major releases is not supported. + +When migrating from a previous version, refer to the [`UPGRADING.md`](./02-upgrading.md) and the `CHANGELOG.md` of the version you are migrating to. diff --git a/versioned_docs/version-0.47/integrate/migrations/_category_.json b/versioned_docs/version-0.47/integrate/migrations/_category_.json new file mode 100644 index 000000000..add3887b8 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/migrations/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "SDK Migrations", + "position": 6, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/modules/_category_.json b/versioned_docs/version-0.47/integrate/modules/_category_.json new file mode 100644 index 000000000..6038c7662 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/modules/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "SDK Modules", + "position": 7, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/integrate/spec/README.md b/versioned_docs/version-0.47/integrate/spec/README.md new file mode 100644 index 000000000..3aec92297 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/README.md @@ -0,0 +1,25 @@ +--- +sidebar_position: 1 +--- + +# Specifications + +This directory contains specifications for the modules of the Cosmos SDK as well as Interchain Standards (ICS) and other specifications. + +Cosmos SDK applications hold this state in a Merkle store. Updates to +the store may be made during transactions and at the beginning and end of every +block. + +## Cosmos SDK specifications + +* [Store](./store) - The core Merkle store that holds the state. +* [Bech32](./addresses/bech32.md) - Address format for Cosmos SDK applications. + +## Modules specifications + +Go the [module directory](https://github.com/cosmos/cosmos-sdk/blob/main/x/README.md) + +## CometBFT + +For details on the underlying blockchain and p2p protocols, see +the [CometBFT specification](https://github.com/cometbft/cometbft/tree/main/spec). diff --git a/versioned_docs/version-0.47/integrate/spec/SPEC-SPEC.md b/versioned_docs/version-0.47/integrate/spec/SPEC-SPEC.md new file mode 100644 index 000000000..b9d90bc47 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/SPEC-SPEC.md @@ -0,0 +1,60 @@ +# Specification of Specifications + +This file intends to outline the common structure for specifications within +this directory. + +## Tense + +For consistency, specs should be written in passive present tense. + +## Pseudo-Code + +Generally, pseudo-code should be minimized throughout the spec. Often, simple +bulleted-lists which describe a function's operations are sufficient and should +be considered preferable. In certain instances, due to the complex nature of +the functionality being described pseudo-code may the most suitable form of +specification. In these cases use of pseudo-code is permissible, but should be +presented in a concise manner, ideally restricted to only the complex +element as a part of a larger description. + +## Common Layout + +The following generalized `README` structure should be used to breakdown +specifications for modules. The following list is nonbinding and all sections are optional. + +* `# {Module Name}` - overview of the module +* `## Concepts` - describe specialized concepts and definitions used throughout the spec +* `## State` - specify and describe structures expected to marshalled into the store, and their keys +* `## State Transitions` - standard state transition operations triggered by hooks, messages, etc. +* `## Messages` - specify message structure(s) and expected state machine behaviour(s) +* `## Begin Block` - specify any begin-block operations +* `## End Block` - specify any end-block operations +* `## Hooks` - describe available hooks to be called by/from this module +* `## Events` - list and describe event tags used +* `## Client` - list and describe CLI commands and gRPC and REST endpoints +* `## Params` - list all module parameters, their types (in JSON) and examples +* `## Future Improvements` - describe future improvements of this module +* `## Tests` - acceptance tests +* `## Appendix` - supplementary details referenced elsewhere within the spec + +### Notation for key-value mapping + +Within `## State` the following notation `->` should be used to describe key to +value mapping: + +```text +key -> value +``` + +to represent byte concatenation the `|` may be used. In addition, encoding +type may be specified, for example: + +```text +0x00 | addressBytes | address2Bytes -> amino(value_object) +``` + +Additionally, index mappings may be specified by mapping to the `nil` value, for example: + +```text +0x01 | address2Bytes | addressBytes -> nil +``` diff --git a/versioned_docs/version-0.47/integrate/spec/_category_.json b/versioned_docs/version-0.47/integrate/spec/_category_.json new file mode 100644 index 000000000..e77f62999 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Specifications", + "position": 11, + "link": null +} diff --git a/versioned_docs/version-0.47/integrate/spec/_ics/README.md b/versioned_docs/version-0.47/integrate/spec/_ics/README.md new file mode 100644 index 000000000..803e0c89c --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/_ics/README.md @@ -0,0 +1,3 @@ +# Cosmos ICS + +* [ICS030 - Signed Messages](./ics-030-signed-messages.md) diff --git a/versioned_docs/version-0.47/integrate/spec/_ics/ics-030-signed-messages.md b/versioned_docs/version-0.47/integrate/spec/_ics/ics-030-signed-messages.md new file mode 100644 index 000000000..991314905 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/_ics/ics-030-signed-messages.md @@ -0,0 +1,192 @@ +# ICS 030: Cosmos Signed Messages + +>TODO: Replace with valid ICS number and possibly move to new location. + +* [Changelog](#changelog) +* [Abstract](#abstract) +* [Preliminary](#preliminary) +* [Specification](#specification) +* [Future Adaptations](#future-adaptations) +* [API](#api) +* [References](#references) + +## Status + +Proposed. + +## Changelog + +## Abstract + +Having the ability to sign messages off-chain has proven to be a fundamental aspect +of nearly any blockchain. The notion of signing messages off-chain has many +added benefits such as saving on computational costs and reducing transaction +throughput and overhead. Within the context of the Cosmos, some of the major +applications of signing such data includes, but is not limited to, providing a +cryptographic secure and verifiable means of proving validator identity and +possibly associating it with some other framework or organization. In addition, +having the ability to sign Cosmos messages with a Ledger or similar HSM device. + +A standardized protocol for hashing, signing, and verifying messages that can be +implemented by the Cosmos SDK and other third-party organizations is needed. Such a +standardized protocol subscribes to the following: + +* Contains a specification of human-readable and machine-verifiable typed structured data +* Contains a framework for deterministic and injective encoding of structured data +* Utilizes cryptographic secure hashing and signing algorithms +* A framework for supporting extensions and domain separation +* Is invulnerable to chosen ciphertext attacks +* Has protection against potentially signing transactions a user did not intend to + +This specification is only concerned with the rationale and the standardized +implementation of Cosmos signed messages. It does **not** concern itself with the +concept of replay attacks as that will be left up to the higher-level application +implementation. If you view signed messages in the means of authorizing some +action or data, then such an application would have to either treat this as +idempotent or have mechanisms in place to reject known signed messages. + +## Preliminary + +The Cosmos message signing protocol will be parameterized with a cryptographic +secure hashing algorithm `SHA-256` and a signing algorithm `S` that contains +the operations `sign` and `verify` which provide a digital signature over a set +of bytes and verification of a signature respectively. + +Note, our goal here is not to provide context and reasoning about why necessarily +these algorithms were chosen apart from the fact they are the defacto algorithms +used in CometBFT and the Cosmos SDK and that they satisfy our needs for such +cryptographic algorithms such as having resistance to collision and second +pre-image attacks, as well as being [deterministic](https://en.wikipedia.org/wiki/Hash_function#Determinism) and [uniform](https://en.wikipedia.org/wiki/Hash_function#Uniformity). + +## Specification + +CometBFT has a well established protocol for signing messages using a canonical +JSON representation as defined [here](https://github.com/cometbft/cometbft/blob/master/types/canonical.go). + +An example of such a canonical JSON structure is CometBFT's vote structure: + +```go +type CanonicalJSONVote struct { + ChainID string `json:"@chain_id"` + Type string `json:"@type"` + BlockID CanonicalJSONBlockID `json:"block_id"` + Height int64 `json:"height"` + Round int `json:"round"` + Timestamp string `json:"timestamp"` + VoteType byte `json:"type"` +} +``` + +With such canonical JSON structures, the specification requires that they include +meta fields: `@chain_id` and `@type`. These meta fields are reserved and must be +included. They are both of type `string`. In addition, fields must be ordered +in lexicographically ascending order. + +For the purposes of signing Cosmos messages, the `@chain_id` field must correspond +to the Cosmos chain identifier. The user-agent should **refuse** signing if the +`@chain_id` field does not match the currently active chain! The `@type` field +must equal the constant `"message"`. The `@type` field corresponds to the type of +structure the user will be signing in an application. For now, a user is only +allowed to sign bytes of valid ASCII text ([see here](https://github.com/cometbft/cometbft/blob/v0.37.0/libs/strings/string.go#L35-L64)). +However, this will change and evolve to support additional application-specific +structures that are human-readable and machine-verifiable ([see Future Adaptations](#futureadaptations)). + +Thus, we can have a canonical JSON structure for signing Cosmos messages using +the [JSON schema](http://json-schema.org/) specification as such: + +```json +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$id": "cosmos/signing/typeData/schema", + "title": "The Cosmos signed message typed data schema.", + "type": "object", + "properties": { + "@chain_id": { + "type": "string", + "description": "The corresponding Cosmos chain identifier.", + "minLength": 1 + }, + "@type": { + "type": "string", + "description": "The message type. It must be 'message'.", + "enum": [ + "message" + ] + }, + "text": { + "type": "string", + "description": "The valid ASCII text to sign.", + "pattern": "^[\\x20-\\x7E]+$", + "minLength": 1 + } + }, + "required": [ + "@chain_id", + "@type", + "text" + ] +} +``` + +e.g. + +```json +{ + "@chain_id": "1", + "@type": "message", + "text": "Hello, you can identify me as XYZ on keybase." +} +``` + +## Future Adaptations + +As applications can vary greatly in domain, it will be vital to support both +domain separation and human-readable and machine-verifiable structures. + +Domain separation will allow for application developers to prevent collisions of +otherwise identical structures. It should be designed to be unique per application +use and should directly be used in the signature encoding itself. + +Human-readable and machine-verifiable structures will allow end users to sign +more complex structures, apart from just string messages, and still be able to +know exactly what they are signing (opposed to signing a bunch of arbitrary bytes). + +Thus, in the future, the Cosmos signing message specification will be expected +to expand upon it's canonical JSON structure to include such functionality. + +## API + +Application developers and designers should formalize a standard set of APIs that +adhere to the following specification: + +----- + +### **cosmosSignBytes** + +Params: + +* `data`: the Cosmos signed message canonical JSON structure +* `address`: the Bech32 Cosmos account address to sign data with + +Returns: + +* `signature`: the Cosmos signature derived using signing algorithm `S` + +----- + +### Examples + +Using the `secp256k1` as the DSA, `S`: + +```javascript +data = { + "@chain_id": "1", + "@type": "message", + "text": "I hereby claim I am ABC on Keybase!" +} + +cosmosSignBytes(data, "cosmos1pvsch6cddahhrn5e8ekw0us50dpnugwnlfngt3") +> "0x7fc4a495473045022100dec81a9820df0102381cdbf7e8b0f1e2cb64c58e0ecda1324543742e0388e41a02200df37905a6505c1b56a404e23b7473d2c0bc5bcda96771d2dda59df6ed2b98f8" +``` + +## References diff --git a/versioned_docs/version-0.47/integrate/spec/addresses/README.md b/versioned_docs/version-0.47/integrate/spec/addresses/README.md new file mode 100644 index 000000000..61db3aa93 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/addresses/README.md @@ -0,0 +1,3 @@ +# Addresses spec + +* [Bech32](./bech32.md) diff --git a/versioned_docs/version-0.47/integrate/spec/addresses/bech32.md b/versioned_docs/version-0.47/integrate/spec/addresses/bech32.md new file mode 100644 index 000000000..2c15bac68 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/addresses/bech32.md @@ -0,0 +1,21 @@ +# Bech32 on Cosmos + +The Cosmos network prefers to use the Bech32 address format wherever users must handle binary data. Bech32 encoding provides robust integrity checks on data and the human readable part (HRP) provides contextual hints that can assist UI developers with providing informative error messages. + +In the Cosmos network, keys and addresses may refer to a number of different roles in the network like accounts, validators etc. + +## HRP table + +| HRP | Definition | +| ---------------- | ------------------------------------- | +| cosmos | Cosmos Account Address | +| cosmosvalcons | Cosmos Validator Consensus Address | +| cosmosvaloper | Cosmos Validator Operator Address | + +## Encoding + +While all user facing interfaces to Cosmos software should exposed Bech32 interfaces, many internal interfaces encode binary value in hex or base64 encoded form. + +To covert between other binary representation of addresses and keys, it is important to first apply the Amino encoding process before Bech32 encoding. + +A complete implementation of the Amino serialization format is unnecessary in most cases. Simply prepending bytes from this [table](https://github.com/cometbft/cometbft/blob/main/spec/blockchain/encoding.md) to the byte string payload before Bech32 encoding will sufficient for compatible representation. diff --git a/versioned_docs/version-0.47/integrate/spec/circuit-breaker/README.md b/versioned_docs/version-0.47/integrate/spec/circuit-breaker/README.md new file mode 100644 index 000000000..1956704bd --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/circuit-breaker/README.md @@ -0,0 +1,16 @@ +# Concepts + +The intention of the circuit breaker is to have a contingency plan for a +running network which maintains network liveness. This can be achieved through +selectively "pausing" functionality of specific modules on a running network. +The circuit breaker is intended to be enabled through either: + +* governance +* for emergencies a special subset of accounts selected by the state machine +* a transaction which proves the expected behaviour is broken + +## Pause state + +The basic pause state of any module simply disables all message routes to +that module. Beyond that, it may be a appropriate for different modules to +process begin-block/end-block in an altered "safe" way. diff --git a/versioned_docs/version-0.47/integrate/spec/fee_distribution/f1_fee_distr.pdf b/versioned_docs/version-0.47/integrate/spec/fee_distribution/f1_fee_distr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b9995386957cb1be5fe5c21551b0645009063045 GIT binary patch literal 185175 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íw? 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˾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®cJ;^V-pd>T?lQ>;=Q>%vyx5? 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

#-Q)Qd~0k!|-IzD88Bl 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 hEwLT^?}N!;k^-5b!fOWIAe*u0V5q|&x literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.47/integrate/spec/fee_distribution/f1_fee_distr.tex b/versioned_docs/version-0.47/integrate/spec/fee_distribution/f1_fee_distr.tex new file mode 100644 index 000000000..b6bb6b326 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/fee_distribution/f1_fee_distr.tex @@ -0,0 +1,245 @@ +\documentclass[]{article} +\usepackage{hyperref} + +%opening +\title{F1 Fee Distribution Draft-02} +\author{Dev Ojha} + +\begin{document} + +\maketitle + +\begin{abstract} + In a proof of stake blockchain, validators need to split the rewards gained from transaction fees each block. Furthermore, these fees must be fairly distributed to each of a validator's constituent delegators. They accrue this reward throughout the entire time they are delegated, and they have a special operation to withdraw accrued rewards. + + The F1 fee distribution scheme works for any algorithm to split funds between validators each block, with minimal iteration, and the only approximations being due to finite decimal precision. Per block there is a single iteration over the validator set, to enable reward algorithms that differ by validator. No iteration is required to delegate, or withdraw. The state usage is one state update per validator per block, and one state entry per active delegation. It can optionally handle arbitrary inflation schemes, and auto-bonding of rewards. +\end{abstract} + +\section{F1 Fee Distribution} + +\subsection{Context} +In a proof of stake blockchain, each validator has an associated stake. +Transaction fees get rewarded to validators based on the incentive scheme of the underlying proof of stake model. +The fee distribution problem occurs in proof of stake blockchains supporting delegation, as there is a need to distribute a validator's fee rewards to its delegators. +The trivial solution of just giving the rewards to each delegator every block is too expensive to perform on-chain. +So instead fee distribution algorithms have delegators perform a withdraw action, which when performed yields the same total amount of fees as if they had received them at every block. + +This details F1, an approximation-free, slash-tolerant fee distribution algorithm which allows validator commission-rates, inflation rates, and fee proportions, which can all efficiently change per validator, every block. +The algorithm requires iterating over the bonded validators every block, and withdraws require no iteration. +This is cheap, due to staking logic already requiring iteration over all validators, which causes the expensive state-reads to be cached. + +The key point of how F1 works is that it tracks how much rewards a delegator with 1 stake for a given validator would be entitled to if it had bonded at block 0 until the latest block. +When a delegator bonds at block $b$, the amount of rewards a delegator with 1 stake would have if bonded at block 0 until block $b$ is also persisted to state. +When the delegator withdraws, they receive the difference of these two values. +Since rewards are distributed according to stake-weighting, this amount of rewards can be scaled by the amount of stake a delegator had. +Section 1.2 describes this in more detail, with an argument for it being approximation free. +Section 2 details how to adapt this algorithm to handle commission rates, slashing, and inflation. + +\subsection{Base algorithm} +In this section, we show that the F1 base algorithm gives each delegator rewards identical to that which they'd receive in the naive and correct fee distribution algorithm that iterated over all delegators every block. + +Even distribution of a validators rewards amongst its validators weighted by stake means the following: +Suppose a delegator delegates $x$ stake to a validator $v$ at block $h$. +Let the amount of stake the validator has at block $i$ be $s_i$ and the amount of fees they receive at this height be $f_i$. +Then if a delegator contributing $x$ stake decides to withdraw at block $n$, the rewards they receive are +$$\sum_{i = h}^{n} \frac{x}{s_i}f_i = x \sum_{i = h}^{n} \frac{f_i}{s_i}$$ + +Note that $s_i$ does not change every block, +it only changes if the validator gets slashed, +or if any delegator alters the amount they have delegated. +We'll relegate handling of slashes to \autoref{ssec:slashing}, +and only consider the case with no slashing here. +We can change the iteration from being over every block, to instead being over the set of blocks between two changes in validator $v$'s total stake. +Let each of these set of blocks be called a period. +A new period begins every time that validator's total stake changes. +Let the total amount of stake for the validator in period $p$ be $n_p$. +Let $T_p$ be the total fees that validator $v$ accrued in period $p$. +Let $h$ be the start of period $p_{init}$, and height $n$ be the end of $p_{final}$. +It follows that +$$x \sum_{i = h}^{n} \frac{f_i}{s_i} = x \sum_{p = p_{init}}^{p_{final}} \frac{T_p}{n_p}$$ + +Let $p_0$ represent the period which begins when the validator first bonds. +The central idea to the F1 model is that at the end of the $k$th period, +the following is stored at a state location indexable by $k$: $\sum_{i=0}^{k}\frac{T_i}{n_i}$. +Let the index of the current period be $f$. +When a delegator wants to delegate or withdraw their reward, they first create a new entry in state to end the current period. +Then this entry is created using the previous entry as follows: +$$Entry_f = \sum_{i=0}^{f}\frac{T_i}{n_i} = \sum_{i=0}^{f-1}\frac{T_i}{n_i} + \frac{T_f}{n_f} = Entry_{f-1} + \frac{T_f}{n_f}$$ +Where $T_f$ is the fees the validator has accrued in period $f$, and $n_f$ is the validators total amount of stake in period $f$. + +The withdrawer's delegation object has the index $k$ for the period which they ended by bonding. (They start receiving rewards for period $k + 1$) +The reward they should receive when withdrawing is: + +$$x \sum_{i = k + 1}^{f} \frac{T_i}{n_i} = x\left(\left(\sum_{i=0}^{f}\frac{T_i}{n_i}\right) - \left(\sum_{i=0}^{k}\frac{T_i}{n_i}\right)\right) = x\left(Entry_f - Entry_k\right)$$ + +It is clear from the equations that this payout mechanism maintains correctness, and requires no iterations. It just needed the two state reads for these entries. + +$T_f$ is a separate variable in state for the amount of fees this validator has accrued since the last update to its power. +This variable is incremented at every block by however much fees this validator received that block. +On the update to the validators power, this variable is used to create the entry in state at $f$, and is then reset to 0. + +This fee distribution proposal is agnostic to how all of the blocks fees are divied up between validators. +This creates many nice properties, for example it is possible to only rewarding validators who signed that block. + +\section{Additional add-ons} +\subsection{Commission Rates} +Commission rates are the idea that a validator can take a fixed $x\%$ cut of all of their received fees, before redistributing evenly to the constituent delegators. +This can easily be done as follows: + +In block $h$ a validator receives $f_h$ fees. +Instead of incrementing that validators ``total accrued fees this period variable" by $f_h$, it is instead incremented by $(1 - commission\_rate) * f_p$. +Then $commission\_rate * f_p$ is deposited directly to the validator's account. +This allows for efficient updates to a validator's commission rate every block if desired. +More generally, each validator could have a function which takes their fees as input, and outputs a set of outputs to pay these fees too. (i.e. x\% going to themselves, y\% to delegators, z\% burnt) + +\subsection{Slashing} +\label{ssec:slashing} +Slashing is distinct from withdrawals, since it lowers the stake of all of the delegator's by a fixed percentage. +Since no one is charged gas for slashes, a slash cannot iterate over all delegators. +Thus we can no longer just multiply by $x$ over the difference in stake. +This section describes a simple solution that should suffice for most chains needs. An asymptotically optimal solution is provided in section 2.4. +TODO: Consider removing this section in favor of just using the current section 2.4? + +The solution here is to instead store each period created by a slash in the validators state. +Then when withdrawing, you must iterate over all slashes between when you started and ended. +Suppose you delegated at period $0$, a y\% slash occured at period $2$, and your withdrawal creates period $4$. +Then you receive funds from periods $0$ to $2$ as normal. +The equations for funds you receive for periods $2$ to $4$ now uses $(1 - y)x$ for your stake instead of just $x$ stake. +When there are multiple slashes, you just account for the accumulated slash factor. + +In practice this will not really be an efficiency hit, as the number of slashes is expected to be 0 or 1 for most validators. +Validators that get slashed more will naturally lose their delegators. +A malicious validator that gets itself slashed many times would increase the gas to withdraw linearly, but the economic loss of funds due to the slashes is expected to far out-weigh the extra overhead the honest withdrawer must pay for due to the gas. +(TODO: frame that above sentence in terms of griefing factors, as thats more correct) + +\subsection{Inflation} +Inflation is the idea that we want every staked coin to create more staking tokens as time progresses. +The purpose being to drive down the relative worth of unstaked tokens. +Each block, every staked token should produce $x$ staking tokens as inflation, where $x$ is calculated from a function $inflation$ which takes state and the block information as input. +Let $x_i$ represent the evaluation of $inflation$ in the $i$th block. +The goal of this section is to auto-bond inflation in the fee distribution model without iteration. +This is done by preserving the invariant that every state entry contains the rewards one would have if they had bonded one stake at genesis until that corresponding block. + +In state a variable should be kept for the number of tokens one would have now due to inflation, +given that they bonded one token at genesis. +This is $\prod_{0}^{now} (1 + x_i)$. +Each period now stores this total inflation product along with what it already stores per-period. + +Let $R_i$ be the fee rewards in block $i$, and $n_i$ be the total amount bonded to that validator in that block. +The correct amount of rewards which 1 token at genesis should have now is: +$$Reward(now) = \sum_{i = 0}^{now}\left(\prod_{j = 0}^{i} 1 + x_j \right) * \frac{R_i}{n_i}$$ +The term in the sum is the amount of stake one stake becomes due to inflation, multiplied by the amount of fees per stake. + +Now we cast this into the period frame of view. +Recall that we build the rewards by creating a state entry for the rewards of the previous period, and keeping track of the rewards within this period. +Thus we first define the correct amount of rewards for each successive period, proving correctness of this via induction. +We then show that the state entry that gets efficiently built up block by block is equal to this value for the latest period. + +Let $start, end$ denote the start/end of a period. + +Suppose that $\forall f > 0$, $Reward(end(f))$ is correctly constructed as +$$Reward(end(f)) = Reward(end(f-1)) + \sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ +and that for $f = 0$, $Reward(end(0)) = 0$. +(With period 1 being defined as the period that has the first bond into it) +It must be shown that assuming the supposition $\forall f \leq f_0$, $$Reward(end(f_0 + 1)) = Reward(end(f_0)) + \sum_{i = start(f_0 + 1)}^{end(f_0 + 1)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ +Using the definition of $Reward$, it follows that: +$$\sum_{i = 0}^{end(f_0 + 1)}\left(\prod_{j = 0}^{i} 1 + x_j \right) * \frac{R_i}{n_i} = \sum_{i = 0}^{end(f_0)}\left(\prod_{j = 0}^{i} 1 + x_j \right) * \frac{R_i}{n_i} + \sum_{i = start(f_0 + 1)}^{end(f_0 + 1)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ + +Since the first summation on the right hand side is $Reward(end(f_0))$, the supposition is proven true. +Consequently, the reward for just period $f$ adjusted for the amount of inflation 1 token at genesis would produce, is: +$$\sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ + +TODO: make this proof + pre-amble less verbose, and just wrap up into a lemma. +Maybe just leave this proof or the last part to the reader, since it easily follows from summation bounds. + +Now note that +$$\sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i} = \left(\prod_{j = 0}^{end(f - 1)} 1 + x_j \right)\sum_{i = start(f)}^{end(f)}\left(\prod_{j = start(f)}^{i} 1 + x_j \right) \frac{R_i}{n_i}$$ +By definition of period, and inflation being applied every block, \\ +$n_i = n_{start(f)}\left(\prod_{j = start(f)}^{i} 1 + x_j \right)$. This cancels out the product in the summation, therefore +$$\sum_{i = start(f)}^{end(f)}\left(\prod_{j = 0}^{i} 1 + x_j \right) \frac{R_i}{n_i} = \left(\prod_{j = 0}^{end(f - 1)} 1 + x_j \right)\frac{\sum_{i = start(f)}^{end(f)}R_i}{n_{start(f)}}$$ + +Thus every block, each validator just has to add the total amount of fees (The $R_i$ term) that goes to delegates to some per-period term. +When creating a new period, $n_{start(f)}$ can be cached in state, and the product is already stored in the previous periods state entry. +You then get the next period's $n_{start(f)}$ from the consensus' power entry for this validator. +This is thus extremely efficient per block. + +When withdrawing, you take the difference as before, +which yields the amount of rewards you would have obtained with $(\prod_0^{begin\ bonding\ period}1 + x)$ stake from the block you began bonding at until now. +$(\prod_0^{begin\ bonding\ period}1 + x)$ is known, since its included in the state entry for when you bonded. +You then divide the entitled fees by $(\prod_0^{begin\ bonding\ period}1 + x)$ to normalize it to being the amount of rewards you're entitled to from 1 stake at that block to now. +Then as before, you multiply by the amount of stake you had initially bonded. +\\TODO: (Does the difference equating to that make sense, or should it be shown explicitly) +\\TODO: Does this need to explain how the originally bonded tokens are refunded, or is that clear? + +The inflation function could vary per block, +and per validator if ever a need rose. +If the inflation rate is the same for everyone then there can be a single global store for the entries corresponding to the product of inflations. +Inflation creation can trivially be epoched as long as inflation isn't required within the epoch, through changes to the $inflation$ function. + +\subsection{Withdrawing with no iteration over slashes} +Notice that a slash is the same as a negative inflation rate for a validator in one block. +For example a $20\%$ slash is equivalent to a $-20\%$ inflation for a validator in a block. +Given correctness of auto-bonding inflation with different inflation rates per-validator, +it follows that handling slashes can be correctly done by simply subtracting the validators inflation factor in that block to be the negative of the slash factor. +This significantly simplifies the withdrawal procedure. + +\subsection{Auto bonding fees} +TODO: Fill this out. +Core idea: you use the same mechanism as previously, but you just don't take that optimization with $n_{i}$ and the $n_{start}$ relation. +Fairly simple to do. + +\subsection{Delegation updates} +Updating your delegation amount is equivalent to withdrawing earned rewards and a fully independent new delegation occurring in the same block. +The same applies for redelegation. +From the view of fee distribution, partial redelegation is the same as a delegation update + a new delegation. + +\subsection{Jailing / being kicked out of the validator set} +This basically requires no change. +In each block you only iterate over the currently bonded validators. +So you simply don't update the "total accrued fees this period" variable for jailed / non-bonded validators. +Withdrawing requires \textit{no} special casing here! + +\section{State Requirements} +State entries can be pruned quite effectively. +Suppose for the sake of exposition that there is at most one delegation / withdrawal to a particular validator in any given block. +Then each delegation is responsible for one addition to state. +Only the next period, and this delegator's withdrawal could depend on this entry. Thus once this delegator withdraws, this state entry can be pruned. +For the entry created by the delegator's withdrawal, that is only required by the creation of the next period. +Thus once the next period is created, that withdrawal's period can be deleted. + +This can be easily adapted to the case where there are multiple delegations / withdrawals per block, by maintaining a reference count in each period starting state entry. + +The slash entries for a validator can only be pruned when all of that validator's delegators have their bonding period starting after the slash. +This seems ineffective to keep track of, thus it is not worth it. +Each slash should instead remain in state until the validator unbonds and all delegators have their fees withdrawn. + +\section{Implementers Considerations} +TODO: Convert this section into a proper conclusion + +This is an extremely simple scheme with many nice benefits. +\begin{itemize} + \item The overhead per block is a simple iteration over the bonded validator set, which occurs anyway. (Thus it can be implemented ``for-free" with an optimized code-base) + \item Withdrawing earned fees only requires iterating over slashes since when you bonded. (Which is a negligible iteration) + \item There are no approximations in any of the calculations. (modulo minor errata resulting from fixed precision decimals used in divisions) + \item Supports arbitrary inflation models. (Thus could even vary upon block signers) + \item Supports arbitrary fee distribution amongst the validator set. (Thus can account for things like only online validators get fees, which has important incentivization impacts) + \item The above two can change on a live chain with no issues. + \item Validator commission rates can be changed every block + \item The simplicity of this scheme lends itself well to implementation +\end{itemize} + +Thus this scheme has efficiency improvements, simplicity improvements, and expressiveness improvements over the currently proposed schemes. With a correct fee distribution amongst the validator set, this solves the existing problem where one could withhold their signature for risk-free gain. + +\section{TO DOs} + +\begin{itemize} + \item A global fee pool can be described. + \item Mention storage optimization for how to prune slashing entries in the uniform inflation and iteration over slashing case + \item Add equation numbers + \item perhaps re-organize so that the no iteration + \item Section on decimal precision considerations (would unums help?), and mitigating errors in calculation with floats and decimals. -- This probably belongs in a corrollary markdown file in the implementation + \item Consider indicating that the withdraw action need not be a tx type and could instead happen 'transparently' when more coins are needed, if a chain desired this for UX / p2p efficiency. +\end{itemize} + + +\end{document} diff --git a/versioned_docs/version-0.47/integrate/spec/reserve-pool/README.md b/versioned_docs/version-0.47/integrate/spec/reserve-pool/README.md new file mode 100644 index 000000000..6912ab0c4 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/reserve-pool/README.md @@ -0,0 +1,4 @@ +# Reserve Pool + +The reserve pool is the pool of collected funds for use by governance taken via the `CommunityTax`. +Currently with the Cosmos SDK, tokens collected by the CommunityTax are accounted for but unspendable. diff --git a/versioned_docs/version-0.47/integrate/spec/store/README.md b/versioned_docs/version-0.47/integrate/spec/store/README.md new file mode 100644 index 000000000..c53d69c67 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/spec/store/README.md @@ -0,0 +1,235 @@ +# Store + +The store package defines the interfaces, types and abstractions for Cosmos SDK +modules to read and write to Merkleized state within a Cosmos SDK application. +The store package provides many primitives for developers to use in order to +work with both state storage and state commitment. Below we describe the various +abstractions. + +## Types + +### `Store` + +The bulk of the store interfaces are defined [here](https://github.com/cosmos/cosmos-sdk/blob/main/store/types/store.go), +where the base primitive interface, for which other interfaces build off of, is +the `Store` type. The `Store` interface defines the ability to tell the type of +the implementing store and the ability to cache wrap via the `CacheWrapper` interface. + +### `CacheWrapper` & `CacheWrap` + +One of the most important features a store has the ability to perform is the +ability to cache wrap. Cache wrapping is essentially the underlying store wrapping +itself within another store type that performs caching for both reads and writes +with the ability to flush writes via `Write()`. + +### `KVStore` & `CacheKVStore` + +One of the most important interfaces that both developers and modules interface +with, which also provides the basis of most state storage and commitment operations, +is the `KVStore`. The `KVStore` interface provides basic CRUD abilities and +prefix-based iteration, including reverse iteration. + +Typically, each module has it's own dedicated `KVStore` instance, which it can +get access to via the `sdk.Context` and the use of a pointer-based named key -- +`KVStoreKey`. The `KVStoreKey` provides pseudo-OCAP. How a exactly a `KVStoreKey` +maps to a `KVStore` will be illustrated below through the `CommitMultiStore`. + +Note, a `KVStore` cannot directly commit state. Instead, a `KVStore` can be wrapped +by a `CacheKVStore` which extends a `KVStore` and provides the ability for the +caller to execute `Write()` which commits state to the underlying state storage. +Note, this doesn't actually flush writes to disk as writes are held in memory +until `Commit()` is called on the `CommitMultiStore`. + +### `CommitMultiStore` + +The `CommitMultiStore` interface exposes the the top-level interface that is used +to manage state commitment and storage by an SDK application and abstracts the +concept of multiple `KVStore`s which are used by multiple modules. Specifically, +it supports the following high-level primitives: + +* Allows for a caller to retrieve a `KVStore` by providing a `KVStoreKey`. +* Exposes pruning mechanisms to remove state pinned against a specific height/version + in the past. +* Allows for loading state storage at a particular height/version in the past to + provide current head and historical queries. +* Provides the ability to rollback state to a previous height/version. +* Provides the ability to to load state storage at a particular height/version + while also performing store upgrades, which are used during live hard-fork + application state migrations. +* Provides the ability to commit all current accumulated state to disk and performs + Merkle commitment. + +## Implementation Details + +While there are many interfaces that the `store` package provides, there is +typically a core implementation for each main interface that modules and +developers interact with that are defined in the Cosmos SDK. + +### `iavl.Store` + +The `iavl.Store` provides the core implementation for state storage and commitment +by implementing the following interfaces: + +* `KVStore` +* `CommitStore` +* `CommitKVStore` +* `Queryable` +* `StoreWithInitialVersion` + +It allows for all CRUD operations to be performed along with allowing current +and historical state queries, prefix iteration, and state commitment along with +Merkle proof operations. The `iavl.Store` also provides the ability to remove +historical state from the state commitment layer. + +An overview of the IAVL implementation can be found [here](https://github.com/cosmos/iavl/blob/master/docs/overview.md). +It is important to note that the IAVL store provides both state commitment and +logical storage operations, which comes with drawbacks as there are various +performance impacts, some of which are very drastic, when it comes to the +operations mentioned above. + +When dealing with state management in modules and clients, the Cosmos SDK provides +various layers of abstractions or "store wrapping", where the `iavl.Store` is the +bottom most layer. When requesting a store to perform reads or writes in a module, +the typical abstraction layer in order is defined as follows: + +```text +iavl.Store <- cachekv.Store <- gaskv.Store <- cachemulti.Store <- rootmulti.Store +``` + +### Concurrent use of IAVL store + +The tree under `iavl.Store` is not safe for concurrent use. It is the +responsibility of the caller to ensure that concurrent access to the store is +not performed. + +The main issue with concurrent use is when data is written at the same time as +it's being iterated over. Doing so will cause a irrecoverable fatal error because +of concurrent reads and writes to an internal map. + +Although it's not recommended, you can iterate through values while writing to +it by disabling "FastNode" **without guarantees that the values being written will +be returned during the iteration** (if you need this, you might want to reconsider +the design of your application). This is done by setting `iavl-disable-fastnode` +to `true` in the config TOML file. + +### `cachekv.Store` + +The `cachekv.Store` store wraps an underlying `KVStore`, typically a `iavl.Store` +and contains an in-memory cache for storing pending writes to underlying `KVStore`. +`Set` and `Delete` calls are executed on the in-memory cache, whereas `Has` calls +are proxied to the underlying `KVStore`. + +One of the most important calls to a `cachekv.Store` is `Write()`, which ensures +that key-value pairs are written to the underlying `KVStore` in a deterministic +and ordered manner by sorting the keys first. The store keeps track of "dirty" +keys and uses these to determine what keys to sort. In addition, it also keeps +track of deleted keys and ensures these are also removed from the underlying +`KVStore`. + +The `cachekv.Store` also provides the ability to perform iteration and reverse +iteration. Iteration is performed through the `cacheMergeIterator` type and uses +both the dirty cache and underlying `KVStore` to iterate over key-value pairs. + +Note, all calls to CRUD and iteration operations on a `cachekv.Store` are thread-safe. + +### `gaskv.Store` + +The `gaskv.Store` store provides a simple implementation of a `KVStore`. +Specifically, it just wraps an existing `KVStore`, such as a cache-wrapped +`iavl.Store`, and incurs configurable gas costs for CRUD operations via +`ConsumeGas()` calls defined on the `GasMeter` which exists in a `sdk.Context` +and then proxies the underlying CRUD call to the underlying store. Note, the +`GasMeter` is reset on each block. + +### `cachemulti.Store` & `rootmulti.Store` + +The `rootmulti.Store` acts as an abstraction around a series of stores. Namely, +it implements the `CommitMultiStore` an `Queryable` interfaces. Through the +`rootmulti.Store`, an SDK module can request access to a `KVStore` to perform +state CRUD operations and queries by holding access to a unique `KVStoreKey`. + +The `rootmulti.Store` ensures these queries and state operations are performed +through cached-wrapped instances of `cachekv.Store` which is described above. The +`rootmulti.Store` implementation is also responsible for committing all accumulated +state from each `KVStore` to disk and returning an application state Merkle root. + +Queries can be performed to return state data along with associated state +commitment proofs for both previous heights/versions and the current state root. +Queries are routed based on store name, i.e. a module, along with other parameters +which are defined in `abci.RequestQuery`. + +The `rootmulti.Store` also provides primitives for pruning data at a given +height/version from state storage. When a height is committed, the `rootmulti.Store` +will determine if other previous heights should be considered for removal based +on the operator's pruning settings defined by `PruningOptions`, which defines +how many recent versions to keep on disk and the interval at which to remove +"staged" pruned heights from disk. During each interval, the staged heights are +removed from each `KVStore`. Note, it is up to the underlying `KVStore` +implementation to determine how pruning is actually performed. The `PruningOptions` +are defined as follows: + +```go +type PruningOptions struct { + // KeepRecent defines how many recent heights to keep on disk. + KeepRecent uint64 + + // Interval defines when the pruned heights are removed from disk. + Interval uint64 + + // Strategy defines the kind of pruning strategy. See below for more information on each. + Strategy PruningStrategy +} +``` + +The Cosmos SDK defines a preset number of pruning "strategies": `default`, `everything` +`nothing`, and `custom`. + +It is important to note that the `rootmulti.Store` considers each `KVStore` as a +separate logical store. In other words, they do not share a Merkle tree or +comparable data structure. This means that when state is committed via +`rootmulti.Store`, each store is committed in sequence and thus is not atomic. + +In terms of store construction and wiring, each Cosmos SDK application contains +a `BaseApp` instance which internally has a reference to a `CommitMultiStore` +that is implemented by a `rootmulti.Store`. The application then registers one or +more `KVStoreKey` that pertain to a unique module and thus a `KVStore`. Through +the use of an `sdk.Context` and a `KVStoreKey`, each module can get direct access +to it's respective `KVStore` instance. + +Example: + +```go +func NewApp(...) Application { + // ... + + bApp := baseapp.NewBaseApp(appName, logger, db, txConfig.TxDecoder(), baseAppOptions...) + bApp.SetCommitMultiStoreTracer(traceStore) + bApp.SetVersion(version.Version) + bApp.SetInterfaceRegistry(interfaceRegistry) + + // ... + + keys := sdk.NewKVStoreKeys(...) + transientKeys := sdk.NewTransientStoreKeys(...) + memKeys := sdk.NewMemoryStoreKeys(...) + + // ... + + // initialize stores + app.MountKVStores(keys) + app.MountTransientStores(transientKeys) + app.MountMemoryStores(memKeys) + + // ... +} +``` + +The `rootmulti.Store` itself can be cache-wrapped which returns an instance of a +`cachemulti.Store`. For each block, `BaseApp` ensures that the proper abstractions +are created on the `CommitMultiStore`, i.e. ensuring that the `rootmulti.Store` +is cached-wrapped and uses the resulting `cachemulti.Store` to be set on the +`sdk.Context` which is then used for block and transaction execution. As a result, +all state mutations due to block and transaction execution are actually held +ephemerally until `Commit()` is called by the ABCI client. This concept is further +expanded upon when the AnteHandler is executed per transaction to ensure state +is not committed for transactions that failed CheckTx. diff --git a/versioned_docs/version-0.47/integrate/tooling/00-protobuf.md b/versioned_docs/version-0.47/integrate/tooling/00-protobuf.md new file mode 100644 index 000000000..42e9d3bf0 --- /dev/null +++ b/versioned_docs/version-0.47/integrate/tooling/00-protobuf.md @@ -0,0 +1,113 @@ +--- +sidebar_position: 1 +--- + +# Protocol Buffers + +It is known that Cosmos SDK uses protocol buffers extensively, this docuemnt is meant to provide a guide on how it is used in the cosmos-sdk. + +To generate the proto file, the Cosmos SDK uses a docker image, this image is provided to all to use as well. The latest version is `ghcr.io/cosmos/proto-builder:0.11.2` + +Below is the example of the Cosmos SDK's commands for generating, linting, and formatting protobuf files that can be reused in any applications makefile. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/Makefile#L411-L432 +``` + +The script used to generate the protobuf files can be found in the `scripts/` directory. + +```shell reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/scripts/protocgen.sh#L1-L37 +``` + +## Buf + +[Buf](https://buf.build) is a protobuf tool that abstracts the needs to use the complicated `protoc` toolchain on top of various other things that ensure you are using protobuf in accordance with the majority of the ecosystem. Within the cosmos-sdk repository there are a few files that have a buf prefix. Lets start with the top level and then dive into the various directories. + +### Workspace + +At the root level directory a workspace is defined using [buf workspaces](https://docs.buf.build/configuration/v1/buf-work-yaml). This helps if there are one or more protobuf containing directories in your project. + +Cosmos SDK example: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/buf.work.yaml#L6-L9 +``` + +### Proto Directory + +Next is the `proto/` directory where all of our protobuf files live. In here there are many different buf files defined each serving a different purpose. + +```bash +├── README.md +├── buf.gen.gogo.yaml +├── buf.gen.pulsar.yaml +├── buf.gen.swagger.yaml +├── buf.lock +├── buf.md +├── buf.yaml +├── cosmos +└── tendermint +``` + +The above diagram all the files and directories within the Cosmos SDK `proto/` directory. + +#### `buf.gen.gogo.yaml` + +`buf.gen.gogo.yaml` defines how the protobuf files should be generated for use with in the module. This file uses [gogoproto](https://github.com/gogo/protobuf), a separate generator from the google go-proto generator that makes working with various objects more ergonomic, and it has more performant encode and decode steps + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.gen.gogo.yaml#L1-L9 +``` + +:::tip +Example of how to define `gen` files can be found [here](https://docs.buf.build/tour/generate-go-code) +::: + +#### `buf.gen.pulsar.yaml` + +`buf.gen.pulsar.yaml` defines how protobuf files should be generated using the [new golang apiv2 of protobuf](https://go.dev/blog/protobuf-apiv2). This generator is used instead of the google go-proto generator because it has some extra helpers for Cosmos SDK applications and will have more performant encode and decode than the google go-proto generator. You can follow the development of this generator [here](https://github.com/cosmos/cosmos-proto). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.gen.pulsar.yaml#L1-L18 +``` + +:::tip +Example of how to define `gen` files can be found [here](https://docs.buf.build/tour/generate-go-code) +::: + +#### `buf.gen.swagger.yaml` + +`buf.gen.swagger.yaml` generates the swagger documentation for the query and messages of the chain. This will only define the REST API end points that were defined in the query and msg servers. You can find examples of this [here](https://github.com/cosmos/cosmos-sdk/blob/main/proto/cosmos/bank/v1beta1/query.proto#L19) + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.gen.swagger.yaml#L1-L6 +``` + +:::tip +Example of how to define `gen` files can be found [here](https://docs.buf.build/tour/generate-go-code) +::: + +#### `buf.lock` + +This is a autogenerated file based off the dependencies required by the `.gen` files. There is no need to copy the current one. If you depend on cosmos-sdk proto definitions a new entry for the Cosmos SDK will need to be provided. The dependency you will need to use is `buf.build/cosmos/cosmos-sdk`. + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.lock#L1-L16 +``` + +#### `buf.yaml` + +`buf.yaml` defines the [name of your package](https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.yaml#L3), which [breakage checker](https://docs.buf.build/tour/detect-breaking-changes) to use and how to [lint your protobuf files](https://docs.buf.build/tour/lint-your-api). + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/proto/buf.yaml#L1-L24 +``` + +We use a variety of linters for the Cosmos SDK protobuf files. The repo also checks this in ci. + +A reference to the github actions can be found [here](https://github.com/cosmos/cosmos-sdk/blob/main/.github/workflows/proto.yml#L1-L32) + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/main/.github/workflows/proto.yml#L1-L32 +``` diff --git a/versioned_docs/version-0.47/integrate/tooling/README.md b/versioned_docs/version-0.47/integrate/tooling/README.md new file mode 100644 index 000000000..c8b3af88d --- /dev/null +++ b/versioned_docs/version-0.47/integrate/tooling/README.md @@ -0,0 +1,11 @@ +--- +sidebar_position: 0 +--- + +# Tools + +This section provides documentation on various tooling used in development of a Cosmos SDK chain, operating a node and testing. + +* [Protocol Buffers](./00-protobuf.md) +* [Cosmovisor](./01-cosmovisor.md) +* [Depinject](./02-depinject.md) diff --git a/versioned_docs/version-0.47/integrate/tooling/_category_.json b/versioned_docs/version-0.47/integrate/tooling/_category_.json new file mode 100644 index 000000000..d91e08b5a --- /dev/null +++ b/versioned_docs/version-0.47/integrate/tooling/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Tooling", + "position": 9, + "link": null +} \ No newline at end of file diff --git a/versioned_docs/version-0.47/user/run-node/00-keyring.md b/versioned_docs/version-0.47/user/run-node/00-keyring.md new file mode 100644 index 000000000..2cb15b115 --- /dev/null +++ b/versioned_docs/version-0.47/user/run-node/00-keyring.md @@ -0,0 +1,134 @@ +--- +sidebar_position: 1 +--- + +# Setting up the keyring + +:::note Synopsis +This document describes how to configure and use the keyring and its various backends for an [**application**](../basics/00-app-anatomy.md). +::: + +The keyring holds the private/public keypairs used to interact with a node. For instance, a validator key needs to be set up before running the blockchain node, so that blocks can be correctly signed. The private key can be stored in different locations, called "backends", such as a file or the operating system's own key storage. + +## Available backends for the keyring + +Starting with the v0.38.0 release, Cosmos SDK comes with a new keyring implementation +that provides a set of commands to manage cryptographic keys in a secure fashion. The +new keyring supports multiple storage backends, some of which may not be available on +all operating systems. + +### The `os` backend + +The `os` backend relies on operating system-specific defaults to handle key storage +securely. Typically, an operating system's credential sub-system handles password prompts, +private keys storage, and user sessions according to the user's password policies. Here +is a list of the most popular operating systems and their respective passwords manager: + +* macOS: [Keychain](https://support.apple.com/en-gb/guide/keychain-access/welcome/mac) +* Windows: [Credentials Management API](https://docs.microsoft.com/en-us/windows/win32/secauthn/credentials-management) +* GNU/Linux: + * [libsecret](https://gitlab.gnome.org/GNOME/libsecret) + * [kwallet](https://api.kde.org/frameworks/kwallet/html/index.html) + +GNU/Linux distributions that use GNOME as default desktop environment typically come with +[Seahorse](https://wiki.gnome.org/Apps/Seahorse). Users of KDE based distributions are +commonly provided with [KDE Wallet Manager](https://userbase.kde.org/KDE_Wallet_Manager). +Whilst the former is in fact a `libsecret` convenient frontend, the latter is a `kwallet` +client. + +`os` is the default option since operating system's default credentials managers are +designed to meet users' most common needs and provide them with a comfortable +experience without compromising on security. + +The recommended backends for headless environments are `file` and `pass`. + +### The `file` backend + +The `file` backend more closely resembles the keybase implementation used prior to +v0.38.1. It stores the keyring encrypted within the app's configuration directory. This +keyring will request a password each time it is accessed, which may occur multiple +times in a single command resulting in repeated password prompts. If using bash scripts +to execute commands using the `file` option you may want to utilize the following format +for multiple prompts: + +```shell +# assuming that KEYPASSWD is set in the environment +$ gaiacli config keyring-backend file # use file backend +$ (echo $KEYPASSWD; echo $KEYPASSWD) | gaiacli keys add me # multiple prompts +$ echo $KEYPASSWD | gaiacli keys show me # single prompt +``` + +:::tip +The first time you add a key to an empty keyring, you will be prompted to type the password twice. +::: + +### The `pass` backend + +The `pass` backend uses the [pass](https://www.passwordstore.org/) utility to manage on-disk +encryption of keys' sensitive data and metadata. Keys are stored inside `gpg` encrypted files +within app-specific directories. `pass` is available for the most popular UNIX +operating systems as well as GNU/Linux distributions. Please refer to its manual page for +information on how to download and install it. + +:::tip +**pass** uses [GnuPG](https://gnupg.org/) for encryption. `gpg` automatically invokes the `gpg-agent` +daemon upon execution, which handles the caching of GnuPG credentials. Please refer to `gpg-agent` +man page for more information on how to configure cache parameters such as credentials TTL and +passphrase expiration. +::: + +The password store must be set up prior to first use: + +```shell +pass init +``` + +Replace `` with your GPG key ID. You can use your personal GPG key or an alternative +one you may want to use specifically to encrypt the password store. + +### The `kwallet` backend + +The `kwallet` backend uses `KDE Wallet Manager`, which comes installed by default on the +GNU/Linux distributions that ships KDE as default desktop environment. Please refer to +[KWallet Handbook](https://docs.kde.org/stable5/en/kdeutils/kwallet5/index.html) for more +information. + +### The `test` backend + +The `test` backend is a password-less variation of the `file` backend. Keys are stored +unencrypted on disk. + +**Provided for testing purposes only. The `test` backend is not recommended for use in production environments**. + +### The `memory` backend + +The `memory` backend stores keys in memory. The keys are immediately deleted after the program has exited. + +**Provided for testing purposes only. The `memory` backend is not recommended for use in production environments**. + +### Setting backend using the env variable + +You can set the keyring-backend using env variable: `BINNAME_KEYRING_BACKEND`. For example, if you binary name is `gaia-v5` then set: `export GAIA_V5_KEYRING_BACKEND=pass` + +## Adding keys to the keyring + +:::warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Applications developed using the Cosmos SDK come with the `keys` subcommand. For the purpose of this tutorial, we're running the `simd` CLI, which is an application built using the Cosmos SDK for testing and educational purposes. For more information, see [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp). + +You can use `simd keys` for help about the keys command and `simd keys [command] --help` for more information about a particular subcommand. + +To create a new key in the keyring, run the `add` subcommand with a `` argument. For the purpose of this tutorial, we will solely use the `test` backend, and call our new key `my_validator`. This key will be used in the next section. + +```bash +$ simd keys add my_validator --keyring-backend test + +# Put the generated address in a variable for later use. +MY_VALIDATOR_ADDRESS=$(simd keys show my_validator -a --keyring-backend test) +``` + +This command generates a new 24-word mnemonic phrase, persists it to the relevant backend, and outputs information about the keypair. If this keypair will be used to hold value-bearing tokens, be sure to write down the mnemonic phrase somewhere safe! + +By default, the keyring generates a `secp256k1` keypair. The keyring also supports `ed25519` keys, which may be created by passing the `--algo ed25519` flag. A keyring can of course hold both types of keys simultaneously, and the Cosmos SDK's `x/auth` module supports natively these two public key algorithms. diff --git a/versioned_docs/version-0.47/user/run-node/01-run-node.md b/versioned_docs/version-0.47/user/run-node/01-run-node.md new file mode 100644 index 000000000..a04038027 --- /dev/null +++ b/versioned_docs/version-0.47/user/run-node/01-run-node.md @@ -0,0 +1,192 @@ +--- +sidebar_position: 1 +--- + +# Running a Node + +:::note Synopsis +Now that the application is ready and the keyring populated, it's time to see how to run the blockchain node. In this section, the application we are running is called [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp), and its corresponding CLI binary `simd`. +::: + +:::note + +### Pre-requisite Readings + +* [Anatomy of a Cosmos SDK Application](../basics/00-app-anatomy.md) +* [Setting up the keyring](./00-keyring.md) + +::: + +## Initialize the Chain + +:::warning +Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. +::: + +Before actually running the node, we need to initialize the chain, and most importantly its genesis file. This is done with the `init` subcommand: + +```bash +# The argument is the custom username of your node, it should be human-readable. +simd init --chain-id my-test-chain +``` + +The command above creates all the configuration files needed for your node to run, as well as a default genesis file, which defines the initial state of the network. All these configuration files are in `~/.simapp` by default, but you can overwrite the location of this folder by passing the `--home` flag. + +The `~/.simapp` folder has the following structure: + +```bash +. # ~/.simapp + |- data # Contains the databases used by the node. + |- config/ + |- app.toml # Application-related configuration file. + |- config.toml # CometBFT-related configuration file. + |- genesis.json # The genesis file. + |- node_key.json # Private key to use for node authentication in the p2p protocol. + |- priv_validator_key.json # Private key to use as a validator in the consensus protocol. +``` + +## Updating Some Default Settings + +If you want to change any field values in configuration files (for ex: genesis.json) you can use `jq` ([installation](https://stedolan.github.io/jq/download/) & [docs](https://stedolan.github.io/jq/manual/#Assignment)) & `sed` commands to do that. Few examples are listed here. + +```bash +# to change the chain-id +jq '.chain_id = "testing"' genesis.json > temp.json && mv temp.json genesis.json + +# to enable the api server +sed -i '/\[api\]/,+3 s/enable = false/enable = true/' app.toml + +# to change the voting_period +jq '.app_state.gov.voting_params.voting_period = "600s"' genesis.json > temp.json && mv temp.json genesis.json + +# to change the inflation +jq '.app_state.mint.minter.inflation = "0.300000000000000000"' genesis.json > temp.json && mv temp.json genesis.json +``` + +### Client Interaction + +When instantiating a node, GRPC and REST are defaulted to localhost to avoid unknown exposure of your node to the public. It is recommended to not expose these endpoints without a proxy that can handle load balancing or authentication is setup between your node and the public. + +:::tip +A commonly used tool for this is [nginx](https://nginx.org). +::: + + +## Adding Genesis Accounts + +Before starting the chain, you need to populate the state with at least one account. To do so, first [create a new account in the keyring](./00-keyring.md#adding-keys-to-the-keyring) named `my_validator` under the `test` keyring backend (feel free to choose another name and another backend). + +Now that you have created a local account, go ahead and grant it some `stake` tokens in your chain's genesis file. Doing so will also make sure your chain is aware of this account's existence: + +```bash +simd genesis add-genesis-account $MY_VALIDATOR_ADDRESS 100000000000stake +``` + +Recall that `$MY_VALIDATOR_ADDRESS` is a variable that holds the address of the `my_validator` key in the [keyring](./00-keyring.md#adding-keys-to-the-keyring). Also note that the tokens in the Cosmos SDK have the `{amount}{denom}` format: `amount` is is a 18-digit-precision decimal number, and `denom` is the unique token identifier with its denomination key (e.g. `atom` or `uatom`). Here, we are granting `stake` tokens, as `stake` is the token identifier used for staking in [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/main/simapp). For your own chain with its own staking denom, that token identifier should be used instead. + +Now that your account has some tokens, you need to add a validator to your chain. Validators are special full-nodes that participate in the consensus process (implemented in the [underlying consensus engine](../intro/02-sdk-app-architecture.md#cometbft)) in order to add new blocks to the chain. Any account can declare its intention to become a validator operator, but only those with sufficient delegation get to enter the active set (for example, only the top 125 validator candidates with the most delegation get to be validators in the Cosmos Hub). For this guide, you will add your local node (created via the `init` command above) as a validator of your chain. Validators can be declared before a chain is first started via a special transaction included in the genesis file called a `gentx`: + +```bash +# Create a gentx. +simd genesis gentx my_validator 100000000stake --chain-id my-test-chain --keyring-backend test + +# Add the gentx to the genesis file. +simd genesis collect-gentxs +``` + +A `gentx` does three things: + +1. Registers the `validator` account you created as a validator operator account (i.e. the account that controls the validator). +2. Self-delegates the provided `amount` of staking tokens. +3. Link the operator account with a CometBFT node pubkey that will be used for signing blocks. If no `--pubkey` flag is provided, it defaults to the local node pubkey created via the `simd init` command above. + +For more information on `gentx`, use the following command: + +```bash +simd genesis gentx --help +``` + +## Configuring the Node Using `app.toml` and `config.toml` + +The Cosmos SDK automatically generates two configuration files inside `~/.simapp/config`: + +* `config.toml`: used to configure the CometBFT, learn more on [CometBFT's documentation](https://docs.cometbft.com/v0.37/core/configuration), +* `app.toml`: generated by the Cosmos SDK, and used to configure your app, such as state pruning strategies, telemetry, gRPC and REST servers configuration, state sync... + +Both files are heavily commented, please refer to them directly to tweak your node. + +One example config to tweak is the `minimum-gas-prices` field inside `app.toml`, which defines the minimum gas prices the validator node is willing to accept for processing a transaction. Depending on the chain, it might be an empty string or not. If it's empty, make sure to edit the field with some value, for example `10token`, or else the node will halt on startup. For the purpose of this tutorial, let's set the minimum gas price to 0: + +```toml + # The minimum gas prices a validator is willing to accept for processing a + # transaction. A transaction's fees must meet the minimum of any denomination + # specified in this config (e.g. 0.25token1;0.0001token2). + minimum-gas-prices = "0stake" +``` + +## Run a Localnet + +Now that everything is set up, you can finally start your node: + +```bash +simd start +``` + +You should see blocks come in. + +The previous command allow you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time, and see how consensus happens between them. + +The naive way would be to run the same commands again in separate terminal windows. This is possible, however in the Cosmos SDK, we leverage the power of [Docker Compose](https://docs.docker.com/compose/) to run a localnet. If you need inspiration on how to set up your own localnet with Docker Compose, you can have a look at the Cosmos SDK's [`docker-compose.yml`](https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/docker-compose.yml). + +## Logging + +Logging provides a way to see what is going on with a node. By default the info level is set. This is a global level and all info logs will be outputted to the terminal. If you would like to filter specific logs to the terminal instead of all, then setting `module:log_level` is how this can work. + +Example: + +In config.toml: + +```toml +log_level: "state:info,p2p:info,consensus:info,x/staking:info,x/ibc:info,*error" +``` + +## State Sync + +State sync is the act in which a node syncs the latest or close to the latest state of a blockchain. This is useful for users who don't want to sync all the blocks in history. Read more in [CometBFT documentation](https://docs.cometbft.com/v0.37/core/state-sync). + +State sync works thanks to snapshots. Read how the SDK handles snapshots [here](https://github.com/cosmos/cosmos-sdk/blob/825245d/store/snapshots/README.md). + +### Local State Sync + +Local state sync work similar to normal state sync except that it works off a local snapshot of state instead of one provided via the p2p network. The steps to start local state sync are similar to normal state sync with a few different designs. + +1. As mentioned in https://docs.cometbft.com/v0.37/core/state-sync, one must set a height and hash in the config.toml along with a few rpc servers (the afromentioned link has instructions on how to do this). +2. Run ` ` to restore a local snapshot (note: first load it from a file with the *load* command). +3. Bootsrapping Comet state in order to start the node after the snapshot has been ingested. This can be done with the bootstrap command ` comet bootstrap-state` + +### Snapshots Commands + +The Cosmos SDK provides commands for managing snapshots. +These commands can be added in an app with the following snippet in `cmd//root.go`: + +```go +import ( + "github.com/cosmos/cosmos-sdk/client/snapshot" +) + +func initRootCmd(/* ... */) { + // ... + rootCmd.AddCommand( + snapshot.Cmd(appCreator), + ) +} +``` + +Then following commands are available at ` snapshots [command]`: + +* **list**: list local snapshots +* **load**: Load a snapshot archive file into snapshot store +* **restore**: Restore app state from local snapshot +* **export**: Export app state to snapshot store +* **dump**: Dump the snapshot as portable archive format +* **delete**: Delete a local snapshot diff --git a/versioned_docs/version-0.47/user/run-node/02-interact-node.md b/versioned_docs/version-0.47/user/run-node/02-interact-node.md new file mode 100644 index 000000000..aaade7bce --- /dev/null +++ b/versioned_docs/version-0.47/user/run-node/02-interact-node.md @@ -0,0 +1,291 @@ +--- +sidebar_position: 1 +--- + +# Interacting with the Node + +:::note Synopsis +There are multiple ways to interact with a node: using the CLI, using gRPC or using the REST endpoints. +::: + +:::note + +### Pre-requisite Readings + +* [gRPC, REST and CometBFT Endpoints](../core/06-grpc_rest.md) +* [Running a Node](./01-run-node.md) + +::: + +## Using the CLI + +Now that your chain is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command: + +```bash +simd query bank balances $MY_VALIDATOR_ADDRESS +``` + +You should see the current balance of the account you created, equal to the original balance of `stake` you granted it minus the amount you delegated via the `gentx`. Now, create a second account: + +```bash +simd keys add recipient --keyring-backend test + +# Put the generated address in a variable for later use. +RECIPIENT=$(simd keys show recipient -a --keyring-backend test) +``` + +The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000000stake --chain-id my-test-chain --keyring-backend test + +# Check that the recipient account did receive the tokens. +simd query bank balances $RECIPIENT +``` + +Finally, delegate some of the stake tokens sent to the `recipient` account to the validator: + +```bash +simd tx staking delegate $(simd keys show my_validator --bech val -a --keyring-backend test) 500stake --from recipient --chain-id my-test-chain --keyring-backend test + +# Query the total delegations to `validator`. +simd query staking delegations-to $(simd keys show my_validator --bech val -a --keyring-backend test) +``` + +You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account. + +## Using gRPC + +The Protobuf ecosystem developed tools for different use cases, including code-generation from `*.proto` files into various languages. These tools allow the building of clients easily. Often, the client connection (i.e. the transport) can be plugged and replaced very easily. Let's explore one of the most popular transport: [gRPC](../core/06-grpc_rest.md). + +Since the code generation library largely depends on your own tech stack, we will only present three alternatives: + +* `grpcurl` for generic debugging and testing, +* programmatically via Go, +* CosmJS for JavaScript/TypeScript developers. + +### grpcurl + +[grpcurl](https://github.com/fullstorydev/grpcurl) is like `curl` but for gRPC. It is also available as a Go library, but we will use it only as a CLI command for debugging and testing purposes. Follow the instructions in the previous link to install it. + +Assuming you have a local node running (either a localnet, or connected a live network), you should be able to run the following command to list the Protobuf services available (you can replace `localhost:9000` by the gRPC server endpoint of another node, which is configured under the `grpc.address` field inside [`app.toml`](../run-node/01-run-node.md#configuring-the-node-using-apptoml)): + +```bash +grpcurl -plaintext localhost:9090 list +``` + +You should see a list of gRPC services, like `cosmos.bank.v1beta1.Query`. This is called reflection, which is a Protobuf endpoint returning a description of all available endpoints. Each of these represents a different Protobuf service, and each service exposes multiple RPC methods you can query against. + +In order to get a description of the service you can run the following command: + +```bash +grpcurl -plaintext \ + localhost:9090 \ + describe cosmos.bank.v1beta1.Query # Service we want to inspect +``` + +It's also possible to execute an RPC call to query the node for information: + +```bash +grpcurl \ + -plaintext \ + -d "{\"address\":\"$MY_VALIDATOR_ADDRESS\"}" \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using grpcurl + +You may also query for historical data by passing some [gRPC metadata](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) to the query: the `x-cosmos-block-height` metadata should contain the block to query. Using grpcurl as above, the command looks like: + +```bash +grpcurl \ + -plaintext \ + -H "x-cosmos-block-height: 123" \ + -d "{\"address\":\"$MY_VALIDATOR_ADDRESS\"}" \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Programmatically via Go + +The following snippet shows how to query the state using gRPC inside a Go program. The idea is to create a gRPC connection, and use the Protobuf-generated client code to query the gRPC server. + +#### Install Cosmos SDK + + +```bash +go get github.com/cosmos/cosmos-sdk@main +``` + +```go +package main + +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func queryState() error { + myAddress, err := sdk.AccAddressFromBech32("cosmos1...") // the my_validator or recipient address. + if err != nil { + return err + } + + // Create a connection to the gRPC server. + grpcConn, err := grpc.Dial( + "127.0.0.1:9090", // your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + // This instantiates a general gRPC codec which handles proto bytes. We pass in a nil interface registry + // if the request/response types contain interface instead of 'nil' you should pass the application specific codec. + grpc.WithDefaultCallOptions(grpc.ForceCodec(codec.NewProtoCodec(nil).GRPCCodec())), + ) + if err != nil { + return err + } + defer grpcConn.Close() + + // This creates a gRPC client to query the x/bank service. + bankClient := banktypes.NewQueryClient(grpcConn) + bankRes, err := bankClient.Balance( + context.Background(), + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "stake"}, + ) + if err != nil { + return err + } + + fmt.Println(bankRes.GetBalance()) // Prints the account balance + + return nil +} + +func main() { + if err := queryState(); err != nil { + panic(err) + } +} +``` + +You can replace the query client (here we are using `x/bank`'s) with one generated from any other Protobuf service. The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). + +#### Query for historical state using Go + +Querying for historical blocks is done by adding the block height metadata in the gRPC request. + +```go +package main + +import ( + "context" + "fmt" + + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func queryState() error { + myAddress, err := sdk.AccAddressFromBech32("cosmos1yerherx4d43gj5wa3zl5vflj9d4pln42n7kuzu") // the my_validator or recipient address. + if err != nil { + return err + } + + // Create a connection to the gRPC server. + grpcConn, err := grpc.Dial( + "127.0.0.1:9090", // your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + // This instantiates a general gRPC codec which handles proto bytes. We pass in a nil interface registry + // if the request/response types contain interface instead of 'nil' you should pass the application specific codec. + grpc.WithDefaultCallOptions(grpc.ForceCodec(codec.NewProtoCodec(nil).GRPCCodec())), + ) + if err != nil { + return err + } + defer grpcConn.Close() + + // This creates a gRPC client to query the x/bank service. + bankClient := banktypes.NewQueryClient(grpcConn) + + var header metadata.MD + _, err = bankClient.Balance( + metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // Add metadata to request + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "stake"}, + grpc.Header(&header), // Retrieve header from response + ) + if err != nil { + return err + } + blockHeight := header.Get(grpctypes.GRPCBlockHeightHeader) + + fmt.Println(blockHeight) // Prints the block height (12) + + return nil +} + +func main() { + if err := queryState(); err != nil { + panic(err) + } +} +``` + +### CosmJS + +CosmJS documentation can be found at [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs). As of January 2021, CosmJS documentation is still work in progress. + +## Using the REST Endpoints + +As described in the [gRPC guide](../core/06-grpc_rest.md), all gRPC services on the Cosmos SDK are made available for more convenient REST-based queries through gRPC-gateway. The format of the URL path is based on the Protobuf service method's full-qualified name, but may contain small customizations so that final URLs look more idiomatic. For example, the REST endpoint for the `cosmos.bank.v1beta1.Query/AllBalances` method is `GET /cosmos/bank/v1beta1/balances/{address}`. Request arguments are passed as query parameters. + +Note that the REST endpoints are not enabled by default. To enable them, edit the `api` section of your `~/.simapp/config/app.toml` file: + +```toml +# Enable defines if the API server should be enabled. +enable = true +``` + +As a concrete example, the `curl` command to make balances request is: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR_ADDRESS +``` + +Make sure to replace `localhost:1317` with the REST endpoint of your node, configured under the `api.address` field. + +The list of all available REST endpoints is available as a Swagger specification file, it can be viewed at `localhost:1317/swagger`. Make sure that the `api.swagger` field is set to true in your [`app.toml`](../run-node/01-run-node.md#configuring-the-node-using-apptoml) file. + +### Query for historical state using REST + +Querying for historical state is done using the HTTP header `x-cosmos-block-height`. For example, a curl command would look like: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + -H "x-cosmos-block-height: 123" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR_ADDRESS +``` + +Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. + +### Cross-Origin Resource Sharing (CORS) + +[CORS policies](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) are not enabled by default to help with security. If you would like to use the rest-server in a public environment we recommend you provide a reverse proxy, this can be done with [nginx](https://www.nginx.com/). For testing and development purposes there is an `enabled-unsafe-cors` field inside [`app.toml`](../run-node/01-run-node.md#configuring-the-node-using-apptoml). diff --git a/versioned_docs/version-0.47/user/run-node/03-txs.md b/versioned_docs/version-0.47/user/run-node/03-txs.md new file mode 100644 index 000000000..c8d2b610b --- /dev/null +++ b/versioned_docs/version-0.47/user/run-node/03-txs.md @@ -0,0 +1,387 @@ +--- +sidebar_position: 1 +--- + +# Generating, Signing and Broadcasting Transactions + +:::note Synopsis +This document describes how to generate an (unsigned) transaction, signing it (with one or multiple keys), and broadcasting it to the network. +::: + +## Using the CLI + +The easiest way to send transactions is using the CLI, as we have seen in the previous page when [interacting with a node](./02-interact-node.md#using-the-cli). For example, running the following command + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --keyring-backend test +``` + +will run the following steps: + +* generate a transaction with one `Msg` (`x/bank`'s `MsgSend`), and print the generated transaction to the console. +* ask the user for confirmation to send the transaction from the `$MY_VALIDATOR_ADDRESS` account. +* fetch `$MY_VALIDATOR_ADDRESS` from the keyring. This is possible because we have [set up the CLI's keyring](./00-keyring.md) in a previous step. +* sign the generated transaction with the keyring's account. +* broadcast the signed transaction to the network. This is possible because the CLI connects to the node's CometBFT RPC endpoint. + +The CLI bundles all the necessary steps into a simple-to-use user experience. However, it's possible to run all the steps individually too. + +### Generating a Transaction + +Generating a transaction can simply be done by appending the `--generate-only` flag on any `tx` command, e.g.: + +```bash +simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain --generate-only +``` + +This will output the unsigned transaction as JSON in the console. We can also save the unsigned transaction to a file (to be passed around between signers more easily) by appending `> unsigned_tx.json` to the above command. + +### Signing a Transaction + +Signing a transaction using the CLI requires the unsigned transaction to be saved in a file. Let's assume the unsigned transaction is in a file called `unsigned_tx.json` in the current directory (see previous paragraph on how to do that). Then, simply run the following command: + +```bash +simd tx sign unsigned_tx.json --chain-id my-test-chain --keyring-backend test --from $MY_VALIDATOR_ADDRESS +``` + +This command will decode the unsigned transaction and sign it with `SIGN_MODE_DIRECT` with `$MY_VALIDATOR_ADDRESS`'s key, which we already set up in the keyring. The signed transaction will be output as JSON to the console, and, as above, we can save it to a file by appending `--output-document signed_tx.json`. + +Some useful flags to consider in the `tx sign` command: + +* `--sign-mode`: you may use `amino-json` to sign the transaction using `SIGN_MODE_LEGACY_AMINO_JSON`, +* `--offline`: sign in offline mode. This means that the `tx sign` command doesn't connect to the node to retrieve the signer's account number and sequence, both needed for signing. In this case, you must manually supply the `--account-number` and `--sequence` flags. This is useful for offline signing, i.e. signing in a secure environment which doesn't have access to the internet. + +#### Signing with Multiple Signers + +:::warning +Please note that signing a transaction with multiple signers or with a multisig account, where at least one signer uses `SIGN_MODE_DIRECT`, is not yet possible. You may follow [this Github issue](https://github.com/cosmos/cosmos-sdk/issues/8141) for more info. +::: + +Signing with multiple signers is done with the `tx multisign` command. This command assumes that all signers use `SIGN_MODE_LEGACY_AMINO_JSON`. The flow is similar to the `tx sign` command flow, but instead of signing an unsigned transaction file, each signer signs the file signed by previous signer(s). The `tx multisign` command will append signatures to the existing transactions. It is important that signers sign the transaction **in the same order** as given by the transaction, which is retrievable using the `GetSigners()` method. + +For example, starting with the `unsigned_tx.json`, and assuming the transaction has 4 signers, we would run: + +```bash +# Let signer1 sign the unsigned tx. +simd tx multisign unsigned_tx.json signer_key_1 --chain-id my-test-chain --keyring-backend test > partial_tx_1.json +# Now signer1 will send the partial_tx_1.json to the signer2. +# Signer2 appends their signature: +simd tx multisign partial_tx_1.json signer_key_2 --chain-id my-test-chain --keyring-backend test > partial_tx_2.json +# Signer2 sends the partial_tx_2.json file to signer3, and signer3 can append his signature: +simd tx multisign partial_tx_2.json signer_key_3 --chain-id my-test-chain --keyring-backend test > partial_tx_3.json +``` + +### Broadcasting a Transaction + +Broadcasting a transaction is done using the following command: + +```bash +simd tx broadcast tx_signed.json +``` + +You may optionally pass the `--broadcast-mode` flag to specify which response to receive from the node: + +* `sync`: the CLI waits for a CheckTx execution response only. +* `async`: the CLI returns immediately (transaction might fail). + +### Encoding a Transaction + +In order to broadcast a transaction using the gRPC or REST endpoints, the transaction will need to be encoded first. This can be done using the CLI. + +Encoding a transaction is done using the following command: + +```bash +simd tx encode tx_signed.json +``` + +This will read the transaction from the file, serialize it using Protobuf, and output the transaction bytes as base64 in the console. + +### Decoding a Transaction + +The CLI can also be used to decode transaction bytes. + +Decoding a transaction is done using the following command: + +```bash +simd tx decode [protobuf-byte-string] +``` + +This will decode the transaction bytes and output the transaction as JSON in the console. You can also save the transaction to a file by appending `> tx.json` to the above command. + +## Programmatically with Go + +It is possible to manipulate transactions programmatically via Go using the Cosmos SDK's `TxBuilder` interface. + +### Generating a Transaction + +Before generating a transaction, a new instance of a `TxBuilder` needs to be created. Since the Cosmos SDK supports both Amino and Protobuf transactions, the first step would be to decide which encoding scheme to use. All the subsequent steps remain unchanged, whether you're using Amino or Protobuf, as `TxBuilder` abstracts the encoding mechanisms. In the following snippet, we will use Protobuf. + +```go +import ( + "github.com/cosmos/cosmos-sdk/simapp" +) + +func sendTx() error { + // Choose your codec: Amino or Protobuf. Here, we use Protobuf, given by the following function. + app := simapp.NewSimApp(...) + + // Create a new TxBuilder. + txBuilder := app.TxConfig().NewTxBuilder() + + // --snip-- +} +``` + +We can also set up some keys and addresses that will send and receive the transactions. Here, for the purpose of the tutorial, we will be using some dummy data to create keys. + +```go +import ( + "github.com/cosmos/cosmos-sdk/testutil/testdata" +) + +priv1, _, addr1 := testdata.KeyTestPubAddr() +priv2, _, addr2 := testdata.KeyTestPubAddr() +priv3, _, addr3 := testdata.KeyTestPubAddr() +``` + +Populating the `TxBuilder` can be done via its methods: + +```go reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/client/tx_config.go#L33-L50 +``` + +```go +import ( + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +func sendTx() error { + // --snip-- + + // Define two x/bank MsgSend messages: + // - from addr1 to addr3, + // - from addr2 to addr3. + // This means that the transactions needs two signers: addr1 and addr2. + msg1 := banktypes.NewMsgSend(addr1, addr3, types.NewCoins(types.NewInt64Coin("atom", 12))) + msg2 := banktypes.NewMsgSend(addr2, addr3, types.NewCoins(types.NewInt64Coin("atom", 34))) + + err := txBuilder.SetMsgs(msg1, msg2) + if err != nil { + return err + } + + txBuilder.SetGasLimit(...) + txBuilder.SetFeeAmount(...) + txBuilder.SetMemo(...) + txBuilder.SetTimeoutHeight(...) +} +``` + +At this point, `TxBuilder`'s underlying transaction is ready to be signed. + +### Signing a Transaction + +We set encoding config to use Protobuf, which will use `SIGN_MODE_DIRECT` by default. As per [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-020-protobuf-transaction-encoding.md), each signer needs to sign the `SignerInfo`s of all other signers. This means that we need to perform two steps sequentially: + +* for each signer, populate the signer's `SignerInfo` inside `TxBuilder`, +* once all `SignerInfo`s are populated, for each signer, sign the `SignDoc` (the payload to be signed). + +In the current `TxBuilder`'s API, both steps are done using the same method: `SetSignatures()`. The current API requires us to first perform a round of `SetSignatures()` _with empty signatures_, only to populate `SignerInfo`s, and a second round of `SetSignatures()` to actually sign the correct payload. + +```go +import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" +) + +func sendTx() error { + // --snip-- + + privs := []cryptotypes.PrivKey{priv1, priv2} + accNums:= []uint64{..., ...} // The accounts' account numbers + accSeqs:= []uint64{..., ...} // The accounts' sequence numbers + + // First round: we gather all the signer infos. We use the "set empty + // signature" hack to do that. + var sigsV2 []signing.SignatureV2 + for i, priv := range privs { + sigV2 := signing.SignatureV2{ + PubKey: priv.PubKey(), + Data: &signing.SingleSignatureData{ + SignMode: encCfg.TxConfig.SignModeHandler().DefaultMode(), + Signature: nil, + }, + Sequence: accSeqs[i], + } + + sigsV2 = append(sigsV2, sigV2) + } + err := txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } + + // Second round: all signer infos are set, so each signer can sign. + sigsV2 = []signing.SignatureV2{} + for i, priv := range privs { + signerData := xauthsigning.SignerData{ + ChainID: chainID, + AccountNumber: accNums[i], + Sequence: accSeqs[i], + } + sigV2, err := tx.SignWithPrivKey( + encCfg.TxConfig.SignModeHandler().DefaultMode(), signerData, + txBuilder, priv, encCfg.TxConfig, accSeqs[i]) + if err != nil { + return nil, err + } + + sigsV2 = append(sigsV2, sigV2) + } + err = txBuilder.SetSignatures(sigsV2...) + if err != nil { + return err + } +} +``` + +The `TxBuilder` is now correctly populated. To print it, you can use the `TxConfig` interface from the initial encoding config `encCfg`: + +```go +func sendTx() error { + // --snip-- + + // Generated Protobuf-encoded bytes. + txBytes, err := encCfg.TxConfig.TxEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + + // Generate a JSON string. + txJSONBytes, err := encCfg.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + txJSON := string(txJSONBytes) +} +``` + +### Broadcasting a Transaction + +The preferred way to broadcast a transaction is to use gRPC, though using REST (via `gRPC-gateway`) or the CometBFT RPC is also posible. An overview of the differences between these methods is exposed [here](../core/06-grpc_rest.md). For this tutorial, we will only describe the gRPC method. + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func sendTx(ctx context.Context) error { + // --snip-- + + // Create a connection to the gRPC server. + grpcConn := grpc.Dial( + "127.0.0.1:9090", // Or your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + ) + defer grpcConn.Close() + + // Broadcast the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + // We then call the BroadcastTx method on this client. + grpcRes, err := txClient.BroadcastTx( + ctx, + &tx.BroadcastTxRequest{ + Mode: tx.BroadcastMode_BROADCAST_MODE_SYNC, + TxBytes: txBytes, // Proto-binary of the signed transaction, see previous step. + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.TxResponse.Code) // Should be `0` if the tx is successful + + return nil +} +``` + +#### Simulating a Transaction + +Before broadcasting a transaction, we sometimes may want to dry-run the transaction, to estimate some information about the transaction without actually committing it. This is called simulating a transaction, and can be done as follows: + +```go +import ( + "context" + "fmt" + "testing" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/types/tx" + authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" +) + +func simulateTx() error { + // --snip-- + + // Simulate the tx via gRPC. We create a new client for the Protobuf Tx + // service. + txClient := tx.NewServiceClient(grpcConn) + txBytes := /* Fill in with your signed transaction bytes. */ + + // We then call the Simulate method on this client. + grpcRes, err := txClient.Simulate( + context.Background(), + &tx.SimulateRequest{ + TxBytes: txBytes, + }, + ) + if err != nil { + return err + } + + fmt.Println(grpcRes.GasInfo) // Prints estimated gas used. + + return nil +} +``` + +## Using gRPC + +It is not possible to generate or sign a transaction using gRPC, only to broadcast one. In order to broadcast a transaction using gRPC, you will need to generate, sign, and encode the transaction using either the CLI or programmatically with Go. + +### Broadcasting a Transaction + +Broadcasting a transaction using the gRPC endpoint can be done by sending a `BroadcastTx` request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +grpcurl -plaintext \ + -d '{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:9090 \ + cosmos.tx.v1beta1.Service/BroadcastTx +``` + +## Using REST + +It is not possible to generate or sign a transaction using REST, only to broadcast one. In order to broadcast a transaction using REST, you will need to generate, sign, and encode the transaction using either the CLI or programmatically with Go. + +### Broadcasting a Transaction + +Broadcasting a transaction using the REST endpoint (served by `gRPC-gateway`) can be done by sending a POST request as follows, where the `txBytes` are the protobuf-encoded bytes of a signed transaction: + +```bash +curl -X POST \ + -H "Content-Type: application/json" \ + -d'{"tx_bytes":"{{txBytes}}","mode":"BROADCAST_MODE_SYNC"}' \ + localhost:1317/cosmos/tx/v1beta1/txs +``` + +## Using CosmJS (JavaScript & TypeScript) + +CosmJS aims to build client libraries in JavaScript that can be embedded in web applications. Please see [https://cosmos.github.io/cosmjs](https://cosmos.github.io/cosmjs) for more information. As of January 2021, CosmJS documentation is still work in progress. diff --git a/versioned_docs/version-0.47/validate/05-run-testnet.md b/versioned_docs/version-0.47/user/run-node/05-run-testnet.md similarity index 92% rename from versioned_docs/version-0.47/validate/05-run-testnet.md rename to versioned_docs/version-0.47/user/run-node/05-run-testnet.md index e9a06ed34..c2b5da598 100644 --- a/versioned_docs/version-0.47/validate/05-run-testnet.md +++ b/versioned_docs/version-0.47/user/run-node/05-run-testnet.md @@ -8,7 +8,7 @@ sidebar_position: 1 The `simd testnet` subcommand makes it easy to initialize and start a simulated test network for testing purposes. ::: -In addition to the commands for [running a node](../user/run-node/01-run-node.md), the `simd` binary also includes a `testnet` command that allows you to start a simulated test network in-process or to initialize files for a simulated test network that runs in a separate process. +In addition to the commands for [running a node](./01-run-node.md), the `simd` binary also includes a `testnet` command that allows you to start a simulated test network in-process or to initialize files for a simulated test network that runs in a separate process. ## Initialize Files diff --git a/versioned_docs/version-0.47/user/run-node/06-run-production.md b/versioned_docs/version-0.47/user/run-node/06-run-production.md new file mode 100644 index 000000000..9af61725b --- /dev/null +++ b/versioned_docs/version-0.47/user/run-node/06-run-production.md @@ -0,0 +1,266 @@ +--- +sidebar_position: 1 +--- + +# Running in Production + +:::note Synopsis +This section describes how to securely run a node in a public setting and/or on a mainnet on one of the many Cosmos SDK public blockchains. +::: + +When operating a node, full node or validator, in production it is important to set your server up securely. + +:::note +There are many different ways to secure a server and your node, the described steps here is one way. To see another way of setting up a server see the [run in production tutorial](https://tutorials.cosmos.network/hands-on-exercise/5-run-in-prod/1-overview.html). +::: + +:::note +This walkthrough assumes the underlying operating system is Ubuntu. +::: + +## Sever Setup + +### User + +When creating a server most times it is created as user `root`. This user has heightened privileges on the server. When operating a node, it is recommended to not run your node as the root user. + +1. Create a new user + +```bash +sudo adduser change_me +``` + +2. We want to allow this user to perform sudo tasks + +```bash +sudo usermod -aG sudo change_me +``` + +Now when logging into the server, the non `root` user can be used. + +### Go + +1. Install the [Go](https://go.dev/doc/install) version preconized by the application. + +:::warning +In the past, validators [have had issues](https://github.com/cosmos/cosmos-sdk/issues/13976) when using different versions of Go. It is recommended that the whole validator set uses the version of Go that is preconized by the application. +::: + +### Firewall + +Nodes should not have all ports open to the public, this is a simple way to get DDOS'd. Secondly it is recommended by [CometBFT](github.com/cometbft/cometbft) to never expose ports that are not required to operate a node. + +When setting up a firewall there are a few ports that can be open when operating a Cosmos SDK node. There is the CometBFT json-RPC, prometheus, p2p, remote signer and Cosmos SDK GRPC and REST. If the node is being operated as a node that does not offer endpoints to be used for submission or querying then a max of three endpoints are needed. + +Most, if not all servers come equipped with [ufw](https://help.ubuntu.com/community/UFW). Ufw will be used in this tutorial. + +1. Reset UFW to disallow all incoming connections and allow outgoing + +```bash +sudo ufw default deny incoming +sudo ufw default allow outgoing +``` + +2. Lets make sure that port 22 (ssh) stays open. + +```bash +sudo ufw allow ssh +``` + +or + +```bash +sudo ufw allow 22 +``` +Both of the above commands are the same. + +3. Allow Port 26656 (cometbft p2p port). If the node has a modified p2p port then that port must be used here. + +```bash +sudo ufw allow 26656/tcp +``` + +4. Allow port 26660 (cometbft [prometheus](https://prometheus.io)). This acts as the applications monitoring port as well. + +```bash +sudo ufw allow 26660/tcp +``` + +5. IF the node which is being setup would like to expose CometBFTs jsonRPC and Cosmos SDK GRPC and REST then follow this step. (Optional) + +##### CometBFT JsonRPC + +```bash +sudo ufw allow 26657/tcp +``` + +##### Cosmos SDK GRPC + +```bash +sudo ufw allow 9090/tcp +``` + +##### Cosmos SDK REST + +```bash +sudo ufw allow 1317/tcp +``` + +6. Lastly, enable ufw + +```bash +sudo ufw enable +``` + +### Signing + +If the node that is being started is a validator there are multiple ways a validator could sign blocks. + +#### File + +File based signing is the simplest and default approach. This approach works by storing the consensus key, generated on initialization, to sign blocks. This approach is only as safe as your server setup as if the server is compromised so is your key. This key is located in the `config/priv_val_key.json` directory generated on initialization. + +A second file exists that user must be aware of, the file is located in the data directory `data/priv_val_state.json`. This file protects your node from double signing. It keeps track of the consensus keys last sign height, round and latest signature. If the node crashes and needs to be recovered this file must be kept in order to ensure that the consensus key will not be used for signing a block that was previously signed. + +#### Remote Signer + +A remote signer is a secondary server that is separate from the running node that signs blocks with the consensus key. This means that the consensus key does not live on the node itself. This increases security because your full node which is connected to the remote signer can be swapped without missing blocks. + +The two most used remote signers are [tmkms](https://github.com/iqlusioninc/tmkms) from [Iqlusion](https://www.iqlusion.io) and [horcrux](https://github.com/strangelove-ventures/horcrux) from [Strangelove](https://strange.love). + +##### TMKMS + +###### Dependencies + +1. Update server dependencies and install extras needed. + +```sh +sudo apt update -y && sudo apt install build-essential curl jq -y +``` + +2. Install Rust: + +```sh +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +3. Install Libusb: + +```sh +sudo apt install libusb-1.0-0-dev +``` + +###### Setup + +There are two ways to install tmkms, from source or `cargo install`. In the examples we will cover downloading or building from source and using softsign. Softsign stands for software signing, but you could use a [yubihsm](https://www.yubico.com/products/hardware-security-module/) as your signing key if you wish. + +1. Build: + +From source: + +```bash +cd $HOME +git clone https://github.com/iqlusioninc/tmkms.git +cd $HOME/tmkms +cargo install tmkms --features=softsign +tmkms init config +tmkms softsign keygen ./config/secrets/secret_connection_key +``` +or + +Cargo install: + +```bash +cargo install tmkms --features=softsign +tmkms init config +tmkms softsign keygen ./config/secrets/secret_connection_key +``` + +:::note +To use tmkms with a yubikey install the binary with `--features=yubihsm`. +::: + +2. Migrate the validator key from the full node to the new tmkms instance. + +```bash +scp user@123.456.32.123:~/.simd/config/priv_validator_key.json ~/tmkms/config/secrets +``` + +3. Import the validator key into tmkms. + +```bash +tmkms softsign import $HOME/tmkms/config/secrets/priv_validator_key.json $HOME/tmkms/config/secrets/priv_validator_key +``` + +At this point, it is necessary to delete the `priv_validator_key.json` from the validator node and the tmkms node. Since the key has been imported into tmkms (above) it is no longer necessary on the nodes. The key can be safely stored offline. + +4. Modifiy the `tmkms.toml`. + +```bash +vim $HOME/tmkms/config/tmkms.toml +``` + +This example shows a configuration that could be used for soft signing. The example has an IP of `123.456.12.345` with a port of `26659` a chain_id of `test-chain-waSDSe`. These are items that most be modified for the usecase of tmkms and the network. + +```toml +# CometBFT KMS configuration file + +## Chain Configuration + +[[chain]] +id = "osmosis-1" +key_format = { type = "bech32", account_key_prefix = "cosmospub", consensus_key_prefix = "cosmosvalconspub" } +state_file = "/root/tmkms/config/state/priv_validator_state.json" + +## Signing Provider Configuration + +### Software-based Signer Configuration + +[[providers.softsign]] +chain_ids = ["test-chain-waSDSe"] +key_type = "consensus" +path = "/root/tmkms/config/secrets/priv_validator_key" + +## Validator Configuration + +[[validator]] +chain_id = "test-chain-waSDSe" +addr = "tcp://123.456.12.345:26659" +secret_key = "/root/tmkms/config/secrets/secret_connection_key" +protocol_version = "v0.34" +reconnect = true +``` + +5. Set the address of the tmkms instance. + +```bash +vim $HOME/.simd/config/config.toml + +priv_validator_laddr = "tcp://0.0.0.0:26659" +``` + +:::tip +The above address it set to `0.0.0.0` but it is recommended to set the tmkms server to secure the startup +::: + +:::tip +It is recommended to comment or delete the lines that specify the path of the validator key and validator: + +```toml +# Path to the JSON file containing the private key to use as a validator in the consensus protocol +# priv_validator_key_file = "config/priv_validator_key.json" + +# Path to the JSON file containing the last sign state of a validator +# priv_validator_state_file = "data/priv_validator_state.json" +``` +::: + +6. Start the two processes. + +```bash +tmkms start -c $HOME/tmkms/config/tmkms.toml +``` + +```bash +simd start +``` diff --git a/versioned_docs/version-0.47/user/run-node/_category_.json b/versioned_docs/version-0.47/user/run-node/_category_.json new file mode 100644 index 000000000..375a7c423 --- /dev/null +++ b/versioned_docs/version-0.47/user/run-node/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Running a Node, API and CLI", + "position": 5, + "link": null +} \ No newline at end of file From 8eae569f0fed4f07915125b0cd8afd08a78b1b7a Mon Sep 17 00:00:00 2001 From: Sam Ricotta Date: Thu, 20 Jul 2023 14:07:25 +0200 Subject: [PATCH 23/23] Update _category_.json --- docs/user/run-node/_category_.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user/run-node/_category_.json b/docs/user/run-node/_category_.json index 2a302bc51..9b291ba6f 100644 --- a/docs/user/run-node/_category_.json +++ b/docs/user/run-node/_category_.json @@ -1,5 +1,5 @@ { "label": "User Guides", - "position": 5, + "position": 0, "link": null } \ No newline at end of file

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 V%Q37BX&ZQ)H9u!o^0!;e{{f1NA8Y^s literal 0 HcmV?d00001 diff --git a/versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-processproposal.png b/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-processproposal.png similarity index 100% rename from versioned_docs/version-0.46/develop/advanced-concepts/baseapp_state-processproposal.png rename to versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state-processproposal.png diff --git a/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state.png b/versioned_docs/version-0.47/develop/advanced-concepts/baseapp_state.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf54fdb4afa95f4d57ffd6479b2aede91d5b10d GIT binary patch literal 338941 zcmYhjNzU_3vmN*s3>bwA*ki-+us*;w@DKLQkd4^)Jvq4`DRyGtH#_h`JgueFKD-Mj z-|reQ9!ZZxkx4Q$GUCLEllt$LA^wMd`Op9IkAM8*KgbgA{No@0?l18CAOH8i2V2(v zM-sum|7&$b_8|Nme9=Rf}4fBa9|C))a}Y`Wqff1%vp@BTuddR(`^Q2s9jNvG+b z-zKe=v|s-@6dTwCzVF9xQ#Qr-?|l#mLH`>B|2Gu!VC*lHfeG+}6aOSBDEWK;v?_*w zYY_h@1RD6SdYU)GHm>zwC<{Kz!&Y?QKiCXjO&7dG;0Z(j3giDu{=eWYGfiC)7Ma?B zYY=dh{3l9)&Hq)EJYD+>;lTT@X$$aAEb?}I58>)%?7gDQ9N#+}moE*|KpAIHP%g z&W3(S>5o-buZmgNY2z0NpFZM%p03!2Hmv!EmjY4aO>!0resKv7yoDCkXgnGW(;a&lV1 zH#f>4L_r@k_`(ox^(Zmioh{!2y(VZ$X}&v=uHI_YSK4IoK>$ziKoa%v;$flhThPJ5 zOerq33C37J&kP-�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≀SQF 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�g% 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

*+C=tzxRK^$2yy)hl?2*N_Yidruu#RT( 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�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

_BA#h0$UwG5zx%Hpeu_0dbr#TImTe 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ຟmoYgSygRJCK4RW1Q2uMt ztV~veW~>WtgpY&u@sUgMdK#ufb4q2WX`05AJk?_tH4|yhgqd-Y*SlLJ*Q`I2PSGm+ ztS8z)L8IgV2o1~Pj;9DdhPM0B4Kj`&PY|d%pZav@dwk=|#l`CYlL}#=+(nBjZKaFz5j WUr6goa+ha2@sP9ZXVSM4w(2%RJSLI= literal 0 HcmV?d00001 diff --git a/static/img/acceptance-tests.png b/static/img/acceptance-tests.png new file mode 100644 index 0000000000000000000000000000000000000000..b85d7da7d0471c5ec7a2212a09f521ff83db4125 GIT binary patch literal 122971 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

r(Ifh(G&LKCEgD#UVN#q)G6d6X& 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-Regular.woff2 b/static/fonts/inter/Inter-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6c2b6893d593201d7c94e52687f78b2ef28b357e GIT binary patch literal 98868 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%0D(-D;tD2U3Vy$! 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-SemiBold.woff b/static/fonts/inter/Inter-SemiBold.woff new file mode 100644 index 0000000000000000000000000000000000000000..a815f43a91f462c1610a991e21c4a42f2ac6a12f GIT binary patch literal 142932 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 `>0IwGJyHK~ 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 z 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ⅇ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 mw%SZ($#`u3}?ASIihOLTvZ* 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/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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-Thin.woff b/static/fonts/inter/Inter-Thin.woff new file mode 100644 index 0000000000000000000000000000000000000000..62bc58cd14121401acf5449e66b858985afce484 GIT binary patch literal 135920 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 z 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 Aez`=*hH$nD{yOkX8MBSXUg=* zKq@J2Z7lf&jNp~c+iW-j6HSq!n5or+B@uk#9%u(2jLGry+sOH~pujtD{k|RGu^#5n z$y);O0y#@=ChtNl>;h@d%P$m@TQO2nfI4(LTutk#$(LVt+JdA4IMD}t3|8)17F33N)>B8TXPrPLgN^%jxZ zDOHjA2nnF2>pDd1dc9cJE1D?C%hf-eyS@~};cy*9RTXUg;m~f_KzV)7oopp5;Ej(C z9e88mn-B>PhLJtwC|=|Vx5C||PMrJ8uOEHwJ^Gr94f{K8ewvIX-;-}41O~&N>BBG7 z9&YoG^{d;~(yWjRM7;neFj>Jx<5U_>XNG}%ZD>Inqpa)c!6@d8if*3B-zUJr0>W8< zP{`PPXJd8U@qMtKyiVRvrV>~N>-HVnSx$a{DDYo4PtAvT81XoLxmU~t+*QhU3bXba*_&$#&&=mvdm+^$W&u(Ydm1-bax2&c!$ z#g(O9OW8X(Co9RcL#3}5tHAlxa_~udh%_&6B%QKMy1rjdnjcC6pXH~(8C#{l$%cJ} z3;zBmXVpHK{I~QEJhi`Y0q#;w3kvs>_5Vm@JIUITCnUf67I~JuBf$gk+FP$$OY^os z9?OtgD^ufZBSUVNWy2%fN6UtnJ*#f;FBuY7KSus3)bddXF3HZJPRSrI*8s~&=VM(b zX@*w7H4i^Tep+GA(Cg&a2}$7fI?a$;D?~0@W8|c0A;85KSFnumj4prCdcqXV^YqSZ zLc(kB7- zE7$@s7_Nr+9>$ZTl6+07%w!O@uyZ5`iG`9c_Zq{_$g>>--c;FyhEBt=P;UlvV^imM z2NeI0Yrj6Quh}Ft(7HN=d`E2O$d57^f_u-%Mmgm5J@UBzX(>1vxz(QU;N`8Gh6VLLXSzt?H1dgg0aM*J`z z8%FfgA6_7h>1q=;bfqhb_=9ya^HZ49$&D_Q&K!gpJ)wxsT3nb+1v)OXp*cXH|F6N_ z&-lRMm?O2Lo8tF<8s9Y9@kIz!Z^!%8(Rh!w5x=cIA_R&RmqVB$87jfsT#fqkg|ucf zpqVe9P+;PNE<=3-hTJ#?%++1;g5{#5I45S)R51wQe6gw9)gsPUD-@cOCU(0I%B8{d zSs!9~hOt6&6$KY7YN^+tqP@l z5t%zK8?=$NP)N5HN_C0?p?oy1QvGnFZlxmxP?53o<)vk@oyytR;v2{zl8AHE94LQ{ z#$BS06`XA|c-$e8L%d98ACus$=HMKX_}Xhwu8uuRl{RHJ-calqnXB8Qf`>$!yp~Wr zuW^iHDe@Z`70N17cfujteC@Ejo5N}-N;j@%102(*vyZ|Q>g+?-U8ZDbR-TY1juCt{ zE6>h6TD6cVO-M2`NVchpXpmGvF?&+TJbaYoa!%hC`;jAzI?x@PU~PHo6C7k;vvTK59c#4#R5eqkNKB^%lz#_0qgjfW% z1tVJ-N5ES|iUJhI)Lsh1PaiAvU~VPt3Mq=(qCgH$-Ku5_rM6gBAx!oQq(X7DqQ+H| zEXX6#aEQiARg=U(TOwyda|s$~RTQ;I0V|0`V5?WlghtfDZ-DahhX8(jveEhsJU@}7 zLD59AxQONkDBmnkU4>FH@srDYI7}$y4ilte?5egwJqe?Vtx7eExY%;Jbz11f7;c>w zdyyTI4O9SQK%Bp0iNzMvEflqh#DZ0gg(`)}ltO~EnzYCYw@Ifhk?tcpE)Cg^p|`ib z+EtrIJP?o*_F~`zBgSPoGu1=vr0cW8vIgA|tf?Q&V$jv^4W&mP`TFqYL2nP;BTPRN3ZgD`34euLXj?W(ezV zZAoH={SyeTB4h&ik>(^2)i_m#I8ewBFqqVkDhT4D80AZwl0{9|O<0K0SHP@hi4m)LDp5Y`kEjv4{l&beoov~J%LwbZ6O$W~@tg6`qrBY+vK=ZArbs1d{(+653wtZL{m za0iz#@((zLkq&Y`46dS8yI37-^P?T1S^nMX&dne8H-n?#jJtbdljBR*!1td`er<5zvWId?-+%U@f`Gu+AA0tE<+iljA6vZmu}5FUuA`>v zkEHaacOD-bpS*3}qOFg`-Nz?Q z{HBafB+YUwIYCy#P%227Bneh3HnYHyAUmDGJZc6C^F}{Pej?>t z-zV>qpC29lICwy0K_T;9XtqvXk?`P(C+>T8^yp_Po>OK;2r}o`jRu9FOO@svrYEwV zA~`}3sljF^SA;Gq2-GkYiELxS2_bH{&Dwz%E=Y&BFFhr#BNNl1Kt(WAfgsWpkFa%| zluqV3WuR;Mp%yM&?nnBvn?pUR%0MuVQ$~^C;8*XNGH=Q3#)lt%>=`@?7iCPz^Ne*7 z8y|jZ!nkpHgQVv0yPkXOiD`+mCr=#b^2CetmXONigj?X6F|o?{dqXK<>JN`>aLPp9 zXb^8eb|t%)Kc~UFNXoyyeN?dZ!!=7v)kC>ii3@KWI&u|x2ih0RocWrR^65L4ij(_3 z2y|b$cFagid?M`eol>+4VRev{scvwdhy?qAuwaMArp{L^L#|=X>Y5==>FkiiHr=rv zWzCbac8Ice6}qM;YufI*zP(P_R5J_ek1u=uKyAUol`G~iexq1Q`Fw}#?jwh)U3Yx0 zR4nsc^k!WSufY^`oGL`$ET{y?w07a_2Y~8v- zI6>mp&RI>$x3`-z$o91Qp&+C zmJh$4KmU;@-(PDfD1PvvInN?Y?R1mLT<0pvl!YzeS?L?78IwcUDL8`!i4I-)@S<(o z7CpQ&bks1?@I4`UhM8~(;Kt}AZ8T{a zPg-J61Yhrzs=DGfwf5TriDn?j$sPg10l>Jf!$eGrnO9j^(|J`$b1ty9#U3Ppbsw{$4x8r4?_p$Tdb z60E%w2v&vED5RFJnxKXyAPS~&_}*NRgt$8t$~qW_b(oZa&VVbFppk=J`&)w6Sra7G zIoq_Xv-;sXZSr|T{HNr= z?&hi!q*DmgjiY+2D zb%siEcV~O%uKwDVv4yD_gD{SQ@#7qiQ!SJIA02mBB&muF_l@wS^P)yZUoON=PO;0c?Sy$5%|gfE%jCbia_O6NZA+@-oJMy#vQ-PY5x zb{Cl9k$LFXJ!YFzzaT6AR{kLcUz~vXRx8Xup&TR|e`_HdKdXgFzyAi44~mEu@{Qzg zC-q0{FVmXU0K?%H_!gYWMG{0lgCO|i(nWG7IY}DHon4pU6UxXIwbryj^3@nIX-3t? zz5`{-L%*NJ?r&2-?~%4Q-UbV`XS2M$ft=f>4BiX^?OxT*n~1t*H3-)^pMaF_s7v`{ zY`=lpSAXrK{*069?n1reZUX|OAS|>>{KzT0!rP*0xV0y4CE$wiN#^c{d_>-dM2O|j z-;iTCTg`>g(F#n0=i*@wOjSrV*(xa#DJ8WWv9Hi-s$v#DQPc}EvrBOGr(X;&qo9B% zPEvCznljP~o^UrjK;9!Clh!1h=E7WjkhjSD%shd*%7Z{Em=b=a%_+@yFx3#3$xNpc zjCl8=?w7K)BXdK5of?GzKC%d#aN!t5%?ebrlrib1!cJtG+quLvwIkbgjs*k+$4@4H*UQ3eD|~D+5LRU zwfouJ-u>Ls;Sk>;jtHV^JN!V;4N(?Ob;F6=Lf(Ckiz$?@)RocP&nb`Q%~GJj#WWYljJ8>oBO zZpBD*)o=1MGkCKOkJBs#iHqZHNU{hK9PX-G4JQE_T(q@0ST5?8m}VPlLl$i-P^@S1 zh3z^#i~Cs36{d@xPRX?Ld29L<>=wyw$yqxKrazJFdIEvoTYv*-7>@t(x8HtbpHDuw zwtfD&;QIL|pL{M%XT8vVh-D}6N%ekGP0AGr0{6+2$vJWgpGpCD2qLG*IV4yEr9;Hk zY;|<|d_{)+@UjXk6$I3f=hg8M@5T$#{t z!tUA#((O-D8#~jJb~$da#;c;*VoPV+RwfM%_XeR^lbI#@pFW54JA#-4kYQN+r4v4D z{42BXyK_wPm|=sXo}GJ(|4je|6P?8VGj_(O#?${aB>90C8sqM|K0N9g_W{mVnO%Z! zjIv0gb3b<%0Y-_}-x_?alZ#h>FW;c+EdJL71%}2j_k~gkJr~i;6lH=B42d!|T1X73 zu)r{Lb2Mo`G_s0uEmc#kk)r$FW)?W{aJqbKqg1UxEXhXDbynI<_G>ZNDLZO}cIbz( z<#1Zs4X==Dh2j`0Rg=1I907uLD3*$2vt*=@Y>1^X6iUTck3li`3s$8OtYlC*^Qf+n zYMqh6G>Vf(hAW;0b>z9R+nV~f#cw;!VlwxPB%AxQ1#2-)Fk4SxX!fneZT*|JjXmdb zdRwmqTU8hJv~2>L44E!lXq9+w$A9xkd~t)^GW2w&MZr2Q3z-DD^dPQ z*0j+Ls;+l zbX)T6H$Na{VP(V}4`2nJOCCSvfk}_ta#y(iI&S*dv;l$m3=*R3l!sgKlPs_W%$>iN4lMoCCe9)0$f8*aGe*+=O! z5;{Aj6x(3BJiY-%BZaXZ+=qh5XT;^Y8|cncP-K){kJGUuK79RyPd@LcIC|iDpX*ZE%U@0+migCJL~ z^C^MsdmmKBKX6Oz_=JH|idNIUb}(gp9c7$t(cY%1;`?I!%9RzH|ivv=X_WlLvf6|MQ^%;RZ~JoLz_&}*cW#~v?9KL`g0;pG74$FqrbnHg1ei8a8arxe zobQ~MD+;p;sqQKJvAKB*pL_J#{-eB$q?ACfyKfx>(WYxHK0fk8o_khVDjQyzo0vvb zQOnmqa)0^@+;%UGEOD+u9(;KfMNL|?2B{Mc3IYdrZj>Esq3=Jxh{u+`yzk@ZZ{HXb zco^W;%}Q#?+L_P2<^0M>YI(7{|Dop3-YGv4JK@D&$gs=_Z?4KO-TSVKhXXOqtR_m| zm${50-@NHfH8ZIqXv?e_ff)h=_rQaWEA{`KSXStNNZ)3&> zpT7L`hXQ_kRa(}T#72c2in@dADl`y3S152}wE$~}LY0DDY>Xa9kp?=Ib#DcdKr&R3Dit9@ zb)i|Rq~Vn`oDp?g)2R_KY`jA1Jjo#?QM!P)TkG&1bu`|q-XTQLbk&q%JJl|_8`?!j z4P}>=D`sDv!xgidE^*nqwX4Wbra@fIMVU!rC|xH;m$JpFT1B9o6IpR8Q*XrwD9O*% zTPQi))xl&#qhHPIc>vRdX``n%>xF#00(fH!8WOHuWah7ibto`??u>^=+^blkJ-qHE zYe*t(a`z;YbLJ*eC`3FpCoavi-;^iA9uIPL8*^LOlsoQ7jZaeev?h~W<&=xO?6)tl znII*>?IQWAD$VbiS!pi-q&{33e<*38fbX9)+ZkV(l`xhd$iey!gGU{KN$TuERX8>F+6q z3>KL+jPtp@YPc&QUksJ@FxBLNaTKd)Iir`X;Xr z$t0UrcsF#NwliQ1NNn6T4>3k1b{$Dq$0(|Tf9bvVUV3=tjRPPwZBbs@#I*tb#Zsmi zOMLHn^yp5{_m3ryT^928TF>ILxewXUgy$%c7E?Bv@0^3&ct^vgG-mqY2OgL}1zupR zN(4mm2Ti(x&lLkazZ>Hnt3G^0smu(0_2Fk%04{hXKK`lc09jAW&2`RsY1XPcZ~J`t zhtHGsLe2VjtRLPn_LaGFo>gWfOh|c^(Qc!{P3y7G9=6!tb8e@wkl9wx%TcmLhgHT|5nTU-$IJ-Gi&iW1l9<>dU$Et z_yDejcc>*^YJ06xU2W79s*+bH;|;t_d0{YLCj*R}UF#V$W^^93B-G#c7Nj{HQeFJ<5yyl6g?!8tFqH zO$+p2c!?ysM^WKzFcr{#I#b`E@d$FgTv zFL=zpFBMHXz|~=I3U_TWS;$bQY@Lc%j~d9jM3a6Qjz+Aj*{Fkb8wf(RZJ@NgMRGgc z2CA>{-0|h3_Yhw(mTm*t9JYa6O`&QFEhlg86V~Cl56y@+@>v^e2M75L@lc{`uep)_ zjvgTu3t?8577sXyf+gBI)72A|RNHrK@CfINwp?o%iHh)>9F< zCzL`ZiDUap+V0v7#KsPT(H$07zAwjDaz1=5*G~u#=(Baj?ATWxymR{KgYh$_Oh}CH z7+r9Wc{gk)Q)~bX2_(R+WCy9i9VD&^iL@G}lU(PCd^0ryDgTQNRp{#s#?Al3Mk~p- zD;~hp{`5a=zT%6z;^1oi7l~aBw3X&j&Y7Yw7={1)wx`esvuea;+oAEjdFx|`RG4=; zPlDA|N+WTUCwJy$_ln!5eM(K{1;6-NUI|EYZ#L{(tfl38rNE7sF~APENuDIvT%{dw zGr1tJE+X#2T-yZWx|x6;*UikO*Uhw%qpJ(Z=j4yaM?cE0n|YsKH$&X{UOvBVW(93= ztJPO*!)#;z*Y+~!{!Z;r#D`2}H+ny`()z|a zkgF)s5K1&vj{8qUJ$n!x4W5Cdm7MCE==(V0gAv=+U&sSJh+^=wwMak6$Z*rocK*%m z)FZdr_W^M5SPi*&DSkOlbsk)kO-alNhdV;L9adv>NG+AHq>}_-H}?Ju%_(r^VSG)jx-76}?o)41W<>9O>1Op0@T5d3 zT1r$xorM>rCp%U@lM9pIe(I?$Pez5Ae!bXCLl?Zyh-x>%Ns3&Eg2WJ}SavFbv&gQ{ z9wZmyAn`68UaTvwYfNDro~Xl*bGS2AgpcR&XDD29DmiWVp<+tj=5a)l?(d58?&a56O!i2%kRb%P>I=Bm?$6rAI~55*^3L7 zzRw>n>3#lCK5~WgbmUksPj9GI8cZ3Jkx9E^AOIr60}R0n6T?VzY%Z6+G}ayVxObNT zMvc-yVXTb$NIKRb>FCRoZlMLyYEX@2o+Sk%DU^U5OPb@fw9zar84dN0=~vVAjeVvs z_#e~Hpt<(r#S!ptg<}%hSCsgd5f5&C%KPaz;u+B?l&I(bis-5T zBT?GWhSBDl;1sPlSF_U_wq>Y{GSf*VSl6@M&5^qIogiGt3h#(=$E0D?$La+i5xTHq zj(7SVn)W{QrO?R{B_d+jyel^|H6rxUH3IosP6 zrG`DE*AZ!yB}D_TZQ4b6;01-Wf`LrItbpBVlyoT+s?1i0D0y0xPzk!o;;T&Qi0 z(E}P3VvQ%~q#6U3mdlI?pLjfPKxrpX|f1x7zpTnt!hD zalDh(tOT{i#2k19Q$C7V-J-vRooPt0HQ5q{8V4Vz5CDQ>p*s#_HP$I(gmo+I#!+g# z{mI;LF-Ok1v_v|s_h<3f8s5l7C zxL~k^i({{LxgazDNrogLODyDO?EW5Rfm$0;s|9`st%rwp2d$7rHeT{=k1+k?*G1ld z#8$tHrjT~u-{C>rM64lzNGUu))DRFuJ1oQov&c%-!kmZ1B2n}dJ5aEcFXW0c`;{7? z4w>1nq#e}~r9!clg@_5F$Yaz)9s6}kr0-_-E=6#Y0?`yGwsTxu;0AqkJ$=D(lfv$)P)L|wD}?>}gB4#6vBy;{^rwY^96v(S$93(=F8F87^ z$Z`DFN;6?*?@(u#35&sH5vTo1uG+8Aj?B8O0Hq2dDm5FPo=X*TTvxTonr*&XE{0(X z@Ww_gfU_lZ< z0C&Fa8YGz|4__Dxsh@vy!wtfowZ&DW_C(08ceArH@|La~{ORNcr1+e0OYWML3+Jyf z2@m63wG$d~LGEvleei8l4S8QRsdMM2ta&#~2^a9<=O3DiA8a9iVo|l?4AqUTU(;H$nnFKfI;m-h89sdEqC%3TG&d`drVHcpq+LBEL<_>f_8jHsB+gAdEgV-^Cex0>PKoB!~)$d>t znK+m?Rwfhr6BvA%Ni{7Hwy1D(WdrsQZxeqoB}^l><`YDHb|ZLf12c>rpbQ|5f4p&F z>GVH8I}cvZ?%t{_-W(OKkiTA5LS4s{Y`=N*`)+w_zVP9O`e6( zoTBWz?_9a}<)U*-$fx9=zrZK!_$yg&FBmoU_3aC{Snt^PZm{Xq<-=;oLLqk9hTXfj ztRrnP-;fWb>meA>+iM5^F#_%Yv)!F2bIo{Ja#y)1!P zFb5BDGj{geXg3w5UCK0MNcZMDj>k1{4Ge@Q-_LBb(&O7N(t05?L&g$rl)%@jO@n&r^y zHpItdG7oW66*Aufi%6aYvJ{wWAxj|JLUN@>IM^87cq;l7>?UJQM4zBfWF!(%j_qeT zMXX1o(S0ZhJ;}YoMFrvDAZ?=wn`teg@Alq|zWZDj9_3}XOyG`^>35WF4IxPGCi>{g zi^lOWXWdJgc>qPrSFFR3J9F`y>le&=Y4x&Ys~63hzkbu=j9ebJ7GUw5MQfAG;>K2_ zB)>i8?zbOH*>>;h)oCxzdF~8`g{I2%oU_l)nXlGPpVvHR)(d_LJT(&@tZO*)>sNJT z+l(nGGhxCPU;TQfp^m&W^9g_{H1zX^GiMsUAn(n13Y6PNj=cT0=;%=Zw~w6nMnc2gxVtQ((+t_I!kVtQluQ0<*TmUvclMEw(0p7TS!**diDN z6;g#l1hZPj&K89Dp5AvWINCfej01MzvGLyWuWNaE)OP+?!@akwd2gh^Z2wWh}WJC`0#h}1Z z*q#ep-~<^)CghTPNEAPW6pN5Jmpd=zHx-1_{zD@O{E73>4RZ@0&OrfW_c_YN$0VHG zJYj{MgM)Jcz@Idb!lZwoAF+KeBhruD!srixOi~BO84H`?Yf?u(AwP{L-;({}w_Ry) zHC#0wFbqN_w#+b};BpB-QRohIuY+tfF8E%uArv0=KXEJ24ugZj#m76ybL1}g0^aS= zGN8UVVIo;bo`B`>=(15ZM1Fwl;F}2(?U`COif8IH*<;Z%waC&=+5x_Y3ve(8zJkAu zJWBZxL8Ut`mpo2}LIm6i*Nuk|7}a^^KjghDO)Mh6lE23jLQZS$!b}CSAG(IyCnLLo zvPCmc*7Hw?;#hYG1}}(#8Ki*Jkl#p?TdXJC1L2Sag=7XPBS%RkPN5mAg+tJg0}XJ9 z93VDI_(|eU+!qlq;s&Yz-#ldjsEfEuSu}Hlw0(MsX2e6woksvRaz_tYL`n(DH{@-y zjw}Sog)|rh$=z^^H0I}qRl0dNwZP;m1w>p8`GUTC+@F+bB$AmoNxV}%CRGa@8z z=j~$<8jfz|M_6?Bg0&jQ?s2fg=p{{V_Fa|$hw7*8wgu$a8_h%Wc%#`tK4>u-&DjYt z^YWJEhU#r+UUd4zoiZY>B(9vq5MKoj!{!Pq%9oFmA6ONd&#DlZL~?fRtBJ1_0XfU+ z(tK8z$X2yw#@qyUTl-1MI;Q-)ahK`$)4n|&&F#_Oa8q|=5_p?p=N*hjWeWFj$e58^ zaMMj%e8P=(GbJK+A7x@=-2KSC&Y zCo6LS!C>+g`F(;etBPMq=g4_^OJ5%P_&?+yKtI&PJpbzJFNG$xg9{hf(~s`V8}ZB| z6H?$W*i{a-(9%R6Bi}Lc4aDXe5=9=XAb*n=j>ACKHs`apiD9s#ILVoAF<&|b-s|!b z^Va})vz9rZwM?=0U*xT}U|;&1!FEhWkW{GWM@?B>gDCnL0TW4CD7zbs6u=a7Dx?l0 zc^%Yv2VpCcGSOtGblU#~X|A2XAK2K+Z2Rd}KC>|8regG+`Ez1N&HSxM!JecI*OI?{ zs@7p8qvUQu!Ex*6D)>QSQ}AZ#M`k!dR>O3%dP!+YO8#Vl?0|cPsf$xm-nolxhh;F7 z8`UP;a-1@_2_xYVS)=jeUI0i;7EL`Q(YuE^a85NfGYQJW}+lGdFM@7_*RLyR^Xn zdq9pja=Ri9-yTz?bRFGJ{X1?~s;OtN_2#GeC)7N(W34%@gE`{>TQhDJ>qK@pH{Ze2 zPDSzUySlLtk?$(rC#N17`ywd2cEKIE`IU9+UfKKRn+V7-DGVi*=#gfmRMoV!)B-N5R!`!sGjB|M2+tGii%pW_*py5MT&x;GuoV_Dp~;009A1e zL2=zl;x4sm0cs6#K}oiF)Q<(QOAW#Y2}!}FhihUBZroJ9kYuLa^w8WfH{2H!z;Zxb zaFG_-6y9G5h#VzgxgfUYaB1*W^S5rQ95eT!o6;a4=00X{N~fD?q!|rhh=F`jHyf}Hxze!Tw+i=CVp9kofUAZ^HlNs6sZbb|{~({v>7 zdX%OwY8gHHPVxgw|M(|lpyK4|WZ>xMVY8|6qz)z8T&O6&M$ybKbY}^vQ_DEy1WMB( zhfsx0rjTzaB!hXop(hXE} z!hD=0q$M2N{MuH)_fJUx7`2M1pMFZzRiiWje)qM_$7mFGY19DQioL7WrDrWtAmxci zSFHJT>FjT}O`W>!+u2J$U9;lRCsIIJl$E}2)!r30^4H}T81tP=uQuwm9%O~x5}`1M zxN40llsl)n6CsE9Aok9WP83>WDW?9!RT|_p8@cJtB^&|-%{vCQ#TSpNukVm?O{^N2 z^Z}U@3l-{xSU8Jg$(3|<}yV+iD{LBWw6u=vA ztv)zEeYW%6Gj6Uqd-CL2`HuTw{4`;h|7H~sM2M=7Np%*^0mPHic1;%+{}-f zSLZ-Pq538smYkMQC`Q#Zh~2Gy4I0Ge(tOg&I&zjJ`iA}aX0`>p0r*=LxC*XYMZCmh z;>OhULQd}d z3YY-y#N>*!*c%%%7*U88*IbdJ^0ykLmfk8bZBxC#7$q5y$V_X^%$HTh_lII@(y_inu#C#n94enaG=oNdLCgmCzD1= zY`5Rr0f&d~nF+!f)25C?q(mVlhsGQt7Ze4Cz*>sb>VoUYI*wHTP{sm<#!f_$PtrXY zS4y6=%=T&*S_3U52B)jFN^_9`pJwyqaAt+jAtMU^gu`cImu@(ZufeCGN`(Gj(Uj0P z0C?JMlLe04Ob~^?fgi%m)L|Sivmne&!ay&>kj7pV=KvAq01+qmh&U&RILC-6Por^SXPKwT*EJ4zl80;&|nYbD7c7 zedh{y^Yto6`Rx1;dpYU+uPW?x{!i;Ko&V=r`K$95&XG88rMLXYc^gUjr}K7>^UZk& zmr7@xcdF74Wu0P%Me0O4JfkhUNg!p8m4ZD@OI{t(vUW0NMH9BNB#%j18Bsg+LQGS3 zQ~W^Bj46wLtw^mFye4JOSk9Ci)ZMd5GzzpV$6e~SQq$d{ZS`j5H>KYz%Q!<_Tq89P z?XXH9@=|w7gGEx=H{>~K6;e{mJxiuvTh=ID`gP1ZCDC(A_AR1zGwU!?Cvb0_3Mp;V zp{R!{Sx@Rj)G_T;*EE^3^UgAEU8b&xBDib)WTIE1Y0)y#P7>UsuJ?rLmb&VT_<3BB zDT{uuSuIPoRgyZvR#r>lV6+EcrK&jGOvJU82>!!3*PzQ39^D zE1fE5NB&aR^iC~TV!F&||C!<+%UZS$Yx0g>|8cQWK6!6w>$lN&Zk?~ztmgElvv$wy z2GJ)|-z`5`TA1TnKF6c<(yhBk)JCm0Yjy9jtRJ=g2$qwZIvcGY%;;R4v0C?JM+5;3NM;q|@vOvbUt8S~daGmW#vIRBTw z^iTiiKbB=%j^$dOB`j$vOIyA*t~H)DzBPe0p*4{;u{DV`sWq83xiy6~r8Si`wKa`3 ztu>uBy)}b1qcxK?vo(t~t2LW7yETV3r!|)~w>6J7uQi`FzqNq1pcPo56vbBn} zsDa~ZEa(1 zYi(z3Z|z|1XzgU}Y>l!;Tf11hTDw`hTYFf0T6-Tc22;TAx{;TVGgTT3=aTTi;mU zTHjgUTR&JoT0dDoTfbPpTEAJpTYp%8T7Ox8TmM-9+T+-kZQG9R+MX?JX)9aXzCErz zo;|)jfjyx;kv*|Ji9M-3nLW8Zg*~M`l|8jRjXkYBojtuhgFT}?lRdLNi#@A7n?1Wd zhdrk~mp!*Vk3FwFpFO|5fW4p{*r6TSv7Okdo!Plv*rmOYy|BHAy{NsIy|}%EUD>tW z*sa~!y}hKpl)bdQjJ>SAoV~ogg1w@>lD)FMioL46n!UQchP|e}mc6#Uj=iqEp1r=k zfxV%~Ib*!SA^+4tKI*bmwd*$>-~ z*pJ$e*^k>#*iYI|*-zWg*w5O}+0WZA*e}{I*)Q9#*st2J*{|Dg*l*fz*>BtL*zel! z+3(vQ*dN*-*&o}V*q_>;*`M2A*k9UT*BOK`{M?1bVt}~u9zB7R{p)-*)u``J?sWX`~xif_` zr8AW?wKI(~tuvi7y)%O|qcf8;vonh`t23K3yEBI~r!$u`w=<73uQQ)Bzq5d|pc6Qu z6FISyIH{94xl=f$vyii}vxu{(vzW8EvxHMQwbMAQ(>cAfq_dQ>w6lz}th1c6yt9I{ zqO+2-va^b_s1^d}?QG+0>ul$2@9g00=LJNr2MI{P{MI|n!i zItMuiJBK)jI)^!jJ4ZN2I!8H2JI6T3I>$N3J100NIwv_NJEu6OI;T0OJ7+j&I%hd& zJLfp(I_Ej(I~OXNjXSM7ojbidgFB-;lRL9J zi#w}3n>)KZhdZY`mpivRk2|kBpF6+1fV-d@xS<=lv75N5o4L7LxTU+0yRf^6yQsUE zySTfATe-E{xUJi{y}P8ll)JRMjJvG6oV&ccg1e%-lDo3Iio2@2n!CEYhP$S_mbMx%;~ZxCgoixd*$4xQDujxre()xJSB2xktOl zxW~H3xyQRFxF@axR<(@ zxtF_FxL3MYxmUZ_xYxSZx!1clxHq~txi`DFxVO5uxwpG_xOcjDxp%wwxc9pEx%ayd zxDUDyxevRKxR1JzxsSU~xKFxIxlg;#xX-%JxzD>VxG%adxi7n~xUagexv#r#xNo{| zxo^AgxbM2}x$nClxF5P7xgWcqxSzV8xu3gVxL>+oxnH~AxZk?px!=1#xIel-xj(zV zxWBr;xxc%AxPQ8TxqrL=xc_?Nc$Q~-j^}!wCp_sXPkX*Mt~Z`HzBhq4p*N8?u{Vh~ zsW+K7xi^J3r8ku~wKt77tv8)Fy*Gn5qc@W`vp0)3t2diByElh7r#F{3w>OVBuQ#7J zzqf$5pcix0tuMw}e-Dwbyv9*Ll6Sq_>o}w6~16 zthb!Eytjh4qPLQ_vbT!2s<)cAy0?b6rni>2wzrPAuD71IzPEw5p|_DY!rR!}#M{){ z%-h`C!rRgt>22k0?QP?2>uu+4@9p62=zdQW*z zd(U{!de3>!doOq|dM|k|d#`w}darq}dvADedT)7ed+&JfdhdDfdmnfodLMZod!Klp zdY^fpdtZ28dS7{8d*689df$29dp~$TdOvwTd%t+UdcS$Udw+O;dVhI;d;fUBRJ61~H?U zNz5!}5wnWf#Oz`YF{hYI%q`{-^NRVz{9*yIpa?`LA`y#3q#_f!C`2h15(|q(#G+y` zvA9@5RH7D*XhkP_v7}f^EG?E1%Zla1@?r(CqF70+ELIV#iq*vGVhypTSWB!e))DK9 z^~CyO1F@mlNQ@90i%rC)Vl%P1*g|Y6MvAS()?yp6t=LX%FLn?+ik-yHVw4yyb`iUZ z-Nf!<53#4%OYAN75&Me$#Qx#{aiBOz94rnIhl<0*;o=B!q&P|(Eshb#isQub;skM` zI7yr=P7$Yy)5PiG3~{D7OPnpv5$B5Y#QEX^aiO?KTr4gTmx{~8<>Cr)rMOC5Ev^yQ zitEJn;s$Y}xJleBZV|VN+r;hS4soZrOWZB)5%-Gw#Qov{@t}A}JS-j&kBY~{CwsZ1TuLr2myyfL<>c~m1-YVJNv&o@y z`f>xgq1;H0kQ>WQo5n8@a9APHr!EkUPqqGBMDraViYEzgnX%Jby;@&b9GyhvUwFOiqZ%jD(q3VEfxN?t9mk=M%W zPk3HhXa zN+%ixrhH4jE#Hyv%J<~^@&oyy{78N*Karox z&*bOw3;Ct|N`5WBk>ASi#&kY6>-_no3Qrrcu+X>D2UU1~sFaNzJTg zQM0Pq)a+^wHK&?O&8_B9^Q!sO{AvNUpbAu|A{DDdr7BaoDpaW!QVXj^)S_xJwYXYB zRjO8vYE`FtwWL}~Ev=SO%c|wn@@fUOqFPCk-PG=C z54ES-OYN=pQTwX>)c)!Kb)Y&(9jp#fhpNNW;pzx=q&i9+t&UO0s^ir0>I8M7I!T?Z zPEn_-)70te40WbDOP#IGQRk}j)cNWHb)mXQU92uqm#WLuIQYAx=G!vZc(?Y+tlsq4t1xxOWm#RQTM9*)cxuK^`Lr4J**y4kE+MiILIe0s`bqt)eo?=w-_-Bw5A~<|OZ~0>QUB_3w54tBXjgk$ zXsMOf+SlXi@$~q50zILgNKdRM(Ua=Q^yGR9J*A#XPpzlX)9UH;^m+z8qn=66tY^`) z>e=+{dJa9Oo=eZI=h5@(`SkpH0llCObf_a8>qMtI)448msTa}<>qYdUdNIAYUP4#8 z){Sm;r+dAmUP>>mm(k1W<@EA;1-+tPNw2I|(W~m!^y+#Iy{2AEudUb7>+1FN`g#Ms zq25T3&>QPb^rm_dM>t@PG<8@;XGPH(Sw&^zj#^v-&e9<6uLyXxKa?s^Zs zr`}8Nt@qLU>izWo`T%{PK1d&|57CF}!}Q_$2z{hJN*}F{(Z}lJ^zr%xeWE@|pR7;O zr|Q%6>G}+PranubthtvZ`T~8SzDQrJFVUCk%k<^?3Vo%%N?)z7(bwwh^!54% zeWSif->h%Zx9Z#U?fMRVr@l+yt?$wI>ihKl`T_l*en>y8AJLEM$Moa+3H_vgN-r7-rhZGmt>4k_>i6{f`UCx;{z!kUKhdA+&-CZ| z3;m`3N`I}t(ckLt^!NG){iFU#|Ezz}zv|!g@A?n@r~XU-t^d*g`s4VPZ~Kn#`kpU* z=__CRzCW%%oY zj=!$Ip1;1ofxn@@kw3!U*x$t8)ZfhC+~30A(jVz>l_E-!rRSw6CxjEy>D&o*fH*)NoFAYV5sXO2b4C;d0YO5}At+OXDbn=Z z6t#$0L@u5$qGS=WeWSCn_`xi~qBu~1StLmw2p_dA+rS&CN_PifZejltG)pZx#*2&1 z3`)GTnZ^n#rvdY~;o}vRwG9F90?dPd24cHV)8Gl2Fp>i;!bC);Eh3uAdCNNcFkOC; zI|44G*ia9C!4t(GRy`mngvUdCV6m(u&8=_xpl4caAlZ4J1SOsFX^V=rd`mxcjb0!? z0i7*lBLf0h0?ooQh}JcY#vsR=Do`~JMx^_%Z)H#VI&Lr{KSHx=pHWk#-%=@h=huFZ zY@qD%kjPVhAtfwtmK5_KiuZxWW?=*#P`1{4WR}gLjnQ##&tf~Iaqp@Wl|iu$LE2`$ z-uck`ts~RcyX?owOgr0GLb$7uKKt^?BfO&Fn7`y`jXVXPeS(K(5QXSde>y;V7ObE(+Sla%WxqM23P_WhYm$oU z?<>kv)`|Ob@qWj0fXMX<3*hs2-UF%fcj3EnV}4_2U)DvKDvSG1gAuR@we<)Rf{y=@*e7%J{K)Tx@qAsDeA(5^SL68P?)8 zSyDo(39u^MNM^7A69iilM1%RhvnPe9)Nn|qKp|%HR?S;zcfq!A6UuGhAw@B}Gf>uw zOZz2|%B=JJ&90#n-9p2A%%=X{BvWS%Qi~z3U9d4!;;a)(Z!%tvUZ~DHsb%zuff`zeDYQi&Vt4zOx zMEYY^Fs*qzg5vTn=1II;y$A@;h5`CGt3=0y!zxh}lRe@Fm_3=MKEBag6D!a~r&45~ z5lnr4z1>)PP~Ja{f7(r^x9rM%4qLLX*Da;x9)J5CA?{6mV*Q?jghzs>1SrT@mVW{0 zw9aY)A8*JZ#S^F;ievp0^#znQ4#XE2c6n(L%X11XX(i<F9gs z76&$03)pC4f9<+&PDvvP0(4&N@5Q>uF+qEz?H(bOf2ovX9&3#Oy909?)9ISzcXo*5 zE2PQN<1U9z0+WHDn5J?Z0gR1hC6A|I185A79A@F7bLO4uIh50W z9kI&0jnwH0@OPr(EEAR9tb0Hm==yf};Hz>mB_`;1&{3A@q&50MJlHZv#iYx{&FujzbBUl5Ijz5UBC%>>sAiCI|6t;H}vCFJ5&Q8{%0IX1xJ z8p&w9>(s;-IW*MhJfXZcXp0&6#d=T_-f7Kq1N41U>}QXC_cbX1A85F?BVeC$>5fV5 zcFS}8l><08p0@CJrZhe;D(}jIhr_*1D&N*J5el>e$W#S7=4~R$q@Ui#|I;|k{VC4x zV62aNV<4S+HnFyqv`)j|Et3)e6wGNYzBU2)c0(S_551#3@XiH!{j~DU-9j>^tHjJ- z8oxA_a%%AB$gneTgB8_`sMAAFMXI5%Q<7azC1QR0X!|5rvQ5F9Cs=yla{@`3j?aFT zg8GC&Gi0!FqNGGj2o1rofi{G}KrJib-pk#0-u>gi_3s*yTc-I>(Y(Th2Vt?9P{Ygv@6%acuiR+mY{mt+-cx%v#0wj{>yLhO-FFZpUPTiQn+YUG-rt` zPa118)PQ#7`f{Ei^F=PTR+3WAk7*1+q~LCGJbOV4*xQm=F1}>J3cYUsa}d zt+c2X5RF-~F?-4yuS|{EEZ2>W9n&C*4_&P9RdvT0R!wG3lYA<@P70Q<=E&LXV=4n~Hlv{MP? zaq5srahCm9O*L;t??=!?u|3f!0kI?km!RBo+(^THY00FBPLh+RsD_cwt&tM;xDh|M zPy^M#-EbrwUXg9`7%y91b4hB%WswS)KTqb*P-wU-9#0qHK`}WE=zr^h;jG$>q+&f% z7wxZw+_DDI(0=~zTPk4ZlzdP|$`K81ADOD{qBdiCE#W(-xd;CkJ`HzM*xSt;G1RO; z-T8;mS`06|c7}f-mDj9!VDV3U{)=h;F^Kj1${ziDDC#@`mk|1OiqmQHSe_qz zD-2yXk2uptczgJ}Zpd$_K>=08QRlB?VwRJY1eOCKo9S_Lm~%Ef80wC1rQ6%gh*4jr z!LPnCinyk$iP1g`Da@}hgHyXieT>HgFNDHfH|S5lezLuU_)m7`$=oZ4-tbi|YaIZD zcd{x?n}H?teu1(ITImdTF_=fD8tW2z6BbSZqdb9j;aqWD*zaG(}eIe^sC*gJKUppia@(*e!DX0(zNo0xnq8%%G2+T z{DPu4UBY;v;}M;CfqGbpXFysEpa`!{Eidt#SRXwTvXFUF_tjty5Fw5yAaYp|iX;~j zk_k7CvzB%N0zv@VAQC_h(@;XXu|9CjkzamBOxokSh5+=2ylRiryHkgVT|1ki2vZ#g zyD!FCHrG%6M=mo>oBmI8zhZ2p2!^SF)v2blPbq36CJx<61intB78=u&Y* zo({_S2Y07GmS-iz&t?+r4DWnLBPj34fuEZ#I35md#m~%UlqUtq$y-JeL@|k2hR?kK zgzLIb(|-6*|9I@*2N8jaIRb3%HoIgX?R2D!aCoEBcY;e*|MvuY+S(@AY$XrL^e={9 z-zJ-?E8mI48*3K!R-jHAU?e;C74H=~y1y8FE(o=AMV^4iv`tdQHTaoZBCl?)>Q9?R zVz_(y%O`s{&J zA&3OAvKIvg=W7-TOfjwj$%Qnhwjq&UERd zC^Vd5>lATOh}(5f74nqxmR@FSI1qMCcTjQ^eBIgOa5Y>@cEQI`hckBPSsMwVhF9Ag zoDK!14g!^afxLi}lAOl-)*02g^Y0ux^bSqlyXjUkm88hR3h_1Q^h+XL5DEp6=V6*~ z1<~(Z-hvHT;u}#s30D(lc17AC?f3e@0_$sISV|=p?TBZO1|a;7J%02q3jR-=unSD6pX%>})N(B2ZSB0Ysu3gJv7Efj%_LKNfFt%DGwkj3dK- zXU}sc08=we?{6HmPIpU2(`KmkBE0zQc;$ybheO)vtD%wdeYV{yc7Tey4o0sNYS;76 z(}3_q7*LRLwVUZ2KUvUblpw;GcuYp)-Qf1~qB`)}Ns9_S4JJepvYPu5il`MFoM&wJ zl!{>w=#P}(Oix9gs?~b-KDSoDSnJ<@zW%)+!Sw|_g%+^O7!DJjvwKD{sZD3>#(dKJV%fk#&l5u{p-0AtBYTeD4_X zG*yjg4e=#0Id2kCLy}8fsjhn9P}OH+l2P6jDgMGpNzmf}gU9~Q{T~P5c!2vQJUEju za)1Qm>*8{=xmP{D(-0c@ef=T7@~AqP`EZ2Bw3!|F7Wm!8%B@sB9D(*kSk|dk6xeiP zdc+avgi$k|%3ROoH%oPz2!{|@EpivRj2e%`HvqsXL8$tsKE;CP{J1I4=CXTIG zZ;aUU)Su*UnD=U9(3=kypl4t^5Y=CR8g7oc^%p(-lOV16Ru+IA+I@AMiVU1Oy~8`= z%fbU1ho}7ZyE|YGwkwT-E_$FCi6kiL?84fFP#~G+!j){byw>>dJ}-i?+r+0*#5b0| zJabDvtGRCO!k788$qUoxHNBFWnFgf+If~%pM^O)4;PlG~bvTDM4Fgec9U@~L?(SOp zS~xWjicJf74P|x5^y)*|7FlFhhI?BOf$#B-Su)F1eqc4QYr9wr(!$t|on0#KB(u^w zSE6QsXPGFRK=<6TBChz4#<%S;BG4T%67~j)+8KvV9!ES!w^`?i*&yFJtj4vHB?8Y5 zpi`4FJenHPHhVem1qq~s9BHgpUK#j}28JynoDL!_4FB&7S9ztH+zzdTD3X^w{X5Z1n{|LtW zC~sB&yg+FR$GuzwU{<8yO#}G=J2dPKmtbX|Ost=NL1O{31*_$mLs2X@ zHJ;6)ok7{riGl|mx zP%Xw8x%u%mD+dB(^IO0lHw()j8cT|HR+sa5L>W7~WdGn__32G%AyNzAM z`iZ*ay&hzBjwJ-1v#C6)ExztO+?&6dL7elMk)YjJ=Ug1I)t3`YAPE`>_Z zJcpz`_Xp-uQ;(%RH|n|YnG_;lao6Kip6eDriY&{jIcYXcB-R{HrqrwClI)EBF;!!$ zXg{^#^O;x%QWm=OF|Ta@X&{HO!kn*7DN1qNzviS~zq5Y$ZI83x!)3rmn@J)TUFbd5 z_S8x8s6#DN1@IE))g|cwHW^A(mrsWsKBZ)AHgpQg0~Lb~LrK5YP0RruiYr9{c184p zZNSp!-+owAqf9-LsBK#;TP*d;BW6JZg{R`a83z4XuWZt*_P(C#RF+70n3$Qo=KG$U zrnX0Ms&xD^KYeU)cj=cWGF?pEFr#=QcE|$;s?4dJ{pqll1lG#|k0IaMO8=|#Y z*j77YOEqrPZPXnoS)f^=fnC8$%qdy~J4d%>s|IGRKoP?{4ZIHrMf@D= zg4VGKA%+3(cDN%VTlrs2mmGEUITgMGGD-2X#62w5rHfzY8MDhyC)iQiucw{spmtj|=cl^;AzqJ616 zu4+%85Qy;S`aX9kr}c?#am3&4Z17~Ew2q}tziEG7Y;o)pYUAaJomzo$&8hyrkh|cv z-dEqXA2su^Ih*;m%q(S}TJCcN+v&9>a|P3(CWhqoI+*KaB2s!=W8xtFxcsVKNhM8v zB;G5|>&K_58o!bHv-9vN zOa=le;cw)z$95lfI&Tg!?&H(ZdhTsIR$St`UwOuFGI%D*Yn@?rxGE{s%AeKEQ-L>q zHA2ikNG!xbB=!T?Z;@PSopp66*MTmdDi7UAQddb5;*OcJi7k-jhGiw4NqG)?xGoYs z>W4|yBHBcxrKJ1L3eJ{vYA%*0@1DsZy5wmYW@aSwhiCmyPbGx8^M^;9nea*cdo%pg zi9E0+nURDZ4EraC-!AjdAp3EQ0UOIUk;;rRGo|pdunx-8{-xB6tC*^}wx}!f$02P) zZ-q@X&daeC&`X<7k{Naoz~m>-Lf&URHGg%vHcmw&CE@kav!@vCM|HNC2L zkXiMoAHqm1zs_G!jLJ3c&_n_WtG62Zpn28U$raB?C1qg-QO^r6$9zF$P_C)SxWfbf zsA-N2gq<0tq<|mjqF@R&+b7{JmXS9#kLLbzkEta4U_P|@3>#kL1zA>0P+{~dpXNM` zqF9k#QOS~MJ-q3E)U8k=Fk|oZo!^PyNjU81=&nVYb((j>mPkXYMoRXE_J(+6nnc^& zYf-V9bmf8WfyIFwsi8`_0ei0T*RO}lUjlgshl}lsO*R6)#ZOEYnn`)B=T_1W9JYY*eZLtP9Q>2SY;NyVTur8mpoe+Uy<9q>4_Rpo1s`gO>S-2csA`Tr)DzXM(sB4HH=*mk zK2exe$ZlBJKe2v9Gx0(sajFnnSl+0fTR{HvxrnaX`blBkYhJ@|J33rHm8$d{EDb00 zs*?9~Z6*vB3hE0>j@TyT=eZ;cQ969yG21!F9$}Hk1c^0Y@jo&(d}SXeJ5vAnHN2-` zd~93dr?J)7@{0VlPkB87uhY`_?qXUKZk>OBS(MakGvQigM5qn>(X+tO4=u0MG@BC6kB0?(>Yj+ zl{rFP^BJ$co!+ryulDx5Gy8t~{AQf*$nCSw?E4*;UN^S9h?@?HeR7D9E9SpCn7zm~ zRygt7%`7eMWkFd~q2#Jv!m8cb?a}>9Bx6b>_TP~mG>%q<5iG3AdUnOr3r`?NO>F8 z^Y`h{0wYeQ-^O||GTx_RTw&f6!Z9o-UY*4 zbe&@2p-vJI-({xVR`uOBfwd@M&g`Wis%(z9_mPin6Q39)%3~>nTo%i{AUA(?J5GPt za<`Lr7s@^zV)}{`8$@1Fev7Ldcc-=5^-;F0l7%qT>=s+F!`?c8)Z{~@T1`#r_vT@g z*0`!^eVVdilTpps>MONw927!_IzRn+D6ORbPpG3`u=IHK>Q9+w@;r52kZp_2hSk?P z@Vq|vsnvA#r;n7+hP0dUZQk+8D?mI5_eLpv)WH#;J4)uu)FtzP0vX5>)8K})DMKYz9DzQSn{;m?UMz z$=nMVW_Nfd8L?{KjOoTOB7<&ihWOdFuht!wKJz$CBY*SjlXSh@0S>f7;8xD3vpaca zG}dNpM?6tH8b5`IB!E%6Kzg8S_Hn?%W%UQo!0ddPzHw#6&~w4zp;r5WHmNl;8OkMh z?mMvDbGFqkFTDQ8ag{yj_th&32dW&pF=x3bbMFX=ni@ApCn~Ke?2~E*f*AmY4tkd2M=G?mkV-ibACaAJMwVhthP!o!eM4Sz9q%R(7)RdAjSm{kCPH< zui9>@+NLvLAx$X|@Y{qe$Yk2B?c4P1J3O323-86JUwAZZA;IVjfo)5~{AI_K^xID?ZCX;h<(={ZnBEF2;u#951jGoRt-{70`2>|;+ z2n-$D4Zovq{Eb^v#;f>M<*>iuv%}hAS}>T72|cZsI}+kkwem4Yf9v=I=NktkXO&<9qziSwzmvwqG>Ihm!97LI z$=qDN!A5L)XR`Vw(Yd&W!#l2i5=eTg<6MJ5KU={l31p4MYv-6!Uw!$nzA{dHJDJM| z^O_n5L#Z1oWSU9|jTvqx4-8;nm6fLV9r7>kWOHoy%fzteLp*xhP_R;y5U`ucZT~q2 zSq821P|w__RBEI6gQK_fmtTKZxI6cj)`jfRiuGKu`X<N=2_6>ty&GVst&Ys zrNm04#9&;*uQ7V6>_#bwX`%H&V-&`;RLaPmR_VDr8h~+UWf)(k+$m$ILlCEzVPUXi z7S2i-`Gy(4i#TqDBM5^CoQX=*3ZJ<@zaU)Kyg3^Ag!|zG!jHu9cUV3PzIVnc{PeIe z`_b!9Z0|MksxXoe1S)e5M$^j^CHzS zC&p$bljkST;s2RzuiB2iI+>7S+vk=$7NA6{|zq>Xg}~%Yx7f# z@zcY`HLy{$M)3sGk!SFm7-as-Uc0A*GN;4l5qEscs2~=MG954kQFCViU8_EV<}RFo zaM|!BA97cZ4@zW?K}Vvv_qXE(hRC+G z3B;+SK9rL+l+i-WhyqBqPR+n_qIzbmdgk=gj_T~cx}Sof0M%B7vftQ~6`6H2Pakfw)blBX;q+z*rGrOb!z8ELl-8oI6PC z>Dz{uW-{ti4B*ftFf|r!!K+&Bo_KpDpr2|ds8X1NPvKVr|9t;ud;@aU7q~b^B9}wm zt^#-MQrM6W21L=8>46n$MFLnx-sfoMS@IOy3f>vjoTEL(>S~l@s9^UP?(x$aZxUqT zh)06+=gXG+Gj7$vu7+{j^~SsHsTcQpQY|P~>mKOChWY_w3e5OV?k8JdTZ0HUnC>2v z06|cUy#hgjSDhA(VUMpmT^l1lHh&*mA6~V~D0x88CNoG;rT%i~`==^($<>!T4srU< zNY8g3X`b(jYrGF7@7cTc`J@Y3ryuj;F6_4*d@c&0sw;xCV1k5wC#rjDx+R=CNTzou z$l+^^_LAd|;@ZsB*i+>zs>Kl2hjB%VzVbfLb|-EnQ%>_H8oV}>+|0Gmd{GLUA3OE9 zW%uQ5hOv0U)Md`UBKvZe|&q*1$E$s z#GQV4clY-Iu`pSmAs5q(v~R&v!p^@kynWF>Pf2aYOq8-tBxLx!;@1Ng+hF!)F;fz5 zF-A+?=_ZI{N~{|HpyQguVy~O9H(pD=gpDr`U;AtoDPA2&Vh0|y(X1T!P8;b~LzYFD zEDA_$jb1CHVL;))oI(#oFuB43A#M*&`sm?jU>juRAhC|32s!}b9@sX=CIlRf@6MxR zJWXFY@l8we2Q|GvP*gX~QG72m_1IM(dlB-+CXXaudj#LXOVtjO@O}M?4m_IqIf92k8aT(C z1+G7u$wiB`#4x-mmAJ$|OT)YRt~tUUdmLyShZ;eUO|8e(cx?p^dd`=_gr{KEm(o+4 z;1XouotN)k9JYpI9QzuIqxs3@#iMiXJb!R2_XUj=aa2X5oJ68BmI5<&c|oMOj+_+f zyU4z$?W_gCg$3c;1wm;~m3YRL=*PQq3nKboFec~REO{(1EC&(}k~Heo`aiPM2Lv_C z9&lj&Hi9H-mgf${5X za*j#|Gq%4>u-G$eB=dE~_kQr~IfvJhB1d!%%LB|tzMx!xadXsc@f+rda==XMB9hIU z4fN+tFCM(#Z3Bea7qw!T;iIzo4E4?Ugg@A`*{rWbp2FA4rrG|iXR>4TrkZJWd9?qE ztJB+Ki-i_LTNQVnGqoiTWsL3pObHQbej^RD1mQz1=%AomY=4ENmSG8lq{o~ri1(>( z71FeBWzb~qzKc}%$?mP^rqI+$6vTH4J$Jjs>mUeSwOIROs-5owwS=bH587#1*q@{f zZ*DMBbGlS}fN4U@f+8^S8xs-m4j)mj5OBAr1Hm+?@@YT1fQbxlFFzA&mpL{QEYGtxq>QN}F$+KYe5trN+yA9XNl8hE+(B;_c zKYp-Y7Q3O*I#j@KVJ#PrP8SznN2&i>xTVkVCf(Q>k3}3oVz--W*1Uz;?X@xm^Jk_!o*@gN`TV2)k1~;MvUWE4pDuVAyNz z_!H`d;SQFo2)bWK6({5%fqh|Z_1}#AjE3g`Nj4i=HU_~C;)ip0^M@5u{<=7>N4gz*~OTutl* zju?(ad2gM^!WP6a(UJ13oy<3*3cxHz!4C_fUl+vD6hv8$%Q=icF*b_!sl`8Wk)T<^ z6;@ytRwDa?s8BysxxHH{{BKUcRfnv_{RSr}l?`=r0ie4)5e%|R$`_%KbH6%Dl;8dt zdhF+c?X^2)b>q+tJJ@#l@CV!=+OYa&0(e)WFC8A_?JFVrWB0e43Bwdk>xJk*Z4g`!DPBd&f9Ye`#GEn%^<^vfIqtx?Lo zkt~f7X&1(I6#T{y_#uU-PB)|P9=q!BT`W6A@XwEV8*EdXptx6I zfF0Ay?11a6^_rQRV_REL_CxaB^wW?yva9z3+DZ`w$}afchvz?}Zegne|GSWN9j|mX z2_`geizI+w7Q{X(h^d>CNQs~;>U>yq%DS_t19xuz@?5ZKH%hfyNBX5l^;-@b%qyRT zhUfx#!fmvUPH+U_!n0cjhqPoi`($tHC{t*iDg`B+Jj;2hx%XVi{S?aBFvlNkMz@kA zcmgpS(qk5Tb)9}8jHxE88I?O}POfJqdqDPD{Dhew7bJk;*M(e2!i9;fOGFp@P4P)jnk@9Tc#-Su zKp0_9Y6mQ7LbSpoopT!FzaDhoe%c+f85S`@>;Df*ju-yzdDciP4FcCAFiLOiY7AEh};)oTDR4`D;zV(?TLm`JkaZ6Me(TmRH-S6%)8fyOUpxH&VC6fE(yj8&80uM(8lC%Gl_Uo`V zLsT^Kc;Hon9k>k$?)VLpf4FA!+y%t*7dt01=7Iio%#AdWn6red%1RSynRCP<8Y7 zBLD4*()HzBFDg(+f$kv_1I|+gE0$$aohQ0F^6ul0)mU;UU*`~RuV{^TSQW(gkKWM# z#6*)VkanMyZ|d;qT=+M5i?{2YW3{Y^(RB%|wRO|m-~2ys`La&ygcoh5Vs~C@0@&6{k{&1#s?55ugmvo`pSMr<-VW_3TAnpEt=?#AoM>CEr zsE`-s@Upk%GFD?`GXEIy26tnyKAeVf*;pRvF#=m4CV#>a{osEqJ-BfGOaa0@@v6y{*Ren4IIg4X>7 zRq|&B%vr=naoDxD2uAP4j^5#{CH+&U=@hA@oXVysQMUX3ns5<{<%kk#- z8M^P|Loud%M^!|vhyBNHe_xWr5v6XWVIz&+6Y2hUqLbVyCo__T zYbk&gLwMnYNz2CE-M+w}kHD}AU`VW)KllEJ9%571t8b~}to+vAN5qEJJlz$TjQmwM_1>1BtDd4wA+}f%*TY!k9GxFr3`btMOXC{5Sa>qrBhs=bV%| z?2Xz>dl2&(!+}f|nVy>a9(~0p+HAn$#0WA^2sc2nd|_v4d-&Zz@T#;Z*<2kdB@4M! z*>Y>l|8I`*N8#b!ib~aFu$||3hICtLQM?ETZcCvidhLlOAH%#XgjIm2Z#_f{?Ce&G zUU(S4iH7+ml6ZBFy6r~p(Mhf(`Ek7h>D?=BqZGN$uFYbyF2n*m-EDlG9wM4U0?$89 zRAS7WyOS0eDpn3~GRH|;acB&&@}la8GyGQ0L?+FcPqz*_b72kac?Y_5El2gl5zcD} zcLVfgjA}K<89yLjXg}m;<1r@Cq+YeiI3M|oM3@AR(X-Ew9R@`Ef8Su>1pXl1fRYrv zUUvPy5s)-B(`|f%se+}Od#6X|fwJR|pJM65jocAmp953Z%-YgwYznh7G^o8Y1dmz7 z+`8UzRn9e8EO2hS3fmYIA5|D&>*IUJIUVoVxh&^5-4@4TM}G{jD1d#)YB(13D!tGR zle#LDGl5DBKG~GOCtyU7>{}Rw@4%fbPEpU z6!|Sm<|f+?catIoRLaBatD5nLK61lYp&iumUE*MvOEq7IN;UZg+)dH6VH~Cu{UR~6 z*>R9LDXCbMAcx$4`E7Qs57dkk-LI%CA82Ewdr=yIg zV>Qa|{=JCODfYc2;*f`MwFN=AxO(>@62luL-cD5#y+3KFaSx|xIk>&e{58gAAmEdl zieAF27>0~XqBVLMTgW|MnOD-gxg#ir#Sdy8CKgf|@M|u>FlJ~8`GRu*ce=aDEJx$V zTX_p*kvjM?;fXlyP(6&=Ps(X|dOq4=IxfEawq!Y8103hnj8CRZ#xML*{B1}xxD`$l z{Fo?yPdlp{>9sB}<#z&4YdQOf=@vyZxa%FlId?A(7L(~OuEL)5URp)kr5ycBOw3lQ z^-6-fc`+Dx-Q-(g#qV$iw?3^N%2ldOXh&QliLf%>|1g@?{|^MC_+|U}4BJNQ|0;a^ zS2Dr-NlS{_ej6oB$QCL*ArS>EC(`M%7l@&0|M!p03m9=|+B(vs8(o{B&@qbVt`BR!=0z~J-@w2-AWplvoufR8FwVI#A z)I=U(6cyIL7kKF>|1M5p>VVfZgr$X$3otzJko9!+-H_Z?-zSaN?YE}BQ=Hw>c?Ko< zrJ*9g8}eI2gq`DpL8D0wShK>;RPn=6uX#7LO$HG3GGc+MJ58%zcru9#M_vi$ZdZ3- z9(yP1cQ_2H#Ne}25023BIE#3~3xEqi7?d`cTK`4ZDNBzBiz{&?p(?>tvYm;0-*olzQxchS|aB2NF2S>a=9kj(zR zvE+YMkH0yKyj-C%irE>#oyrlJxliFRim9sJ6kAf73yrI#uK7gvXjSjc6a6pCnBte@ z2!ZDc?_BJD?OkbSKA#ntx%j*9;_i;(5oL=Zmjo6~W*VA)JRwnFg4XC$^P4kmZmt{6 z?3@E6{e1VbQ^LG~gC2tOrU1}$Ogop`qRs1;16KFevsh&G(bR({^uI2Z{Z~=p{wGyV z`DN1O&3sbuW}K`$i#1saeIFGw*n4Xh-J%W*&AlF?WJunNdZprzL7?-OncUIkm~3ys zZg9M%DIMx>zg+j5q4_sSs{!)=2;UUJb$W0IDmH;Rx2DpXckIK1#wD9<<8V7x&MP}s zFv@vjCU88Rf-M(+ri{B1^P;mU6DCaMo8Yd=ABbzt5$;T`jFYHv=Xthp-+fXmk}y|} zcuYMA-$Ikbr6AOcI$}r z8?&RF@*LQ31SivltNs&LzdFe8f5xuca{g9D14iUi%l6mHM!*uns16^PwDaS4-vf8D zFt)sDxBEZx&i@iP>^khI|5aCB>KAAX=6d@(cT920&;-N&p$X#lCII^Xbu+}fb{izuDEV*C_zzj~e*re(vo3e*m(}OO8b;~QKHbGo)47O$ z(tJ)F#Kf~=1HA5B!a1;)1hN==5T-q?EpYLy)(>8|A^d<;KybF#jOU0K_V9{?R6KX% zTPiqdxcTqmBfNeT+-=4UHJ4&Ddr%>O^FaVhTVRmN`v1C%1gUpT5ABW~0qn{Ncgk7moeUTCSEKn#S|>*pn-7u=58Vc2}TE9^!NapY$W}oaNNO9$IMTf z!%qX^ze$!5`z!^_nG$WA66X&5-xNko<0kNk%!>~`RfWLSo$roXH2b|YG^Yn;!1@y~ zTC2EGH(Zbq&Xc6b5uwF)(6<6s;pgoYzm?08Y;A;XMbhl3S~Yj93 zPh3osxYNHp*DDYm$l+P_P@Q6+?-bg`p7XNLtj96_sx5& zr8xrvTW{n78#fJ?@w=b)}UsP?_ zwtw-oeS#@6(-Jn`dqNWWnWOy$K1R(Z<%qhMD2HjcVd;B-yZ(ZKf;bk?`T4=h3mo{< z#}6Jd|BsSWBlqKtb--^uXRx1h+_Y+)#w{BiV84WBAV2i9G+lznc;R&X-Adw;1JQM zrBaqfcIJH2G`4!CC^03$9*mBwGXfPTvz{~S%6+lGdV;%NiV#|4hT|9(U)QWLOhsn z!pO5vzSmWE+24g;gE+;;_1b3#=Rcbg7&DdWxTuX$9C)N*mz?Ru({VgJl}x6ykxtP` zpxX9Ly(Ou+sU_L(Yv4~xHPBYzsp*er$9<3DcRpsK6P!HE^LfnDz^khr13OX&PR}_L z=T`-#obk1ArSL3p?+d2z?tPKy+SrrU{81i|h3-Mn{e(HBZ%b#^a32tDJZ0#`Q8lft z%Q|^<2i@?>@Uszp2VQ_|^Bz*-Wr$pr0t}Yfi6ms?%f%Y>6;d9hfkGhF?l>j6MhLfz zoi?iRmL;LE<4q?t)%S_91ieFY*okrXkMQBsFc=)K2>)vk((-;FN||$laZCG-g9Ldk z&#~);va<=(j9Lzg(b}>342?=CnXMMGiTkzWN$eH)6>HCB!@b1DeG*YU+ z(>z-LJofYwUmEi=HL}HkndM(C+mU=;JpK{4eJlCh9{HI}aY-Y9xgWU?@jp4JNu&!+ zpH0zI6-{AHcF*|bWlbqw@$G#E_Jdno;u&RTFX_b_gsx6=jx)|c3l)Cxt|5I}FxMi~ z;{nd4pNYrs!-%pV3k0Q#pLo8IH;Q?S*T~~Z3 zrD$*#@pO|7Y?!&wkEdbb?oimu4nrIIzY%>Y#5$ z{gD?*xqKJGJf7PJJX>2nUQ$%RWGU&>k2W$vJGihW*5|ob7pJi)Q*|3IrboT{_lGK) zEE_1_>?be{U(!2{2;@5Rl<}d!{zp28B^qv-94M*kVFTiDUhL=RjPx?iN?Z4@=>4Vq zFShU*etCbB5|IFU{CIO-T}zUVe#*N!7FW7NnUYI>mBPjbLFKQuY-`uVZ8h763p3_^ zh*#a##+!nSc^RC z60d>QSL>9*{+CNOyi301TU4w0Hj9*t``X*hSCHbtp%%NqOjMQTP^;VUJJ{Zpo{4L- zG74{OnCl{K6lKt6BowzO{p?4}V)hO-B5O9)*GRQn$NOhn|1e%X^35*)*sfx2mgwcK z4Aq*|rN0fT3;p%miv#zAuBzrX->m^uuV;NuOeLGC6NjYpF!N=p!SL}L$TP?o)eDux zmYM{Ytf4$%H0D1^tA3$J=13byGT+Z_9hS~NeZ#kJ??tbrzS!SxZhGmr$oLb2zBr@j z?(~`D>lAJp-ZB)V(}k7Mcbw4u!0mZwnd?^9-JeGBYre=RiwjeYzUY_gFfve%`-yk_ zD4(x#se1FlRkAB(u{el+D~f!?aKQR0L7L27yy2Tr=AA^1$*nMSl2y>~7s`!k1PsD= znA#mWaEGhFr_iVv*@Vo4fY%FGfj*9~o%E&V zwNDy8<*@GzoK)irh>Zumii;+#-K?ce#Im`FE4Q2b-Qz8X8S1iX&myhbU;+Y{M9rfa z#h{9k-r9S z%#drCvE)9pr~)ueM&Gvhx-2pqr7=K=|7;@`KRJbdkk^{xgDJUyUF!S*`@kbiuRNc% z@3Gi%K^=6Ul0k6Fz`w{=FZ!fHq~B*G&7pW5uCxQ%Va2pT&-PWzSfyCdSNToq*gow@ zW6FI~l=}Y>_LWg_G~K$%n-GFK1b4UK!QI^*g2Uj0dlKB;VQ{zLFa!wh?jB^2!GaA8 zdil<|=iKkdIqR-f)oZ%Cd)Kb2T~*yvPd%Gc3cr4T^fRF~WO%2cn8!3N2~vZ=DKn_2 zXi2-WZopKRrfcZ87XZv3*iuhZ)!!PS1Qy&R8_{efT>vZAsgw6a;Gw@%&e9RBDurk; z#)w}5@hj?~<(Mn-c-jM2Hrg7}!)sc_QK??#VU_hK6&hMm{$f1Z6P92=fx)l|6yVY9 zFK1j-o7kyMydVQpchvS<(e=>Dg-};kL75(^$e&m~5$v5!gv5;vc__T*GDgzj{Uqz*T-Or^eUzm(v z5y0V5 z>jf6v(6&D?DJui)zHS(+YEdaou2|)N<%zCY#L#d4HRu^pn2_6uW}5qB^3uR5d}jjG+jD)ra0#14-r^SNovQN1vy zk@UHU%3%FvjxJfAG4?f5JIC48JoxV0UE;FRI;AJ3C{7;EEmuFGNm2Pnj@}qfs=)|u zrYI@u$p{?j7&;jo^Qaj^xuWJKymm_xGCsq@-glPzWE5c zf%gbWOt9~>D_v#7iRVao;x&?O7|ry^#;Bw8TJWfpsv@+d)@?%#ZWv9SjM+%4zAuPr zHP`;sC~uzyFj3W5>$s`U0L+Y8d#lrQ6!%?XJy1so5rppUmX!dk1k5s zQ`QCa8T2>4`Xgu%iLQCwEMs8L=-kAs5x6yqXH|nyqpSo^yy1Z4E~;PwP8&QUotln2 zLfs8LT@hIy)Ybb0tVu04E?M$EdKmg(v6g62$@mt_O3BFzNX+hpN0>K6ut>DGu~4EK zJZki&SXt_ur^FO?<*?8@dAWUSizQK$rL8JfO~y?h1`TQm=~j3X%WDyLI!CQR2;0z3?@2gxeFd!t=53HtE+HkL$RC=7L$aL zbXN@Ssg}NWS{8$L9OGEkrINn5c0QefG?#Kr6qch_brc?7qCRodePtqm23j##$zj#N z0x7LzgjiP+S^;a?#wVJkfUNa30Ok}x*=lr>Q!QRtwmsvmny?g(M;%z#NMW$kbY2^y z9I;$p_h??I+&2=J4^fj2F?wu+goUV$KSK`R8eMW8)8wYf*MM7hs@z73>!#W_?a~d( zKgwQiRv1H6EAtt`z!UYwAhy7|nn=;-N0yY&tItlKtSp(FT9Z=iuq<&n9*?1xrrW%c zD}ug|EVs_pfW<^AnI z%`3y}_d}(wmjoNWig+o_W_?F|(vhdN@|9Z8&rd4NnoV90Zwq;zz6lp5u2$XExZhOV zYZ(>6Dgx&HOGR*4kI4NgYc)+P*`*PhO-~70r*-cPiYtSm6g=0T`q7-?#l6?b-X)R+ z+d^QUr083RC{|}J%Bc*zD}AAtEKeWQdrtW%^i<%&Q^=#_ zex4tXV3Z-JFfyr>H9raw3sLIgr|PHb2$u&;s`*n%wNea9me$+fjn`!5Ww#VjGk)Hh z41V>UdNdsYAF-6l%@L+*8+0RS{F*znd}`~L)EXB}#u|@LUh#%&$I>xtQ~-FCmPl1V5pUUUM;+Zg)zA_!9dPN4@Prt49uZ^c#26> z;*zf}K7lcfPDh)nW_BS!jOrsfg;7Th`#t}a#oQD{;K7<=6;G+BUzQA( zT+=`al^M#WrxL(xDt|c>6 z`C+%5$?ILym@^E`I)6Um`^j>pklZP8UVy@5H}rrgDV4Lvl`j+{@?AXdD@$j%>ot=!#4tynANajJ;ga|owRT20_>=DkXZ6N@Bc{=8=j`*(!cXr2 zhva`xfNuPd+wog(&(!v`w#j1BrGQX|E9!gXurub6R};dpx<^jw=I$<0ivR9)OB#R> z-qq`zazy?)+#)S}-C^$CXAg|uv%+tZ$;7xuuir%M`4wiL_jz>j4d1FpVCF87<}P&# z)cJXs)a76KBIGU=4IkT=do{Mr>aQ!}zhngVp-2BJT}gv#z*o%8%%B>W=Zb!kVXE{&`%I}5HlE3P_AuAV#uwoKU!hdm36 zPbkhyK-H>sKdM!I5=i~0 zaYP~c&!l^8%O~50X9MU`;s9&zKv8gmH?F=v@y!|p-E1ru$Olm!UY`+gOQ&!<-)+tt znJRz5fUnKM1&sn3Z#6~4_IW)f(G$0Zou!&4*G+O8m4Pj^#gmI+{}EC>T578rJ&N)j zj7?M3t-M=um}F^GxhBqiz+IDb${wIDEt^AtlM`K1YNT#Om6Y~^Ml+2`RV{6cPR+=* zKRSNcXta5Ux)sy*1Z8{M-Tb$TUO+qWwvsgP-4Y2dMH;JLB1AN|juxu8`_ zX`@MJqbVvmQGBw0qL>82Sd+eyu~0AHJicf?L^ z$?rMe`v|zT>a;VZbHcOll>s>VaOwtc#fCe4KuguBP>13v_JsSh$_%`tbaD&L#CCBO#et<*(cV9)hY9_YL+tp_}moN@2iXhB>LH-lXYk@f2&Vl=Rl{`FRM<)k=yufWRsPM zV0PiSle@qX&1WK!=u#9FEK!f!<|nf9GnhK<+@!E}C=`JCe`Y znXK(hUaWa7><3XBHP&v8%#zGkykW-^g5ye!JaD(Bl{J#Fzcl=ANctXxgie+1y+-md zBb!=!Kc_vMzs&pSRbA}~C-d`6(lX$|%CF5kl_oh0Yf$^>6Q4Kk$L}+RZlZ6poBJ<0en~pjS6f-)4f#$@&@3tt(kbdy z4P%$o+&EePFw%bg=zYxILKHWYJ4>WkhTB64KCV)Z@bC2siMFUhkbAaICS?Z4ck}g!A{2UMhw; zHT8!>a-;Sb{TQA{9<HM%{Sn?&0;M`;i%6g+h*Q9u!o?Zd0uAOh3Ajsoe0K@I8Vv zI8C=ZXAWxn7U6zO0%DH(B!ka1;ciUgmdl`0LiqZXB$?-?%VxrspkHq1CE}~oDr0!j zEzsG*C!~>5bKmFHYY8KS^q90tXw&Q0SZYmO1>QyAv2e9S=ax@5eRwERkE>Gzu2HCt zkke2bH8`Kxmm>GRD~I^q-!Ji8M|Rd~HY7N_7l;3lru)oBW+Om^wrMYyVmG|?(mPh_ ze`%;m&exru7>hd)Hsoelqu_y-*)QZNFNdOAg@eJWJaNB$Ug7mQQ>Aa1@H=%pqIWm0m zSsTf47iYzHN~&9q1W)+;7am`H4tlzfw$Hvuu0AIpcd{}LBF=}fg10RG0(WKGIegvL zGsJvkuT4g$`n$b7Iqp${;Oi#D$z*f44(5*!C%0TmI02vU1$Pn;g#e>N{aDH70L==BWVY`xwvJHQj~f_C5*xtB+4-QCgkxN_kmCw9>k~0{(?yTAY6+NZ5%D5ky*=! z%iclo6AL42$h=s)u~91yM1gAGbySx5#=M4eqll`-)Sm@nmO2|@VcrlqXJM^rO7;Dd z(A2UrN8RN~VMc54qED#F)Uaq2$Fci3T4nrg`jp6^L+pwN)!<}AuA-0Wc;M#JOon7i zPy{^H7wfpd+RwrEd1=t5ALFvS?$N%tsTG%mSuk=ZMQ_LbCbDyxP70RKmd7|qH?$~N z5h%6ug>R7eI(-TkN2kB^XjyA0O`PZ1TQT2XA;yt(ZCff+R)DjUjR4aRk{v9v`^+%7 zS+cA8oQ1;NpyP`c3_#Dju4Ws8?HM1tg?#zB)7(#Q5suwxE{i!dpaLTg??=FUKs0G? zGvDQ^kvwTw))p}Qu18gV;!5rKH9ySrp}&f^Kk!V(mj&#v^9QKbnDx=epL8_qgx7TCzra%T#A+C(w;gL2-~hs-?UDRMmFx(!Sn2xt3N4Gtz+bH5rGhZlp z^N*c{5iIf(J^u&yCvp{X;Of0qWL03itB0!Lq^NRRT#4$fgOLyE?oQGpk4=;-k4pD- z+Xq)hdUJ?9bD2gLbpF%rojgwsb~mz;>ePzqB>AquAezhAFP)_v#z8CSa%lSzkOCH= zNDs4en*Ypa98~&>$JRYFfj`g5`l9skeD72;EFObftp6OXS0aSS00wh}&>VlT5q#pe z;irqtu^O^iuX3FWh8}=9oLai~d!wpTP5P2I5v-or@N=iEj#wMn*wXJj*Q0i=s5%jh z(fezfLIj`|C*hAAPNwUDL8z6Yd+d1@LgDS&*r`JFLv5x{5K&S|oNlT?-6#>pv~t`d z_B^ZV!nLa9-|96MkjYemzYajEM7Ls-KT2k!FVdC)S=nmC^BVeGpNfv$n4g3%v#0+P(WgYQ%NrGY{cQvs=Q+3xGLyYvE_JQvKQ7{_~_yZX*Ko(J=nR~+qjou|m3YN+DPgQqzJ1R^I$_)Ux8fXE-u`TV9W)-XUcl;UNR-bW)M+-)WyY-`;849* z&x1B6FrJl=%+Sg1ZJ0ZA?#mgrN26*~Qy&EZne+FRMsO3uw&M=6u}OLYvH$6DF*9!m zHY|4-rC(A!b7u+Xik|9j_`;OhoWyqr$_?QTQY3a)8hi=7zAQ&hdN%~1_;CNuABZXt zZ}1^bG7hS_!wUCnkMyF2q57+ASECwj?cbp~2rrT=?V7&)PIVMPK^$oBM~IAm$~#hN zpBt)*So3(Kv3>Bz%b-7}{j&SMb@prSRkHhJJ8qXggtKD__(n1r9+n?WD;$;|uYmgHNQdA>>9*up0?^Ah z1x0L21OiYXcv^kREpb{s-3Ep9CMyJ)bfaOW{o{;LLAs&IVR>1>0xkNLY-fNc5~+v& z)Rqv7`}~zW^UmOt0GVeIkIJibA+f{qF*J`8R`>Za0~+^v2%+zD`wv@^Vx{Z!o1Bg# zenIfy%v_^QB%=WDlKMx|C%@^JYBpJD1GW1+&+{q!O&UKm-q*0?Bk7Ir8MXklK@d$n zUGv7@_n7g<^QXm4)-8_j!{HaPp~8tk zZ!%sWlEyECWeytxwTt7hcxQG#(pbY^*9*WT+imr=Y_edh;7+AI&37|FB2gAx>uxkt zHS&vo?X{rNg1DRb8|s!zSwqaecq^Qn88%>?mB!@EF|3_p6yPh;#MJLi`hZn2bN*vD zs=PHO@hDFw{TK?lkM|7dH^@Qhr!kIOI%il(lUkf$MG4BZ?I$;sX%DVhGEJXbZ>X#q z(^zs|8tXK!qhHHeR!HYNz^Q3pUpOo#Q^7(Rlpf1#B#ciyY8$b`8Ej$cu;8SO$A_4v28CacUi^-ae`}m?J z+YDsjSx2sJO1u+2E>0aBn6vqhos>z{F0wEr&{$>ez#xe_b1;al(KKRPLRL7O7K~OV zOz-)ZeZ%y8P^i<9G$3wSNq!|y`8v@;b?Jit$)TK$Z|UGq-C4?}x3Q?g5FU7QtA+lU zC{2!}Y|ND^=dO$G;Nz=#E^V!r9c4LzPo{{7-F-UZu3aLMJ$wYt)62&+8F50{xPl66 zr|<>9R(R)vJ7=1mvXA5u?91jYxwC-IRr-^@(qZ|MW9D=s=iJ?r_+f*{hf-ux#|;@IQpU#Ho9nfJ`|`Q= zR8PaHZfXeOkl~mM9~91lBLKZWOQ~40e@+E821V9C!(?B3lzm8?FHw+kO809kx}8-Y zQ$Mn{6#4N;$YvkP)dV9 z?;PP9v5`xpqTC1hABslln?ABhGi!?28o@O3NtRhMNgT1o*@=5LG}OEF@}-qDsjtb5 zMS#)a;S8CV<|Q}KlaZJ0{!1QQxV!u6mwnJ?=dFRwX)|o|VAC(|9RfwgJv27oWPsLA zi^%Jy_@X?_|4nngpGgwi@9DSi6p_`^h`!{%3IBH9B`Ns^`F-qrRF;22A`+y~fr;S? zDnRPq$^!YEZwz%}Yco(UwKY#e!~pb_gkT&bsgp zG;-m>VWR|rm1(qq@Sba}5Qhk&B`}&jeu*S#lS-%^SvnCoE4Ym1jIjP~Qz;s~kx;UJY?*;>>Dk; z0wwO@^xg7qPMBK1!n?c+Lt^D92nRuSyp6~1s?zf=$Gmk zXlmaEZKEWb#1xM-^(|==eW;>ol7cy;x{T>AkrOTU{3S_|jYo<@!Z;GAUFcXlgJ?Ke zIcYD$KSc|JhXYC2kTB+RO}(TyYHs%D4KJ*=XRBK zE)MXXNdUgTDj=#T&nbUx{t3drI0!8r%3iQbvukNtdA62CdBA6LFj==#DGSc6a2sP| zzur`jK^|HS61qn{=DKaNkj^U#5WLP^@meW)y5Cqk7Yl-JH5EIKjK3xQu&KFP zG3~3C6Cb%|jVxp`?I&#Aax<;YIK8s%_IbJb*6r}K!zZw>B7EjqxZ*P*`>u_>LUt$) z)N9MU^~#Q1hPK&j_%Ne~hz;|+R>RZtQxur=LsGy>m$_;4+KIhqM}V*`X%o^U%Ib&H zAF!UoKj5!QpLstK7-2}bVUquzs>eiTH|GQX6+tiRg4TkIQnRY|3+0|t0r@-&g{y5T zPz~ejGUFy<+NN;WSBle;_|I|#$0DB!6|dtzYsD`XacHPc_mh42UP^Gmie~&F4@1aPZ;4Twe_rcf0cb2>xL;9|k7;A)=K2*AdJ0nc-p|~x8jkOTc zl(jfVx2jM#jh?I6VMjidZ$Y#QHKHm1Eo9M>+5K(Ye*eqZ={|8)&z>wBavlEy-(UI1+ZVA(yXg*(gKi0V@ zcHFZcU@u<3Zu2gUd^rIUNL>FoO{Y)xlYd%>TC|~^!fkrL{xP^FWID%!C^Mel6rm;c z)SMlXtSDt=6;^Y3A{6X>BH0(>R-%=H|;=$r5^4TRHQjxV1GCX>ImqZE8(l7Jqy) zx(cnCVBYm#>oXZ7LMSbPC)e~bmjs{MX-=0m3o>JuHrPS@tt-u=a_ZJ~7U07?3juXR zrLk9$YXAY$w$c{f^}~R(NTRAc5S8hC^eQ9#y?Wq5SMv#^%1F;gV-V zKt}Y0F7K9SOMre+JiqzWc0(P!u?7*?DOO8L!%B0rYGl>bf+n_)&P6}^Unte2>&ajVl%fm=Eg?jZ39;$CU>ixbu>}KhQ zFoTq$l8nhSk+$c)q$igI+r!J3G3_SgG@UsB&5@li(Obvj*pGHxjvr?5SARqd!Tmn@ zCYnh7SlVS)yJqTSVutGPeVd-#G(QhR2BCl~+If~ofwDh?A(LO}$1r|i=#!zMH$2kZ zg+R)B%2-}VNG#yWEoQ}uOFs_IX$Jw!>J z8y@}cNVSTK-j6XTG>k`I>gmK2HTX_-0TZS8!{BlN@Ra z7jg<>b23?T5()Tm>VS_p^$6M}2yBBa9z|KBe&@g&I;`8}3O5hFPHpF_MWt_Hp|>3B+ap4DcYHGTazXpepY_Lc3L0KGMUM}9DaU# zx31yl_TWpR13U=YBynyl=eb@}mgWU~PVkm>>hj9*W>QX17V z$BtmUTHBXwY^)J}x)%KJ+F6`sB{8SK3gcc>U-@yg^;Lqc`AK>7H>05}=Re+F5CXn0 z2ck#RK4QeHXCfAt~9X0efHOV&{Q>E99!S>KS-q?V#R+t56@#eC=#+y40J zOdri-`i-(W716ta)>oITQEzw5Dz012DajESq_93H)-mgE1{biDeT`V|GP*aRY_Tso zwYwk>bz|tD)RXe`1~fK>8Pj|K$m|j{w~F0Zt;)kX=dJ6zB;Hdos73+33*`b>qhl4KzY_ zRxAp2L#Jkwc9*b>XM(BqqPW9A_9 z{A%#oR?smq3s9u|Lm}3b@`BbqepHS1j)fMR_2~@K#>iV@O%Zf0G z{UY#es)K7ridQ+gBEKTqk7~~w$zgzQy5xQt(TT!Y-aZgN=p`{_Zo#T{FK~b}ERdzF z@;jR|R3n{l!Bl2pNZKeB{HsDyteT!#vBc7$)5<}&?N>z?MT^ePWvMU4=DT@0o2RB2 zW7-2^N*&I^pyopxX<1JckH+gvDp!oBILs+AkB+8I#;#3DlgWhgDO~n*?6JoF?hfO5 zTDKdit*Ng!Z<;zo{aF57s<55oW#2|Nw>u3~=8X*>L_*-^SI=BEf;S0=EZDi6neU>d zZ6XhaSOSHp0_Vm3+_xKVC6Of)2W(@8Xq1E>c*LIY8!G1o7|*p-6@97|_dLPA zbd#sZgagS*V_Wk6fz<8(3jY2QGEM6KM(p(ljD!I?LL0wo73Y=gWPH+~) z;l}j!)4$tFIBn|44Y;`#oy%&z?Nk4=*+|7SZ85!g|JnndW!ufP=|~XoDYvym>)F89 z&%2ql$VZDYGUwUNb{J=#QtmadNLGIXx_%aO=wxq!MLItWw03fW*)844K|NLM1G89> z>v;p4>h;&DdiMsLzUY?ZVxq4^qNoq_{5MM;H@fvtd}@Ec-wTdCL2<`0DjN1qiuX;%xXR(V+;+>xnoLepx_~ieg*`T-a6EinacgySmXl5P?Q3-V8i>62A z#YgR1KcyoFMWjNQ(Ch^~fe6uvj)S_E@~f z?Ovds0|eI;UaheTsFAXZ(IcgY4T1*J*QC6%Y$x2?7w4ppRU!{iXF84j+xtxGU+O%) zpSUjEL6&#ogpJis!lsk{b>8<0Iq-DOX9Op_Bh#PbGbsA|M~F0iUXikj{Y9qrIaTM0 zhoV$7FYT5$W@r3HTkQHCegh7jdO$%#U`P3mwn2KN^H~3Wk-1}q-h)TGQEkHFP)TVo z@_dzaP-=`>$z7|AuP7tdL#&=Z@^eBl0vk|eEX0)mp0K`M-oYv1c`ABh!rU!- zd7a5bgxMm{Smq%o26p@6y|CyU-RVWM+A#p_Fn3O0UfXRT^7GR0eV)kG^gQesPz{Y1 zAMTTGd!J4fTlH7-ktBXc8m~g3G7eB^P;pjS1}&khI)d6jb)g*1MxEs*>dxg}^Lg_~ zl?pdZ&$LR<20cM2(J$C(^ZfS`8-mY@%NwgNtV%CDB>&*N3`hj$yT5~>|NI*?G)-A7 zMRkaPEOCe5h-Lg4ukkYhhB>2-nQ+TjV$W9&f?b9#Z5?fOcx45kNT7nOQVLCnkVi&& z$8}u&YQdarh^Se;GvBjZ7@B`CK}xTd1W*gUtD70%jtILfADqL@lE0mmU@A&&Qt>}J z^~Yj@%@1jss;2uw4=TFLuvOm)rTP*b+9i~Y36%&vO>3^s#S5Xq+}q12LA8Im=jT#E zVLtcuW!s?I%ajZE=CbNCERc*ZcyNwEb;+0L^hiL}LMZlzdvfjuH0THJnTrJl?%4e( ziv-d6fJf#mRr&m~c8+vZ=Y%$P>?+IFgp>&c92bj1+1_FHOgU;@HHz#!zfJz9r*&@s zWuQIJoeT-$J$jRJP?1zN3aa$3gjQsgK|uiT%A<<3vQ-e&yYiTEYmOfT^{G6s_+AzU zLKfn=oL|<&QB@Y^xzakUXfMMDP2SAUYBH-zgADutyGKH*j>64X^P6*UkbpP%x2CMB z=->GfO&e8XA>+e}ssdlP;JkK_4Iv!r%68?Lj4^5nZ~>0!1p`p0Qj_ zZ+rCpbRFKF==-iBKaCUmWzOBxOiuSLy`9E03_ugZGuZ1$5PhR1>bQ9p49vXclIdvh zL1Ez0yI-iD)H8>WzaVGxGu z9&(WDu&Q5tXPqrG3l-VLDz6wN*JJ4<(mq@uC{Rcj{j7h_Q!!olCXq?tNvz`9!P9rj zdMHs#>q1QPXf3Ctfi+;gVg*HRRnbv&Z7Xg0ZOc4*Q}BruFXVR6H%WWZNrz70cl-1O z!1=`fqa}(1;&1eN$uFAkX;pLIJS*7-6WRD*?xT7H>V7*xHt^R_ ztC_*AmGlG9xVDY=*%A6nv1X>v{Kggg%dfdx;g$Ci=y|QgU%}aD)0a8wy~Rq%--T>& zvncn6)@{NvduG5>LLq=lEpXzS8zC zTP;JcpoY@WmSgWn>PGihS>bi|0uJzaztsI~F4SF~G|}#1GnOUzn&(uowqvm|QY+qz zx^H2kWT#q@@ud_r3)<0PL-bSd1J{w52>J-AJT7i|z*$6Af`W64^YPG=Do-t$g4~TZrJ<7fXlcgXdv~L$ zmK_bKg&<9{dsy|ModK2E|_=3ra3;@dLa(roO&ZU_ipt|qmi zUn7K(b^KkEGaS>5;gRvys3Ncc3@W9Vh_=0Ie@UdyjjCd$W6^d#ihc zdy9K5dy{*cdp&zLBSnw?cn})5O32;;_oQ9soJg6XN_9#G->A2OPn3so&VL*F0GMs^|K?+E zOm4HX@;_bqS5L7S`Zq;){=eBoc?9He{kQ0U2_Uffe_gFMy7Avi3jeq6`9CZDFKLhi zr2kF8z{>xo+w=ci>PWV9lK)km|6SU@SLpp0!T+q#C=c4nDaj6oAuC?CIoHg{F)bs7 zAcB>)@j)vAHZIr9D8-}mLc;Ww*G_Il$ENAZ_+ovn7O}U zszbvJA`eG@?EL<+ncC7HWM)sWbS>H3Rw}FrG@G|I{bVA z%^SZj<$VNpE&RU|eX(8|JXQTZF4V3&gKs=N_JU6&N*xob_XDDL3gWG=qZWxS3%6iO z7AR<|9ly1>^swrhyzzUxV{eqUa$2vdF?d={n!e6f(iHv7n-DP5HF!yD8*&yH9>B8* z(YXKh4=0A=W6*&NQ&W#R$(3WAv5{Z z*9V`w-h&Nn16iMJG6ba_sBCSaLb^(c){S`q<8vA|N4%NmWY1A{8Nf!G`}wm}JnNNyBS5z$5-XNB1soo)3_GR^nHY ze#6^o+*x=_msPQZZJKFR>By9A;QqbBimf<$T#PG0CgWh-jeGWaIAZL+UWu8<3zpeseBgkI@x%U=?9GW7}GdC>_4QNIQ2+aN_l#y#R-M+ zSWwbtoP+Ut1PlnOF+e2;!2~~+juu=jza(vE5ZdWp5(ghMdoIY$I+XUYp#R z-BF&#A{YMSD+(atDGgAME=LH!Y>qLQeJ)p?4-<)5l|GpJUamQx`HX4&$yhE=ia?rR zroh&KJNEgLa(wCBwyg|zun2~7=O1A(er|DqX?cM*3fcB9;eJ=jXN ziLR?og^-7m&y|*|&quUKDHrZv`@1{2vvuM&M@1b%4u6%ib`p6+2u$0nrZ(6Vh>vmd3~9|!r)v_880cf!_!01AsHwhr4T`goIHwb2Yv^<=A0VB zD8ld&3B)DcgL^aFQ1$AP~+1nRl!HI)xm(On(sZDm{DrVz36D&@C zc=$GbA^K|!#`|O!a?)&Z2k;_|0TI$3qaC*H0@TzW9aL3p4TVs!NPh= zK);{0q^36=5(QsCeF5S>OXpGFkAHF#9A39OlOk=Lt(G#rB5ovtdsdT1`%*B(8Hmm_ zJ_jk^eipVuaQr?SZA|#WQXqZ?!dsgB4lK!0l&tcD>wO$p(XM^(QlXbI=^-f&NTPo8 z)IaFb+TdQ7VH6NluQ5JE;l%h4e^MHD{haz{T|R_NlSdfxu7yKkrP*~w$f`hp&2vFs`SgV{9p8adgEvld$y<`8Ta#HJ!2IMn#o<0mq(Ka zk1em(r@RgOCHob(VNx$zuXP;Y(8e(7?KC`8Zu2CO*=xOOjP#ZWSl5}jZttvpvGVOj zJt+C*dga^pMdRCr{y8Wl54k)c_7XI>!qAP(Y)Oq2<(JrWwX!gVp@zdfZbyUy29yL4D=UJGVpM@|CIQus_!*+s6&ExbXp*^uEkJ5E_j6 z*;>0f->6P)*A!s;`NY}bHKEHy4><_hVxxwi7x)(RJ8;!yp6+`z_Wd&3?4zz|VI`!I)Jcb*KKY1Kk4c8VE1#~qv?;h5USN;9sY7WLe_;WYi zII8PtvyrFp=oR%_=xxQk78PNJ+*h3mlz;93ab&L} zA|ox;svPF8k5*!(BX!^!Anx;8myDi&vHIjv$|tYh(|to$9&8hUG5@Er6RFZ@KEPkR zoa)@{$0IBy<(8G_;Mdt;`(!6scn8rcV;HnBe8kjab zZ^ufH8m1Y~&+KVWPKMG_+qii<^0XE!E%`jFi%y%#1;{)5NI=lyJH+>d_-;!zY70L*I<8L^;gkWXS<4)zlQ!RS5SXdlq=!?0Tql( E7-suud;kCd literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-Thin.woff2 b/static/fonts/inter/Inter-Thin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..abbc3a5c962085e4ce6d44a78de093fcd03730ff GIT binary patch literal 99632 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

$Y!=z;Z>Qt%ff>=AT}9Ue+6;7INPI4aUfTwg^R) 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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-ExtraBold.woff2 b/static/fonts/inter/Inter-ExtraBold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c24c2bdc2f07fed5862239f629e7f111b50b1428 GIT binary patch literal 106108 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 zʓ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 literal 0 HcmV?d00001 diff --git a/static/fonts/inter/Inter-Bold.woff b/static/fonts/inter/Inter-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..eaf3d4bfd7d0717eb7eee8edefde43508c6920ca GIT binary patch literal 143208 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 V%Q37BX&ZQ)H9u!o^0!;e{{f1NA8Y^s literal 0 HcmV?d00001 diff --git a/docs/develop/advanced-concepts/baseapp_state-processproposal.png b/docs/develop/advanced-concepts/baseapp_state-processproposal.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6012378dd580b0ced3ed6809288d9d312a2e96 GIT binary patch literal 248588 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�Q$m+%cbW>>CE4LMI{h!Miwojp=q}grfdo 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�B$R*D8&QF$+Na-F$TkYnl$1%^ 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%0A(bVUY%Bp?9?om(N6)l~9VWL7YPy$zEoG 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 literal 0 HcmV?d00001 diff --git a/docs/develop/advanced-concepts/baseapp_state.png b/docs/develop/advanced-concepts/baseapp_state.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf54fdb4afa95f4d57ffd6479b2aede91d5b10d GIT binary patch literal 338941 zcmYhjNzU_3vmN*s3>bwA*ki-+us*;w@DKLQkd4^)Jvq4`DRyGtH#_h`JgueFKD-Mj z-|reQ9!ZZxkx4Q$GUCLEllt$LA^wMd`Op9IkAM8*KgbgA{No@0?l18CAOH8i2V2(v zM-sum|7&$b_8|Nme9=Rf}4fBa9|C))a}Y`Wqff1%vp@BTuddR(`^Q2s9jNvG+b z-zKe=v|s-@6dTwCzVF9xQ#Qr-?|l#mLH`>B|2Gu!VC*lHfeG+}6aOSBDEWK;v?_*w zYY_h@1RD6SdYU)GHm>zwC<{Kz!&Y?QKiCXjO&7dG;0Z(j3giDu{=eWYGfiC)7Ma?B zYY=dh{3l9)&Hq)EJYD+>;lTT@X$$aAEb?}I58>)%?7gDQ9N#+}moE*|KpAIHP%g z&W3(S>5o-buZmgNY2z0NpFZM%p03!2Hmv!EmjY4aO>!0resKv7yoDCkXgnGW(;a&lV1 zH#f>4L_r@k_`(ox^(Zmioh{!2y(VZ$X}&v=uHI_YSK4IoK>$ziKoa%v;$flhThPJ5 zOerq33C37J&kP-�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≀SQF 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�g% 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

*+C=tzxRK^$2yy)hl?2*N_Yidruu#RT( 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�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